Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
4f8af3a
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
3cae4c9
fix(test): update session test to use correct assertion
senamakel Sep 22, 2026
d805ccc
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
a10c4d6
fix(session): handle empty transcript in session creation
senamakel Sep 22, 2026
56239ff
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
609c577
fix(transcript): handle missing path segments in transcript paths
senamakel Sep 22, 2026
db531d7
chore(tests): add session transcript test file
senamakel Sep 22, 2026
b622720
fix(transcript): handle empty transcript in types
senamakel Sep 22, 2026
3d02a81
chore: files changed crates/tinyagents-integration-tests/tests/featur…
senamakel Sep 22, 2026
d55fb60
fix: add missing line break before struct literal in seven functions
senamakel Sep 22, 2026
748f26c
fix(transcript): handle empty JSONL files without error
senamakel Sep 22, 2026
f5b4642
fix(transcript): populate session_id and parent_session_id in meta_fr…
senamakel Sep 22, 2026
704d7da
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
7d03ac8
feat(transcript): implement session lifecycle methods for FileTranscr…
senamakel Sep 22, 2026
3941cfd
test(transcript): add session identity and compaction tests
senamakel Sep 22, 2026
3f0dedd
fix(transcript): handle empty adoption list in adoption module
senamakel Sep 22, 2026
203231d
fix(test): update adoption test to use correct session ID
senamakel Sep 22, 2026
6b10b28
feat(transcript): add adoption module for legacy transcript folding
senamakel Sep 22, 2026
357a727
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
9bd7298
feat(transcript): separate retained message injection from generation…
senamakel Sep 22, 2026
c0dba1b
test(transcript): add adoption tests for legacy OpenHuman transcript …
senamakel Sep 22, 2026
7692d45
fix(test): remove unnecessary Option wrapper in test assertion
senamakel Sep 22, 2026
1f57bd7
fix(types): remove unused import of std::collections::HashMap
senamakel Sep 22, 2026
a2d8f5d
chore(types): remove unused import of `std::collections::HashMap`
senamakel Sep 22, 2026
3c2bf3e
fix(types): remove unused import of std::collections::HashMap
senamakel Sep 22, 2026
55082e8
fix(session): handle missing session state on resume
senamakel Sep 22, 2026
e4cb828
feat(transcript): add legacy session adoption to TranscriptLocator
senamakel Sep 22, 2026
cf8ade9
fix(session): handle missing session state on resume
senamakel Sep 22, 2026
2bb476d
fix(runtime): add SessionRef import to session module
senamakel Sep 22, 2026
8e54605
refactor(session): replace verbose legacy adoption with a best-effort…
senamakel Sep 22, 2026
7a11f1a
chore: files changed crates/tinyagents-runtime/src/builder.rs
senamakel Sep 22, 2026
d175708
feat(session): detect compaction and seal session-bound transcripts
senamakel Sep 22, 2026
aa27714
test(runtime): add session-aware transcript locator to test harness
senamakel Sep 22, 2026
c14da24
fix(runtime): add missing SessionRef import in test module
senamakel Sep 22, 2026
a321e34
test(runtime): add session-identity resume and compaction tests
senamakel Sep 22, 2026
d38e1d5
refactor(test): rename outcome helper to session_outcome
senamakel Sep 22, 2026
4b63f7b
chore: reformat code for consistent style across transcript modules
senamakel Sep 22, 2026
1f7dd3d
fix(test): simplify session_outcome return type
senamakel Sep 22, 2026
c5b1bd0
feat(transcript): add session_chain method to TranscriptLocator
senamakel Sep 22, 2026
55b920d
refactor(session): extract first_generation helper from inline constr…
senamakel Sep 22, 2026
69008ca
test(transcript): add test for session chain listing all generations
senamakel Sep 22, 2026
f657796
fix(transcript): handle empty session transcript gracefully
senamakel Sep 22, 2026
8d3b0c4
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
107657c
fix(session): handle empty transcript in session creation
senamakel Sep 22, 2026
a79e2a6
chore: remove unused import in session_test.rs
senamakel Sep 22, 2026
0482c17
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
026f1ef
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
b871688
fix(types): remove unused import of `std::fmt`
senamakel Sep 22, 2026
75763cc
fix(types): remove unused import of `std::sync::Arc`
senamakel Sep 22, 2026
5812fb7
fix(session): handle missing session state on resume
senamakel Sep 22, 2026
7db1bbb
fix(session): handle missing session state on resume
senamakel Sep 22, 2026
2827bb3
fix(session): handle missing session state on resume
senamakel Sep 22, 2026
a899c6c
chore(deps): update serde_json dependency to 1.0.128
senamakel Sep 22, 2026
86fa5d6
chore(deps): add tracing dependency to Cargo.lock
senamakel Sep 22, 2026
e33ab88
fix(session): handle missing session state on resume
senamakel Sep 22, 2026
b562f46
fix(transcript): handle empty transcript in writer
senamakel Sep 22, 2026
309e373
fix(transcript): handle empty transcript in writer
senamakel Sep 22, 2026
27859c1
chore: Based on the provided information, there is no diff content to…
senamakel Sep 22, 2026
eb7a69c
fix(transcript): handle empty adoption list in adoption module
senamakel Sep 22, 2026
b60674e
fix(transcript): correct adoption test to verify agent message handling
senamakel Sep 22, 2026
a978489
fix(test): update adoption test to verify session transcript behavior
senamakel Sep 22, 2026
0e91a7e
fix(transcript): correct adoption test to verify agent identity
senamakel Sep 22, 2026
b8ce2e0
fix(test): update session test to verify message ordering
senamakel Sep 22, 2026
75aec15
fix(transcript): correct test assertion for empty transcript
senamakel Sep 22, 2026
22ec19e
fix(session): correct transcript test to verify message ordering
senamakel Sep 22, 2026
1eb89d1
fix(session): correct transcript test to verify message ordering
senamakel Sep 22, 2026
f196147
fix(test): update test to verify new runtime behavior
senamakel Sep 22, 2026
db91736
fix(runtime): remove unused test module
senamakel Sep 22, 2026
c3d15f6
fix(test): update test to use correct assertion macro
senamakel Sep 22, 2026
3270300
fix(test): remove unused import in test module
senamakel Sep 22, 2026
0aff394
fix(session): handle empty transcript in session creation
senamakel Sep 22, 2026
7f3a2ee
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
7238667
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
c2fe604
fix(transcript): inline format string in atomic_write
senamakel Sep 22, 2026
b8a157b
fix(session): correct test assertion for session transcript
senamakel Sep 22, 2026
af769a7
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
e35c9c9
fix(session): handle empty transcript in session creation
senamakel Sep 22, 2026
e7b3b7a
fix(session): handle empty transcript in session creation
senamakel Sep 22, 2026
63e2c4d
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
e23695c
fix(transcript): handle empty transcript in writer
senamakel Sep 22, 2026
38b0c4e
fix(transcript): handle empty transcript in writer
senamakel Sep 22, 2026
d45d9cf
fix(transcript): handle empty transcript in writer
senamakel Sep 22, 2026
c7421d3
fix(transcript): handle empty adoption list without panic
senamakel Sep 22, 2026
865bccf
fix(transcript): handle empty adoption list in adoption check
senamakel Sep 22, 2026
e6e54dc
fix(transcript): correct adoption test to verify agent state after ad…
senamakel Sep 22, 2026
3e98206
fix(transcript): handle empty transcript in summarization
senamakel Sep 22, 2026
5a15ae7
fix(transcript): correct test assertion for empty transcript
senamakel Sep 22, 2026
1f3857f
fix(transcript): correct adoption test to verify agent adoption
senamakel Sep 22, 2026
2c1fe9e
fix(transcript): correct adoption test to verify agent state after ad…
senamakel Sep 22, 2026
969da9c
fix(session): handle missing session state on resume
senamakel Sep 22, 2026
c1c5197
test(runtime): add test for thread resume not corrupting session-boun…
senamakel Sep 22, 2026
89d74e7
fix(session): disable session persistence on resume
senamakel Sep 22, 2026
ad3c344
fix(runtime): restore session persistence guard condition
senamakel Sep 22, 2026
9de5186
fix(runtime): correct test assertion for agent response
senamakel Sep 22, 2026
91fb04a
fix(session): disable persisted transcript update on resume
senamakel Sep 22, 2026
33ae5c1
fix(runtime): correct session persistence guard condition
senamakel Sep 22, 2026
a3b3d0a
chore(transcript): reformat long lines for readability
senamakel Sep 22, 2026
041dd48
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
9dd46ce
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
c8d7580
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
e8b8f6b
chore(transcript): reformat lock acquisition in history methods
senamakel Sep 22, 2026
c17b614
fix(transcript): handle empty adoption list in adoption check
senamakel Sep 22, 2026
4a3703c
fix(transcript): correct adoption test to verify session state after …
senamakel Sep 22, 2026
e1a8e8f
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
d5b470e
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
3da9389
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
2892d46
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
ee4e7c1
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
27ddbc1
fix(transcript): handle empty session transcript gracefully
senamakel Sep 22, 2026
278e6c9
fix(transcript): handle empty session transcript gracefully
senamakel Sep 22, 2026
459b4db
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
626cf33
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
88b4cb4
fix(session): use session_stem for parent stem in child sessions
senamakel Sep 22, 2026
d886604
fix(session): use bounded parent stem for child sessions
senamakel Sep 22, 2026
7b86fca
chore(transcript): remove trailing blank line in FileTranscriptHistory
senamakel Sep 22, 2026
8eca400
feat(session): expose unreadable-file flag in thread transcript lookup
senamakel Sep 22, 2026
aa0eb43
fix(transcript): handle empty adoption list in adoption module
senamakel Sep 22, 2026
7693f84
fix(transcript): handle empty adoption list in adoption module
senamakel Sep 22, 2026
4c98e04
fix(transcript): correct adoption test to verify session state after …
senamakel Sep 22, 2026
fa55cca
fix(transcript): handle empty transcript in writer
senamakel Sep 22, 2026
ab19d5c
fix(transcript): handle empty transcript in writer
senamakel Sep 22, 2026
493a2cc
fix(transcript): handle empty history in session transcript
senamakel Sep 22, 2026
b7349b6
fix(transcript): correct test assertion for empty transcript
senamakel Sep 22, 2026
a50a9cb
fix(test): update test to use correct assertion macro
senamakel Sep 22, 2026
414f148
chore: reformat long method chains and function calls
senamakel Sep 22, 2026
4dde8c4
fix(session): handle empty session state on deserialization
senamakel Sep 22, 2026
3b89f7e
fix(test): update test to use correct assertion for empty state
senamakel Sep 22, 2026
9d91287
chore(session): remove dead code in session rebind logic
senamakel Sep 22, 2026
569bece
feat(session): resolve head generation for all resume modes
senamakel Sep 22, 2026
47908a4
fix(session): disable dead branch in session rebinding
senamakel Sep 22, 2026
37fe5ea
fix(session): remove dead branch condition in rebind logic
senamakel Sep 22, 2026
ba59d9f
fix(test): update test to use correct assertion for empty state
senamakel Sep 22, 2026
6f8fd55
fix(session): disable dead branch in session rebind logic
senamakel Sep 22, 2026
f131996
fix(session): remove dead branch condition in rebind logic
senamakel Sep 22, 2026
2ff6e39
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
887d5b1
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
62e968b
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
8a2252b
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
ff00e52
fix(test): update session test to verify new transcript behavior
senamakel Sep 22, 2026
04c5d21
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
a5bb9f9
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
b5be9d2
fix(session): handle empty transcript in session initialization
senamakel Sep 22, 2026
892cddb
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
206c4af
fix(test): update session test to verify message ordering
senamakel Sep 22, 2026
dc742af
fix(session): correct test assertion for empty transcript
senamakel Sep 22, 2026
3e518d1
fix(test): update session test to verify new timeout behavior
senamakel Sep 22, 2026
e24f3b3
fix(test): update session test to verify new timeout behavior
senamakel Sep 22, 2026
68a4a08
fix(session): handle missing session state on resume
senamakel Sep 23, 2026
b441b42
fix(session): handle missing session state on resume
senamakel Sep 23, 2026
7d6efd0
feat(runtime): add test module for runtime functionality
senamakel Sep 23, 2026
9f262c2
fix(test): remove unused import in test.rs
senamakel Sep 23, 2026
e0d2a48
fix(test): update test to use correct assertion macro
senamakel Sep 23, 2026
4de63c1
fix(test): update test to use correct assertion for error case
senamakel Sep 23, 2026
560c809
fix(session): skip reloading target meta on transcript destination
senamakel Sep 23, 2026
83ea630
fix(session): reload target meta when switching transcripts
senamakel Sep 23, 2026
5d09627
fix(session): handle empty transcript in writer
senamakel Sep 23, 2026
edd41c6
fix(transcript): handle missing session id in writer
senamakel Sep 23, 2026
e2e9f64
fix(thread_lookup): handle missing thread in lookup
senamakel Sep 23, 2026
2a88324
fix(thread_lookup): handle missing thread in lookup
senamakel Sep 23, 2026
c7499b7
fix(thread_lookup): handle missing thread in lookup
senamakel Sep 23, 2026
0f7f426
fix(session): correct transcript test to use valid session ID
senamakel Sep 23, 2026
3ad7006
fix(session): handle empty transcript in session initialization
senamakel Sep 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ use tinyagents_session::transcript::{

fn meta(turn_count: usize, input_tokens: u64, output_tokens: u64) -> TranscriptMeta {
TranscriptMeta {
session_id: None,
parent_session_id: None,
agent_name: "researcher".into(),
agent_id: Some("researcher-v1".into()),
agent_type: Some("root".into()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ fn run_ledger_satisfies_the_conformance_suite_on_a_second_independent_workspace(

fn contract_meta() -> TranscriptMeta {
TranscriptMeta {
session_id: None,
parent_session_id: None,
agent_name: "contract-agent".to_string(),
agent_id: Some("contract-agent-id".to_string()),
agent_type: Some("root".to_string()),
Expand Down
1 change: 1 addition & 0 deletions crates/tinyagents-runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ tinyagents-session = { path = "../tinyagents-session", version = "2.1.2" }
tinyinference-llm = { path = "../../vendor/tinyinference/crates/tinyinference-llm", version = "0.3.0" }
tinytools = { path = "../../vendor/tinytools/crates/tinytools", version = "0.4.1" }
tokio = { workspace = true, features = ["macros", "rt", "sync"] }
tracing = { workspace = true }

[dev-dependencies]
anyhow = { workspace = true }
Expand Down
45 changes: 43 additions & 2 deletions crates/tinyagents-runtime/src/builder.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::sync::Arc;

use tinyagents_session::transcript::{TranscriptLocator, TranscriptMeta};
use tinyagents_session::transcript::{SessionRef, TranscriptLocator, TranscriptMeta, session_stem};

use crate::{
NoopSessionHooks, PrefixSnapshot, RuntimeError, Session, SessionDriver, SessionHooks,
Expand All @@ -20,6 +20,8 @@ pub struct SessionBuilder<C: Clone + Send + Sync + 'static = ()> {
struct TranscriptConfig {
locator: Arc<dyn TranscriptLocator>,
stem: String,
session: Option<SessionRef>,
resume_agent: Option<String>,
meta: TranscriptMeta,
}

Expand Down Expand Up @@ -71,18 +73,57 @@ impl<C: Clone + Send + Sync + 'static> SessionBuilder<C> {
self.transcript = Some(TranscriptConfig {
locator,
stem: stem.into(),
session: None,
resume_agent: None,
meta,
});
self
}

/// Enables persistence addressed by durable session identity.
///
/// Prefer this over [`Self::transcript`]: the stem it derives is stable
/// across processes and launches, so one conversation stays in one
/// transcript instead of accumulating a file per cold boot. It is also what
/// [`ResumeMode::Session`](crate::ResumeMode::Session) resolves against.
pub fn session(
mut self,
locator: Arc<dyn TranscriptLocator>,
session: SessionRef,
mut meta: TranscriptMeta,
) -> Self {
meta.session_id = Some(session.session_id());
meta.parent_session_id = session.parent_session_id();
self.transcript = Some(TranscriptConfig {
locator,
stem: session_stem(&session),
session: Some(session),
resume_agent: None,
meta,
});
self
}

/// Uses a distinct agent key for `ResumeMode::LatestForAgent` lookup.
///
/// Previously reachable only through a hook-supplied `ResumePreparation`,
/// which meant a host that simply wanted a different resume key had to
/// implement a hook to say so.
pub fn resume_agent(mut self, resume_agent: impl Into<String>) -> Self {
Comment thread
senamakel marked this conversation as resolved.
if let Some(config) = self.transcript.as_mut() {
config.resume_agent = Some(resume_agent.into());
}
self
}

/// Builds a session. A codec is required only when transcript persistence
/// or transcript resume is configured.
pub fn build(self) -> Result<Session<C>, RuntimeError> {
let target = self.transcript.map(|config| crate::TranscriptTarget {
locator: config.locator,
stem: config.stem,
resume_agent: None,
resume_agent: config.resume_agent,
session: config.session,
meta: config.meta,
});
if target.is_some() && self.codec.is_none() {
Expand Down
Loading
Loading