@worca/app 1.5.0 → 1.6.0-rc.2
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/README.md +8 -2
- package/docker/compose.broker.yml +79 -0
- package/docker/compose.isolation.yml +40 -0
- package/package.json +2 -1
- package/src/broker/config.mjs +200 -0
- package/src/broker/copilot.mjs +124 -0
- package/src/broker/limits.mjs +88 -0
- package/src/broker/main.mjs +129 -0
- package/src/broker/scrub.mjs +45 -0
- package/src/broker/service.mjs +558 -0
- package/src/broker/slots.mjs +180 -0
- package/src/broker/store.mjs +171 -0
- package/src/broker/tokens.mjs +116 -0
- package/src/broker/ui/page.css +54 -0
- package/src/broker/ui/page.html +25 -0
- package/src/broker/ui/page.mjs +202 -0
- package/src/broker/ui-server.mjs +217 -0
- package/src/broker/usage.mjs +108 -0
- package/src/broker/vault.mjs +37 -0
- package/src/cli/models.mjs +46 -14
- package/src/cli/render.mjs +21 -0
- package/src/cli/runs.mjs +296 -0
- package/src/cli/worca-cc.mjs +14 -2
- package/src/core/agent-pool.mjs +76 -0
- package/src/core/artifacts.mjs +40 -8
- package/src/core/ask/events.mjs +11 -0
- package/src/core/ask/html-text.mjs +113 -0
- package/src/core/ask/limits.mjs +5 -0
- package/src/core/ask/mcp-stdio.mjs +74 -20
- package/src/core/ask/prompt.mjs +25 -6
- package/src/core/ask/spawn.mjs +55 -5
- package/src/core/ask/store.mjs +1 -1
- package/src/core/ask/tools.mjs +66 -1
- package/src/core/ask/turn.mjs +56 -3
- package/src/core/ask/web-access.mjs +26 -0
- package/src/core/ask/web-deps.mjs +56 -0
- package/src/core/ask/web-fetch.mjs +271 -0
- package/src/core/ask/web-proposal.mjs +76 -0
- package/src/core/auto/classify.mjs +20 -8
- package/src/core/auto/runnable.mjs +28 -0
- package/src/core/billing.mjs +53 -0
- package/src/core/bridge/errors.mjs +77 -5
- package/src/core/bridge/openrouter.mjs +59 -0
- package/src/core/bridge/provider-ops.mjs +202 -10
- package/src/core/bridge/providers/endpoint.mjs +112 -7
- package/src/core/bridge/registry.mjs +13 -0
- package/src/core/bridge/server.mjs +16 -3
- package/src/core/bridge/telemetry.mjs +44 -12
- package/src/core/bridge/translate/common.mjs +31 -0
- package/src/core/bridge/translate/request.mjs +4 -1
- package/src/core/bridge/translate/response.mjs +3 -0
- package/src/core/bridge/translate/schema-keywords.mjs +75 -0
- package/src/core/bridge/translate/stream.mjs +50 -4
- package/src/core/bridge/upstream.mjs +102 -17
- package/src/core/broker-boot.mjs +57 -0
- package/src/core/broker-client.mjs +206 -0
- package/src/core/broker-guard.mjs +112 -0
- package/src/core/broker-routing.mjs +138 -0
- package/src/core/claude-auth.mjs +29 -0
- package/src/core/claude-runner.mjs +200 -9
- package/src/core/config.mjs +9 -12
- package/src/core/failure-policy.mjs +4 -2
- package/src/core/git-info.mjs +49 -5
- package/src/core/github-credentials.mjs +44 -1
- package/src/core/graph/script-runner.mjs +3 -1
- package/src/core/list-prices.mjs +29 -0
- package/src/core/mcp-secrets.mjs +80 -0
- package/src/core/metrics/sync.mjs +2 -1
- package/src/core/model-env.mjs +72 -0
- package/src/core/model-test.mjs +17 -5
- package/src/core/onboarding.mjs +12 -6
- package/src/core/openrouter-free.mjs +159 -0
- package/src/core/orchestrator.mjs +100 -12
- package/src/core/policy/effective.mjs +18 -1
- package/src/core/policy/local.mjs +4 -1
- package/src/core/policy/registry.mjs +12 -2
- package/src/core/preflight.mjs +116 -0
- package/src/core/recoverable-error.mjs +95 -0
- package/src/core/recovery-backoff.mjs +84 -0
- package/src/core/redact.mjs +25 -0
- package/src/core/run-context.mjs +6 -0
- package/src/core/run-harness.mjs +112 -30
- package/src/core/run-report.mjs +2 -1
- package/src/core/settings.mjs +90 -5
- package/src/core/title.mjs +7 -2
- package/src/core/web-allowlist.mjs +95 -0
- package/ui/public/app.js +271 -54
- package/ui/public/ask-model.mjs +1 -0
- package/ui/public/ask-panel.mjs +160 -23
- package/ui/public/bridge-view.mjs +216 -9
- package/ui/public/chat-settings-view.mjs +52 -1
- package/ui/public/credential-badges.mjs +63 -0
- package/ui/public/credentials-view.mjs +57 -0
- package/ui/public/index.html +303 -244
- package/ui/public/models-view.mjs +19 -1
- package/ui/public/openrouter-free-view.mjs +118 -0
- package/ui/public/stats-view.mjs +56 -0
- package/ui/public/style.css +110 -54
- package/ui/public/team-policy-view.mjs +2 -1
- package/ui/public/ws-seq.mjs +24 -0
- package/ui/server.mjs +319 -23
package/ui/public/index.html
CHANGED
|
@@ -408,6 +408,8 @@
|
|
|
408
408
|
|
|
409
409
|
<!-- Actions -->
|
|
410
410
|
<div class="hint err" id="newBlockedNote" hidden></div>
|
|
411
|
+
<!-- OpenRouter free requests left today vs what a run here takes (openrouter-free-view.mjs). -->
|
|
412
|
+
<div class="hint warn" id="newFreeNote" hidden></div>
|
|
411
413
|
<div class="actions" style="justify-content:flex-end">
|
|
412
414
|
<!-- A time picked BEFORE the task (Schedules › Schedule a run, or Change… here):
|
|
413
415
|
it waits on the form and Start run becomes Schedule. -->
|
|
@@ -988,7 +990,11 @@
|
|
|
988
990
|
<input id="wiz-name" class="input" type="text" placeholder="e.g. IoT SP Platform" spellcheck="false" />
|
|
989
991
|
</div>
|
|
990
992
|
<div class="field">
|
|
991
|
-
<
|
|
993
|
+
<div class="wiz-proj-head">
|
|
994
|
+
<label class="label">Projects <span class="opt">(select 2 or more)</span></label>
|
|
995
|
+
<!-- Outside #wiz-projects so every checkbox in the list stays a project. -->
|
|
996
|
+
<label class="wiz-select-all"><input type="checkbox" id="wiz-select-all" /> Select all</label>
|
|
997
|
+
</div>
|
|
992
998
|
<div class="wiz-proj-list" id="wiz-projects"></div>
|
|
993
999
|
<small class="hint" id="wiz-step1-hint">Onboard at least two projects to create a workspace.</small>
|
|
994
1000
|
</div>
|
|
@@ -1344,12 +1350,16 @@
|
|
|
1344
1350
|
literal routing attribute name, so never spell it out in a comment. -->
|
|
1345
1351
|
<section class="view hidden" data-view="settings">
|
|
1346
1352
|
<div class="seg settings-tabs" id="settings-tabs" role="group" aria-label="Settings section">
|
|
1353
|
+
<!-- Ordered by mode (Simple, Advanced, Expert) so each mode sees a gap-free prefix of the
|
|
1354
|
+
strip; Models sits next to Providers. -->
|
|
1347
1355
|
<button type="button" class="on" data-tab="general" data-min-level="simple" aria-pressed="true">General</button>
|
|
1356
|
+
<button type="button" data-tab="runs" data-min-level="simple" aria-pressed="false">Runs</button>
|
|
1357
|
+
<button type="button" data-tab="ask" data-min-level="advanced" aria-pressed="false">Ask Worca</button>
|
|
1348
1358
|
<button type="button" data-tab="guardrails" data-min-level="advanced" aria-pressed="false">Guardrails</button>
|
|
1359
|
+
<button type="button" data-tab="memory" data-min-level="advanced" aria-pressed="false">Memory</button>
|
|
1360
|
+
<button type="button" data-tab="plugins" data-min-level="advanced" aria-pressed="false">Plugins</button>
|
|
1349
1361
|
<button type="button" data-tab="models" data-min-level="expert" aria-pressed="false">Models</button>
|
|
1350
1362
|
<button type="button" data-tab="providers" data-min-level="expert" aria-pressed="false">Providers</button>
|
|
1351
|
-
<button type="button" data-tab="plugins" data-min-level="advanced" aria-pressed="false">Plugins</button>
|
|
1352
|
-
<button type="button" data-tab="memory" data-min-level="advanced" aria-pressed="false">Memory</button>
|
|
1353
1363
|
</div>
|
|
1354
1364
|
|
|
1355
1365
|
<section class="settings-pane" data-tab="general">
|
|
@@ -1377,6 +1387,20 @@
|
|
|
1377
1387
|
<small class="hint" id="themeMsg"></small>
|
|
1378
1388
|
</section>
|
|
1379
1389
|
|
|
1390
|
+
<!-- Credential broker (docs/credential-broker.md): shown only when worca runs with one. -->
|
|
1391
|
+
<section class="card settings-card" id="credentials-card" data-min-level="simple" hidden>
|
|
1392
|
+
<div class="card-head">
|
|
1393
|
+
<div class="label-row">
|
|
1394
|
+
<h2>My model credentials</h2>
|
|
1395
|
+
<button type="button" class="info-tip" aria-label="About model credentials">i<span class="tip-content hidden">
|
|
1396
|
+
Model keys are held by the credential broker, not by Worca. Agents never see them.
|
|
1397
|
+
Each person uses their own keys, and what a run costs is charged to whoever started it.
|
|
1398
|
+
</span></button>
|
|
1399
|
+
</div>
|
|
1400
|
+
</div>
|
|
1401
|
+
<div id="credentialsHost"></div>
|
|
1402
|
+
</section>
|
|
1403
|
+
|
|
1380
1404
|
<!-- Interface mode (docs/ui-levels.md): the same setting as the sidebar item, same dialog. -->
|
|
1381
1405
|
<section class="card settings-card" id="mode-settings-card" data-min-level="simple">
|
|
1382
1406
|
<div class="card-head">
|
|
@@ -1432,6 +1456,97 @@
|
|
|
1432
1456
|
<small class="hint" id="settingsMsg"></small>
|
|
1433
1457
|
</section>
|
|
1434
1458
|
|
|
1459
|
+
<!-- Spawn-debug diagnostics: the stored side of WORCA_DEBUG_SPAWN.
|
|
1460
|
+
claude-runner.mjs reads the setting per spawn (UI server AND CLI);
|
|
1461
|
+
a non-empty env var overrides it. This card only flips the gate —
|
|
1462
|
+
the runner decides what is printable (routing keys readable,
|
|
1463
|
+
credentials as "<set, N chars>"). -->
|
|
1464
|
+
<section class="card settings-card" id="debug-spawn-settings-card" data-min-level="expert">
|
|
1465
|
+
<div class="card-head">
|
|
1466
|
+
<div class="label-row">
|
|
1467
|
+
<h2>Spawn diagnostics</h2>
|
|
1468
|
+
<button type="button" class="info-tip" aria-label="About spawn diagnostics">i<span class="tip-content hidden">
|
|
1469
|
+
Logs the exact claude binary, argv and routing env handed to every spawn, in the run
|
|
1470
|
+
log. Credentials never appear: routing keys (endpoint, wire model) print readable,
|
|
1471
|
+
every other value as <code><set, N chars></code>. Applies to runs started here
|
|
1472
|
+
and from the CLI, with no restart. A non-empty <code>WORCA_DEBUG_SPAWN</code> in the
|
|
1473
|
+
environment overrides this setting.
|
|
1474
|
+
</span></button>
|
|
1475
|
+
</div>
|
|
1476
|
+
</div>
|
|
1477
|
+
<div class="field">
|
|
1478
|
+
<label class="check-row" for="debugSpawnEnabled"><input id="debugSpawnEnabled" type="checkbox" /> Log claude spawn details (binary, argv, routing env)</label>
|
|
1479
|
+
</div>
|
|
1480
|
+
<small class="hint" id="debugSpawnEnvNote"></small>
|
|
1481
|
+
<div class="add-project-actions" style="margin-top:14px">
|
|
1482
|
+
<button type="button" id="debugSpawnReset" class="btn btn-ghost btn-mini">Reset to default</button>
|
|
1483
|
+
<button type="button" id="debugSpawnSave" class="btn btn-primary btn-mini">Save</button>
|
|
1484
|
+
</div>
|
|
1485
|
+
<small class="hint" id="debugSpawnMsg"></small>
|
|
1486
|
+
</section>
|
|
1487
|
+
|
|
1488
|
+
<!-- Getting started: the checklist's Hide is undone here. Only the checklist —
|
|
1489
|
+
the welcome dialog stays seen. No info-tip (the row explains itself);
|
|
1490
|
+
the .hint is painted by app.js like every other settings status line. -->
|
|
1491
|
+
<section class="card settings-card" id="getting-started-card" data-min-level="simple">
|
|
1492
|
+
<div class="label-row">
|
|
1493
|
+
<h2>Getting started</h2>
|
|
1494
|
+
</div>
|
|
1495
|
+
<div class="gs-settings-row">
|
|
1496
|
+
<p class="gs-settings-text">The checklist on New pipeline walks through the first nine things to do with Worca. Hidden it, or want the guided tour back?</p>
|
|
1497
|
+
<button type="button" id="gsShowAgain" class="btn btn-ghost btn-mini">Show again</button>
|
|
1498
|
+
</div>
|
|
1499
|
+
<small class="hint" id="gsSettingsMsg"></small>
|
|
1500
|
+
</section>
|
|
1501
|
+
|
|
1502
|
+
<!-- About: intentionally no info-tip and no .hint (test/ui-settings-tooltips.test.mjs pins both). -->
|
|
1503
|
+
<section class="card settings-card" id="about-card" data-min-level="simple">
|
|
1504
|
+
<div class="label-row">
|
|
1505
|
+
<h2>About</h2>
|
|
1506
|
+
</div>
|
|
1507
|
+
<div class="about-row">
|
|
1508
|
+
<span class="about-key">Version</span>
|
|
1509
|
+
<!-- href is painted from app.releaseUrl (the worca-app-v<version> tag);
|
|
1510
|
+
without one the anchor is plain text, so the placeholder never links. -->
|
|
1511
|
+
<a class="about-val about-version" id="aboutVersion"
|
|
1512
|
+
target="_blank" rel="noopener noreferrer">—</a>
|
|
1513
|
+
</div>
|
|
1514
|
+
<div class="about-row">
|
|
1515
|
+
<span class="about-key">Repository</span>
|
|
1516
|
+
<a class="about-val about-link" id="aboutRepoLink"
|
|
1517
|
+
href="https://github.com/SinishaDjukic/worca-cc"
|
|
1518
|
+
target="_blank" rel="noopener noreferrer">github.com/SinishaDjukic/worca-cc</a>
|
|
1519
|
+
</div>
|
|
1520
|
+
<div class="about-row">
|
|
1521
|
+
<span class="about-key">Feedback</span>
|
|
1522
|
+
<!-- hrefs are repainted from app.bugsUrl (package.json bugs.url); the
|
|
1523
|
+
static fallback keeps the links usable before /api/settings lands.
|
|
1524
|
+
Anchors only: ui-settings-about.test.mjs forbids a control here,
|
|
1525
|
+
and neither the label nor the href carries a version string. -->
|
|
1526
|
+
<a class="about-val about-link" id="aboutBugLink"
|
|
1527
|
+
href="https://github.com/SinishaDjukic/worca-cc/issues/new?labels=bug"
|
|
1528
|
+
target="_blank" rel="noopener noreferrer">Report a bug</a>
|
|
1529
|
+
</div>
|
|
1530
|
+
<div class="about-row">
|
|
1531
|
+
<span class="about-key"></span>
|
|
1532
|
+
<a class="about-val about-link" id="aboutIdeaLink"
|
|
1533
|
+
href="https://github.com/SinishaDjukic/worca-cc/issues/new?labels=enhancement"
|
|
1534
|
+
target="_blank" rel="noopener noreferrer">Suggest an improvement</a>
|
|
1535
|
+
</div>
|
|
1536
|
+
</section>
|
|
1537
|
+
</section>
|
|
1538
|
+
<!-- /pane general -->
|
|
1539
|
+
|
|
1540
|
+
<!-- ===== TAB: RUNS — how pipeline runs are capped, scheduled and reported.
|
|
1541
|
+
Simple, for Budget; the two Advanced cards keep their own level. ===== -->
|
|
1542
|
+
<section class="settings-pane hidden" data-tab="runs">
|
|
1543
|
+
<div class="topbar">
|
|
1544
|
+
<div>
|
|
1545
|
+
<h1>Runs</h1>
|
|
1546
|
+
<div class="sub">Cost limits and defaults for your pipeline runs</div>
|
|
1547
|
+
</div>
|
|
1548
|
+
</div>
|
|
1549
|
+
|
|
1435
1550
|
<section class="card settings-card" id="budget-settings-card" data-min-level="simple">
|
|
1436
1551
|
<div class="card-head">
|
|
1437
1552
|
<div class="label-row">
|
|
@@ -1490,60 +1605,6 @@
|
|
|
1490
1605
|
<small class="hint" id="budgetMsg"></small>
|
|
1491
1606
|
</section>
|
|
1492
1607
|
|
|
1493
|
-
<!-- Ask Worca (ask-worca-design §6.9): per-turn guards for the
|
|
1494
|
-
assistant chat. Read fresh on every turn (D12); a stored null
|
|
1495
|
-
budget means "no cap". Posted ALONE — never with root/budget keys. -->
|
|
1496
|
-
<section class="card settings-card" id="ask-settings-card" data-min-level="advanced">
|
|
1497
|
-
<div class="card-head">
|
|
1498
|
-
<div class="label-row">
|
|
1499
|
-
<h2>Ask Worca</h2>
|
|
1500
|
-
<button type="button" class="info-tip" aria-label="About Ask Worca limits">i<span class="tip-content hidden">
|
|
1501
|
-
Per-turn guards for the Ask Worca assistant chat. A chat turn stops when it reaches the turn limit or the per-turn cost cap; both are read fresh on every turn.
|
|
1502
|
-
</span></button>
|
|
1503
|
-
</div>
|
|
1504
|
-
</div>
|
|
1505
|
-
<div class="field">
|
|
1506
|
-
<div class="label-row">
|
|
1507
|
-
<label for="askMaxTurns">Turn limit</label>
|
|
1508
|
-
<button type="button" class="info-tip" aria-label="About Turn limit">i<span class="tip-content hidden">
|
|
1509
|
-
Maximum assistant/tool turns one chat message may use (1–500). Leave empty to restore the default of 40.
|
|
1510
|
-
</span></button>
|
|
1511
|
-
</div>
|
|
1512
|
-
<input id="askMaxTurns" class="input" type="number" min="1" max="500" step="1" inputmode="numeric" placeholder="40" autocomplete="off" />
|
|
1513
|
-
</div>
|
|
1514
|
-
<div class="field">
|
|
1515
|
-
<div class="label-row">
|
|
1516
|
-
<label for="askMaxBudgetUsd">Per-turn cost cap (USD)</label>
|
|
1517
|
-
<button type="button" class="info-tip" aria-label="About Per-turn cost cap">i<span class="tip-content hidden">
|
|
1518
|
-
Stop a chat turn when its estimated cost reaches this amount (0.1–100). Leave empty to restore the default of $2, or tick No cap to disable the guard.
|
|
1519
|
-
</span></button>
|
|
1520
|
-
</div>
|
|
1521
|
-
<input id="askMaxBudgetUsd" class="input" type="number" min="0.1" max="100" step="0.1" inputmode="decimal" placeholder="2" autocomplete="off" />
|
|
1522
|
-
<label class="check-row" for="askNoCap"><input id="askNoCap" type="checkbox" /> No cap</label>
|
|
1523
|
-
</div>
|
|
1524
|
-
<!-- Scripts workbench W20: the chat's save_script / test_script switch. Body
|
|
1525
|
-
rendered by chat-settings-view.mjs; saved with this card's Save button. -->
|
|
1526
|
-
<div class="field" id="ask-script-tools-host"></div>
|
|
1527
|
-
<div class="add-project-actions" style="margin-top:14px">
|
|
1528
|
-
<button type="button" id="askLimitsReset" class="btn btn-ghost btn-mini">Use defaults</button>
|
|
1529
|
-
<button type="button" id="askLimitsSave" class="btn btn-primary btn-mini">Save</button>
|
|
1530
|
-
</div>
|
|
1531
|
-
<small class="hint" id="askLimitsMsg"></small>
|
|
1532
|
-
<!-- Chat history: the counts paint with the view; the button opens a
|
|
1533
|
-
danger confirm quoting FRESH counts, then DELETE /api/ask/threads. -->
|
|
1534
|
-
<div class="field" style="margin-top:14px">
|
|
1535
|
-
<div class="label-row">
|
|
1536
|
-
<label for="askHistoryDelete">Chat history</label>
|
|
1537
|
-
<button type="button" class="info-tip" aria-label="About Chat history">i<span class="tip-content hidden">
|
|
1538
|
-
Every saved Ask Worca chat: transcripts, attachments and the git worktrees checked out for them. Runs started from a chat are not affected.
|
|
1539
|
-
</span></button>
|
|
1540
|
-
</div>
|
|
1541
|
-
<button type="button" id="askHistoryDelete" class="ask-history-delete" disabled>Delete all chat history</button>
|
|
1542
|
-
<small class="hint" id="askHistoryCounts"></small>
|
|
1543
|
-
<small class="hint" id="askHistoryMsg"></small>
|
|
1544
|
-
</div>
|
|
1545
|
-
</section>
|
|
1546
|
-
|
|
1547
1608
|
<!-- Scheduled runs: the defaults a NEW schedule inherits. Each schedule keeps
|
|
1548
1609
|
its own copy, so a change here never rewrites an existing one. -->
|
|
1549
1610
|
<section class="card settings-card" id="schedule-settings-card" data-min-level="advanced">
|
|
@@ -1595,95 +1656,6 @@
|
|
|
1595
1656
|
<small class="hint" id="schedDefaultsMsg"></small>
|
|
1596
1657
|
</section>
|
|
1597
1658
|
|
|
1598
|
-
<!-- Title generation (#422): which model writes run/chat titles.
|
|
1599
|
-
Empty = the model of the run or chat itself (title.mjs
|
|
1600
|
-
resolveTitleModel), so a first-party-free install needs no setup.
|
|
1601
|
-
The select is built from the project-less catalog; a stored id
|
|
1602
|
-
that left the catalog paints disabled + "not installed". -->
|
|
1603
|
-
<section class="card settings-card" id="title-model-settings-card" data-min-level="expert">
|
|
1604
|
-
<div class="card-head">
|
|
1605
|
-
<div class="label-row">
|
|
1606
|
-
<h2>Title generation</h2>
|
|
1607
|
-
<button type="button" class="info-tip" aria-label="About title generation">i<span class="tip-content hidden">
|
|
1608
|
-
Every run and chat gets a short LLM-written title. By default it is written by the
|
|
1609
|
-
model the run or chat itself uses, so an install without a first-party Anthropic
|
|
1610
|
-
account needs no setup here. Pick a model to write every title with it instead;
|
|
1611
|
-
the change applies to the next title, no restart. A non-empty
|
|
1612
|
-
<code>WORCA_TITLE_MODEL</code> in the environment overrides this setting.
|
|
1613
|
-
</span></button>
|
|
1614
|
-
</div>
|
|
1615
|
-
</div>
|
|
1616
|
-
<div class="field">
|
|
1617
|
-
<div class="label-row">
|
|
1618
|
-
<label for="titleModel">Model</label>
|
|
1619
|
-
</div>
|
|
1620
|
-
<select id="titleModel" class="select" aria-label="Title model"></select>
|
|
1621
|
-
</div>
|
|
1622
|
-
<small class="hint" id="titleModelEnvNote"></small>
|
|
1623
|
-
<div class="add-project-actions" style="margin-top:14px">
|
|
1624
|
-
<button type="button" id="titleModelTest" class="btn btn-ghost btn-mini" title="Send one tiny prompt to the selected model">Test</button>
|
|
1625
|
-
<button type="button" id="titleModelReset" class="btn btn-ghost btn-mini">Use default</button>
|
|
1626
|
-
<button type="button" id="titleModelSave" class="btn btn-primary btn-mini">Save</button>
|
|
1627
|
-
</div>
|
|
1628
|
-
<small class="hint" id="titleModelMsg"></small>
|
|
1629
|
-
</section>
|
|
1630
|
-
|
|
1631
|
-
<!-- Auto workflow model (spec D14 / §7.7): which model classifies a task into a workflow.
|
|
1632
|
-
Empty = the Sonnet-class default; WORCA_AUTO_MODEL in the environment wins. -->
|
|
1633
|
-
<section class="card settings-card" id="auto-model-settings-card" data-min-level="expert">
|
|
1634
|
-
<div class="card-head">
|
|
1635
|
-
<div class="label-row">
|
|
1636
|
-
<h2>Auto workflow model</h2>
|
|
1637
|
-
<button type="button" class="info-tip" aria-label="About the Auto workflow model">i<span class="tip-content hidden">
|
|
1638
|
-
When a run starts on <b>Auto</b>, one short model call reads the task and picks the workflow.
|
|
1639
|
-
Pick the model that makes that call; empty means the Sonnet-class default. A non-empty
|
|
1640
|
-
<code>WORCA_AUTO_MODEL</code> in the environment overrides this setting. Each call is billed to the
|
|
1641
|
-
run as a sub-agent row named "Auto workflow (round n)".
|
|
1642
|
-
</span></button>
|
|
1643
|
-
</div>
|
|
1644
|
-
</div>
|
|
1645
|
-
<div class="field">
|
|
1646
|
-
<div class="label-row"><label for="autoModel">Model</label></div>
|
|
1647
|
-
<select id="autoModel" class="select" aria-label="Auto workflow model"></select>
|
|
1648
|
-
</div>
|
|
1649
|
-
<small class="hint" id="autoModelEnvNote"></small>
|
|
1650
|
-
<div class="add-project-actions" style="margin-top:14px">
|
|
1651
|
-
<button type="button" id="autoModelTest" class="btn btn-ghost btn-mini" title="Send one tiny prompt to the selected model">Test</button>
|
|
1652
|
-
<button type="button" id="autoModelReset" class="btn btn-ghost btn-mini">Use default</button>
|
|
1653
|
-
<button type="button" id="autoModelSave" class="btn btn-primary btn-mini">Save</button>
|
|
1654
|
-
</div>
|
|
1655
|
-
<small class="hint" id="autoModelMsg"></small>
|
|
1656
|
-
</section>
|
|
1657
|
-
|
|
1658
|
-
<!-- Spawn-debug diagnostics: the stored side of WORCA_DEBUG_SPAWN.
|
|
1659
|
-
claude-runner.mjs reads the setting per spawn (UI server AND CLI);
|
|
1660
|
-
a non-empty env var overrides it. This card only flips the gate —
|
|
1661
|
-
the runner decides what is printable (routing keys readable,
|
|
1662
|
-
credentials as "<set, N chars>"). -->
|
|
1663
|
-
<section class="card settings-card" id="debug-spawn-settings-card" data-min-level="expert">
|
|
1664
|
-
<div class="card-head">
|
|
1665
|
-
<div class="label-row">
|
|
1666
|
-
<h2>Spawn diagnostics</h2>
|
|
1667
|
-
<button type="button" class="info-tip" aria-label="About spawn diagnostics">i<span class="tip-content hidden">
|
|
1668
|
-
Logs the exact claude binary, argv and routing env handed to every spawn, in the run
|
|
1669
|
-
log. Credentials never appear: routing keys (endpoint, wire model) print readable,
|
|
1670
|
-
every other value as <code><set, N chars></code>. Applies to runs started here
|
|
1671
|
-
and from the CLI, with no restart. A non-empty <code>WORCA_DEBUG_SPAWN</code> in the
|
|
1672
|
-
environment overrides this setting.
|
|
1673
|
-
</span></button>
|
|
1674
|
-
</div>
|
|
1675
|
-
</div>
|
|
1676
|
-
<div class="field">
|
|
1677
|
-
<label class="check-row" for="debugSpawnEnabled"><input id="debugSpawnEnabled" type="checkbox" /> Log claude spawn details (binary, argv, routing env)</label>
|
|
1678
|
-
</div>
|
|
1679
|
-
<small class="hint" id="debugSpawnEnvNote"></small>
|
|
1680
|
-
<div class="add-project-actions" style="margin-top:14px">
|
|
1681
|
-
<button type="button" id="debugSpawnReset" class="btn btn-ghost btn-mini">Reset to default</button>
|
|
1682
|
-
<button type="button" id="debugSpawnSave" class="btn btn-primary btn-mini">Save</button>
|
|
1683
|
-
</div>
|
|
1684
|
-
<small class="hint" id="debugSpawnMsg"></small>
|
|
1685
|
-
</section>
|
|
1686
|
-
|
|
1687
1659
|
<!-- Chat notifications (chat-connectivity-design.md §4.8): which run
|
|
1688
1660
|
events ping which chat channels. Body rendered by
|
|
1689
1661
|
chat-settings-view.mjs; app.js owns fetch/save/Test wiring. -->
|
|
@@ -1697,58 +1669,78 @@
|
|
|
1697
1669
|
</div>
|
|
1698
1670
|
<small class="hint" id="chatSettingsMsg"></small>
|
|
1699
1671
|
</section>
|
|
1672
|
+
</section>
|
|
1673
|
+
<!-- /pane runs -->
|
|
1700
1674
|
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
<
|
|
1707
|
-
</div>
|
|
1708
|
-
<div class="gs-settings-row">
|
|
1709
|
-
<p class="gs-settings-text">The checklist on New pipeline walks through the first nine things to do with Worca. Hidden it, or want the guided tour back?</p>
|
|
1710
|
-
<button type="button" id="gsShowAgain" class="btn btn-ghost btn-mini">Show again</button>
|
|
1675
|
+
<!-- ===== TAB: ASK WORCA — the assistant chat's limits, tools, web access and history ===== -->
|
|
1676
|
+
<section class="settings-pane hidden" data-tab="ask">
|
|
1677
|
+
<div class="topbar">
|
|
1678
|
+
<div>
|
|
1679
|
+
<h1>Ask Worca</h1>
|
|
1680
|
+
<div class="sub">The assistant chat: how far one turn may go, which tools and websites it may use, and its saved history</div>
|
|
1711
1681
|
</div>
|
|
1712
|
-
|
|
1713
|
-
</section>
|
|
1682
|
+
</div>
|
|
1714
1683
|
|
|
1715
|
-
<!--
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1684
|
+
<!-- Ask Worca (ask-worca-design §6.9): per-turn guards for the
|
|
1685
|
+
assistant chat. Read fresh on every turn (D12); a stored null
|
|
1686
|
+
budget means "no cap". Posted ALONE — never with root/budget keys. -->
|
|
1687
|
+
<!-- Simple on purpose: the Ask Worca tab (Advanced) already gates it, and a deep link at a lower mode
|
|
1688
|
+
must still show the card under the level banner (docs/ui-levels.md rule 3). -->
|
|
1689
|
+
<section class="card settings-card" id="ask-settings-card" data-min-level="simple">
|
|
1690
|
+
<div class="card-head">
|
|
1691
|
+
<div class="label-row">
|
|
1692
|
+
<h2>Limits & access</h2>
|
|
1693
|
+
<button type="button" class="info-tip" aria-label="About Ask Worca limits">i<span class="tip-content hidden">
|
|
1694
|
+
Per-turn guards for the Ask Worca assistant chat. A chat turn stops when it reaches the turn limit or the per-turn cost cap; both are read fresh on every turn.
|
|
1695
|
+
</span></button>
|
|
1696
|
+
</div>
|
|
1719
1697
|
</div>
|
|
1720
|
-
<div class="
|
|
1721
|
-
<
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1698
|
+
<div class="field">
|
|
1699
|
+
<div class="label-row">
|
|
1700
|
+
<label for="askMaxTurns">Turn limit</label>
|
|
1701
|
+
<button type="button" class="info-tip" aria-label="About Turn limit">i<span class="tip-content hidden">
|
|
1702
|
+
Maximum assistant/tool turns one chat message may use (1–500). Leave empty to restore the default of 400.
|
|
1703
|
+
</span></button>
|
|
1704
|
+
</div>
|
|
1705
|
+
<input id="askMaxTurns" class="input" type="number" min="1" max="500" step="1" inputmode="numeric" placeholder="400" autocomplete="off" />
|
|
1726
1706
|
</div>
|
|
1727
|
-
<div class="
|
|
1728
|
-
<
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1707
|
+
<div class="field">
|
|
1708
|
+
<div class="label-row">
|
|
1709
|
+
<label for="askMaxBudgetUsd">Per-turn cost cap (USD)</label>
|
|
1710
|
+
<button type="button" class="info-tip" aria-label="About Per-turn cost cap">i<span class="tip-content hidden">
|
|
1711
|
+
There is no cap by default. Untick No cap and enter an amount (0.1–100) to turn the guard on: a chat turn then stops when its estimated cost reaches it. Leaving the amount empty, or pressing Use defaults, means no cap.
|
|
1712
|
+
</span></button>
|
|
1713
|
+
</div>
|
|
1714
|
+
<input id="askMaxBudgetUsd" class="input" type="number" min="0.1" max="100" step="0.1" inputmode="decimal" placeholder="No cap" autocomplete="off" />
|
|
1715
|
+
<label class="check-row" for="askNoCap"><input id="askNoCap" type="checkbox" /> No cap</label>
|
|
1732
1716
|
</div>
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1717
|
+
<!-- Scripts workbench W20: the chat's save_script / test_script switch. Body
|
|
1718
|
+
rendered by chat-settings-view.mjs; saved with this card's Save button. -->
|
|
1719
|
+
<div class="field" id="ask-script-tools-host"></div>
|
|
1720
|
+
<!-- Ask web access (off by default): rendered by chat-settings-view.mjs; saved with this
|
|
1721
|
+
card's Save button, and only when one of its fields was touched. -->
|
|
1722
|
+
<div class="field" id="ask-web-host"></div>
|
|
1723
|
+
<div class="add-project-actions" style="margin-top:14px">
|
|
1724
|
+
<button type="button" id="askLimitsReset" class="btn btn-ghost btn-mini">Use defaults</button>
|
|
1725
|
+
<button type="button" id="askLimitsSave" class="btn btn-primary btn-mini">Save</button>
|
|
1742
1726
|
</div>
|
|
1743
|
-
<
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1727
|
+
<small class="hint" id="askLimitsMsg"></small>
|
|
1728
|
+
<!-- Chat history: the counts paint with the view; the button opens a
|
|
1729
|
+
danger confirm quoting FRESH counts, then DELETE /api/ask/threads. -->
|
|
1730
|
+
<div class="field" style="margin-top:14px">
|
|
1731
|
+
<div class="label-row">
|
|
1732
|
+
<label for="askHistoryDelete">Chat history</label>
|
|
1733
|
+
<button type="button" class="info-tip" aria-label="About Chat history">i<span class="tip-content hidden">
|
|
1734
|
+
Every saved Ask Worca chat: transcripts, attachments and the git worktrees checked out for them. Runs started from a chat are not affected.
|
|
1735
|
+
</span></button>
|
|
1736
|
+
</div>
|
|
1737
|
+
<button type="button" id="askHistoryDelete" class="ask-history-delete" disabled>Delete all chat history</button>
|
|
1738
|
+
<small class="hint" id="askHistoryCounts"></small>
|
|
1739
|
+
<small class="hint" id="askHistoryMsg"></small>
|
|
1748
1740
|
</div>
|
|
1749
1741
|
</section>
|
|
1750
1742
|
</section>
|
|
1751
|
-
<!-- /pane
|
|
1743
|
+
<!-- /pane ask -->
|
|
1752
1744
|
|
|
1753
1745
|
<!-- ===== TAB: GUARDRAILS (was the top-level Guardrails view) ===== -->
|
|
1754
1746
|
<section class="settings-pane hidden" data-tab="guardrails">
|
|
@@ -1767,41 +1759,42 @@
|
|
|
1767
1759
|
</section>
|
|
1768
1760
|
<!-- /pane guardrails -->
|
|
1769
1761
|
|
|
1770
|
-
<!-- ===== TAB:
|
|
1771
|
-
<section class="settings-pane hidden" data-tab="
|
|
1762
|
+
<!-- ===== TAB: MEMORY (agent-memory-design.md §10) ===== -->
|
|
1763
|
+
<section class="settings-pane hidden" data-tab="memory">
|
|
1772
1764
|
<div class="topbar">
|
|
1773
1765
|
<div>
|
|
1774
|
-
<h1>
|
|
1775
|
-
<div class="sub">
|
|
1776
|
-
</div>
|
|
1777
|
-
<div style="display:flex;gap:8px;flex:0 0 auto">
|
|
1778
|
-
<button type="button" id="model-share-btn" class="btn-ghost" style="padding:11px 20px;white-space:nowrap">Share as plugin…</button>
|
|
1779
|
-
<button type="button" id="model-import-btn" class="btn-ghost" style="padding:11px 20px;white-space:nowrap">Import models…</button>
|
|
1780
|
-
<button type="button" id="model-create-btn" class="btn-go" style="padding:11px 20px;white-space:nowrap">
|
|
1781
|
-
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M12 5v14M5 12h14"></path></svg>
|
|
1782
|
-
Add model
|
|
1783
|
-
</button>
|
|
1766
|
+
<h1>Memory</h1>
|
|
1767
|
+
<div class="sub">What worca remembers across runs and chats — the global rules and preferences every agent sees. A project's own memory lives on its project page (Projects → open a project → Memory).</div>
|
|
1784
1768
|
</div>
|
|
1785
1769
|
</div>
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
<div class="
|
|
1770
|
+
<!-- Settings › Memory: the model + effort EVERY Memory defragment run uses (memory-defrag-model.mjs).
|
|
1771
|
+
Expert, like the health card's Defragment. No ⓘ and empty hints: the settings-view census
|
|
1772
|
+
(test/ui-settings-tooltips.test.mjs) pins both. A plain .card like the health card, NOT a
|
|
1773
|
+
.settings-card: that census (About last) counts the Settings cards. -->
|
|
1774
|
+
<section class="card mem-model-card" id="mem-defrag-model-card" data-min-level="expert">
|
|
1775
|
+
<div class="label-row"><h2>Defragment model</h2></div>
|
|
1776
|
+
<p class="mem-model-text">The model every Memory defragment run uses — from the Defragment button, New pipeline, an Ask Worca card or the CLI. A model named when the run starts (<code>worca --model</code>) still wins.</p>
|
|
1777
|
+
<div class="mem-model-row">
|
|
1778
|
+
<div class="field">
|
|
1779
|
+
<div class="label-row"><label for="memDefragModel">Model</label></div>
|
|
1780
|
+
<select id="memDefragModel" class="select" aria-label="Defragment model"></select>
|
|
1781
|
+
</div>
|
|
1782
|
+
<div class="field">
|
|
1783
|
+
<div class="label-row"><label for="memDefragEffort">Effort</label></div>
|
|
1784
|
+
<select id="memDefragEffort" class="select" aria-label="Defragment effort"></select>
|
|
1785
|
+
</div>
|
|
1799
1786
|
</div>
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1787
|
+
<small class="hint" id="memDefragModelNote"></small>
|
|
1788
|
+
<div class="add-project-actions" style="margin-top:14px">
|
|
1789
|
+
<button type="button" id="memDefragModelReset" class="btn btn-ghost btn-mini">Use default</button>
|
|
1790
|
+
<button type="button" id="memDefragModelSave" class="btn btn-primary btn-mini">Save</button>
|
|
1791
|
+
</div>
|
|
1792
|
+
<small class="hint" id="memDefragModelMsg"></small>
|
|
1793
|
+
</section>
|
|
1794
|
+
<p id="memory-msg" class="form-msg" aria-live="polite"></p>
|
|
1795
|
+
<div id="memory-host" class="mem-host"></div>
|
|
1803
1796
|
</section>
|
|
1804
|
-
<!-- /pane
|
|
1797
|
+
<!-- /pane memory -->
|
|
1805
1798
|
|
|
1806
1799
|
<!-- ===== TAB: PLUGINS (was the top-level Plugins view) ===== -->
|
|
1807
1800
|
<section class="settings-pane hidden" data-tab="plugins">
|
|
@@ -1833,42 +1826,104 @@
|
|
|
1833
1826
|
</section>
|
|
1834
1827
|
<!-- /pane plugins -->
|
|
1835
1828
|
|
|
1836
|
-
<!-- ===== TAB:
|
|
1837
|
-
<section class="settings-pane hidden" data-tab="
|
|
1829
|
+
<!-- ===== TAB: MODELS (was the top-level Models view) ===== -->
|
|
1830
|
+
<section class="settings-pane hidden" data-tab="models">
|
|
1838
1831
|
<div class="topbar">
|
|
1839
1832
|
<div>
|
|
1840
|
-
<h1>
|
|
1841
|
-
<div class="sub">
|
|
1833
|
+
<h1>Models</h1>
|
|
1834
|
+
<div class="sub">The global model catalog — available in every project; entries can override built-ins, route through a provider, or carry per-model routing env. The two cards on top pick the models Worca's own titles and Auto classifier use. Sign-ins and endpoints live on the Providers tab.</div>
|
|
1835
|
+
</div>
|
|
1836
|
+
<div style="display:flex;gap:8px;flex:0 0 auto">
|
|
1837
|
+
<button type="button" id="model-share-btn" class="btn-ghost" style="padding:11px 20px;white-space:nowrap">Share as plugin…</button>
|
|
1838
|
+
<button type="button" id="model-import-btn" class="btn-ghost" style="padding:11px 20px;white-space:nowrap">Import models…</button>
|
|
1839
|
+
<button type="button" id="model-create-btn" class="btn-go" style="padding:11px 20px;white-space:nowrap">
|
|
1840
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M12 5v14M5 12h14"></path></svg>
|
|
1841
|
+
Add model
|
|
1842
|
+
</button>
|
|
1842
1843
|
</div>
|
|
1843
1844
|
</div>
|
|
1844
|
-
<!--
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1845
|
+
<!-- The models Worca's own helper calls use (titles, the Auto classifier). Two columns on a
|
|
1846
|
+
wide screen so the catalog below is not pushed a screen down. -->
|
|
1847
|
+
<div class="models-helpers" data-min-level="expert">
|
|
1848
|
+
<!-- Title generation (#422): which model writes run/chat titles.
|
|
1849
|
+
Empty = the model of the run or chat itself (title.mjs
|
|
1850
|
+
resolveTitleModel), so a first-party-free install needs no setup.
|
|
1851
|
+
The select is built from the project-less catalog; a stored id
|
|
1852
|
+
that left the catalog paints disabled + "not installed". -->
|
|
1853
|
+
<section class="card settings-card" id="title-model-settings-card" data-min-level="expert">
|
|
1854
|
+
<div class="card-head">
|
|
1855
|
+
<div class="label-row">
|
|
1856
|
+
<h2>Title generation</h2>
|
|
1857
|
+
<button type="button" class="info-tip" aria-label="About title generation">i<span class="tip-content hidden">
|
|
1858
|
+
Every run and chat gets a short LLM-written title. By default it is written by the
|
|
1859
|
+
model the run or chat itself uses, so an install without a first-party Anthropic
|
|
1860
|
+
account needs no setup here. Pick a model to write every title with it instead;
|
|
1861
|
+
the change applies to the next title, no restart. A non-empty
|
|
1862
|
+
<code>WORCA_TITLE_MODEL</code> in the environment overrides this setting.
|
|
1863
|
+
</span></button>
|
|
1864
|
+
</div>
|
|
1865
|
+
</div>
|
|
1852
1866
|
<div class="field">
|
|
1853
|
-
<div class="label-row"
|
|
1854
|
-
|
|
1867
|
+
<div class="label-row">
|
|
1868
|
+
<label for="titleModel">Model</label>
|
|
1869
|
+
</div>
|
|
1870
|
+
<select id="titleModel" class="select" aria-label="Title model"></select>
|
|
1871
|
+
</div>
|
|
1872
|
+
<small class="hint" id="titleModelEnvNote"></small>
|
|
1873
|
+
<div class="add-project-actions" style="margin-top:14px">
|
|
1874
|
+
<button type="button" id="titleModelTest" class="btn btn-ghost btn-mini" title="Send one tiny prompt to the selected model">Test</button>
|
|
1875
|
+
<button type="button" id="titleModelReset" class="btn btn-ghost btn-mini">Use default</button>
|
|
1876
|
+
<button type="button" id="titleModelSave" class="btn btn-primary btn-mini">Save</button>
|
|
1877
|
+
</div>
|
|
1878
|
+
<small class="hint" id="titleModelMsg"></small>
|
|
1879
|
+
</section>
|
|
1880
|
+
|
|
1881
|
+
<!-- Auto workflow model (spec D14 / §7.7): which model classifies a task into a workflow.
|
|
1882
|
+
Empty = the Sonnet-class default; WORCA_AUTO_MODEL in the environment wins. -->
|
|
1883
|
+
<section class="card settings-card" id="auto-model-settings-card" data-min-level="expert">
|
|
1884
|
+
<div class="card-head">
|
|
1885
|
+
<div class="label-row">
|
|
1886
|
+
<h2>Auto workflow model</h2>
|
|
1887
|
+
<button type="button" class="info-tip" aria-label="About the Auto workflow model">i<span class="tip-content hidden">
|
|
1888
|
+
When a run starts on <b>Auto</b>, one short model call reads the task and picks the workflow.
|
|
1889
|
+
Pick the model that makes that call; empty means the Sonnet-class default. A non-empty
|
|
1890
|
+
<code>WORCA_AUTO_MODEL</code> in the environment overrides this setting. Each call is billed to the
|
|
1891
|
+
run as a sub-agent row named "Auto workflow (round n)".
|
|
1892
|
+
</span></button>
|
|
1893
|
+
</div>
|
|
1855
1894
|
</div>
|
|
1856
1895
|
<div class="field">
|
|
1857
|
-
<div class="label-row"><label for="
|
|
1858
|
-
<select id="
|
|
1896
|
+
<div class="label-row"><label for="autoModel">Model</label></div>
|
|
1897
|
+
<select id="autoModel" class="select" aria-label="Auto workflow model"></select>
|
|
1859
1898
|
</div>
|
|
1899
|
+
<small class="hint" id="autoModelEnvNote"></small>
|
|
1900
|
+
<div class="add-project-actions" style="margin-top:14px">
|
|
1901
|
+
<button type="button" id="autoModelTest" class="btn btn-ghost btn-mini" title="Send one tiny prompt to the selected model">Test</button>
|
|
1902
|
+
<button type="button" id="autoModelReset" class="btn btn-ghost btn-mini">Use default</button>
|
|
1903
|
+
<button type="button" id="autoModelSave" class="btn btn-primary btn-mini">Save</button>
|
|
1904
|
+
</div>
|
|
1905
|
+
<small class="hint" id="autoModelMsg"></small>
|
|
1906
|
+
</section>
|
|
1907
|
+
</div>
|
|
1908
|
+
<p id="models-msg" class="form-msg" aria-live="polite"></p>
|
|
1909
|
+
<div class="run-list" id="models-list"></div>
|
|
1910
|
+
</section>
|
|
1911
|
+
<!-- /pane models -->
|
|
1912
|
+
|
|
1913
|
+
<!-- ===== TAB: PROVIDERS (model-bridge-design.md §8.1) =====
|
|
1914
|
+
Split out of Models: the card is account-level setup you touch rarely, and at
|
|
1915
|
+
1000+px it buried the catalog it unlocks. Expert only, like Models. -->
|
|
1916
|
+
<section class="settings-pane hidden" data-tab="providers">
|
|
1917
|
+
<div class="topbar">
|
|
1918
|
+
<div>
|
|
1919
|
+
<h1>Providers</h1>
|
|
1920
|
+
<div class="sub">Sign-ins, endpoints and keys for the models Worca bridges — GitHub Copilot, any OpenAI-compatible server (llama.cpp, Ollama, LM Studio, vLLM), an Anthropic-compatible gateway. The models themselves live on the Models tab.</div>
|
|
1860
1921
|
</div>
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
<button type="button" id="memDefragModelSave" class="btn btn-primary btn-mini">Save</button>
|
|
1865
|
-
</div>
|
|
1866
|
-
<small class="hint" id="memDefragModelMsg"></small>
|
|
1867
|
-
</section>
|
|
1868
|
-
<p id="memory-msg" class="form-msg" aria-live="polite"></p>
|
|
1869
|
-
<div id="memory-host" class="mem-host"></div>
|
|
1922
|
+
</div>
|
|
1923
|
+
<p id="providers-msg" class="form-msg" aria-live="polite"></p>
|
|
1924
|
+
<div class="run-list" id="providers-list"></div>
|
|
1870
1925
|
</section>
|
|
1871
|
-
<!-- /pane
|
|
1926
|
+
<!-- /pane providers -->
|
|
1872
1927
|
</section>
|
|
1873
1928
|
<!-- /view settings -->
|
|
1874
1929
|
</main>
|
|
@@ -2235,7 +2290,8 @@
|
|
|
2235
2290
|
</div>
|
|
2236
2291
|
|
|
2237
2292
|
<!-- Connect Claude Code: the one checklist step with no control to ring. The
|
|
2238
|
-
tick is derived (the CLI resolves on PATH); "Check
|
|
2293
|
+
tick is derived (the CLI resolves on PATH and is not signed out); "Check
|
|
2294
|
+
again" refetches it with a fresh sign-in check. -->
|
|
2239
2295
|
<div id="claude-setup-modal" class="viewer-modal hidden" role="dialog" aria-modal="true" aria-labelledby="claude-setup-title">
|
|
2240
2296
|
<div class="card ob-claude">
|
|
2241
2297
|
<div class="card-head">
|
|
@@ -2245,6 +2301,9 @@
|
|
|
2245
2301
|
<p class="ob-claude-lead">Worca drives the <strong>Claude Code</strong> CLI. Real runs need it on your <code>PATH</code>; mock runs need nothing.</p>
|
|
2246
2302
|
<pre class="ob-claude-cmd"><code>npm install -g @anthropic-ai/claude-code</code></pre>
|
|
2247
2303
|
<p class="ob-claude-note">On native Windows the <a href="https://docs.anthropic.com/en/docs/claude-code/setup" target="_blank" rel="noopener noreferrer">native installer</a> works too. A binary elsewhere: set <code>WORCA_CLAUDE_BIN</code> to its full path and restart the UI.</p>
|
|
2304
|
+
<p class="ob-claude-lead ob-claude-step"><strong>Then sign it in.</strong> Start it once in a terminal and type <code>/login</code>:</p>
|
|
2305
|
+
<pre class="ob-claude-cmd"><code>claude</code></pre>
|
|
2306
|
+
<p class="ob-claude-note">Signing in to the Claude desktop app does not carry over — the CLI keeps its own sign-in.</p>
|
|
2248
2307
|
<div class="ob-claude-status" id="claude-setup-status" aria-live="polite"></div>
|
|
2249
2308
|
<div class="stop-actions">
|
|
2250
2309
|
<button type="button" id="claude-setup-check" class="btn btn-primary btn-mini">Check again</button>
|