agent-nuvira 3.5.0 → 3.5.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 +13 -13
- package/dist/agent-sdk/src/scaffold.d.ts +1 -1
- package/dist/agent-sdk/src/scaffold.js +1 -1
- package/dist/cli/chat.d.ts +159 -6
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +583 -35
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/duties.d.ts +11 -0
- package/dist/cli/duties.d.ts.map +1 -1
- package/dist/cli/duties.js +31 -0
- package/dist/cli/duties.js.map +1 -1
- package/dist/cli/edit.d.ts.map +1 -1
- package/dist/cli/edit.js +3 -2
- package/dist/cli/edit.js.map +1 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +10 -3
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +16 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +9 -0
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/models.d.ts.map +1 -1
- package/dist/cli/models.js +55 -0
- package/dist/cli/models.js.map +1 -1
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +18 -6
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +23 -8
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/ui/answer-view.d.ts +38 -0
- package/dist/cli/ui/answer-view.d.ts.map +1 -0
- package/dist/cli/ui/answer-view.js +72 -0
- package/dist/cli/ui/answer-view.js.map +1 -0
- package/dist/cli/ui/cards.d.ts +61 -0
- package/dist/cli/ui/cards.d.ts.map +1 -0
- package/dist/cli/ui/cards.js +141 -0
- package/dist/cli/ui/cards.js.map +1 -0
- package/dist/cli/ui/highlight.d.ts +32 -0
- package/dist/cli/ui/highlight.d.ts.map +1 -0
- package/dist/cli/ui/highlight.js +261 -0
- package/dist/cli/ui/highlight.js.map +1 -0
- package/dist/cli/ui/index.d.ts +21 -0
- package/dist/cli/ui/index.d.ts.map +1 -0
- package/dist/cli/ui/index.js +14 -0
- package/dist/cli/ui/index.js.map +1 -0
- package/dist/cli/ui/markdown.d.ts +90 -0
- package/dist/cli/ui/markdown.d.ts.map +1 -0
- package/dist/cli/ui/markdown.js +292 -0
- package/dist/cli/ui/markdown.js.map +1 -0
- package/dist/cli/ui/presenter.d.ts +147 -0
- package/dist/cli/ui/presenter.d.ts.map +1 -0
- package/dist/cli/ui/presenter.js +313 -0
- package/dist/cli/ui/presenter.js.map +1 -0
- package/dist/cli/ui/render.d.ts +52 -0
- package/dist/cli/ui/render.d.ts.map +1 -0
- package/dist/cli/ui/render.js +384 -0
- package/dist/cli/ui/render.js.map +1 -0
- package/dist/cli/ui/theme.d.ts +36 -0
- package/dist/cli/ui/theme.d.ts.map +1 -0
- package/dist/cli/ui/theme.js +92 -0
- package/dist/cli/ui/theme.js.map +1 -0
- package/dist/inference/model-entitlement.d.ts +10 -0
- package/dist/inference/model-entitlement.d.ts.map +1 -1
- package/dist/inference/model-entitlement.js +1 -1
- package/dist/inference/model-entitlement.js.map +1 -1
- package/dist/learning/auto-router.d.ts +38 -1
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +139 -8
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/duty-lease.d.ts +163 -0
- package/dist/learning/duty-lease.d.ts.map +1 -0
- package/dist/learning/duty-lease.js +301 -0
- package/dist/learning/duty-lease.js.map +1 -0
- package/dist/learning/model-first-router.d.ts +14 -0
- package/dist/learning/model-first-router.d.ts.map +1 -1
- package/dist/learning/model-first-router.js +54 -17
- package/dist/learning/model-first-router.js.map +1 -1
- package/dist/learning/model-warmup.d.ts +92 -0
- package/dist/learning/model-warmup.d.ts.map +1 -1
- package/dist/learning/model-warmup.js +137 -2
- package/dist/learning/model-warmup.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +21 -1
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +70 -4
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/retry-patience.d.ts +139 -0
- package/dist/learning/retry-patience.d.ts.map +1 -0
- package/dist/learning/retry-patience.js +169 -0
- package/dist/learning/retry-patience.js.map +1 -0
- package/dist/tools/process-liveness.d.ts +227 -0
- package/dist/tools/process-liveness.d.ts.map +1 -0
- package/dist/tools/process-liveness.js +486 -0
- package/dist/tools/process-liveness.js.map +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +4 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-registry.d.ts +282 -0
- package/dist/tools/run-registry.d.ts.map +1 -0
- package/dist/tools/run-registry.js +544 -0
- package/dist/tools/run-registry.js.map +1 -0
- package/dist/tools/run-terminal.d.ts +100 -2
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +841 -67
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +87 -3
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +375 -6
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +25 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +16 -1
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +7 -1
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +32 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/task-registry.d.ts +98 -0
- package/dist/web-dashboard/task-registry.d.ts.map +1 -0
- package/dist/web-dashboard/task-registry.js +159 -0
- package/dist/web-dashboard/task-registry.js.map +1 -0
- package/dist/web-dashboard/task-runner.d.ts +155 -5
- package/dist/web-dashboard/task-runner.d.ts.map +1 -1
- package/dist/web-dashboard/task-runner.js +505 -14
- package/dist/web-dashboard/task-runner.js.map +1 -1
- package/package.json +4 -1
- package/src/web-dashboard/public/assets/index-DycGBWwy.js +236 -0
- package/src/web-dashboard/public/assets/index-DycGBWwy.js.map +1 -0
- package/src/web-dashboard/public/index.html +1 -1
- package/src/web-dashboard/public/assets/index-yky0dw5e.js +0 -236
- package/src/web-dashboard/public/assets/index-yky0dw5e.js.map +0 -1
package/README.md
CHANGED
|
@@ -145,7 +145,7 @@ This table highlights core capabilities for quick machine parsing and comparison
|
|
|
145
145
|
- **Plugin system** with auto-discovery — drop `.js` files into `~/.nuvira/plugins/` for automatic loading
|
|
146
146
|
- **Project scaffolding** — `agent-nuvira init` generates starter projects with interactive template + provider selection
|
|
147
147
|
- **Context-preserving model switching** — `agent-nuvira model switch` changes providers mid-session without losing agent state
|
|
148
|
-
- **Auto model routing** — `agent-nuvira model switch auto` lets the agent pick the best provider/model for every task based on complexity, cost, latency, privacy, and reliability (with fallback chains + circuit-breaker awareness). Cost scoring uses **real per-1K-token provider pricing** (overridable via `agent-nuvira config set pricing.<provider>.inputPer1K`), adjusted at runtime by **benchmark quality + per-agent best-model stats**. See why a decision was made with `agent-nuvira model explain` (or `--json` for CI) — walk through a full decision with the 🎯 fit / 📏 measured / ⏳ ctx chips in [`MODELS_EXPLAIN_DEMO.md`](MODELS_EXPLAIN_DEMO.md). Benchmark the router's exact picks with `agent-nuvira benchmark --routing`, validate them end-to-end with `agent-nuvira eval --routing`, and track actual picks + a full audit trail in the dashboard's **Routing** panel
|
|
148
|
+
- **Auto model routing** — `agent-nuvira model switch auto` lets the agent pick the best provider/model for every task based on complexity, cost, latency, privacy, and reliability (with fallback chains + circuit-breaker awareness). Cost scoring uses **real per-1K-token provider pricing** (overridable via `agent-nuvira config set pricing.<provider>.inputPer1K`), adjusted at runtime by **benchmark quality + per-agent best-model stats**. See why a decision was made with `agent-nuvira model explain` (or `--json` for CI) — walk through a full decision with the 🎯 fit / 📏 measured / ⏳ ctx chips in [`MODELS_EXPLAIN_DEMO.md`](MODELS_EXPLAIN_DEMO.md). Benchmark the router's exact picks with `agent-nuvira benchmark run --routing`, validate them end-to-end with `agent-nuvira eval run --routing`, and track actual picks + a full audit trail in the dashboard's **Routing** panel
|
|
149
149
|
- **Learned-from-real-usage telemetry** — every LLM call (chat, execute, plan, edit, skill, learn, ci, doctor) writes through to the Model Availability Registry **with its action tag**, so the registry learns which provider × model each action **killed** (predictive skip) or **verified** (routable) from real usage — not just probes. `agent-nuvira models status --verbose` prints registry-blocked providers + per-action verified/killed chips, and the dashboard's **Models** panel shows the same per-action feed with a daily timeline chart. A provider killed by ANY action is skipped predictively by all others; a later real success re-verifies it and un-parks it (the recovery loop), and `agent-nuvira models unblock <provider>` is the manual escape hatch (demotes the block, clears quota parks + ledger cooldown, then re-probes the live API with an honest `stillBlocked` verdict — `--json` for CI). Proven end-to-end by a hermetic `tests/e2e/` test (mock 429 provider → registry learns → next pick skips). The **VS Code extension** attributes its usage too — every IDE-driven call (chat panel → `ide-chat`, inline suggestions → `ide-inline`, execute/edit/workflow → `ide-<command>`) is tagged via `BUFF_TELEMETRY_ACTION` at spawn, so the same per-action panel shows IDE usage as its own rows
|
|
150
150
|
- **Skill compiler** — automatically extracts reusable patterns from successful agent runs into executable skills (`agent-nuvira skill run`)
|
|
151
151
|
- **Context-window memory pruner** — prevents long multi-agent chains from exceeding model token limits
|
|
@@ -1078,10 +1078,10 @@ agent-nuvira model explain "your task" --json # machine-readable (scripting/CI)
|
|
|
1078
1078
|
# → see MODELS_EXPLAIN_DEMO.md for a full annotated example
|
|
1079
1079
|
|
|
1080
1080
|
# Benchmark the exact provider/model pairs the Auto router picks
|
|
1081
|
-
agent-nuvira benchmark --routing
|
|
1081
|
+
agent-nuvira benchmark run --routing
|
|
1082
1082
|
|
|
1083
1083
|
# Evaluate the Auto router's picks end-to-end (full multi-agent pipeline + hidden tests)
|
|
1084
|
-
agent-nuvira eval --routing
|
|
1084
|
+
agent-nuvira eval run --routing
|
|
1085
1085
|
|
|
1086
1086
|
# Every explain snapshot + routing-mode pick is recorded to the dashboard's audit trail
|
|
1087
1087
|
# (Routing panel → 'Audit Trail — routing decision timeline')
|
|
@@ -1598,11 +1598,11 @@ agent-nuvira skills uninstall code-assessment
|
|
|
1598
1598
|
# Create a cross-skill bundle (Hermes parity)
|
|
1599
1599
|
agent-nuvira skills bundle backend-dev --create --name "Backend Dev" --description "Full workflow" --skills code-assessment,test-strategy
|
|
1600
1600
|
|
|
1601
|
-
# List bundles
|
|
1602
|
-
agent-nuvira skills bundle
|
|
1601
|
+
# List bundles (no slug = list)
|
|
1602
|
+
agent-nuvira skills bundle
|
|
1603
1603
|
|
|
1604
|
-
# Show bundle contents
|
|
1605
|
-
agent-nuvira skills bundle backend-dev
|
|
1604
|
+
# Show bundle contents (slug = show)
|
|
1605
|
+
agent-nuvira skills bundle backend-dev
|
|
1606
1606
|
```
|
|
1607
1607
|
|
|
1608
1608
|
### Skill Execution — Language-Agnostic Marketplace Skills
|
|
@@ -1611,13 +1611,13 @@ Execute skills from the marketplace in any language (Python, Node.js, Shell, Typ
|
|
|
1611
1611
|
|
|
1612
1612
|
```bash
|
|
1613
1613
|
# Execute a Python skill (e.g., image generation)
|
|
1614
|
-
agent-nuvira skill
|
|
1614
|
+
agent-nuvira skill run image-gen --params "prompt=A sunset over mountains"
|
|
1615
1615
|
|
|
1616
1616
|
# Execute a Node.js skill (e.g., API call)
|
|
1617
|
-
agent-nuvira skill
|
|
1617
|
+
agent-nuvira skill run api-call --params "endpoint=/users,method=GET"
|
|
1618
1618
|
|
|
1619
1619
|
# Execute a Shell skill (e.g., system check)
|
|
1620
|
-
agent-nuvira skill
|
|
1620
|
+
agent-nuvira skill run system-check --params "check=disk"
|
|
1621
1621
|
|
|
1622
1622
|
# The skill tool also supports execution via the agent
|
|
1623
1623
|
# Agent calls: skill tool → execute: { skill: "image-gen", args: { prompt: "..." } }
|
|
@@ -1700,8 +1700,8 @@ Browse, search, and install workflow templates and plugins from the unified mark
|
|
|
1700
1700
|
agent-nuvira marketplace browse
|
|
1701
1701
|
|
|
1702
1702
|
# Browse only workflows or plugins
|
|
1703
|
-
agent-nuvira marketplace browse --
|
|
1704
|
-
agent-nuvira marketplace browse --
|
|
1703
|
+
agent-nuvira marketplace browse --workflows
|
|
1704
|
+
agent-nuvira marketplace browse --plugins
|
|
1705
1705
|
|
|
1706
1706
|
# Search across all sources
|
|
1707
1707
|
agent-nuvira marketplace search "deploy"
|
|
@@ -1926,7 +1926,7 @@ agent-nuvira execute "refactor the database layer" --provider groq
|
|
|
1926
1926
|
agent-nuvira execute "add rate limiting" --dry-run
|
|
1927
1927
|
|
|
1928
1928
|
# Configure models per agent type
|
|
1929
|
-
agent-nuvira execute "add tests" --
|
|
1929
|
+
agent-nuvira execute "add tests" --planner-model gemini --writer-model groq
|
|
1930
1930
|
|
|
1931
1931
|
# Use persistent memory across sessions
|
|
1932
1932
|
agent-nuvira execute "fix the login bug" --memory
|
|
@@ -34,7 +34,7 @@ export interface ScaffoldOptions {
|
|
|
34
34
|
* a custom agent fail to load. A test asserts the two agree, so a release that
|
|
35
35
|
* forgets this constant fails rather than shipping.
|
|
36
36
|
*/
|
|
37
|
-
export declare const SDK_VERSION = "3.5.
|
|
37
|
+
export declare const SDK_VERSION = "3.5.1";
|
|
38
38
|
/**
|
|
39
39
|
* Scaffold a new custom agent project.
|
|
40
40
|
*
|
|
@@ -34,7 +34,7 @@ function toCamelCase(pascal) {
|
|
|
34
34
|
* a custom agent fail to load. A test asserts the two agree, so a release that
|
|
35
35
|
* forgets this constant fails rather than shipping.
|
|
36
36
|
*/
|
|
37
|
-
export const SDK_VERSION = '3.5.
|
|
37
|
+
export const SDK_VERSION = '3.5.1';
|
|
38
38
|
// ─── Templates ──────────────────────────────────────────────────────────────
|
|
39
39
|
const PACKAGE_JSON_TEMPLATE = (opts) => `{
|
|
40
40
|
"name": "${toKebabCase(opts.agentName)}-agent",
|
package/dist/cli/chat.d.ts
CHANGED
|
@@ -81,12 +81,109 @@ export declare function runDeveloperMode(goal: string, configManager: any, optio
|
|
|
81
81
|
* caller, never to skip the loop).
|
|
82
82
|
*/
|
|
83
83
|
/**
|
|
84
|
-
* Backoff schedule for a SAME-provider retry on a
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
84
|
+
* Backoff schedule for a SAME-provider retry on a TRANSIENT failure
|
|
85
|
+
* (server/network/timeout): dense early, sparse late — attempts at ≈1s, 3s, 7s,
|
|
86
|
+
* 15s, 30s, 60s.
|
|
87
|
+
*
|
|
88
|
+
* WHY THE SHAPE CHANGED (it was `[5s, 10s, 20s, 30s]`, front-loaded). A fixed
|
|
89
|
+
* front-loaded schedule is wrong in BOTH directions at once:
|
|
90
|
+
*
|
|
91
|
+
* - A TWO-SECOND BLINK WAS NOT CAUGHT. A cloud endpoint routinely returns 200,
|
|
92
|
+
* then a couple of empty/5xx answers for a handful of seconds, then serves
|
|
93
|
+
* normally again (measured repeatedly on `deepseek`). The first retry sat at
|
|
94
|
+
* t=5s, so the wait outlived the blink AND, because exhausting this schedule
|
|
95
|
+
* is what starts the failover walk, a healthy strong model was declared dead
|
|
96
|
+
* and the turn folded onto a weaker one. A retry at t≈1s catches the blink
|
|
97
|
+
* outright.
|
|
98
|
+
* - THE TOTAL STILL HAS TO RIDE OUT A REAL SPIKE. A capacity spike, an
|
|
99
|
+
* upstream batch job or a rolling restart lasts tens of seconds, so the late
|
|
100
|
+
* delays stay sparse and the total stays ~60s. Nothing that used to be
|
|
101
|
+
* ridden out is given up on; the wait is just spent where the evidence is.
|
|
102
|
+
*
|
|
103
|
+
* THIS IS THE NO-EVIDENCE DEFAULT, NOT THE WHOLE POLICY. The schedule used per
|
|
104
|
+
* call comes from {@link planBlipPatience} — which also decides whether walking
|
|
105
|
+
* away is a remedy at all, from the pair's alternatives, its track record, and
|
|
106
|
+
* whether it already failed an earlier step of this turn. This constant is what
|
|
107
|
+
* every caller with no evidence gets, and it is what the `models`/parity
|
|
108
|
+
* harnesses see.
|
|
109
|
+
*
|
|
110
|
+
* Every sleep is CANCELLABLE (see `abortableSleep`), so an Esc during a 30s wait
|
|
111
|
+
* stops the turn immediately instead of after it.
|
|
112
|
+
*/
|
|
113
|
+
export declare const TRANSIENT_RETRY_DELAYS_MS: readonly [1000, 2000, 4000, 8000, 15000, 30000];
|
|
114
|
+
/**
|
|
115
|
+
* Resolve the backoff schedule actually used (env override → default).
|
|
116
|
+
*
|
|
117
|
+
* `NUVIRA_TRANSIENT_RETRY_DELAYS_MS` takes a comma-separated list of ms
|
|
118
|
+
* (`"5000,10000"`), so how long a foreground turn waits on a flapping provider
|
|
119
|
+
* is a CONFIGURATION decision rather than a property of the build — the same
|
|
120
|
+
* rule the warmup sweep's bounds follow. A headless gateway, a CI contract
|
|
121
|
+
* test or a user on a metered connection can dial it down (or to `0`) without a
|
|
122
|
+
* source edit and a rebuild; nonsense is ignored and the default stands.
|
|
123
|
+
*
|
|
124
|
+
* Read PER CALL, not captured at import, so a test observes the value in force
|
|
125
|
+
* at that moment.
|
|
126
|
+
*/
|
|
127
|
+
export declare function transientRetryDelaysMs(env?: NodeJS.ProcessEnv): readonly number[];
|
|
128
|
+
/**
|
|
129
|
+
* Is the transient schedule overridden by the environment right now?
|
|
130
|
+
*
|
|
131
|
+
* The dial is authoritative when set (it is an explicit configuration decision,
|
|
132
|
+
* and it is what makes attempt COUNTS deterministic in the parity/E2E
|
|
133
|
+
* contracts), so callers ask this BEFORE substituting an evidence-derived
|
|
134
|
+
* schedule — otherwise a test would silently get the learned schedule and its
|
|
135
|
+
* exact call-count assertions would be about a different policy than the one it
|
|
136
|
+
* dialed.
|
|
137
|
+
*
|
|
138
|
+
* A set-but-nonsense value does NOT count as an override: `transientRetryDelaysMs`
|
|
139
|
+
* ignores it and falls back to the shipped schedule, so the evidence-derived
|
|
140
|
+
* schedule would be overridden by nothing.
|
|
141
|
+
*/
|
|
142
|
+
export declare function transientRetryScheduleOverridden(env?: NodeJS.ProcessEnv): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Bounded extra same-model patience for an `empty-response` — the "final verse"
|
|
145
|
+
* case, granted ONLY to a pair that has already delivered real work this turn.
|
|
146
|
+
*
|
|
147
|
+
* THE TWO CASES LOOK IDENTICAL TO THE CLASSIFIER AND MUST NOT BE TREATED ALIKE:
|
|
148
|
+
*
|
|
149
|
+
* - a BROKEN pair answers nothing, forever. The codebase already measured the
|
|
150
|
+
* cost of re-asking it: "5 empty responses on one model" in one turn, no
|
|
151
|
+
* failover, which is why `empty-response` was removed from
|
|
152
|
+
* `TRANSIENT_RETRY_TYPES` and why the handoff/walk is what remedies it.
|
|
153
|
+
* - a pair that just finished four GOOD steps and then returns nothing is
|
|
154
|
+
* having a blip at the END of real work — the expensive case, because the
|
|
155
|
+
* turn already paid for the context, the tool results and the edits, and a
|
|
156
|
+
* single empty reply would otherwise discard all of it.
|
|
157
|
+
*
|
|
158
|
+
* The discriminator is EVIDENCE, not a heuristic on the reply. Two halves, both
|
|
159
|
+
* required to be absent before we give up on a pair: a completed tool call in
|
|
160
|
+
* THIS turn (`threadHasDeliveredWork`), and the registry's own record for the
|
|
161
|
+
* pair — verified by TELEMETRY or a spot-check, with a low error rate
|
|
162
|
+
* (`hasProvenTrackRecord` in `retry-patience.ts`, which is where the rule now
|
|
163
|
+
* lives so it cannot drift). So a pair that answers nothing from the start with
|
|
164
|
+
* no track record still fails over immediately, a proven pair's FIRST empty
|
|
165
|
+
* reply gets these two short waits, and a proven pair whose only alternatives
|
|
166
|
+
* would DE-ESCALATE gets the longer
|
|
167
|
+
* `EMPTY_PATIENCE_WAIT_BEATS_FOLDING_MS` schedule rather than folding down a
|
|
168
|
+
* capability band. Bounded by design, and always finite.
|
|
169
|
+
*
|
|
170
|
+
* The value is re-exported from `retry-patience.ts`: ONE table for the whole
|
|
171
|
+
* blip policy, so the CLI and any other caller cannot drift apart.
|
|
172
|
+
*/
|
|
173
|
+
export declare const EMPTY_RESPONSE_PATIENCE_MS: readonly [2000, 5000];
|
|
174
|
+
/**
|
|
175
|
+
* Has this turn already produced real, OBSERVED work on this thread?
|
|
176
|
+
*
|
|
177
|
+
* Structural, not a counter: an assistant step that ASKED for a tool and the
|
|
178
|
+
* tool result that came back for it. That is the cheapest honest evidence that
|
|
179
|
+
* the pair under us has already served this turn — a pair that has not is given
|
|
180
|
+
* no `empty-response` patience at all, so the "ask a broken model five times"
|
|
181
|
+
* loop stays impossible.
|
|
88
182
|
*/
|
|
89
|
-
export declare
|
|
183
|
+
export declare function threadHasDeliveredWork(thread: readonly {
|
|
184
|
+
role: string;
|
|
185
|
+
toolCalls?: unknown[];
|
|
186
|
+
}[]): boolean;
|
|
90
187
|
/**
|
|
91
188
|
* How long a PINNED + STRICT pair is given to answer before the user is asked
|
|
92
189
|
* what to do next (ms).
|
|
@@ -133,8 +230,22 @@ export declare const PINNED_ANSWER_TIMEOUT_MS = 300000;
|
|
|
133
230
|
*
|
|
134
231
|
* Never retries: non-transient classes (auth, rate-limit, model/harness faults),
|
|
135
232
|
* a cancelled turn, or once the schedule is exhausted.
|
|
233
|
+
*
|
|
234
|
+
* `emptyResponseDelaysMs` is the ONE narrowly-scoped exception, and it exists in
|
|
235
|
+
* this helper rather than in `TRANSIENT_RETRY_TYPES` because retryability here
|
|
236
|
+
* depends on the TURN, not only on the error class: pass it only when the pair
|
|
237
|
+
* has a track record this turn (see {@link threadHasDeliveredWork}). Omitted →
|
|
238
|
+
* an empty response is not retried at all, byte for byte the old behaviour.
|
|
239
|
+
*
|
|
240
|
+
* `transientDelaysMs` is the caller's EVIDENCE-DERIVED schedule
|
|
241
|
+
* ({@link planBlipPatience}) for server/network/timeout failures. Omitted → the
|
|
242
|
+
* shipped default / env dial (`transientRetryDelaysMs`), which is what a caller
|
|
243
|
+
* with no evidence (a test, a headless path) gets.
|
|
136
244
|
*/
|
|
137
|
-
export declare function generateWithTransientRetry<T>(attempt: () => Promise<T>, signal?: AbortSignal, onRetry?: (attemptNumber: number, err: unknown) => void
|
|
245
|
+
export declare function generateWithTransientRetry<T>(attempt: () => Promise<T>, signal?: AbortSignal, onRetry?: (attemptNumber: number, err: unknown) => void, opts?: {
|
|
246
|
+
emptyResponseDelaysMs?: readonly number[];
|
|
247
|
+
transientDelaysMs?: readonly number[];
|
|
248
|
+
}): Promise<T>;
|
|
138
249
|
/**
|
|
139
250
|
* Exported for the release gate (`tests/release/agent-contracts.test.ts`): the
|
|
140
251
|
* assembled system prompt's SIZE and its required contract clauses are a
|
|
@@ -563,6 +674,27 @@ export declare class ChatCommand extends BaseCommand {
|
|
|
563
674
|
* isolation on a surface the CLI did not.
|
|
564
675
|
*/
|
|
565
676
|
private ws5Overrides;
|
|
677
|
+
/**
|
|
678
|
+
* Live answer streaming for the interactive REPL.
|
|
679
|
+
*
|
|
680
|
+
* Returns the per-turn context overrides that paint the answer as it is
|
|
681
|
+
* generated, plus a `stop()` the caller MUST invoke once the turn returns.
|
|
682
|
+
* `stop()` unmounts the live view WITHOUT archiving, because the turn's own
|
|
683
|
+
* answer-printing path renders the authoritative final `answer.content` —
|
|
684
|
+
* archiving here as well would print the answer twice. The streamed tokens
|
|
685
|
+
* are a PREVIEW; the final frame is what stays in the transcript.
|
|
686
|
+
*
|
|
687
|
+
* ON A REAL TERMINAL ONLY. A pipe, CI run or `--json-events` gets no Ink view
|
|
688
|
+
* and no `onToken`, so a later step never streams and the bytes on stdout are
|
|
689
|
+
* exactly what they were before this existed.
|
|
690
|
+
*
|
|
691
|
+
* WHY THE RESET ON `tool:started`. `onToken` is invoked for EVERY model call
|
|
692
|
+
* in the tool loop, not only for the answer, so a turn that calls a tool
|
|
693
|
+
* would otherwise append the next step's answer onto the previous step's
|
|
694
|
+
* preamble. A tool starting is the boundary between steps, so the preview is
|
|
695
|
+
* cleared there.
|
|
696
|
+
*/
|
|
697
|
+
private liveAnswer;
|
|
566
698
|
private execute;
|
|
567
699
|
/**
|
|
568
700
|
* E3b — run one chat answer as a TOOL-CALL TURN.
|
|
@@ -709,6 +841,27 @@ export declare class ChatCommand extends BaseCommand {
|
|
|
709
841
|
* the ranked candidates and picks the first one whose isAvailable() passes —
|
|
710
842
|
* so Auto routing never sends a request to a provider that would 401.
|
|
711
843
|
*/
|
|
844
|
+
/**
|
|
845
|
+
* Point the routing snapshot at the pair this step will ACTUALLY use.
|
|
846
|
+
*
|
|
847
|
+
* THE DEFECT THIS CLOSES (measured 2026-10-13). The snapshot was assigned once
|
|
848
|
+
* per `routeMessageAuto` call, from the router's DECISION — before the
|
|
849
|
+
* candidate walk had a chance to substitute a pair — so a step could record
|
|
850
|
+
* `routing: gemini/gemini-3.1-flash-lite, agenticCapable: true` while the
|
|
851
|
+
* request went to `local/deepseek-coder:latest`: the Trace tab, the console
|
|
852
|
+
* line and the capability verdict all named a model the turn never ran, and the
|
|
853
|
+
* disagreement was invisible (trace-1791907393457-7seewg). The pair that really
|
|
854
|
+
* ran was in `lastAttempt` only.
|
|
855
|
+
*
|
|
856
|
+
* So the snapshot now FOLLOWS the attempt: provider/model are the pair being
|
|
857
|
+
* asked, the capability verdict is recomputed for THAT pair (the field asks
|
|
858
|
+
* "may the final routed model hold an agentic software task", so it must
|
|
859
|
+
* describe the model that ran), and the router's intended pair is kept once as
|
|
860
|
+
* `substitutedFor` so the substitution stays auditable instead of being erased.
|
|
861
|
+
* The first substitution wins, because that is the DECISION the walk moved away
|
|
862
|
+
* from — a later hop does not overwrite it with an intermediate pair.
|
|
863
|
+
*/
|
|
864
|
+
private noteServedRoute;
|
|
712
865
|
private routeMessageAuto;
|
|
713
866
|
/**
|
|
714
867
|
* Read multi-line input from stdin using readline.
|
package/dist/cli/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"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"}
|