diff --git a/crates/executors/src/executors/amp.rs b/crates/executors/src/executors/amp.rs index b69b08e8..088d12c6 100644 --- a/crates/executors/src/executors/amp.rs +++ b/crates/executors/src/executors/amp.rs @@ -26,6 +26,7 @@ use crate::{ #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] pub struct Amp { pub command: CommandBuilder, + pub append_prompt: Option, } #[async_trait] @@ -38,6 +39,8 @@ impl StandardCodingAgentExecutor for Amp { let (shell_cmd, shell_arg) = get_shell_command(); let amp_command = self.command.build_initial(); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -52,7 +55,7 @@ impl StandardCodingAgentExecutor for Amp { // feed the prompt in, then close the pipe so `amp` sees EOF if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await.unwrap(); + stdin.write_all(combined_prompt.as_bytes()).await.unwrap(); stdin.shutdown().await.unwrap(); // or `drop(stdin);` } @@ -73,6 +76,8 @@ impl StandardCodingAgentExecutor for Amp { session_id.to_string(), ]); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -87,7 +92,7 @@ impl StandardCodingAgentExecutor for Amp { // Feed the prompt in, then close the pipe so amp sees EOF if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } diff --git a/crates/executors/src/executors/claude.rs b/crates/executors/src/executors/claude.rs index e8ee708a..d1ad4fae 100644 --- a/crates/executors/src/executors/claude.rs +++ b/crates/executors/src/executors/claude.rs @@ -28,6 +28,7 @@ use crate::{ #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] pub struct ClaudeCode { pub command: CommandBuilder, + pub append_prompt: Option, pub plan: bool, } @@ -46,6 +47,8 @@ impl StandardCodingAgentExecutor for ClaudeCode { self.command.build_initial() }; + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -60,7 +63,7 @@ impl StandardCodingAgentExecutor for ClaudeCode { // Feed the prompt in, then close the pipe so Claude sees EOF if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } @@ -85,6 +88,8 @@ impl StandardCodingAgentExecutor for ClaudeCode { .build_follow_up(&["--resume".to_string(), session_id.to_string()]) }; + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -99,7 +104,7 @@ impl StandardCodingAgentExecutor for ClaudeCode { // Feed the followup prompt in, then close the pipe if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } @@ -934,6 +939,7 @@ mod tests { let executor = ClaudeCode { command: CommandBuilder::new(""), plan: false, + append_prompt: None, }; let msg_store = Arc::new(MsgStore::new()); let current_dir = std::path::PathBuf::from("/tmp/test-worktree"); diff --git a/crates/executors/src/executors/codex.rs b/crates/executors/src/executors/codex.rs index f4487c33..bf8918f5 100644 --- a/crates/executors/src/executors/codex.rs +++ b/crates/executors/src/executors/codex.rs @@ -108,6 +108,7 @@ impl SessionHandler { #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] pub struct Codex { pub command: CommandBuilder, + pub append_prompt: Option, } #[async_trait] @@ -120,6 +121,8 @@ impl StandardCodingAgentExecutor for Codex { let (shell_cmd, shell_arg) = get_shell_command(); let codex_command = self.command.build_initial(); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -136,7 +139,7 @@ impl StandardCodingAgentExecutor for Codex { // Feed the prompt in, then close the pipe so codex sees EOF if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } @@ -161,6 +164,8 @@ impl StandardCodingAgentExecutor for Codex { format!("experimental_resume={}", rollout_file_path.display()), ]); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -177,7 +182,7 @@ impl StandardCodingAgentExecutor for Codex { // Feed the prompt in, then close the pipe so codex sees EOF if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } diff --git a/crates/executors/src/executors/cursor.rs b/crates/executors/src/executors/cursor.rs index 0bfa3995..70b64e8d 100644 --- a/crates/executors/src/executors/cursor.rs +++ b/crates/executors/src/executors/cursor.rs @@ -31,6 +31,7 @@ use crate::{ #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] pub struct Cursor { pub command: CommandBuilder, + pub append_prompt: Option, } #[async_trait] @@ -43,6 +44,8 @@ impl StandardCodingAgentExecutor for Cursor { let (shell_cmd, shell_arg) = get_shell_command(); let agent_cmd = self.command.build_initial(); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -56,7 +59,7 @@ impl StandardCodingAgentExecutor for Cursor { let mut child = command.group_spawn()?; if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } @@ -74,6 +77,8 @@ impl StandardCodingAgentExecutor for Cursor { .command .build_follow_up(&["--resume".to_string(), session_id.to_string()]); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -87,7 +92,7 @@ impl StandardCodingAgentExecutor for Cursor { let mut child = command.group_spawn()?; if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } @@ -782,6 +787,7 @@ mod tests { // Avoid relying on feature flag in tests; construct with a dummy command let executor = Cursor { command: CommandBuilder::new(""), + append_prompt: None, }; let msg_store = Arc::new(MsgStore::new()); let current_dir = std::path::PathBuf::from("/tmp/test-worktree"); diff --git a/crates/executors/src/executors/gemini.rs b/crates/executors/src/executors/gemini.rs index b6543a62..3ecf43c3 100644 --- a/crates/executors/src/executors/gemini.rs +++ b/crates/executors/src/executors/gemini.rs @@ -26,6 +26,7 @@ use crate::{ #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] pub struct Gemini { pub command: CommandBuilder, + pub append_prompt: Option, } #[async_trait] @@ -38,8 +39,9 @@ impl StandardCodingAgentExecutor for Gemini { let (shell_cmd, shell_arg) = get_shell_command(); let gemini_command = self.command.build_initial(); - let mut command = Command::new(shell_cmd); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) .stdin(Stdio::piped()) @@ -54,7 +56,7 @@ impl StandardCodingAgentExecutor for Gemini { // Write prompt to stdin if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } @@ -77,7 +79,7 @@ impl StandardCodingAgentExecutor for Gemini { _session_id: &str, ) -> Result { // Build comprehensive prompt with session context - let followup_prompt = Self::build_followup_prompt(current_dir, prompt).await?; + let followup_prompt = self.build_followup_prompt(current_dir, prompt).await?; let (shell_cmd, shell_arg) = get_shell_command(); let gemini_command = self.command.build_follow_up(&[]); @@ -274,6 +276,7 @@ impl Gemini { /// Build comprehensive prompt with session context for follow-up execution async fn build_followup_prompt( + &self, current_dir: &PathBuf, prompt: &str, ) -> Result { @@ -298,8 +301,9 @@ The following is the conversation history from this session: {prompt} === INSTRUCTIONS === -You are continuing work on the above task. The execution history shows the previous conversation in this session. Please continue from where the previous execution left off, taking into account all the context provided above. -"# +You are continuing work on the above task. The execution history shows the previous conversation in this session. Please continue from where the previous execution left off, taking into account all the context provided above.{} +"#, + self.append_prompt.clone().unwrap_or_default(), )) } diff --git a/crates/executors/src/executors/opencode.rs b/crates/executors/src/executors/opencode.rs index 6457b8bc..49bf0ab8 100644 --- a/crates/executors/src/executors/opencode.rs +++ b/crates/executors/src/executors/opencode.rs @@ -28,6 +28,7 @@ use crate::{ #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] pub struct Opencode { pub command: CommandBuilder, + pub append_prompt: Option, } #[async_trait] @@ -40,6 +41,8 @@ impl StandardCodingAgentExecutor for Opencode { let (shell_cmd, shell_arg) = get_shell_command(); let opencode_command = self.command.build_initial(); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -55,7 +58,7 @@ impl StandardCodingAgentExecutor for Opencode { // Write prompt to stdin if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } @@ -73,6 +76,8 @@ impl StandardCodingAgentExecutor for Opencode { .command .build_follow_up(&["--session".to_string(), session_id.to_string()]); + let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt); + let mut command = Command::new(shell_cmd); command .kill_on_drop(true) @@ -88,7 +93,7 @@ impl StandardCodingAgentExecutor for Opencode { // Write prompt to stdin if let Some(mut stdin) = child.inner().stdin.take() { - stdin.write_all(prompt.as_bytes()).await?; + stdin.write_all(combined_prompt.as_bytes()).await?; stdin.shutdown().await?; } diff --git a/crates/local-deployment/src/container.rs b/crates/local-deployment/src/container.rs index 6ca188d8..57e59857 100644 --- a/crates/local-deployment/src/container.rs +++ b/crates/local-deployment/src/container.rs @@ -1014,17 +1014,17 @@ impl LocalContainerService { for msg in history.iter().rev() { if let LogMsg::JsonPatch(patch) = msg { // Try to extract a NormalizedEntry from the patch - if let Some(entry) = self.extract_normalized_entry_from_patch(patch) { - if matches!(entry.entry_type, NormalizedEntryType::AssistantMessage) { - let content = entry.content.trim(); - if !content.is_empty() { - // Truncate to reasonable size (4KB as Oracle suggested) - const MAX_SUMMARY_LENGTH: usize = 4096; - if content.len() > MAX_SUMMARY_LENGTH { - return Some(format!("{}...", &content[..MAX_SUMMARY_LENGTH])); - } - return Some(content.to_string()); + if let Some(entry) = self.extract_normalized_entry_from_patch(patch) + && matches!(entry.entry_type, NormalizedEntryType::AssistantMessage) + { + let content = entry.content.trim(); + if !content.is_empty() { + // Truncate to reasonable size (4KB as Oracle suggested) + const MAX_SUMMARY_LENGTH: usize = 4096; + if content.len() > MAX_SUMMARY_LENGTH { + return Some(format!("{}...", &content[..MAX_SUMMARY_LENGTH])); } + return Some(content.to_string()); } } } @@ -1039,22 +1039,19 @@ impl LocalContainerService { patch: &json_patch::Patch, ) -> Option { // Convert the patch to JSON to examine its structure - if let Ok(patch_json) = serde_json::to_value(patch) { - if let Some(operations) = patch_json.as_array() { - for operation in operations { - if let Some(value) = operation.get("value") { - // Try to extract a NormalizedEntry from the value - if let Some(patch_type) = value.get("type").and_then(|t| t.as_str()) { - if patch_type == "NORMALIZED_ENTRY" { - if let Some(content) = value.get("content") { - if let Ok(entry) = - serde_json::from_value::(content.clone()) - { - return Some(entry); - } - } - } - } + if let Ok(patch_json) = serde_json::to_value(patch) + && let Some(operations) = patch_json.as_array() + { + for operation in operations { + if let Some(value) = operation.get("value") { + // Try to extract a NormalizedEntry from the value + if let Some(patch_type) = value.get("type").and_then(|t| t.as_str()) + && patch_type == "NORMALIZED_ENTRY" + && let Some(content) = value.get("content") + && let Ok(entry) = + serde_json::from_value::(content.clone()) + { + return Some(entry); } } } diff --git a/crates/utils/src/text.rs b/crates/utils/src/text.rs index 94831b04..fe5a315b 100644 --- a/crates/utils/src/text.rs +++ b/crates/utils/src/text.rs @@ -22,3 +22,10 @@ pub fn short_uuid(u: &Uuid) -> String { let full = u.simple().to_string(); full.chars().take(4).collect() // grab the first 4 chars } + +pub fn combine_prompt(append: &Option, prompt: &str) -> String { + match append { + Some(append) => format!("{prompt}{append}"), + None => prompt.to_string(), + } +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 071ff068..5cf412f3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -63,7 +63,7 @@ "postcss": "^8.4.32", "prettier": "^3.6.1", "tailwindcss": "^3.4.0", - "typescript": "^5.2.2", + "typescript": "^5.9.2", "vite": "^5.0.8" } }, @@ -7514,9 +7514,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/frontend/package.json b/frontend/package.json index 0af7fea2..efb6c684 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -69,7 +69,7 @@ "postcss": "^8.4.32", "prettier": "^3.6.1", "tailwindcss": "^3.4.0", - "typescript": "^5.2.2", + "typescript": "^5.9.2", "vite": "^5.0.8" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6881fdc3..ebdd1cfe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -140,10 +140,10 @@ importers: version: 18.3.7(@types/react@18.3.23) '@typescript-eslint/eslint-plugin': specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/parser': specifier: ^6.21.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.8.3) + version: 6.21.0(eslint@8.57.1)(typescript@5.9.2) '@vitejs/plugin-react': specifier: ^4.2.1 version: 4.5.2(vite@5.4.19) @@ -167,7 +167,7 @@ importers: version: 0.4.20(eslint@8.57.1) eslint-plugin-unused-imports: specifier: ^4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + version: 4.1.4(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) postcss: specifier: ^8.4.32 version: 8.5.6 @@ -178,8 +178,8 @@ importers: specifier: ^3.4.0 version: 3.4.17 typescript: - specifier: ^5.2.2 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 vite: specifier: ^5.0.8 version: 5.4.19 @@ -2799,8 +2799,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -4168,13 +4168,13 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.1 eslint: 8.57.1 @@ -4182,22 +4182,22 @@ snapshots: ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.7.2 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.1 eslint: 8.57.1 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -4206,21 +4206,21 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) debug: 4.4.1 eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -4229,20 +4229,20 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.7.2 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.7.0 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) eslint: 8.57.1 semver: 7.7.2 transitivePeerDependencies: @@ -4637,11 +4637,11 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1): dependencies: eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) eslint-scope@7.2.2: dependencies: @@ -5765,9 +5765,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.4.3(typescript@5.8.3): + ts-api-utils@1.4.3(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 ts-interface-checker@0.1.13: {} @@ -5779,7 +5779,7 @@ snapshots: type-fest@0.20.2: {} - typescript@5.8.3: {} + typescript@5.9.2: {} unified@11.0.5: dependencies: diff --git a/shared/types.ts b/shared/types.ts index a94c7a1c..346232f8 100644 --- a/shared/types.ts +++ b/shared/types.ts @@ -134,17 +134,17 @@ mcp_config_path: string | null, } & ({ "CLAUDE_CODE": ClaudeCode } | { "AMP": Am export type ProfileConfigs = { profiles: Array, }; -export type ClaudeCode = { command: CommandBuilder, plan: boolean, }; +export type ClaudeCode = { command: CommandBuilder, append_prompt: string | null, plan: boolean, }; -export type Gemini = { command: CommandBuilder, }; +export type Gemini = { command: CommandBuilder, append_prompt: string | null, }; -export type Amp = { command: CommandBuilder, }; +export type Amp = { command: CommandBuilder, append_prompt: string | null, }; -export type Codex = { command: CommandBuilder, }; +export type Codex = { command: CommandBuilder, append_prompt: string | null, }; -export type Cursor = { command: CommandBuilder, }; +export type Cursor = { command: CommandBuilder, append_prompt: string | null, }; -export type Opencode = { command: CommandBuilder, }; +export type Opencode = { command: CommandBuilder, append_prompt: string | null, }; export type CodingAgentInitialRequest = { prompt: string, profile_variant_label: ProfileVariantLabel, };