Commit 2dd28b8
committed
feat(conversation): Introduce turn markers and stream sanitization
This commit introduces a structured turn model and robust stream
sanitization to `jp_conversation`. A new `TurnStart` event kind is
used to group sequences of events within a single query invocation,
enabling better navigation and filtering of conversation history.
The `EventBuilder` is added to handle the accumulation of partial LLM
stream chunks into complete `ConversationEvent` objects, supporting
interleaved reasoning, message, and structured output parts.
To improve privacy and prevent sensitive data from leaking into
workspace search results, a storage-level encoding layer has been
implemented. Tool arguments, results, and metadata are now base64-encoded
when persisted to disk, while remaining transparent to the rest of the
application.
Additionally, the `ConversationStream` now includes a `sanitize` process
to repair structural invariants that may be violated after filtering or
interrupted tool executions. This includes injecting synthetic error
responses for orphaned tool calls and re-indexing turn markers.
The `Thread` model has also been updated to replace the concept of
"instructions" with "sections", providing a more flexible way to
render context before sending it to providers.
Signed-off-by: Jean Mertz <git@jeanmertz.com>1 parent 26d2926 commit 2dd28b8
File tree
18 files changed
+2465
-289
lines changed- crates/jp_conversation
- src
- event
- snapshots
18 files changed
+2465
-289
lines changedSome generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
20 | | - | |
| 19 | + | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
27 | 26 | | |
28 | 27 | | |
29 | 28 | | |
| 29 | + | |
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | | - | |
11 | 10 | | |
12 | 11 | | |
13 | 12 | | |
| |||
28 | 27 | | |
29 | 28 | | |
30 | 29 | | |
31 | | - | |
| 30 | + | |
32 | 31 | | |
33 | 32 | | |
34 | 33 | | |
| |||
110 | 109 | | |
111 | 110 | | |
112 | 111 | | |
113 | | - | |
| 112 | + | |
114 | 113 | | |
115 | 114 | | |
116 | 115 | | |
| |||
236 | 235 | | |
237 | 236 | | |
238 | 237 | | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
243 | 238 | | |
244 | 239 | | |
245 | 240 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
16 | | - | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
17 | 21 | | |
| 22 | + | |
18 | 23 | | |
19 | 24 | | |
20 | 25 | | |
| |||
32 | 37 | | |
33 | 38 | | |
34 | 39 | | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
| 40 | + | |
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
| |||
305 | 306 | | |
306 | 307 | | |
307 | 308 | | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
308 | 333 | | |
309 | 334 | | |
310 | 335 | | |
311 | 336 | | |
312 | 337 | | |
313 | 338 | | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
314 | 346 | | |
315 | 347 | | |
316 | 348 | | |
| |||
353 | 385 | | |
354 | 386 | | |
355 | 387 | | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
356 | 404 | | |
357 | 405 | | |
358 | 406 | | |
| |||
389 | 437 | | |
390 | 438 | | |
391 | 439 | | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
392 | 446 | | |
393 | 447 | | |
394 | 448 | | |
| |||
424 | 478 | | |
425 | 479 | | |
426 | 480 | | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
0 commit comments