@0xmaxma/claude-gateway 1.5.0 → 1.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cli-viewer-ui.d.ts","sourceRoot":"","sources":["../../src/ui/cli-viewer-ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAyDH,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,GAAG,IAAI,GAAG,OAAiB,GAAG,MAAM,CAMrH;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA4DrE;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA+HrE"}
1
+ {"version":3,"file":"cli-viewer-ui.d.ts","sourceRoot":"","sources":["../../src/ui/cli-viewer-ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAyDH,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,GAAG,IAAI,GAAG,OAAiB,GAAG,MAAM,CAMrH;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA4DrE;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA0KrE"}
@@ -155,7 +155,6 @@ function generateCliViewerPage(opts) {
155
155
  display:flex; align-items:center; gap:10px; padding:8px 12px;
156
156
  background:#0b0e14; border-bottom:1px solid #232a3b; font-size:13px; flex:0 0 auto;
157
157
  }
158
- header .agent { font-weight:600; }
159
158
  header .status { color:#7a88a8; margin-left:auto; }
160
159
  select, button {
161
160
  background:#131722; color:#c8d3f5; border:1px solid #2b3450; border-radius:8px;
@@ -164,12 +163,27 @@ function generateCliViewerPage(opts) {
164
163
  button.on { background:#1f6feb; border-color:#1f6feb; color:#fff; }
165
164
  #term { flex:1; min-height:0; padding:6px; }
166
165
  .hint { color:#7a88a8; padding:16px; font-size:13px; }
166
+ /* Shortcut keys — inline in the header, only shown in input mode. Compact but
167
+ still touch-friendly for mobile webviews. */
168
+ #keybar { display:none; align-items:center; gap:4px; }
169
+ #keybar button {
170
+ min-width:30px; min-height:30px; font-size:13px; line-height:1;
171
+ padding:4px 8px; touch-action:manipulation; -webkit-user-select:none; user-select:none;
172
+ }
173
+ #keybar button:active { background:#1f6feb; border-color:#1f6feb; color:#fff; }
174
+ #keybar .esc { font-weight:600; }
167
175
  `;
168
176
  const body = `
169
177
  <header>
170
- <span class="agent">${htmlEscape(opts.agentId)}</span>
171
178
  <select id="sess" title="Session" style="display:none"></select>
172
179
  <button id="toggle" title="Toggle input">🔒 Read-only</button>
180
+ <div id="keybar">
181
+ <button type="button" class="esc" data-seq="esc" title="Escape">Esc</button>
182
+ <button type="button" data-seq="left" title="Arrow Left" aria-label="Arrow Left">◀</button>
183
+ <button type="button" data-seq="up" title="Arrow Up" aria-label="Arrow Up">▲</button>
184
+ <button type="button" data-seq="down" title="Arrow Down" aria-label="Arrow Down">▼</button>
185
+ <button type="button" data-seq="right" title="Arrow Right" aria-label="Arrow Right">▶</button>
186
+ </div>
173
187
  <span class="status" id="status">connecting…</span>
174
188
  </header>
175
189
  <div id="term"></div>
@@ -182,7 +196,9 @@ function generateCliViewerPage(opts) {
182
196
  var statusEl = document.getElementById('status');
183
197
  var sel = document.getElementById('sess');
184
198
  var toggleBtn = document.getElementById('toggle');
199
+ var keybar = document.getElementById('keybar');
185
200
  function setStatus(t){ statusEl.textContent = t; }
201
+ var ESC = String.fromCharCode(27);
186
202
 
187
203
  var term = new Terminal({
188
204
  cols: 200, rows: 50, scrollback: 0, disableStdin: true, convertEol: false,
@@ -193,11 +209,38 @@ function generateCliViewerPage(opts) {
193
209
 
194
210
  var ws = null, inputMode = false, onDataDisposable = null, currentSession = null, reconnectT = null;
195
211
 
212
+ function wsSend(s){ if (s && ws && ws.readyState===1) ws.send(s); }
213
+
214
+ // Map a shortcut button to the bytes a real key would send. Arrow keys depend
215
+ // on the terminal's DECCKM (application cursor keys) state — xterm.js exposes
216
+ // it via term.modes; fall back to the normal-mode CSI form when unavailable.
217
+ function keySeq(name){
218
+ var app = term.modes && term.modes.applicationCursorKeysMode;
219
+ var p = app ? 'O' : '[';
220
+ switch (name) {
221
+ case 'esc': return ESC;
222
+ case 'up': return ESC + p + 'A';
223
+ case 'down': return ESC + p + 'B';
224
+ case 'right': return ESC + p + 'C';
225
+ case 'left': return ESC + p + 'D';
226
+ }
227
+ return '';
228
+ }
229
+
230
+ Array.prototype.forEach.call(keybar.querySelectorAll('button'), function(btn){
231
+ // preventDefault on press keeps the terminal's hidden textarea focused so the
232
+ // mobile soft keyboard does not dismiss when a shortcut is tapped.
233
+ btn.addEventListener('mousedown', function(e){ e.preventDefault(); });
234
+ btn.addEventListener('touchstart', function(e){ e.preventDefault(); wsSend(keySeq(btn.getAttribute('data-seq'))); }, { passive:false });
235
+ btn.addEventListener('click', function(e){ e.preventDefault(); wsSend(keySeq(btn.getAttribute('data-seq'))); });
236
+ });
237
+
196
238
  function setInputMode(on){
197
239
  inputMode = on;
198
240
  term.options.disableStdin = !on;
199
241
  toggleBtn.className = on ? 'on' : '';
200
242
  toggleBtn.textContent = on ? '⌨️ Input ON' : '🔒 Read-only';
243
+ keybar.style.display = on ? 'flex' : 'none';
201
244
  if (onDataDisposable) { onDataDisposable.dispose(); onDataDisposable = null; }
202
245
  if (on) { onDataDisposable = term.onData(function(d){ if (ws && ws.readyState===1) ws.send(d); }); }
203
246
  }
@@ -224,7 +267,7 @@ function generateCliViewerPage(opts) {
224
267
  ws = new WebSocket(wsUrl(d.ticket));
225
268
  ws.binaryType = 'arraybuffer';
226
269
  var dec = new TextDecoder();
227
- ws.onopen = function(){ setStatus('live'); };
270
+ ws.onopen = function(){ setStatus(''); };
228
271
  ws.onmessage = function(ev){
229
272
  var data = typeof ev.data === 'string' ? ev.data : dec.decode(ev.data, { stream:true });
230
273
  term.write(data);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-viewer-ui.js","sourceRoot":"","sources":["../../src/ui/cli-viewer-ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-viewer-ui.js","sourceRoot":"","sources":["../../src/ui/cli-viewer-ui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xmaxma/claude-gateway",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Multi-agent gateway for Claude",
5
5
  "repository": {
6
6
  "type": "git",