cli-jaw 1.3.2 → 1.3.4
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/dist/bin/commands/orchestrate.js +15 -3
- package/dist/bin/commands/orchestrate.js.map +1 -1
- package/dist/server.js +22 -4
- package/dist/server.js.map +1 -1
- package/dist/src/cli/registry.js +1 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/core/codex-config.js +66 -0
- package/dist/src/core/codex-config.js.map +1 -0
- package/dist/src/prompt/templates/orchestration.md +9 -6
- package/package.json +1 -1
- package/public/dist/bundle.js +41 -41
- package/public/dist/bundle.js.map +3 -3
- package/public/index.html +28 -7
- package/public/js/constants.ts +1 -1
- package/public/js/features/settings.ts +20 -1
- package/public/js/main.ts +17 -0
package/public/index.html
CHANGED
|
@@ -306,6 +306,25 @@
|
|
|
306
306
|
<button id="codexFastOn" class="perm-btn" data-i18n="btn.on">켬</button>
|
|
307
307
|
</div>
|
|
308
308
|
</div>
|
|
309
|
+
<div class="settings-row sub-row">
|
|
310
|
+
<label>🧠 1M Context</label>
|
|
311
|
+
<div>
|
|
312
|
+
<button id="codexCtxOff" class="perm-btn active">Off</button>
|
|
313
|
+
<button id="codexCtxOn" class="perm-btn">On</button>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
<div id="codexCtxValues" style="display:none">
|
|
317
|
+
<div class="settings-row sub-row" style="margin-left:24px">
|
|
318
|
+
<label style="min-width:120px;font-size:11px">Context Window</label>
|
|
319
|
+
<input type="number" id="codexCtxWindow" value="1000000" min="272000" max="1050000" step="1000"
|
|
320
|
+
style="width:100px;font-size:11px;padding:3px 6px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px">
|
|
321
|
+
</div>
|
|
322
|
+
<div class="settings-row sub-row" style="margin-left:24px">
|
|
323
|
+
<label style="min-width:120px;font-size:11px">Auto Compact Limit</label>
|
|
324
|
+
<input type="number" id="codexCtxCompact" value="900000" min="100000" max="1000000" step="1000"
|
|
325
|
+
style="width:100px;font-size:11px;padding:3px 6px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px">
|
|
326
|
+
</div>
|
|
327
|
+
</div>
|
|
309
328
|
</div>
|
|
310
329
|
|
|
311
330
|
<div class="settings-group">
|
|
@@ -402,7 +421,8 @@
|
|
|
402
421
|
<option value="gemini-2.5-pro">gemini-2.5-pro (accurate)</option>
|
|
403
422
|
<option value="__custom__">✏️ 직접 입력...</option>
|
|
404
423
|
</select>
|
|
405
|
-
<input type="text" id="sttGeminiModelCustom" placeholder="모델명 입력"
|
|
424
|
+
<input type="text" id="sttGeminiModelCustom" placeholder="모델명 입력"
|
|
425
|
+
style="display:none; margin-top:4px;" />
|
|
406
426
|
</div>
|
|
407
427
|
<!-- OpenAI Compatible -->
|
|
408
428
|
<div class="settings-row sub-row stt-openai" style="display:none">
|
|
@@ -423,7 +443,8 @@
|
|
|
423
443
|
<!-- Vertex AI -->
|
|
424
444
|
<div class="settings-row sub-row stt-vertex" style="display:none">
|
|
425
445
|
<label data-i18n="stt.vertexConfig">Vertex AI Config (JSON)</label>
|
|
426
|
-
<textarea id="sttVertexJson" rows="4"
|
|
446
|
+
<textarea id="sttVertexJson" rows="4"
|
|
447
|
+
placeholder='{"project_id":"...","location":"us-central1","credentials":{...}}'
|
|
427
448
|
style="width:100%;font-size:11px;padding:4px;font-family:var(--font-mono)"></textarea>
|
|
428
449
|
</div>
|
|
429
450
|
<div class="settings-row sub-row stt-whisper">
|
|
@@ -572,7 +593,8 @@
|
|
|
572
593
|
</div>
|
|
573
594
|
<!-- View 2: Editor (hidden by default) -->
|
|
574
595
|
<div id="templateEditorView" style="display:none;flex-direction:column">
|
|
575
|
-
<div
|
|
596
|
+
<div
|
|
597
|
+
style="display:flex;align-items:center;gap:8px;padding:8px 16px;border-bottom:1px solid var(--border)">
|
|
576
598
|
<button id="templateBack"
|
|
577
599
|
style="background:none;border:1px solid var(--border);color:var(--text-dim);padding:4px 8px;border-radius:4px;cursor:pointer;font-size:11px">←
|
|
578
600
|
뒤로</button>
|
|
@@ -584,10 +606,9 @@
|
|
|
584
606
|
<textarea class="modal-textarea" id="templateEditor" readonly
|
|
585
607
|
style="flex:1;min-height:350px;font-family:var(--font-mono);font-size:12px"></textarea>
|
|
586
608
|
<div class="modal-footer">
|
|
587
|
-
<span id="templateVars"
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
id="templateSaveBtn">💾 저장</button>
|
|
609
|
+
<span id="templateVars" style="color:var(--text-dim);font-size:10px;margin-right:auto"></span>
|
|
610
|
+
<button class="btn-save" data-action="saveTemplate" style="display:none" id="templateSaveBtn">💾
|
|
611
|
+
저장</button>
|
|
591
612
|
</div>
|
|
592
613
|
</div>
|
|
593
614
|
</div>
|
package/public/js/constants.ts
CHANGED
|
@@ -19,7 +19,7 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
|
|
|
19
19
|
codex: {
|
|
20
20
|
label: 'Codex',
|
|
21
21
|
efforts: ['low', 'medium', 'high', 'xhigh'],
|
|
22
|
-
models: ['gpt-5.4', 'gpt-5.
|
|
22
|
+
models: ['gpt-5.4', 'gpt-5.3-codex', 'gpt-5.3-codex-spark', 'gpt-5.2-codex', 'gpt-5.1-codex-max', 'gpt-5.1-codex-mini'],
|
|
23
23
|
},
|
|
24
24
|
gemini: {
|
|
25
25
|
label: 'Gemini',
|
|
@@ -6,7 +6,7 @@ import { syncStoredLocale } from '../locale.js';
|
|
|
6
6
|
import { t } from './i18n.js';
|
|
7
7
|
import { api, apiJson, apiFire } from '../api.js';
|
|
8
8
|
|
|
9
|
-
interface PerCliConfig { model?: string; effort?: string; fastMode?: boolean; }
|
|
9
|
+
interface PerCliConfig { model?: string; effort?: string; fastMode?: boolean; contextWindow?: boolean; contextWindowSize?: number; contextCompactLimit?: number; }
|
|
10
10
|
interface TelegramConfig { enabled?: boolean; token?: string; allowedChatIds?: number[]; forwardAll?: boolean; }
|
|
11
11
|
interface QuotaWindow { label: string; percent: number; resetsAt?: string | number | null; }
|
|
12
12
|
interface QuotaEntry {
|
|
@@ -171,6 +171,18 @@ export async function loadSettings(): Promise<void> {
|
|
|
171
171
|
document.getElementById('codexFastOn')?.classList.toggle('active', cfg.fastMode);
|
|
172
172
|
document.getElementById('codexFastOff')?.classList.toggle('active', !cfg.fastMode);
|
|
173
173
|
}
|
|
174
|
+
// Restore Codex context window toggle + values
|
|
175
|
+
if (cli === 'codex') {
|
|
176
|
+
const ctxOn = !!cfg.contextWindow;
|
|
177
|
+
document.getElementById('codexCtxOn')?.classList.toggle('active', ctxOn);
|
|
178
|
+
document.getElementById('codexCtxOff')?.classList.toggle('active', !ctxOn);
|
|
179
|
+
const valDiv = document.getElementById('codexCtxValues');
|
|
180
|
+
if (valDiv) valDiv.style.display = ctxOn ? '' : 'none';
|
|
181
|
+
const winInput = document.getElementById('codexCtxWindow') as HTMLInputElement | null;
|
|
182
|
+
const compInput = document.getElementById('codexCtxCompact') as HTMLInputElement | null;
|
|
183
|
+
if (winInput && cfg.contextWindowSize) winInput.value = String(cfg.contextWindowSize);
|
|
184
|
+
if (compInput && cfg.contextCompactLimit) compInput.value = String(cfg.contextCompactLimit);
|
|
185
|
+
}
|
|
174
186
|
}
|
|
175
187
|
}
|
|
176
188
|
|
|
@@ -377,6 +389,13 @@ export async function savePerCli(): Promise<void> {
|
|
|
377
389
|
if (cli === 'codex') {
|
|
378
390
|
const onBtn = document.getElementById('codexFastOn');
|
|
379
391
|
entry.fastMode = onBtn?.classList.contains('active') ?? false;
|
|
392
|
+
// Context window toggle + values
|
|
393
|
+
const ctxOn = document.getElementById('codexCtxOn');
|
|
394
|
+
entry.contextWindow = ctxOn?.classList.contains('active') ?? false;
|
|
395
|
+
const winInput = document.getElementById('codexCtxWindow') as HTMLInputElement | null;
|
|
396
|
+
const compInput = document.getElementById('codexCtxCompact') as HTMLInputElement | null;
|
|
397
|
+
entry.contextWindowSize = parseInt(winInput?.value || '1000000', 10);
|
|
398
|
+
entry.contextCompactLimit = parseInt(compInput?.value || '900000', 10);
|
|
380
399
|
}
|
|
381
400
|
perCli[cli] = entry;
|
|
382
401
|
}
|
package/public/js/main.ts
CHANGED
|
@@ -182,6 +182,23 @@ function setCodexFast(on: boolean) {
|
|
|
182
182
|
}
|
|
183
183
|
document.getElementById('codexFastOn')?.addEventListener('click', () => setCodexFast(true));
|
|
184
184
|
document.getElementById('codexFastOff')?.addEventListener('click', () => setCodexFast(false));
|
|
185
|
+
|
|
186
|
+
// Codex 1M context window toggle
|
|
187
|
+
function setCodexCtx(on: boolean) {
|
|
188
|
+
const onBtn = document.getElementById('codexCtxOn');
|
|
189
|
+
const offBtn = document.getElementById('codexCtxOff');
|
|
190
|
+
const valDiv = document.getElementById('codexCtxValues');
|
|
191
|
+
if (onBtn && offBtn) {
|
|
192
|
+
onBtn.classList.toggle('active', on);
|
|
193
|
+
offBtn.classList.toggle('active', !on);
|
|
194
|
+
}
|
|
195
|
+
if (valDiv) valDiv.style.display = on ? '' : 'none';
|
|
196
|
+
savePerCli();
|
|
197
|
+
}
|
|
198
|
+
document.getElementById('codexCtxOn')?.addEventListener('click', () => setCodexCtx(true));
|
|
199
|
+
document.getElementById('codexCtxOff')?.addEventListener('click', () => setCodexCtx(false));
|
|
200
|
+
document.getElementById('codexCtxWindow')?.addEventListener('change', savePerCli);
|
|
201
|
+
document.getElementById('codexCtxCompact')?.addEventListener('change', savePerCli);
|
|
185
202
|
// Per-CLI model selects
|
|
186
203
|
function bindPerCliControlEvents(): void {
|
|
187
204
|
for (const cli of getCliKeys()) {
|