@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 +83 -0
- package/main.js +2410 -615
- package/migrations/0117_rag_extract_fields.sql +3 -0
- package/migrations/0118_voice_outbound_calls.sql +29 -0
- package/migrations/0119_voice_call_metrics.sql +20 -0
- package/migrations/0120_run_steps_voice.sql +19 -0
- package/migrations/0121_model_routing.sql +28 -0
- package/package.json +1 -1
- package/stackbone-cli-0.8.0.tgz +0 -0
- package/voice-worker/main.js +232 -61
- package/voice-worker/main.js.map +4 -4
- package/stackbone-cli-0.7.1.tgz +0 -0
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
|