@stackbone/cli 0.7.1 → 0.8.0

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/CHANGELOG.md CHANGED
@@ -7,6 +7,89 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.8.0] - 2026-11-06
11
+
12
+ ### Added
13
+
14
+ - **`stackbone build` and `dev` record each agent key's `modelRouting`.** The
15
+ model inventory now carries the `modelRouting` literal an agent and each of
16
+ its subagents write, so Studio's Models block shows the code's provider
17
+ routing next to the one an operator picks. A value OpenRouter does not take
18
+ is warned about, with its file and line.
19
+ - **Recurring jobs hides the platform's own timers.** Studio's Recurring jobs
20
+ screen now shows only the workflow crons by default; intake link polling and
21
+ the box's sweeps appear when **System entries** is on, as on Catalog, Runs and
22
+ Sessions. A banner counts the hidden ones that are overdue, not armed or
23
+ failed, so a stuck intake poll still shows. `GET /api/recurring-jobs`
24
+ returns `system` on every row; an older box leaves it out and Studio shows
25
+ the row (STA3-71).
26
+ - `stackbone dev` and `stackbone build` seed the `rag-extract` managed workflow
27
+ for Studio's document value proposals. A creator can override the default in
28
+ `workflows/rag-extract.workflow.ts` (STA3-67).
29
+ - **The box places outbound calls for `placeCall`.** A workflow's `placeCall`
30
+ opens a LiveKit room, dispatches the voice worker and dials the number
31
+ through the trunk in the box secret `LIVEKIT_SIP_OUTBOUND_TRUNK_ID`, with
32
+ `LIVEKIT_SIP_CALLER_ID` as the optional caller id. The agent's model is
33
+ warmed while the phone rings. An answered call is kept until the worker
34
+ reports its end, then the box starts the `onEnd` workflow once. A 30-second
35
+ sweep ends a call as `failed` when its room is gone past a grace period or
36
+ it outlived its call token; the sweep is a system entry on Recurring jobs.
37
+ Migration 0118 adds the calls table (STA3-56).
38
+ - **Each turn of a call is timed on the run that answered it.** The voice
39
+ worker reports the latencies of every answered turn, and the box writes them
40
+ as `voice` steps on that run (**Wait**, then **End of turn**, **Speech to
41
+ text**, **Box**, **Model first token**, **Text to speech** and **Audio
42
+ out**), which Studio draws in the run's trace. Migration 0119 stores the
43
+ latencies and 0120 adds the `voice` step type. `stackbone dev` prints one
44
+ `Voice turn` line per answered turn with the same numbers (STA3-56).
45
+ - **Hybrid search hits say which search found them.**
46
+ `POST /api/rag/collections/{name}/query` returns optional `dense_rank` and
47
+ `lexical_rank` on each hit of a hybrid `text` query: its 1-based position in
48
+ the search by meaning and in the exact-term search, before fusion. A search
49
+ that did not find the hit omits its rank; `hybrid: false`, an `embedding`
50
+ query and an older box return none. `stackbone rag query --json` shows them,
51
+ the table output does not change, and Studio's search dialog labels a hit
52
+ `meaning`, `exact` or `both` (STA3-66).
53
+ - **`rag.previousExchanges` sets how much of the call the knowledge search
54
+ reads.** A voice agent's knowledge search sends the last N exchanges of the
55
+ call (caller question and the reply they heard), oldest first, before the
56
+ caller's sentence. It takes 0 to 5 and defaults to 1, which sends the same
57
+ query as before; 0 searches the sentence alone. Studio's voice settings
58
+ override the code (STA3-76).
59
+
60
+ ### Changed
61
+
62
+ - **A voice turn's knowledge search reads the previous exchange.** A follow-up
63
+ such as "¿y los plazos?" names nothing on its own, so the search now carries
64
+ the caller's previous searched question and the reply they heard, after the
65
+ output guardrails. A filler turn, or one that failed before speaking, keeps
66
+ the exchange that held the context (STA3-64).
67
+ - **A voice agent with a knowledge collection only states facts it can
68
+ source.** Every turn of such a call adds a rule to the prompt: a price, date,
69
+ instalment, name or duration comes from the knowledge found for the turn, the
70
+ agent's instructions, a tool result, or an earlier fact of the call the
71
+ caller said or the agent sourced; otherwise the agent tells the caller an
72
+ advisor will confirm it. The rule
73
+ applies even when the search found nothing, and a turn resumed after a tool
74
+ approval keeps it, whether decided in Studio, by the timeout sweep or after a
75
+ box restart. A call without a collection sends the same prompt as before
76
+ (STA3-64).
77
+ - **Voice knowledge search fetches 5 passages by default instead of 3.** At 3,
78
+ a question that asks two things often found the answer to only one
79
+ (STA3-72).
80
+ - **Phone callers get LiveKit's telephony noise model.** Their audio is 8 kHz,
81
+ and the full-band model muffled it and held turns back. With Deepgram Flux
82
+ deciding the turn, the worker now reports how long Flux's decision took to
83
+ reach it as the end of turn, which LiveKit reports as 0 (STA3-56).
84
+
85
+ ### Fixed
86
+
87
+ - **A reply blocked by an output guardrail on a voice call speaks the refusal
88
+ phrase.** The caller used to hear the guardrail's reason read aloud. The
89
+ call's `refusalPhrase`, the same one an input guardrail speaks, now replaces
90
+ it; text chat and the run's step keep the reason. A resume with no live call
91
+ keeps the reason, since nobody hears it (STA3-59).
92
+
10
93
  ## [0.7.1] - 2026-11-04
11
94
 
12
95
  ### Added