Rename force collaboration flag

This commit is contained in:
Charles Cunningham
2026-01-31 11:56:36 -08:00
parent 98179dd3ff
commit 5b4550d7d7
2 changed files with 30 additions and 24 deletions

View File

@@ -1407,10 +1407,11 @@ impl Session {
&self,
previous_collaboration_mode: &CollaborationMode,
next_collaboration_mode: Option<&CollaborationMode>,
force_collaboration_instructions: bool,
force_inject_collaboration_instructions: bool,
) -> Option<ResponseItem> {
if let Some(next_mode) = next_collaboration_mode {
if !force_collaboration_instructions && previous_collaboration_mode == next_mode {
if !force_inject_collaboration_instructions && previous_collaboration_mode == next_mode
{
return None;
}
// If the next mode has empty developer instructions, this returns None and we emit no
@@ -1427,7 +1428,7 @@ impl Session {
current_context: &TurnContext,
previous_collaboration_mode: &CollaborationMode,
next_collaboration_mode: Option<&CollaborationMode>,
force_collaboration_instructions: bool,
force_inject_collaboration_instructions: bool,
) -> Vec<ResponseItem> {
let mut update_items = Vec::new();
if let Some(env_item) =
@@ -1443,7 +1444,7 @@ impl Session {
if let Some(collaboration_mode_item) = self.build_collaboration_mode_update_item(
previous_collaboration_mode,
next_collaboration_mode,
force_collaboration_instructions,
force_inject_collaboration_instructions,
) {
update_items.push(collaboration_mode_item);
}
@@ -2739,10 +2740,10 @@ mod handlers {
}
let current_context = sess.new_default_turn_with_sub_id(sub_id).await;
let force_collaboration_instructions = {
let force_inject_collaboration_instructions = {
let mut state = sess.state.lock().await;
let force = state.force_collaboration_instructions;
state.force_collaboration_instructions = false;
let force = state.force_inject_collaboration_instructions;
state.force_inject_collaboration_instructions = false;
force
};
let update_items = sess.build_settings_update_items(
@@ -2750,7 +2751,7 @@ mod handlers {
&current_context,
&previous_collaboration_mode,
next_collaboration_mode.as_ref(),
force_collaboration_instructions,
force_inject_collaboration_instructions,
);
if !update_items.is_empty() {
sess.record_conversation_items(&current_context, &update_items)
@@ -2826,10 +2827,10 @@ mod handlers {
// Attempt to inject input into current task
if let Err(items) = sess.inject_input(items).await {
sess.seed_initial_context_if_needed(&current_context).await;
let force_collaboration_instructions = {
let force_inject_collaboration_instructions = {
let mut state = sess.state.lock().await;
let force = state.force_collaboration_instructions;
state.force_collaboration_instructions = false;
let force = state.force_inject_collaboration_instructions;
state.force_inject_collaboration_instructions = false;
force
};
let update_items = sess.build_settings_update_items(
@@ -2837,7 +2838,7 @@ mod handlers {
&current_context,
&previous_collaboration_mode,
next_collaboration_mode.as_ref(),
force_collaboration_instructions,
force_inject_collaboration_instructions,
);
if !update_items.is_empty() {
sess.record_conversation_items(&current_context, &update_items)
@@ -3167,7 +3168,7 @@ mod handlers {
state.session_configuration.collaboration_mode = collaboration_mode;
applied = true;
}
state.force_collaboration_instructions = !applied;
state.force_inject_collaboration_instructions = !applied;
}
sess.recompute_token_usage(turn_context.as_ref()).await;
@@ -5169,13 +5170,13 @@ mod tests {
let rollback_event = wait_for_thread_rolled_back(&rx).await;
assert_eq!(rollback_event.num_turns, 1);
let force_collaboration_instructions = {
let force_inject_collaboration_instructions = {
let mut state = sess.state.lock().await;
let force = state.force_collaboration_instructions;
state.force_collaboration_instructions = false;
let force = state.force_inject_collaboration_instructions;
state.force_inject_collaboration_instructions = false;
force
};
assert!(force_collaboration_instructions);
assert!(force_inject_collaboration_instructions);
let current_context = sess.new_default_turn_with_sub_id("sub-2".to_string()).await;
let previous_collaboration_mode = {
@@ -5187,7 +5188,7 @@ mod tests {
&current_context,
&previous_collaboration_mode,
Some(&previous_collaboration_mode),
force_collaboration_instructions,
force_inject_collaboration_instructions,
);
let expected_item: ResponseItem =
DeveloperInstructions::from_collaboration_mode(&previous_collaboration_mode)
@@ -5252,10 +5253,10 @@ mod tests {
let rollback_event = wait_for_thread_rolled_back(&rx).await;
pretty_assertions::assert_eq!(rollback_event.num_turns, 1);
let (collaboration_mode, force_collaboration_instructions) = {
let (collaboration_mode, force_inject_collaboration_instructions) = {
let mut state = sess.state.lock().await;
let force = state.force_collaboration_instructions;
state.force_collaboration_instructions = false;
let force = state.force_inject_collaboration_instructions;
state.force_inject_collaboration_instructions = false;
(
state.session_configuration.collaboration_mode.clone(),
force,
@@ -5263,7 +5264,7 @@ mod tests {
};
pretty_assertions::assert_eq!(collaboration_mode, code_mode);
assert!(force_collaboration_instructions);
assert!(force_inject_collaboration_instructions);
}
#[tokio::test]

View File

@@ -17,7 +17,12 @@ pub(crate) struct SessionState {
pub(crate) session_configuration: SessionConfiguration,
pub(crate) history: ContextManager,
pub(crate) turn_context_history: Vec<Option<TurnContextItem>>,
pub(crate) force_collaboration_instructions: bool,
/// Force a developer-instruction update for collaboration mode on the next turn.
///
/// This is set when rollback/backtrack lacks a reliable turn context for the latest user turn,
/// so core should re-emit the collaboration developer instructions even if the mode is
/// unchanged.
pub(crate) force_inject_collaboration_instructions: bool,
pub(crate) latest_rate_limits: Option<RateLimitSnapshot>,
pub(crate) server_reasoning_included: bool,
pub(crate) dependency_env: HashMap<String, String>,
@@ -37,7 +42,7 @@ impl SessionState {
session_configuration,
history,
turn_context_history: Vec::new(),
force_collaboration_instructions: false,
force_inject_collaboration_instructions: false,
latest_rate_limits: None,
server_reasoning_included: false,
dependency_env: HashMap::new(),