@triflux/remote 10.0.1 → 10.25.1

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 (155) hide show
  1. package/hub/pipe.mjs +239 -121
  2. package/hub/public/dashboard.html +68 -7
  3. package/hub/server.mjs +2181 -701
  4. package/hub/store-adapter.mjs +101 -37
  5. package/hub/store.mjs +356 -153
  6. package/hub/team/agent-map.json +26 -7
  7. package/hub/team/ansi.mjs +245 -146
  8. package/hub/team/backend.mjs +84 -17
  9. package/hub/team/build-worker-prompt.mjs +42 -0
  10. package/hub/team/check-mcp-hub.mjs +49 -0
  11. package/hub/team/claude-daemon-control.mjs +219 -0
  12. package/hub/team/claude-native-bridge.mjs +784 -0
  13. package/hub/team/claude-session-projection.mjs +65 -0
  14. package/hub/team/cli/commands/attach.mjs +57 -37
  15. package/hub/team/cli/commands/control.mjs +29 -8
  16. package/hub/team/cli/commands/debug.mjs +95 -74
  17. package/hub/team/cli/commands/focus.mjs +80 -53
  18. package/hub/team/cli/commands/interrupt.mjs +18 -6
  19. package/hub/team/cli/commands/kill.mjs +16 -5
  20. package/hub/team/cli/commands/list.mjs +31 -24
  21. package/hub/team/cli/commands/send.mjs +19 -6
  22. package/hub/team/cli/commands/start/index.mjs +154 -33
  23. package/hub/team/cli/commands/start/parse-args.mjs +89 -12
  24. package/hub/team/cli/commands/start/start-headless.mjs +127 -37
  25. package/hub/team/cli/commands/start/start-in-process.mjs +50 -40
  26. package/hub/team/cli/commands/start/start-mux.mjs +122 -73
  27. package/hub/team/cli/commands/start/start-wt.mjs +86 -69
  28. package/hub/team/cli/commands/status.mjs +43 -14
  29. package/hub/team/cli/commands/stop.mjs +11 -4
  30. package/hub/team/cli/commands/task.mjs +8 -3
  31. package/hub/team/cli/commands/tasks.mjs +13 -13
  32. package/hub/team/cli/index.mjs +2 -2
  33. package/hub/team/cli/manifest.mjs +38 -8
  34. package/hub/team/cli/render.mjs +52 -30
  35. package/hub/team/cli/services/attach-fallback.mjs +74 -54
  36. package/hub/team/cli/services/hub-client.mjs +45 -17
  37. package/hub/team/cli/services/member-selector.mjs +37 -30
  38. package/hub/team/cli/services/native-control.mjs +144 -116
  39. package/hub/team/cli/services/runtime-mode.mjs +55 -1
  40. package/hub/team/cli/services/state-store.mjs +66 -9
  41. package/hub/team/cli/services/task-model.mjs +40 -30
  42. package/hub/team/codex-review.mjs +521 -0
  43. package/hub/team/conductor-mesh-bridge.mjs +25 -24
  44. package/hub/team/conductor-registry.mjs +121 -0
  45. package/hub/team/conductor.mjs +1379 -671
  46. package/hub/team/consensus-meta.mjs +176 -0
  47. package/hub/team/dashboard-anchor.mjs +4 -5
  48. package/hub/team/dashboard-layout.mjs +3 -1
  49. package/hub/team/dashboard-open.mjs +21 -119
  50. package/hub/team/dashboard.mjs +76 -28
  51. package/hub/team/event-log.mjs +18 -10
  52. package/hub/team/execution-mode.mjs +241 -0
  53. package/hub/team/extract-completion-payload.mjs +110 -0
  54. package/hub/team/git-preflight.mjs +286 -0
  55. package/hub/team/handoff.mjs +49 -18
  56. package/hub/team/headless-bridge-session.mjs +17 -0
  57. package/hub/team/headless.mjs +2065 -1156
  58. package/hub/team/health-probe.mjs +232 -69
  59. package/hub/team/launcher-template.mjs +23 -13
  60. package/hub/team/lead-control.mjs +91 -4
  61. package/hub/team/mcp-selector.mjs +145 -0
  62. package/hub/team/native-supervisor.mjs +90 -26
  63. package/hub/team/native.mjs +74 -35
  64. package/hub/team/nativeProxy.mjs +184 -113
  65. package/hub/team/notify.mjs +147 -78
  66. package/hub/team/orchestrator.mjs +173 -161
  67. package/hub/team/pane.mjs +43 -15
  68. package/hub/team/process-cleanup.mjs +69 -25
  69. package/hub/team/psmux.mjs +1067 -264
  70. package/hub/team/recovery-store.mjs +149 -0
  71. package/hub/team/remote-probe.mjs +69 -53
  72. package/hub/team/remote-session.mjs +131 -59
  73. package/hub/team/remote-watcher.mjs +62 -34
  74. package/hub/team/retry-state-machine.mjs +267 -0
  75. package/hub/team/routing.mjs +51 -25
  76. package/hub/team/runtime-strategy.mjs +200 -0
  77. package/hub/team/schemas/worker-completion.json +39 -0
  78. package/hub/team/sentinel-capture.mjs +127 -0
  79. package/hub/team/session-sync.mjs +153 -6
  80. package/hub/team/session.mjs +605 -611
  81. package/hub/team/shared.mjs +13 -13
  82. package/hub/team/staleState.mjs +72 -30
  83. package/hub/team/swarm-cli.mjs +390 -0
  84. package/hub/team/swarm-hypervisor.mjs +1526 -198
  85. package/hub/team/swarm-intent.mjs +216 -0
  86. package/hub/team/swarm-locks.mjs +140 -25
  87. package/hub/team/swarm-planner.mjs +121 -21
  88. package/hub/team/swarm-preflight.mjs +317 -0
  89. package/hub/team/swarm-reconciler.mjs +128 -23
  90. package/hub/team/synapse-cli.mjs +458 -0
  91. package/hub/team/synapse-http.mjs +60 -0
  92. package/hub/team/synapse-registry.mjs +329 -0
  93. package/hub/team/terminal-opener.mjs +216 -0
  94. package/hub/team/tui-core.mjs +288 -0
  95. package/hub/team/tui-lite.mjs +234 -146
  96. package/hub/team/tui-remote-adapter.mjs +21 -37
  97. package/hub/team/tui-synapse.mjs +223 -0
  98. package/hub/team/tui-viewer.mjs +104 -45
  99. package/hub/team/tui-widgets.mjs +262 -0
  100. package/hub/team/tui.mjs +936 -449
  101. package/hub/team/worker-completion-validator.mjs +84 -0
  102. package/hub/team/worker-sandbox.mjs +93 -0
  103. package/hub/team/worker-signal.mjs +263 -0
  104. package/hub/team/worker-signal.types.d.ts +52 -0
  105. package/hub/team/worktree-lifecycle.mjs +518 -64
  106. package/hub/team/wt-manager.mjs +297 -26
  107. package/hub/tools.mjs +474 -252
  108. package/hub/tray.mjs +411 -368
  109. package/hub/workers/claude-worker.mjs +162 -118
  110. package/hub/workers/codex-app-server-worker.mjs +1015 -0
  111. package/hub/workers/codex-mcp.mjs +724 -507
  112. package/hub/workers/delegator-mcp.mjs +663 -337
  113. package/hub/workers/factory.mjs +100 -21
  114. package/hub/workers/gemini-worker.mjs +179 -86
  115. package/hub/workers/interface.mjs +23 -2
  116. package/hub/workers/lib/jsonrpc-stdio.mjs +463 -0
  117. package/hub/workers/worker-utils.mjs +22 -16
  118. package/package.json +4 -3
  119. package/scripts/lib/agent-json.mjs +27 -0
  120. package/scripts/lib/async.mjs +174 -0
  121. package/scripts/lib/claudemd-scanner.mjs +223 -0
  122. package/scripts/lib/cli-agy.mjs +62 -0
  123. package/scripts/lib/cli-claude.mjs +78 -0
  124. package/scripts/lib/cli-codex.mjs +199 -0
  125. package/scripts/lib/cli-gemini.mjs +67 -0
  126. package/scripts/lib/codex-recovery.sh +50 -0
  127. package/scripts/lib/context.mjs +67 -0
  128. package/scripts/lib/cross-review-utils.mjs +59 -0
  129. package/scripts/lib/doctor-env-checks.mjs +121 -0
  130. package/scripts/lib/dynamic-route-cli.mjs +107 -0
  131. package/scripts/lib/env-probe.mjs +269 -0
  132. package/scripts/lib/env.mjs +14 -0
  133. package/scripts/lib/gemini-profiles.mjs +119 -0
  134. package/scripts/lib/handoff.mjs +187 -0
  135. package/scripts/lib/hook-utils.mjs +16 -0
  136. package/scripts/lib/hub.mjs +48 -0
  137. package/scripts/lib/keyword-rules.mjs +195 -0
  138. package/scripts/lib/logger.mjs +105 -0
  139. package/scripts/lib/mcp-filter.mjs +883 -0
  140. package/scripts/lib/mcp-gateway-servers.mjs +70 -0
  141. package/scripts/lib/mcp-guard-engine.mjs +2120 -0
  142. package/scripts/lib/mcp-health.mjs +773 -0
  143. package/scripts/lib/mcp-manifest.mjs +89 -0
  144. package/scripts/lib/mcp-server-catalog.mjs +355 -0
  145. package/scripts/lib/pid.mjs +63 -0
  146. package/scripts/lib/process-utils.mjs +26 -0
  147. package/scripts/lib/psmux-info.mjs +179 -0
  148. package/scripts/lib/quota.mjs +47 -0
  149. package/scripts/lib/remote-spawn-transfer.mjs +226 -0
  150. package/scripts/lib/skill-state.mjs +220 -0
  151. package/scripts/lib/skill-template.mjs +375 -0
  152. package/scripts/lib/team.mjs +75 -0
  153. package/scripts/lib/timeout.mjs +66 -0
  154. package/scripts/lib/tmp.mjs +26 -0
  155. package/scripts/lib/toml.mjs +113 -0
@@ -42,11 +42,22 @@ body{background:#0d1117;color:#c9d1d9;font-family:system-ui,-apple-system,sans-s
42
42
  .token-item .calls{font-size:.78rem;color:#8b949e;margin-top:2px}
43
43
 
44
44
  .chart-wrap{position:relative;width:100%;height:160px}
45
- .chart-wrap canvas{width:100%!important;height:100%!important}
45
+ .chart-wrap canvas{width:100%;height:100%}
46
46
  .chart-legend{display:flex;gap:14px;margin-top:8px;font-size:.78rem;color:#8b949e}
47
47
  .legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:4px;vertical-align:middle}
48
48
 
49
49
  .placeholder{text-align:center;padding:24px;color:#8b949e;font-size:.85rem}
50
+ .btn{background:#21262d;border:1px solid #30363d;color:#c9d1d9;padding:4px 12px;border-radius:6px;font-size:.78rem;cursor:pointer;transition:background .2s}
51
+ .btn:hover{background:#30363d}
52
+ .btn:active{background:#3b414a}
53
+ .btn.ok{border-color:#3fb950;color:#3fb950}
54
+ .guide{display:none;max-width:1200px;margin:0 auto 16px;background:#161b22;border:1px solid #30363d;border-radius:8px;padding:16px;font-size:.82rem;line-height:1.7;color:#8b949e}
55
+ .guide.open{display:block}
56
+ .guide h3{color:#c9d1d9;font-size:.9rem;margin:12px 0 6px}
57
+ .guide h3:first-child{margin-top:0}
58
+ .guide code{background:#0d1117;padding:1px 5px;border-radius:3px;font-size:.78rem;color:#d19a66}
59
+ .guide ul{padding-left:18px;margin:4px 0}
60
+ .actions{display:flex;gap:8px;align-items:center}
50
61
  </style>
51
62
  </head>
52
63
  <body>
@@ -57,9 +68,35 @@ body{background:#0d1117;color:#c9d1d9;font-family:system-ui,-apple-system,sans-s
57
68
  <span class="status-dot" id="statusDot"></span>
58
69
  <span id="statusText">연결 중...</span>
59
70
  <span id="lastUpdate" class="sub"></span>
71
+ <div class="actions">
72
+ <button class="btn" id="guideBtn" title="도움말">?</button>
73
+ <button class="btn" id="reloadBtn" title="계정 브로커 리로드">Reload</button>
74
+ <a href="/broker/dashboard" target="_blank" class="btn" style="text-decoration:none">Broker</a>
75
+ </div>
60
76
  </div>
61
77
  </div>
62
78
 
79
+ <div class="guide" id="guidePanel">
80
+ <h3>AIMD 동시 워커</h3>
81
+ <p>AIMD(Additive Increase / Multiplicative Decrease) 알고리즘으로 최적 동시 워커 수를 자동 조절합니다. 게이지가 <code>10/10</code>에 가까우면 시스템이 포화 상태입니다.</p>
82
+ <h3>CLI 쿼터 사용률</h3>
83
+ <ul>
84
+ <li><strong>Claude</strong> — 5시간/주간 사용량. 80% 이상이면 빨간색 경고.</li>
85
+ <li><strong>Codex</strong> — Primary/Secondary 버킷별 사용률. 리셋 시간이 표시됩니다.</li>
86
+ <li><strong>Gemini</strong> — 남은 비율 기반 사용률. RPM/RPD 제한 포함.</li>
87
+ </ul>
88
+ <h3>호출 이력 타임라인</h3>
89
+ <p>최근 CLI 호출의 성공/실패/타임아웃을 시간순으로 표시합니다. <span style="color:#3fb950">녹색</span>=성공, <span style="color:#f85149">빨강</span>=실패, <span style="color:#d29922">노랑</span>=타임아웃.</p>
90
+ <h3>토큰 누적 현황</h3>
91
+ <p>CLI별 누적 토큰 사용량과 호출 횟수입니다. 세션 시작 이후의 합계입니다.</p>
92
+ <h3>조작</h3>
93
+ <ul>
94
+ <li><strong>Reload</strong> — <code>POST /broker/reload</code> 호출. accounts.json을 핫리로드합니다.</li>
95
+ <li><strong>Broker</strong> — 계정 브로커 대시보드(별도 페이지)를 엽니다.</li>
96
+ <li>데이터는 <strong>5초</strong>마다 자동 갱신됩니다.</li>
97
+ </ul>
98
+ </div>
99
+
63
100
  <div class="grid">
64
101
  <!-- AIMD 게이지 -->
65
102
  <div class="card">
@@ -152,7 +189,7 @@ body{background:#0d1117;color:#c9d1d9;font-family:system-ui,-apple-system,sans-s
152
189
  function remain(rt) {
153
190
  if (!rt) return '';
154
191
  var ts = typeof rt === 'number' && rt < 1e10 ? rt * 1000 : new Date(rt).getTime();
155
- if (!isFinite(ts)) return '';
192
+ if (!Number.isFinite(ts)) return '';
156
193
  var ms = ts - Date.now();
157
194
  if (ms <= 0) return '만료됨';
158
195
  var h = Math.floor(ms / 3600000);
@@ -199,7 +236,7 @@ body{background:#0d1117;color:#c9d1d9;font-family:system-ui,-apple-system,sans-s
199
236
  var s = '';
200
237
 
201
238
  // Claude
202
- var cl = d.claude && d.claude.data;
239
+ var cl = d.claude?.data;
203
240
  if (cl) {
204
241
  s += quotaBlock('Claude (c)', '#d19a66', [
205
242
  ['5시간', cl.fiveHourPercent || 0],
@@ -208,16 +245,16 @@ body{background:#0d1117;color:#c9d1d9;font-family:system-ui,-apple-system,sans-s
208
245
  }
209
246
 
210
247
  // Codex
211
- var cx2 = d.codex && d.codex.buckets && d.codex.buckets.codex;
248
+ var cx2 = d.codex?.buckets?.codex;
212
249
  if (cx2) {
213
250
  s += quotaBlock('Codex (x)', '#ffffff', [
214
251
  ['Primary', cx2.primary ? cx2.primary.used_percent || 0 : 0],
215
252
  ['Secondary', cx2.secondary ? cx2.secondary.used_percent || 0 : 0]
216
- ], cx2.primary && cx2.primary.resets_at);
253
+ ], cx2.primary?.resets_at);
217
254
  }
218
255
 
219
256
  // Gemini
220
- var gm = d.gemini && d.gemini.buckets;
257
+ var gm = d.gemini?.buckets;
221
258
  if (gm && gm.length > 0) {
222
259
  var frac = gm[0].remainingFraction;
223
260
  s += quotaBlock('Gemini (g)', '#61afef', [
@@ -330,7 +367,7 @@ body{background:#0d1117;color:#c9d1d9;font-family:system-ui,-apple-system,sans-s
330
367
  gauge(data.aimd ? data.aimd.batchSize : 0);
331
368
  renderQuota(data);
332
369
 
333
- cachedEvents = (data.aimd && data.aimd.events) || [];
370
+ cachedEvents = (data.aimd?.events) || [];
334
371
  drawEvents(cachedEvents);
335
372
 
336
373
  renderTokens(data.accumulator);
@@ -347,6 +384,30 @@ body{background:#0d1117;color:#c9d1d9;font-family:system-ui,-apple-system,sans-s
347
384
  rTimer = setTimeout(function() { drawEvents(cachedEvents); }, 150);
348
385
  });
349
386
 
387
+ /* ── 가이드 토글 ── */
388
+ document.getElementById('guideBtn').onclick = function() {
389
+ var p = document.getElementById('guidePanel');
390
+ p.classList.toggle('open');
391
+ this.classList.toggle('ok');
392
+ };
393
+
394
+ /* ── 브로커 리로드 ── */
395
+ document.getElementById('reloadBtn').onclick = function() {
396
+ var btn = this;
397
+ btn.textContent = '...';
398
+ fetch('/broker/reload', { method: 'POST' })
399
+ .then(function(r) { return r.json(); })
400
+ .then(function(d) {
401
+ btn.textContent = d.ok ? 'OK (' + (d.accounts || 0) + ')' : 'Fail';
402
+ btn.classList.toggle('ok', d.ok);
403
+ setTimeout(function() { btn.textContent = 'Reload'; btn.classList.remove('ok'); }, 3000);
404
+ })
405
+ .catch(function() {
406
+ btn.textContent = 'Error';
407
+ setTimeout(function() { btn.textContent = 'Reload'; }, 3000);
408
+ });
409
+ };
410
+
350
411
  poll();
351
412
  setInterval(poll, POLL);
352
413
  })();