@stackbone/cli 0.8.0 → 0.9.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,75 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.9.0] - 2026-11-10
11
+
12
+ ### Added
13
+
14
+ - **The query rewrite is a card on Studio's System screen.**
15
+ `GET /api/internal-prompts` lists the query rewrite that
16
+ `stackbone.rag.retrieve({ rewrite })` runs, with its built-in prompt and the
17
+ model it falls back to: the `defaultModel` workspace setting, else
18
+ `openai/gpt-4o-mini`. Its prompt is edited and published through
19
+ `/api/prompts` like the other System prompts, and `/api/settings` takes
20
+ `rewriteModel` and `rewriteModelProviderId` (STA3-90).
21
+ - **Voice calls play background audio.** The box sends each call's
22
+ `backgroundAudio` voice setting to the voice worker, and the worker, the one
23
+ `stackbone dev` runs too, plays an ambience under the whole call and a
24
+ thinking sound while the agent works on a reply: the knowledge search, the
25
+ wait for the model's first token and any box tool call. Before, only a chime
26
+ played, and only during tool calls. By default a call plays
27
+ `office-ambience` at 0.7 and `keyboard-typing` at 0.6. Studio's Voice tab
28
+ gets a **Background audio** group. Deploy the worker on LiveKit Cloud before
29
+ the boxes: an older worker refuses every call from a box on this release,
30
+ while the new worker takes calls from an older box and plays the defaults.
31
+
32
+ ### Changed
33
+
34
+ - **A long hybrid query finds the chunks that hold several of its words.**
35
+ `stackbone rag query`, Studio's search dialog and
36
+ `POST /api/rag/collections/{name}/query` used to need every word of the
37
+ query in one chunk, so a long query found nothing by its exact terms. A query
38
+ of up to 3 words still needs all of them. From 4 words on, a chunk needs at
39
+ least 2 of them, `eur` and greetings or sign-offs (`hola`, `gracias`,
40
+ `saludo`, `regards`…) aside, and the chunks that hold more words rank first.
41
+ The response shape does not change. Splitting a text into one search per
42
+ question is an SDK option, `stackbone.rag.retrieve({ rewrite })`, that the box
43
+ route does not take (STA3-79).
44
+ - **On an OpenRouter box a decision model rules on the input guardrails.**
45
+ The content moderation, denied topics and prompt injection checks on a user
46
+ message (chat, voice and workflow input) are decided by `jev-1.13` in one
47
+ request to OpenRouter's `/systemone` endpoint. Each of these rules takes a
48
+ `threshold` from 0 to 1, default 0.7, that a score must reach to stop the
49
+ message; a lower value stops more. A value outside 0 to 1 fails the check.
50
+ The agent's reply is still judged by the checking model, which ignores the
51
+ threshold. When the decision model errors, takes longer than 1.5 seconds or
52
+ leaves a question unscored, the checking model decides and the box log says
53
+ why. A message the decision model stops carries the reason
54
+ `the decision model flagged it`, with no scores. A box on another provider,
55
+ or with no OpenRouter key, checks as before (STA3-58).
56
+ - **The box's own models follow the model provider when nobody picked one.**
57
+ The box lists the models its provider serves at boot and after every
58
+ provider save. The guardrail, eval judge and persona simulator models nobody
59
+ picked run on their code default while the provider serves it or the listing
60
+ has not answered, and on the `defaultModel` workspace setting when the
61
+ provider does not serve it. Studio's System screen shows that default, and the
62
+ memory card shows the one `memory.add` resolves the same way.
63
+ `POST /api/rag/collections` with no embedding model saves
64
+ `openai/text-embedding-3-small` as before, unless the provider does not serve
65
+ it: then the collection gets the first embedding model the provider serves,
66
+ probed for its dimension, and a provider that lists no embedding model
67
+ answers 400 `rag_embedding_model_required`. `stackbone rag collections create`
68
+ sends no embedding model, so it gets the same answer. An OpenRouter box keeps
69
+ today's models, and a model someone picked is never replaced (STA3-82).
70
+
71
+ ### Fixed
72
+
73
+ - **Rerank works from creator code in a box.** `retrieve({ rerank })` and
74
+ `client.ai.rerank.create` call the model through the box's model provider
75
+ proxy, which had no `rerank` route and answered 404, so every rerank fell
76
+ back to search order. The proxy now forwards it to the provider's `/rerank`,
77
+ and a model pinned to a provider goes to that provider (STA3-79).
78
+
10
79
  ## [0.8.0] - 2026-11-06
11
80
 
12
81
  ### Added