Prepend and append prompt arguments to executors (vibe-kanban) (#507)

* Commit changes from coding agent for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Cleanup script changes for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Commit changes from coding agent for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Cleanup script changes for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Reverse JSON editor disable

* prompt_args_for_profiles

* Reset any frontend changes

* Remove new. UI components

* reset shared types

* Commit changes from coding agent for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* Cleanup script changes for task attempt 50dc90ec-29b2-4c80-9000-133dd7f9fad4

* fmt

* lockfile
This commit is contained in:
Louis Knight-Webb
2025-08-19 10:54:53 +01:00
committed by GitHub
parent 317811d696
commit 88a67d8d9c
12 changed files with 118 additions and 83 deletions

View File

@@ -26,6 +26,7 @@ use crate::{
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)]
pub struct Amp { pub struct Amp {
pub command: CommandBuilder, pub command: CommandBuilder,
pub append_prompt: Option<String>,
} }
#[async_trait] #[async_trait]
@@ -38,6 +39,8 @@ impl StandardCodingAgentExecutor for Amp {
let (shell_cmd, shell_arg) = get_shell_command(); let (shell_cmd, shell_arg) = get_shell_command();
let amp_command = self.command.build_initial(); 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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -52,7 +55,7 @@ impl StandardCodingAgentExecutor for Amp {
// feed the prompt in, then close the pipe so `amp` sees EOF // feed the prompt in, then close the pipe so `amp` sees EOF
if let Some(mut stdin) = child.inner().stdin.take() { 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);` stdin.shutdown().await.unwrap(); // or `drop(stdin);`
} }
@@ -73,6 +76,8 @@ impl StandardCodingAgentExecutor for Amp {
session_id.to_string(), session_id.to_string(),
]); ]);
let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt);
let mut command = Command::new(shell_cmd); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -87,7 +92,7 @@ impl StandardCodingAgentExecutor for Amp {
// Feed the prompt in, then close the pipe so amp sees EOF // Feed the prompt in, then close the pipe so amp sees EOF
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }

View File

@@ -28,6 +28,7 @@ use crate::{
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)]
pub struct ClaudeCode { pub struct ClaudeCode {
pub command: CommandBuilder, pub command: CommandBuilder,
pub append_prompt: Option<String>,
pub plan: bool, pub plan: bool,
} }
@@ -46,6 +47,8 @@ impl StandardCodingAgentExecutor for ClaudeCode {
self.command.build_initial() self.command.build_initial()
}; };
let combined_prompt = utils::text::combine_prompt(&self.append_prompt, prompt);
let mut command = Command::new(shell_cmd); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -60,7 +63,7 @@ impl StandardCodingAgentExecutor for ClaudeCode {
// Feed the prompt in, then close the pipe so Claude sees EOF // Feed the prompt in, then close the pipe so Claude sees EOF
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }
@@ -85,6 +88,8 @@ impl StandardCodingAgentExecutor for ClaudeCode {
.build_follow_up(&["--resume".to_string(), session_id.to_string()]) .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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -99,7 +104,7 @@ impl StandardCodingAgentExecutor for ClaudeCode {
// Feed the followup prompt in, then close the pipe // Feed the followup prompt in, then close the pipe
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }
@@ -934,6 +939,7 @@ mod tests {
let executor = ClaudeCode { let executor = ClaudeCode {
command: CommandBuilder::new(""), command: CommandBuilder::new(""),
plan: false, plan: false,
append_prompt: None,
}; };
let msg_store = Arc::new(MsgStore::new()); let msg_store = Arc::new(MsgStore::new());
let current_dir = std::path::PathBuf::from("/tmp/test-worktree"); let current_dir = std::path::PathBuf::from("/tmp/test-worktree");

View File

@@ -108,6 +108,7 @@ impl SessionHandler {
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)]
pub struct Codex { pub struct Codex {
pub command: CommandBuilder, pub command: CommandBuilder,
pub append_prompt: Option<String>,
} }
#[async_trait] #[async_trait]
@@ -120,6 +121,8 @@ impl StandardCodingAgentExecutor for Codex {
let (shell_cmd, shell_arg) = get_shell_command(); let (shell_cmd, shell_arg) = get_shell_command();
let codex_command = self.command.build_initial(); 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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -136,7 +139,7 @@ impl StandardCodingAgentExecutor for Codex {
// Feed the prompt in, then close the pipe so codex sees EOF // Feed the prompt in, then close the pipe so codex sees EOF
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }
@@ -161,6 +164,8 @@ impl StandardCodingAgentExecutor for Codex {
format!("experimental_resume={}", rollout_file_path.display()), 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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -177,7 +182,7 @@ impl StandardCodingAgentExecutor for Codex {
// Feed the prompt in, then close the pipe so codex sees EOF // Feed the prompt in, then close the pipe so codex sees EOF
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }

View File

@@ -31,6 +31,7 @@ use crate::{
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)]
pub struct Cursor { pub struct Cursor {
pub command: CommandBuilder, pub command: CommandBuilder,
pub append_prompt: Option<String>,
} }
#[async_trait] #[async_trait]
@@ -43,6 +44,8 @@ impl StandardCodingAgentExecutor for Cursor {
let (shell_cmd, shell_arg) = get_shell_command(); let (shell_cmd, shell_arg) = get_shell_command();
let agent_cmd = self.command.build_initial(); 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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -56,7 +59,7 @@ impl StandardCodingAgentExecutor for Cursor {
let mut child = command.group_spawn()?; let mut child = command.group_spawn()?;
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }
@@ -74,6 +77,8 @@ impl StandardCodingAgentExecutor for Cursor {
.command .command
.build_follow_up(&["--resume".to_string(), session_id.to_string()]); .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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -87,7 +92,7 @@ impl StandardCodingAgentExecutor for Cursor {
let mut child = command.group_spawn()?; let mut child = command.group_spawn()?;
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }
@@ -782,6 +787,7 @@ mod tests {
// Avoid relying on feature flag in tests; construct with a dummy command // Avoid relying on feature flag in tests; construct with a dummy command
let executor = Cursor { let executor = Cursor {
command: CommandBuilder::new(""), command: CommandBuilder::new(""),
append_prompt: None,
}; };
let msg_store = Arc::new(MsgStore::new()); let msg_store = Arc::new(MsgStore::new());
let current_dir = std::path::PathBuf::from("/tmp/test-worktree"); let current_dir = std::path::PathBuf::from("/tmp/test-worktree");

View File

@@ -26,6 +26,7 @@ use crate::{
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)]
pub struct Gemini { pub struct Gemini {
pub command: CommandBuilder, pub command: CommandBuilder,
pub append_prompt: Option<String>,
} }
#[async_trait] #[async_trait]
@@ -38,8 +39,9 @@ impl StandardCodingAgentExecutor for Gemini {
let (shell_cmd, shell_arg) = get_shell_command(); let (shell_cmd, shell_arg) = get_shell_command();
let gemini_command = self.command.build_initial(); 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 command
.kill_on_drop(true) .kill_on_drop(true)
.stdin(Stdio::piped()) .stdin(Stdio::piped())
@@ -54,7 +56,7 @@ impl StandardCodingAgentExecutor for Gemini {
// Write prompt to stdin // Write prompt to stdin
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }
@@ -77,7 +79,7 @@ impl StandardCodingAgentExecutor for Gemini {
_session_id: &str, _session_id: &str,
) -> Result<AsyncGroupChild, ExecutorError> { ) -> Result<AsyncGroupChild, ExecutorError> {
// Build comprehensive prompt with session context // 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 (shell_cmd, shell_arg) = get_shell_command();
let gemini_command = self.command.build_follow_up(&[]); let gemini_command = self.command.build_follow_up(&[]);
@@ -274,6 +276,7 @@ impl Gemini {
/// Build comprehensive prompt with session context for follow-up execution /// Build comprehensive prompt with session context for follow-up execution
async fn build_followup_prompt( async fn build_followup_prompt(
&self,
current_dir: &PathBuf, current_dir: &PathBuf,
prompt: &str, prompt: &str,
) -> Result<String, ExecutorError> { ) -> Result<String, ExecutorError> {
@@ -298,8 +301,9 @@ The following is the conversation history from this session:
{prompt} {prompt}
=== INSTRUCTIONS === === 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(),
)) ))
} }

View File

@@ -28,6 +28,7 @@ use crate::{
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, TS)]
pub struct Opencode { pub struct Opencode {
pub command: CommandBuilder, pub command: CommandBuilder,
pub append_prompt: Option<String>,
} }
#[async_trait] #[async_trait]
@@ -40,6 +41,8 @@ impl StandardCodingAgentExecutor for Opencode {
let (shell_cmd, shell_arg) = get_shell_command(); let (shell_cmd, shell_arg) = get_shell_command();
let opencode_command = self.command.build_initial(); 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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -55,7 +58,7 @@ impl StandardCodingAgentExecutor for Opencode {
// Write prompt to stdin // Write prompt to stdin
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }
@@ -73,6 +76,8 @@ impl StandardCodingAgentExecutor for Opencode {
.command .command
.build_follow_up(&["--session".to_string(), session_id.to_string()]); .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); let mut command = Command::new(shell_cmd);
command command
.kill_on_drop(true) .kill_on_drop(true)
@@ -88,7 +93,7 @@ impl StandardCodingAgentExecutor for Opencode {
// Write prompt to stdin // Write prompt to stdin
if let Some(mut stdin) = child.inner().stdin.take() { 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?; stdin.shutdown().await?;
} }

View File

@@ -1014,17 +1014,17 @@ impl LocalContainerService {
for msg in history.iter().rev() { for msg in history.iter().rev() {
if let LogMsg::JsonPatch(patch) = msg { if let LogMsg::JsonPatch(patch) = msg {
// Try to extract a NormalizedEntry from the patch // Try to extract a NormalizedEntry from the patch
if let Some(entry) = self.extract_normalized_entry_from_patch(patch) { if let Some(entry) = self.extract_normalized_entry_from_patch(patch)
if matches!(entry.entry_type, NormalizedEntryType::AssistantMessage) { && matches!(entry.entry_type, NormalizedEntryType::AssistantMessage)
let content = entry.content.trim(); {
if !content.is_empty() { let content = entry.content.trim();
// Truncate to reasonable size (4KB as Oracle suggested) if !content.is_empty() {
const MAX_SUMMARY_LENGTH: usize = 4096; // Truncate to reasonable size (4KB as Oracle suggested)
if content.len() > MAX_SUMMARY_LENGTH { const MAX_SUMMARY_LENGTH: usize = 4096;
return Some(format!("{}...", &content[..MAX_SUMMARY_LENGTH])); if content.len() > MAX_SUMMARY_LENGTH {
} return Some(format!("{}...", &content[..MAX_SUMMARY_LENGTH]));
return Some(content.to_string());
} }
return Some(content.to_string());
} }
} }
} }
@@ -1039,22 +1039,19 @@ impl LocalContainerService {
patch: &json_patch::Patch, patch: &json_patch::Patch,
) -> Option<NormalizedEntry> { ) -> Option<NormalizedEntry> {
// Convert the patch to JSON to examine its structure // Convert the patch to JSON to examine its structure
if let Ok(patch_json) = serde_json::to_value(patch) { if let Ok(patch_json) = serde_json::to_value(patch)
if let Some(operations) = patch_json.as_array() { && let Some(operations) = patch_json.as_array()
for operation in operations { {
if let Some(value) = operation.get("value") { for operation in operations {
// Try to extract a NormalizedEntry from the value if let Some(value) = operation.get("value") {
if let Some(patch_type) = value.get("type").and_then(|t| t.as_str()) { // Try to extract a NormalizedEntry from the value
if patch_type == "NORMALIZED_ENTRY" { if let Some(patch_type) = value.get("type").and_then(|t| t.as_str())
if let Some(content) = value.get("content") { && patch_type == "NORMALIZED_ENTRY"
if let Ok(entry) = && let Some(content) = value.get("content")
serde_json::from_value::<NormalizedEntry>(content.clone()) && let Ok(entry) =
{ serde_json::from_value::<NormalizedEntry>(content.clone())
return Some(entry); {
} return Some(entry);
}
}
}
} }
} }
} }

View File

@@ -22,3 +22,10 @@ pub fn short_uuid(u: &Uuid) -> String {
let full = u.simple().to_string(); let full = u.simple().to_string();
full.chars().take(4).collect() // grab the first 4 chars full.chars().take(4).collect() // grab the first 4 chars
} }
pub fn combine_prompt(append: &Option<String>, prompt: &str) -> String {
match append {
Some(append) => format!("{prompt}{append}"),
None => prompt.to_string(),
}
}

View File

@@ -63,7 +63,7 @@
"postcss": "^8.4.32", "postcss": "^8.4.32",
"prettier": "^3.6.1", "prettier": "^3.6.1",
"tailwindcss": "^3.4.0", "tailwindcss": "^3.4.0",
"typescript": "^5.2.2", "typescript": "^5.9.2",
"vite": "^5.0.8" "vite": "^5.0.8"
} }
}, },
@@ -7514,9 +7514,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.8.3", "version": "5.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"bin": { "bin": {

View File

@@ -69,7 +69,7 @@
"postcss": "^8.4.32", "postcss": "^8.4.32",
"prettier": "^3.6.1", "prettier": "^3.6.1",
"tailwindcss": "^3.4.0", "tailwindcss": "^3.4.0",
"typescript": "^5.2.2", "typescript": "^5.9.2",
"vite": "^5.0.8" "vite": "^5.0.8"
} }
} }

62
pnpm-lock.yaml generated
View File

@@ -140,10 +140,10 @@ importers:
version: 18.3.7(@types/react@18.3.23) version: 18.3.7(@types/react@18.3.23)
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^6.21.0 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': '@typescript-eslint/parser':
specifier: ^6.21.0 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': '@vitejs/plugin-react':
specifier: ^4.2.1 specifier: ^4.2.1
version: 4.5.2(vite@5.4.19) version: 4.5.2(vite@5.4.19)
@@ -167,7 +167,7 @@ importers:
version: 0.4.20(eslint@8.57.1) version: 0.4.20(eslint@8.57.1)
eslint-plugin-unused-imports: eslint-plugin-unused-imports:
specifier: ^4.1.4 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: postcss:
specifier: ^8.4.32 specifier: ^8.4.32
version: 8.5.6 version: 8.5.6
@@ -178,8 +178,8 @@ importers:
specifier: ^3.4.0 specifier: ^3.4.0
version: 3.4.17 version: 3.4.17
typescript: typescript:
specifier: ^5.2.2 specifier: ^5.9.2
version: 5.8.3 version: 5.9.2
vite: vite:
specifier: ^5.0.8 specifier: ^5.0.8
version: 5.4.19 version: 5.4.19
@@ -2799,8 +2799,8 @@ packages:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
typescript@5.8.3: typescript@5.9.2:
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
@@ -4168,13 +4168,13 @@ snapshots:
'@types/unist@3.0.3': {} '@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: dependencies:
'@eslint-community/regexpp': 4.12.1 '@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/scope-manager': 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)
'@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)
'@typescript-eslint/visitor-keys': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0
debug: 4.4.1 debug: 4.4.1
eslint: 8.57.1 eslint: 8.57.1
@@ -4182,22 +4182,22 @@ snapshots:
ignore: 5.3.2 ignore: 5.3.2
natural-compare: 1.4.0 natural-compare: 1.4.0
semver: 7.7.2 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: optionalDependencies:
typescript: 5.8.3 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - 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: dependencies:
'@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 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 '@typescript-eslint/visitor-keys': 6.21.0
debug: 4.4.1 debug: 4.4.1
eslint: 8.57.1 eslint: 8.57.1
optionalDependencies: optionalDependencies:
typescript: 5.8.3 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -4206,21 +4206,21 @@ snapshots:
'@typescript-eslint/types': 6.21.0 '@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 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: dependencies:
'@typescript-eslint/typescript-estree': 6.21.0(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.8.3) '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2)
debug: 4.4.1 debug: 4.4.1
eslint: 8.57.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: optionalDependencies:
typescript: 5.8.3 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/types@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)':
dependencies: dependencies:
'@typescript-eslint/types': 6.21.0 '@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0
@@ -4229,20 +4229,20 @@ snapshots:
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.3 minimatch: 9.0.3
semver: 7.7.2 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: optionalDependencies:
typescript: 5.8.3 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - 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: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@types/semver': 7.7.0 '@types/semver': 7.7.0
'@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 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 eslint: 8.57.1
semver: 7.7.2 semver: 7.7.2
transitivePeerDependencies: transitivePeerDependencies:
@@ -4637,11 +4637,11 @@ snapshots:
dependencies: dependencies:
eslint: 8.57.1 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: dependencies:
eslint: 8.57.1 eslint: 8.57.1
optionalDependencies: 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: eslint-scope@7.2.2:
dependencies: dependencies:
@@ -5765,9 +5765,9 @@ snapshots:
trough@2.2.0: {} 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: dependencies:
typescript: 5.8.3 typescript: 5.9.2
ts-interface-checker@0.1.13: {} ts-interface-checker@0.1.13: {}
@@ -5779,7 +5779,7 @@ snapshots:
type-fest@0.20.2: {} type-fest@0.20.2: {}
typescript@5.8.3: {} typescript@5.9.2: {}
unified@11.0.5: unified@11.0.5:
dependencies: dependencies:

View File

@@ -134,17 +134,17 @@ mcp_config_path: string | null, } & ({ "CLAUDE_CODE": ClaudeCode } | { "AMP": Am
export type ProfileConfigs = { profiles: Array<ProfileConfig>, }; export type ProfileConfigs = { profiles: Array<ProfileConfig>, };
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, }; export type CodingAgentInitialRequest = { prompt: string, profile_variant_label: ProfileVariantLabel, };