Merge origin/main into summon_extension

Resolved conflicts:
- Updated McpClientTrait::call_tool signature to include working_dir parameter
- Re-exported SUBAGENT_TOOL_REQUEST_TYPE from agents module for goose-cli
- Integrated origin/main's working_dir support with summon_extension's changes
This commit is contained in:
Tyler Longwell
2026-02-04 16:41:02 -05:00
68 changed files with 6056 additions and 3316 deletions
Generated
+2431 -436
View File
File diff suppressed because it is too large Load Diff
+5 -1
View File
@@ -4,7 +4,7 @@ resolver = "2"
[workspace.package]
edition = "2021"
version = "1.22.0"
version = "1.23.0"
authors = ["Block <ai-oss-tools@block.xyz>"]
license = "Apache-2.0"
repository = "https://github.com/block/goose"
@@ -36,3 +36,7 @@ reqwest = { version = "0.12.28", default-features = false, features = ["multipar
tower = "0.5.2"
tower-http = "0.6.8"
url = "2.5.8"
[profile.release]
codegen-units = 1
lto = true
+3 -7
View File
@@ -72,7 +72,7 @@ pub async fn run_mcp_http_server<S: Session>() {
pub async fn run_builtin_and_mcp<S: Session>() {
let expected_session_id = ExpectedSessionId::default();
let prompt =
"Search for get_code and text_editor tools. Use them to save the code to /tmp/result.txt.";
"Search for getCode and textEditor tools. Use them to save the code to /tmp/result.txt.";
let mcp = McpFixture::new(expected_session_id.clone()).await;
let openai = OpenAiFixture::new(
vec![
@@ -81,15 +81,11 @@ pub async fn run_builtin_and_mcp<S: Session>() {
include_str!("../test_data/openai_builtin_search.txt"),
),
(
r#"lookup/get_code: Get the code"#.into(),
include_str!("../test_data/openai_builtin_read_modules.txt"),
),
(
r#"lookup[\"get_code\"]({}): string - Get the code"#.into(),
r#"export async function getCode"#.into(),
include_str!("../test_data/openai_builtin_execute.txt"),
),
(
r#"Successfully wrote to /tmp/result.txt"#.into(),
r#""writeResult": "Successfully wrote to /tmp/result.txt"#.into(),
include_str!("../test_data/openai_builtin_final.txt"),
),
],
@@ -1,227 +1,435 @@
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_hcC9QZSyxfjpHmJdtEWe18ay","type":"function","function":{"name":"code_execution__execute_code","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"b19o47w5ougEAzn"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_UBLtxrNOFHnLNHCInjjeVLzP","type":"function","function":{"name":"code_execution__execute","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"WDLD"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"rdSrkQ1Cz6"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"yJBJJfdldX"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Osxenpc4x"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EYtPIkyWy"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"DTBcfoOJ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"kLCKi4W0"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"import"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sqbC9nK"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"async"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0pB1gVsj"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7A3BEIL77xh"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" function"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Quyw"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"AsczaKDd7"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" run"}}]},"finish_reason":null}],"usage":null,"obfuscation":"C47A3bchK"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"UjJwIZXo"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"()"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GnzOrhzYZew"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"spOTdMkMdlp"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sMmX7plrr"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" from"}}]},"finish_reason":null}],"usage":null,"obfuscation":"n2UHITYZ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"wqLsTgMRSxtN"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"am1f6FmN"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"5MHvUdIfJ0qJ"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lookup"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7smqbS0"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" console"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Uv1zV"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"punuQk0H6"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".log"}}]},"finish_reason":null}],"usage":null,"obfuscation":"JAPWfZ8vW"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0MlZhMM3Wb"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"r2howfHn"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"qNe4Y7heibZN"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Fetching"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3uEtb"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"import"}}]},"finish_reason":null}],"usage":null,"obfuscation":"jAg7bgI"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"73EB8Vfy"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7GtakYXk4U1"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" using"}}]},"finish_reason":null}],"usage":null,"obfuscation":"bj5YgoP"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"iABvoSVl"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"a0nSxyCLV"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WGyvWz"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sE6BzCdcA"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"kXeb0jURGpD"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"...\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"piPx4wDk"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" from"}}]},"finish_reason":null}],"usage":null,"obfuscation":"daxDWT2G"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\");"}}]},"finish_reason":null}],"usage":null,"obfuscation":"8dYsX5mrP"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"p1uq4MMs"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5VbIZPEA6ix"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZZJ0"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"01RMMD23GQkr"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"2pjhI3CHm"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"Ig3VtqefZFcI"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BGPB0Y92qx"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"227PgWF"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sPtg1aux9Q7t"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zYLjrdtw"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uzSwsf36Eq"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"85j33BB"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"q36eyCe4"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"m9B1dsMaGtk"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Yv253z8V"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" await"}}]},"finish_reason":null}],"usage":null,"obfuscation":"y1QKhVE"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Content"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dbtiH2"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Lookup"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tyu2C3"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"V0BBzDO4BnO"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"mSnyOOHWO"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eV7Z0MBJk"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zKEttDzEa"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"qODA1iJ3"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"({"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KevY7aP3ryh"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"({"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZLHVDfQXZIT"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"});"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EgG4bzRSW8"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"});"}}]},"finish_reason":null}],"usage":null,"obfuscation":"xkfrxJ0vqN"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"x0sZLH8SbhL"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Ri1sVVmThdE"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IHuyUXshht2C"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EaMfvD5zX3O4"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"zv2aVS40gP6A"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Ktj0iLMG"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" let"}}]},"finish_reason":null}],"usage":null,"obfuscation":"q2RPbnzIm"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BuVITia"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"RpPYIgMc"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"b9iRJbneyy"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"hthkNEp3btP"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"gCMQmiR8LDN"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ''"}}]},"finish_reason":null}],"usage":null,"obfuscation":"czifZEqaPz"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WywYQ1Wq"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Z94iEsTOFM"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"APkX6z"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"YmsDuM4CGmAm"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"({"}}]},"finish_reason":null}],"usage":null,"obfuscation":"O04vBMryw3h"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"F9VDjITdevyZ"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" command"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5jIuc"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3mTNWX7Ccs"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WmdqnCOKVLwM"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ("}}]},"finish_reason":null}],"usage":null,"obfuscation":"VPSM2U9ztaj"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"tV8pBGp7"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"typeof"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EjlBDWl"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"rdlyfaq1"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"waNmvkMf"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\","}}]},"finish_reason":null}],"usage":null,"obfuscation":"SxWxNrDR"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MtFriQX"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" path"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PeHPMaR6"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ==="}}]},"finish_reason":null}],"usage":null,"obfuscation":"6lERzMmdv"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"d0y267V7PORM"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tFFzpFq7XNp"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ywEAhNkA9w"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"string"}}]},"finish_reason":null}],"usage":null,"obfuscation":"R3I84RZ"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/"}}]},"finish_reason":null}],"usage":null,"obfuscation":"m9RiqrrR4d"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"')"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BSnvZ4pAb76"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KdkE9OEMbk"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"cvK3wmQAp"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"wdawSE"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9U4NG1zW1hpA"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"oz5CFKhsF"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"TMZWFdPIGt"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\","}}]},"finish_reason":null}],"usage":null,"obfuscation":"FLJEYU3Z"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"J6lbPQxv"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" file"}}]},"finish_reason":null}],"usage":null,"obfuscation":"jV9qDKjG"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"qRU6bhPit7h"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"UtOfNMdx"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IouQzhkX"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"aQLvI4PhcN71"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"cyJEbKZ"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"cRS5SnPZ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"d0mgOWJ4BI"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Content"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ymts0B"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"DT5fUSwF4rag"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" });"}}]},"finish_reason":null}],"usage":null,"obfuscation":"HIKXwLPsU"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"qxuu5io6tf3v"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IyYG9VM0ay9"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uivHQEB1MHf"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"FcZzRbewbWzs"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" else"}}]},"finish_reason":null}],"usage":null,"obfuscation":"mXjbTfS9"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"record_result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"yJ0heSJY"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"X6y8tpzr6O"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(writeRes)"}}]},"finish_reason":null}],"usage":null,"obfuscation":"VCJyV87lb5"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ("}}]},"finish_reason":null}],"usage":null,"obfuscation":"Y1nBNR2nfBu"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LniNHGfSN9"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"t6taDGZWE"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"KrXbglgQ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"S4uVyIz"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KoY7VbKmk"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" &&"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sf0ZWdiu4N"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_graph"}}]},"finish_reason":null}],"usage":null,"obfuscation":"stocohw"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" typeof"}}]},"finish_reason":null}],"usage":null,"obfuscation":"TpYZWc"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"GVtr3ESEB"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zbilqttA"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"Lickb1U7Hl"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zqGeQHW"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"okyVlrEIz"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ==="}}]},"finish_reason":null}],"usage":null,"obfuscation":"F8hxhZoBg"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"eOvg0xdJ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0QWhjOXxfMI"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lookup"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ioz46mm"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"object"}}]},"finish_reason":null}],"usage":null,"obfuscation":"TkPlD4R"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lqkgCSvsu"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"')"}}]},"finish_reason":null}],"usage":null,"obfuscation":"NR4MUn0RRS4"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"JhuyiKVe"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"saoY11LYc"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"Q3aHiaKq"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eh3OiAfwS3Jl"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Ck"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"g5iOHn9zDZ"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"AEyKl8NF"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"8W6TSAMM"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lJJbh0p7Dg"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"VRzyVssdYN3"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" the"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uFXa4PzBq"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Aql9R8g6"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"fxpxTVDG"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"N1FHNi9"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"ajR2a1Ju"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sYqbc9to"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"qNa3u6"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ??"}}]},"finish_reason":null}],"usage":null,"obfuscation":"hGQnicL3wo"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PfZBUzLwEU"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"g4KW2tFJ"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":[]"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Kpm5Dl6W"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ifEWkT9"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"},{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"L8cOSVuZ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".content"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Qsv00"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KAZ6a6RFX"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ??"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eThY8OKgQM"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"bJFlPCmV"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ''"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0x03TQmZKV"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KE9I"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vX8rRtILap"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BMnv2YIo"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zAqdH8JPBibe"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"HH3wHg"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"ov9HisKNyUac"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"1BSk9J00"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"I4APrZWxY"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"y0"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5ImlnX0Dttf5"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"j0kTAnXy"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"YXKxHGHDxIMx"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9IGJB175"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" console"}}]},"finish_reason":null}],"usage":null,"obfuscation":"4czSy"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"qc9bKCEs"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".log"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BzoIKE2IQ"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" to"}}]},"finish_reason":null}],"usage":null,"obfuscation":"a0mpsleQne"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"RFDi14O6"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" /"}}]},"finish_reason":null}],"usage":null,"obfuscation":"qu1SPcDdrND"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"kBQ5JuRLo"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"iL5qu5xkSZ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uLKt9b"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Pw9vab"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"AernamVDYj"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"4s3fq3kik"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\","}}]},"finish_reason":null}],"usage":null,"obfuscation":"W2G1ODBPI7"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"WBE2nHWv"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ClK2v6Co"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"SndKuC"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5QREcu"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"bqH02zHaqe"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":");\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vYkJXePbp"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"JQbX8vhhz"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eYwcfwGza6SP"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dZPvLddnRhi4"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"WD8XfCubj9Fi"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"H6ruWXUkroP"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GRx06ti"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"oo1NmN82Wer"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GARHMD7"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"KHl52jcbk6U"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Input"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0ViQAnum"}
data: {"id":"chatcmpl-Cqnxk0p34ZkYNestA1fcahFGuLiRR","object":"chat.completion.chunk","created":1766701148,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":2823,"completion_tokens":1347,"total_tokens":4170,"prompt_tokens_details":{"cached_tokens":2176,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1216,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"iENdGioMW9"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"pH7owHzrw2r"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {"}}]},"finish_reason":null}],"usage":null,"obfuscation":"g1NLPYzOctR"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" path"}}]},"finish_reason":null}],"usage":null,"obfuscation":"D8RncX3Y"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9WvQILV05SIi"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '/"}}]},"finish_reason":null}],"usage":null,"obfuscation":"HqB41Bt0gL"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vDKGLeU1TF"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3AdXIE"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uRa25ZT1p"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"',"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vSHWogAiBbD"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" command"}}]},"finish_reason":null}],"usage":null,"obfuscation":"rZzDM"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"pSUTKKwDCn8p"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Qjt96EnsRAm"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"09rNMlnR"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"',"}}]},"finish_reason":null}],"usage":null,"obfuscation":"itKwh0SX1ga"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" file"}}]},"finish_reason":null}],"usage":null,"obfuscation":"du3kCfTn"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ngVnMudT"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ybJSbaU82SiV"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"FRFx9RKj"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LoFsPXu5IT5"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"K1VJOHAdow"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"79UQqyjivA2x"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"Wdhzy4D1tN5x"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MMQBCgU"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GXQxXyP"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"aHn6RNH"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"JhpeUQraTS4"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" await"}}]},"finish_reason":null}],"usage":null,"obfuscation":"QsGqq3h"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"nFR"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"k75EY8l0"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"yfopeoz"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"NUMmKyB"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Input"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tlqNVNVr"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":");\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"R9nTDEH8s"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"NfNK8HdqJSKv"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"QVPXEN5xQ1Ze"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" return"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7MTQ6U"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {"}}]},"finish_reason":null}],"usage":null,"obfuscation":"K2FMAiCIujD"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EE9Ru0tD"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0SZhPwa"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IlyrcjFrNtf1"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"nIffRVq6"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MJrhKV"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}],"usage":null,"obfuscation":"b0bPSjPStgSB"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"jZ1s48d"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"FnJBVR0"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}],"usage":null,"obfuscation":"sGoSb5moV3lU"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" path"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lEDGAUW7"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"L33XZS2eVjP8"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '/"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Mc6352ovqh"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WVf7tUa4MO"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dgLoNl"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"peo3oJpMf"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"'"}}]},"finish_reason":null}],"usage":null,"obfuscation":"CUBYBaa76JLc"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Mn0H2SyFIfj"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"auORHaAgoa"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"OUGiUCfKmJSM"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dF6Q4oq7L7"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zkI9TnUUs3ch"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"2GBDJdx9"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IR9AsAJLS"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_graph"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LZdBnmQ"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"LrdA4JMPl"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"hoFr6PdSxy"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"09voS71xG"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"OnQsbjgO"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Lookup"}}]},"finish_reason":null}],"usage":null,"obfuscation":"txA3kTV"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"bBPWLAWjf"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MN2cF3bAO"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"4J9xpizI"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zF"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"cwNVXSPt"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lVybj8jkPg"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"j9AE0p2w"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" to"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PsKLkrCQru"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" save"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LaBz90vK"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZM1ykOP4"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"1EQhvi"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dfaEmUGSEN"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":[]"}}]},"finish_reason":null}],"usage":null,"obfuscation":"z5Aw0q4K"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"},{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"41s45OYD"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zL7J4Y5rW"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"96Kod7bM"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Qnr0"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"J3Fq0V0e"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7OJJNS2"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"p0Um8MwA"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZR"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"wIKGLRH8"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zbApOiBy"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"M1PXb440"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" to"}}]},"finish_reason":null}],"usage":null,"obfuscation":"En0BC1zcqo"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" /"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5VoEIKXk92K"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"6WSWQwr75c"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"z0OIp4"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"yiZKDyLLD"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"wQnmcE1I"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Im97QG"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"YX0ERDmjVw"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"bmrLkX68c"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}],"usage":null,"obfuscation":"E6kFZ2NkKqDW"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GpL2fucX06l"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"QcijSKPB34X"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"38W18dvZIF7"}
data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":5612,"completion_tokens":1193,"total_tokens":6805,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":960,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"Ikcn1RF9DqIck8"}
data: [DONE]
@@ -1,173 +1,355 @@
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"O7AAt"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"DBl2H"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"I've"},"finish_reason":null}],"usage":null,"obfuscation":"cVL"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"##"},"finish_reason":null}],"usage":null,"obfuscation":"QftPU"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" retrieved"},"finish_reason":null}],"usage":null,"obfuscation":"F0LyC2nMxaBxl"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Operation"},"finish_reason":null}],"usage":null,"obfuscation":"J5Sw3zVEkPvfW"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"D0e"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" completed"},"finish_reason":null}],"usage":null,"obfuscation":"1ueJsqoOUutou"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"Fa"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"4IS"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}],"usage":null,"obfuscation":"SVR"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"I"},"finish_reason":null}],"usage":null,"obfuscation":"sZdBrx"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}],"usage":null,"obfuscation":"Z"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" followed"},"finish_reason":null}],"usage":null,"obfuscation":"XdPAY5Vz3cjYwj"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" it"},"finish_reason":null}],"usage":null,"obfuscation":"1wEo"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" your"},"finish_reason":null}],"usage":null,"obfuscation":"PI"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"DXcu"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" instruction"},"finish_reason":null}],"usage":null,"obfuscation":"UH9S7jMuejM"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"FaGyP"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"QWA3"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"GZ4i"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" batch"},"finish_reason":null}],"usage":null,"obfuscation":"m"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" get"},"finish_reason":null}],"usage":null,"obfuscation":"RzC"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"ph6"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Code"},"finish_reason":null}],"usage":null,"obfuscation":"hR9"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"tu"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}],"usage":null,"obfuscation":"LzV"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Details"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" text"},"finish_reason":null}],"usage":null,"obfuscation":"Rh"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"EvwW"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Editor"},"finish_reason":null}],"usage":null,"obfuscation":"T"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"4593mu"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" into"},"finish_reason":null}],"usage":null,"obfuscation":"Bw"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Retrieved"},"finish_reason":null}],"usage":null,"obfuscation":"VKOlyvL1zhIEw"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"j39H7"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"rc"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" single"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}],"usage":null,"obfuscation":"27XGKW"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" execute"},"finish_reason":null}],"usage":null,"obfuscation":"tzHiE8zaYekvXrP"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" via"},"finish_reason":null}],"usage":null,"obfuscation":"0di"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" call"},"finish_reason":null}],"usage":null,"obfuscation":"vw"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" lookup"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}],"usage":null,"obfuscation":"F7m"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/get"},"finish_reason":null}],"usage":null,"obfuscation":"olP"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}],"usage":null,"obfuscation":"H"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"_code"},"finish_reason":null}],"usage":null,"obfuscation":"Sa"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"KV0"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"lsb3w"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" result"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"ognYvV"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"ifZo"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Saved"},"finish_reason":null}],"usage":null,"obfuscation":"W"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"zvEML"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"hYDy"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"m67x"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}],"usage":null,"obfuscation":"1jWh7T"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"ZlVNQ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"z8K"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"I7Jf"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"EP"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"dDhAJx"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"sy2"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Path"},"finish_reason":null}],"usage":null,"obfuscation":"ti"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"Q5DAw"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" written"},"finish_reason":null}],"usage":null,"obfuscation":"Fmz6IdQRRVrbcG3"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"UXGt7Q"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}],"usage":null,"obfuscation":"uAsSWL"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" File"},"finish_reason":null}],"usage":null,"obfuscation":"ca"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"l25Gw"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"HUApvDcMsMAuxrY"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"eEjT"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}],"usage":null,"obfuscation":"PU6QY"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"excerpt"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"LoC"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"):\n"},"finish_reason":null}],"usage":null,"obfuscation":"YyY"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"Ao85V"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}],"usage":null,"obfuscation":"9CPGc5"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"YZVZ8Y"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ```\n"},"finish_reason":null}],"usage":null,"obfuscation":"N"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Code"},"finish_reason":null}],"usage":null,"obfuscation":"2M"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}],"usage":null,"obfuscation":"7w1FAS"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" length"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}],"usage":null,"obfuscation":"4m"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}],"usage":null,"obfuscation":"wLn3x2DncUr9KZN"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"SRFQJN"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}],"usage":null,"obfuscation":"CwhQ2N"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"uuid"},"finish_reason":null}],"usage":null,"obfuscation":"DhC"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}],"usage":null,"obfuscation":"jX7HKQ"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"dUQSSl"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"21"},"finish_reason":null}],"usage":null,"obfuscation":"v2Q3e"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"123"},"finish_reason":null}],"usage":null,"obfuscation":"O56B"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" characters"},"finish_reason":null}],"usage":null,"obfuscation":"rzLUIdvybCee"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"45"},"finish_reason":null}],"usage":null,"obfuscation":"7QbIj"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"x3pWt"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"cZFPqS"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"FiaGDY"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"678"},"finish_reason":null}],"usage":null,"obfuscation":"ANzY"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Written"},"finish_reason":null}],"usage":null,"obfuscation":"Uv5i4hNfDvCKOKo"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"90"},"finish_reason":null}],"usage":null,"obfuscation":"d9Bgs"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"IwipJnjOAgQbsM3"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"no1"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}],"usage":null,"obfuscation":"1xjY"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}],"usage":null,"obfuscation":"PlkSe6"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"EtX"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ```\n"},"finish_reason":null}],"usage":null,"obfuscation":"P"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"Ki"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"If"},"finish_reason":null}],"usage":null,"obfuscation":"qse2x"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"bsYW"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}],"usage":null,"obfuscation":"Fx3"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}],"usage":null,"obfuscation":"HuTiM1"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" want"},"finish_reason":null}],"usage":null,"obfuscation":"jp"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" -"},"finish_reason":null}],"usage":null,"obfuscation":"Djq3E"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" me"},"finish_reason":null}],"usage":null,"obfuscation":"DeeA"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" The"},"finish_reason":null}],"usage":null,"obfuscation":"tKO"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"oKYZ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"08"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" view"},"finish_reason":null}],"usage":null,"obfuscation":"f1"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}],"usage":null,"obfuscation":"3zNgk3SNozv6QX"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"Kay"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"eIdHo"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}],"usage":null,"obfuscation":"w"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" fenced"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"nV"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"Vz"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":","},"finish_reason":null}],"usage":null,"obfuscation":"U6ECJT"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" block"},"finish_reason":null}],"usage":null,"obfuscation":"Z"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" modify"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}],"usage":null,"obfuscation":"P9"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"2lX"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"wV6"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"EWuNap9Z0N6SUaV"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" string"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":","},"finish_reason":null}],"usage":null,"obfuscation":"di1ZTP"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"ZiUL"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}],"usage":null,"obfuscation":"cHi4"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" \n"},"finish_reason":null}],"usage":null,"obfuscation":"Nas"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" save"},"finish_reason":null}],"usage":null,"obfuscation":"8Y"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"``"},"finish_reason":null}],"usage":null,"obfuscation":"P8Nhe"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"ill7"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}],"usage":null,"obfuscation":"yMUI"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"WrWJM"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"test"},"finish_reason":null}],"usage":null,"obfuscation":"Wis"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" different"},"finish_reason":null}],"usage":null,"obfuscation":"M3jGyb9FytIMe"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"yZQWve"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" path"},"finish_reason":null}],"usage":null,"obfuscation":"3a"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"uuid"},"finish_reason":null}],"usage":null,"obfuscation":"pTW"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":","},"finish_reason":null}],"usage":null,"obfuscation":"PAdG3e"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"ZjldwU"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" tell"},"finish_reason":null}],"usage":null,"obfuscation":"Z6"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"123"},"finish_reason":null}],"usage":null,"obfuscation":"lCI7"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" me"},"finish_reason":null}],"usage":null,"obfuscation":"TWlE"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"45"},"finish_reason":null}],"usage":null,"obfuscation":"mfWAg"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" what"},"finish_reason":null}],"usage":null,"obfuscation":"IS"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"5vmLQg"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}],"usage":null,"obfuscation":"xrI"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"678"},"finish_reason":null}],"usage":null,"obfuscation":"g43k"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"’d"},"finish_reason":null}],"usage":null,"obfuscation":"nYYvw"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"90"},"finish_reason":null}],"usage":null,"obfuscation":"X2qMT"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}],"usage":null,"obfuscation":"ss"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"kgT"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" next"},"finish_reason":null}],"usage":null,"obfuscation":"Ko"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"``"},"finish_reason":null}],"usage":null,"obfuscation":"IENwg"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}],"usage":null,"obfuscation":"yM8hiD"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"`\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"4U"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null,"obfuscation":"x"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Notes"},"finish_reason":null}],"usage":null,"obfuscation":"mb"}
data: {"id":"chatcmpl-CqnxsizuiyMRFitx0QgzLwSExvKmX","object":"chat.completion.chunk","created":1766701156,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":2997,"completion_tokens":86,"total_tokens":3083,"prompt_tokens_details":{"cached_tokens":2432,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"z42f4eInXrYh3SS"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"eWI4"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"vNyV5I"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" The"},"finish_reason":null}],"usage":null,"obfuscation":"nXZ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"10M7xKE1b67hafu"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" written"},"finish_reason":null}],"usage":null,"obfuscation":"cuhhj4CeigD1UgE"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"0IQ6"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"ZoQ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"bs"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" was"},"finish_reason":null}],"usage":null,"obfuscation":"wS5"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" exactly"},"finish_reason":null}],"usage":null,"obfuscation":"sMx2WDna3NDQYwZ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"0hb"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" string"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" returned"},"finish_reason":null}],"usage":null,"obfuscation":"BEj8YwjVinkJVB"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" by"},"finish_reason":null}],"usage":null,"obfuscation":"3Dsy"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" get"},"finish_reason":null}],"usage":null,"obfuscation":"gtf"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Code"},"finish_reason":null}],"usage":null,"obfuscation":"WED"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}],"usage":null,"obfuscation":"bNdxf"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"21"},"finish_reason":null}],"usage":null,"obfuscation":"1CR1E"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" chars"},"finish_reason":null}],"usage":null,"obfuscation":"w"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"),"},"finish_reason":null}],"usage":null,"obfuscation":"W8r0d"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" wrapped"},"finish_reason":null}],"usage":null,"obfuscation":"aHhICEmcTUnhmMq"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}],"usage":null,"obfuscation":"rSUh"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"OtFXr"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" markdown"},"finish_reason":null}],"usage":null,"obfuscation":"B7UAyjBDFJr4y2"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"Av"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" block"},"finish_reason":null}],"usage":null,"obfuscation":"p"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" by"},"finish_reason":null}],"usage":null,"obfuscation":"YA3y"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"zD5"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" editor"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" output"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"A1"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"If"},"finish_reason":null}],"usage":null,"obfuscation":"RAGoS"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}],"usage":null,"obfuscation":"Raw"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"’d"},"finish_reason":null}],"usage":null,"obfuscation":"9RwEx"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}],"usage":null,"obfuscation":"yz"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":","},"finish_reason":null}],"usage":null,"obfuscation":"kDeUAF"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}],"usage":null,"obfuscation":"BLTGS"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}],"usage":null,"obfuscation":"tYP"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"A5Jv"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"vxcFhK"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Verify"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"qQC"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"Pz"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" contents"},"finish_reason":null}],"usage":null,"obfuscation":"AggSHo905WFTWo"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" by"},"finish_reason":null}],"usage":null,"obfuscation":"BpXh"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" reading"},"finish_reason":null}],"usage":null,"obfuscation":"7BlAGfq2LLaX94N"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"4LzeE"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"MczH"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"KdZ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"HtPvQ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"EbFCqJ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" View"},"finish_reason":null}],"usage":null,"obfuscation":"OV"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"tLL"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" raw"},"finish_reason":null}],"usage":null,"obfuscation":"ZqV"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"bh4g1ZuIXjzIVon"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" without"},"finish_reason":null}],"usage":null,"obfuscation":"KqotEsJnw7202zj"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"AU4"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"pw"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" block"},"finish_reason":null}],"usage":null,"obfuscation":"J"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" wrapper"},"finish_reason":null}],"usage":null,"obfuscation":"1sIrx9kpy3y1Qmp"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"ns5tM"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"3UgsGR"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Save"},"finish_reason":null}],"usage":null,"obfuscation":"h1"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"SFtKX"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" different"},"finish_reason":null}],"usage":null,"obfuscation":"cHVjmh5Hx4PLB"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" piece"},"finish_reason":null}],"usage":null,"obfuscation":"4"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" of"},"finish_reason":null}],"usage":null,"obfuscation":"rRb5"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"kG"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}],"usage":null,"obfuscation":"9Ydy"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" text"},"finish_reason":null}],"usage":null,"obfuscation":"68"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"UPpM"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" another"},"finish_reason":null}],"usage":null,"obfuscation":"9y3pEwWtjcVhmFZ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" path"},"finish_reason":null}],"usage":null,"obfuscation":"xZ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"Flg"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Would"},"finish_reason":null}],"usage":null,"obfuscation":"ZK"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}],"usage":null,"obfuscation":"Nlc"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}],"usage":null,"obfuscation":"xZ"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" me"},"finish_reason":null}],"usage":null,"obfuscation":"38pk"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"V0Lb"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" read"},"finish_reason":null}],"usage":null,"obfuscation":"Hq"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" back"},"finish_reason":null}],"usage":null,"obfuscation":"JP"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"748"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"9G"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}],"usage":null,"obfuscation":"Hdsm"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" make"},"finish_reason":null}],"usage":null,"obfuscation":"Y2"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" any"},"finish_reason":null}],"usage":null,"obfuscation":"6s2"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" adjustments"},"finish_reason":null}],"usage":null,"obfuscation":"pnlQHSO9oRP"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}],"usage":null,"obfuscation":"up8aas"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null,"obfuscation":"F"}
data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":5944,"completion_tokens":1591,"total_tokens":7535,"prompt_tokens_details":{"cached_tokens":4736,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1408,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"R5KQcpHZ74"}
data: [DONE]
@@ -1,43 +0,0 @@
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null},"finish_reason":null}],"obfuscation":"v7"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"call_rS0QksngU4yYIDHrnDJy2EZM","type":"function","function":{"name":"code_execution__read_module","arguments":""}}]},"finish_reason":null}],"obfuscation":"T"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"mo"}}]},"finish_reason":null}],"obfuscation":"nXIpECrF"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"dule_"}}]},"finish_reason":null}],"obfuscation":"B9XWBe6c"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"path\":"}}]},"finish_reason":null}],"obfuscation":"tOSmhh"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \"lo"}}]},"finish_reason":null}],"obfuscation":"Zz3wgAww"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"okup/"}}]},"finish_reason":null}],"obfuscation":"pOpLxr8X"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"get_co"}}]},"finish_reason":null}],"obfuscation":"gCCacjW"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"de\"}"}}]},"finish_reason":null}],"obfuscation":"KY6NDanu"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"id":"call_U0ieDPzZODuxxEWjHgi6s37G","type":"function","function":{"name":"code_execution__read_module","arguments":""}}]},"finish_reason":null}],"obfuscation":"l"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{\"mo"}}]},"finish_reason":null}],"obfuscation":"cKKL6hIz"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"dule_"}}]},"finish_reason":null}],"obfuscation":"zXnRkr9q"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"path\":"}}]},"finish_reason":null}],"obfuscation":"O17aod"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":" \"de"}}]},"finish_reason":null}],"obfuscation":"Hdkjwpwp"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"velop"}}]},"finish_reason":null}],"obfuscation":"31elhAol"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"er/tex"}}]},"finish_reason":null}],"obfuscation":"JsV3mVA"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"t_ed"}}]},"finish_reason":null}],"obfuscation":"8ZyjkFliU"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"itor\""}}]},"finish_reason":null}],"obfuscation":"waD7mnr"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null}],"obfuscation":"ohhnGgMcoCKQ"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"d6Rww4PaZYY"}
data: {"id":"chatcmpl-CqnxaQj6rMqu4L24cNKWvWdMJRtaW","object":"chat.completion.chunk","created":1766701138,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":2586,"completion_tokens":1665,"total_tokens":4251,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1600,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"0ofYwl6eisGBK"}
data: [DONE]
@@ -1,27 +1,39 @@
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_dINW7AmExfpt2yitCRgIgnDk","type":"function","function":{"name":"code_execution__search_modules","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"xjFTVJsrOLFKC"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null},"finish_reason":null}],"obfuscation":"Yd"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"OXXTjGoceY"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"call_zzoNiRL9fhMwZmopcrhgnzit","type":"function","function":{"name":"code_execution__list_functions","arguments":""}}]},"finish_reason":null}],"obfuscation":"RajKpGwjZtWueM"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"terms"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MhlBIuai"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}],"obfuscation":"6NOrpOsiDjm"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":[\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"Q7ZAiod"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"id":"call_oOGp9vL5SW3ATazwQsqMGVUF","type":"function","function":{"name":"code_execution__get_function_details","arguments":""}}]},"finish_reason":null}],"obfuscation":"XzNL5prg"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"QRDc1u5Ps1"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{\"fu"}}]},"finish_reason":null}],"obfuscation":"pXtaOUk0"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"1A5TssiT"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"nctio"}}]},"finish_reason":null}],"obfuscation":"3vnwaaJz"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"IdoT3Umt"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"ns\": ["}}]},"finish_reason":null}],"obfuscation":"DOwx5E"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"B2kd2ESuG"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\"Loo"}}]},"finish_reason":null}],"obfuscation":"R0vj7yxw"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"rq0SWi"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"kup.g"}}]},"finish_reason":null}],"obfuscation":"ONm67mnw"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"]"}}]},"finish_reason":null}],"usage":null,"obfuscation":"y2zYEl2xLX"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"etCode"}}]},"finish_reason":null}],"obfuscation":"WKRbEGk"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uSVgtytSzxV7"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\", \""}}]},"finish_reason":null}],"obfuscation":"PUSV6OA"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"dKRdDeNi7Ag"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"Devel"}}]},"finish_reason":null}],"obfuscation":"iE40CeHf"}
data: {"id":"chatcmpl-CqnxO9QA2SYzqUg3j2vOBDv47NlNx","object":"chat.completion.chunk","created":1766701126,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":2476,"completion_tokens":1887,"total_tokens":4363,"prompt_tokens_details":{"cached_tokens":2176,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1856,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"ZHkygmUrjh"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"oper.t"}}]},"finish_reason":null}],"obfuscation":"H6OirmC"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"extE"}}]},"finish_reason":null}],"obfuscation":"kDbaE6CEl"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"ditor"}}]},"finish_reason":null}],"obfuscation":"y0gYF9yy"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\"]}"}}]},"finish_reason":null}],"obfuscation":"YrrS1cRX8"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"HVEjNhyKZ9f"}
data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":2911,"completion_tokens":1088,"total_tokens":3999,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1024,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"7gsIC3BJ8WITa"}
data: [DONE]
@@ -98,6 +98,7 @@ impl McpClientTrait for MockClient {
_session_id: &str,
name: &str,
arguments: Option<serde_json::Map<String, Value>>,
_working_dir: Option<&str>,
_cancel_token: CancellationToken,
) -> Result<CallToolResult, Error> {
if let Some(handler) = self.handlers.get(name) {
+44
View File
@@ -22,6 +22,7 @@ pub use self::export::message_to_markdown;
pub use builder::{build_session, SessionBuilderConfig};
use console::Color;
use goose::agents::AgentEvent;
use goose::agents::SUBAGENT_TOOL_REQUEST_TYPE;
use goose::permission::permission_confirmation::PrincipalType;
use goose::permission::Permission;
use goose::permission::PermissionConfirmation;
@@ -1537,6 +1538,49 @@ fn handle_mcp_notification(
) {
match notification {
ServerNotification::LoggingMessageNotification(log_notif) => {
if let Some(obj) = log_notif.params.data.as_object() {
if obj.get("type").and_then(|v| v.as_str()) == Some(SUBAGENT_TOOL_REQUEST_TYPE) {
if let (Some(subagent_id), Some(tool_call)) = (
obj.get("subagent_id").and_then(|v| v.as_str()),
obj.get("tool_call").and_then(|v| v.as_object()),
) {
let tool_name = tool_call
.get("name")
.and_then(|v| v.as_str())
.unwrap_or("unknown");
let arguments = tool_call
.get("arguments")
.and_then(|v| v.as_object())
.cloned();
if interactive {
let _ = progress_bars.hide();
}
if is_stream_json_mode {
emit_stream_event(&StreamEvent::Notification {
extension_id: extension_id.to_string(),
data: NotificationData::Log {
message: output::format_subagent_tool_call_message(
subagent_id,
tool_name,
),
},
});
return;
}
if !is_json_mode {
output::render_subagent_tool_call(
subagent_id,
tool_name,
arguments.as_ref(),
debug,
);
return;
}
}
}
}
let (formatted, subagent_id, notif_type) =
format_logging_notification(&log_notif.params.data, debug);
+111 -12
View File
@@ -314,8 +314,9 @@ fn render_tool_request(req: &ToolRequest, theme: Theme, debug: bool) {
Ok(call) => match call.name.to_string().as_str() {
"developer__text_editor" => render_text_editor_request(call, debug),
"developer__shell" => render_shell_request(call, debug),
"execute_code" => render_execute_code_request(call, debug),
"execute" | "execute_code" => render_execute_code_request(call, debug),
"delegate" => render_delegate_request(call, debug),
"subagent" => render_delegate_request(call, debug),
"todo__write" => render_todo_request(call, debug),
_ => render_default_request(call, debug),
},
@@ -508,7 +509,7 @@ fn render_execute_code_request(call: &CallToolRequestParams, debug: bool) {
"─── {} tool call{} | {} ──────────────────────────",
style(count).cyan(),
plural,
style("execute_code").magenta().dim()
style("execute").magenta().dim()
);
for (i, node) in tool_graph.iter().filter_map(Value::as_object).enumerate() {
@@ -541,6 +542,17 @@ fn render_execute_code_request(call: &CallToolRequestParams, debug: bool) {
style(deps_str).dim()
);
}
let code = call
.arguments
.as_ref()
.and_then(|args| args.get("code"))
.and_then(Value::as_str)
.filter(|c| !c.is_empty());
if code.is_some_and(|_| debug) {
println!("{}", style(code.unwrap_or_default()).green());
}
println!();
}
@@ -602,21 +614,108 @@ fn render_default_request(call: &CallToolRequestParams, debug: bool) {
println!();
}
fn split_tool_name(tool_name: &str) -> (String, String) {
let parts: Vec<_> = tool_name.rsplit("__").collect();
let tool = parts.first().copied().unwrap_or("unknown");
let extension = parts
.split_first()
.map(|(_, s)| s.iter().rev().copied().collect::<Vec<_>>().join("__"))
.unwrap_or_default();
(tool.to_string(), extension)
}
pub fn format_subagent_tool_call_message(subagent_id: &str, tool_name: &str) -> String {
let short_id = subagent_id.rsplit('_').next().unwrap_or(subagent_id);
let (tool, extension) = split_tool_name(tool_name);
if extension.is_empty() {
format!("[subagent:{}] {}", short_id, tool)
} else {
format!("[subagent:{}] {} | {}", short_id, tool, extension)
}
}
pub fn render_subagent_tool_call(
subagent_id: &str,
tool_name: &str,
arguments: Option<&JsonObject>,
debug: bool,
) {
if tool_name == "code_execution__execute_code" {
let tool_graph = arguments
.and_then(|args| args.get("tool_graph"))
.and_then(Value::as_array)
.filter(|arr| !arr.is_empty());
if let Some(tool_graph) = tool_graph {
return render_subagent_tool_graph(subagent_id, tool_graph);
}
}
let tool_header = format!(
"─── {} ──────────────────────────",
style(format_subagent_tool_call_message(subagent_id, tool_name))
.magenta()
.dim()
);
println!();
println!("{}", tool_header);
print_params(&arguments.cloned(), 0, debug);
println!();
}
fn render_subagent_tool_graph(subagent_id: &str, tool_graph: &[Value]) {
let short_id = subagent_id.rsplit('_').next().unwrap_or(subagent_id);
let count = tool_graph.len();
let plural = if count == 1 { "" } else { "s" };
println!();
println!(
"─── {} {} tool call{} | {} ──────────────────────────",
style(format!("[subagent:{}]", short_id)).cyan(),
style(count).cyan(),
plural,
style("execute_code").magenta().dim()
);
for (i, node) in tool_graph.iter().filter_map(Value::as_object).enumerate() {
let tool = node
.get("tool")
.and_then(Value::as_str)
.unwrap_or("unknown");
let desc = node
.get("description")
.and_then(Value::as_str)
.unwrap_or("");
let deps: Vec<_> = node
.get("depends_on")
.and_then(Value::as_array)
.into_iter()
.flatten()
.filter_map(Value::as_u64)
.map(|d| (d + 1).to_string())
.collect();
let deps_str = if deps.is_empty() {
String::new()
} else {
format!(" (uses {})", deps.join(", "))
};
println!(
" {}. {}: {}{}",
style(i + 1).dim(),
style(tool).cyan(),
style(desc).green(),
style(deps_str).dim()
);
}
println!();
}
// Helper functions
fn print_tool_header(call: &CallToolRequestParams) {
let parts: Vec<_> = call.name.rsplit("__").collect();
let (tool, extension) = split_tool_name(&call.name);
let tool_header = format!(
"─── {} | {} ──────────────────────────",
style(parts.first().unwrap_or(&"unknown")),
style(
parts
.split_first()
.map(|(_, s)| s.iter().rev().copied().collect::<Vec<_>>().join("__"))
.unwrap_or_else(|| "unknown".to_string())
)
.magenta()
.dim(),
style(tool),
style(extension).magenta().dim(),
);
println!();
println!("{}", tool_header);
@@ -10,13 +10,26 @@ use rmcp::{
model::{
CallToolResult, CancelledNotificationParam, Content, ErrorCode, ErrorData,
GetPromptRequestParams, GetPromptResult, Implementation, ListPromptsResult, LoggingLevel,
LoggingMessageNotificationParam, PaginatedRequestParams, Prompt, PromptArgument,
LoggingMessageNotificationParam, Meta, PaginatedRequestParams, Prompt, PromptArgument,
PromptMessage, PromptMessageRole, Role, ServerCapabilities, ServerInfo,
},
schemars::JsonSchema,
service::{NotificationContext, RequestContext},
tool, tool_handler, tool_router, RoleServer, ServerHandler,
};
/// Header name for passing working directory through MCP request metadata
const WORKING_DIR_HEADER: &str = "agent-working-dir";
/// Extract working directory from MCP request metadata
fn extract_working_dir_from_meta(meta: &Meta) -> Option<PathBuf> {
meta.0
.get(WORKING_DIR_HEADER)
.and_then(|v| v.as_str())
.filter(|s| !s.is_empty())
.map(PathBuf::from)
}
use serde::{Deserialize, Serialize};
use std::{
collections::HashMap,
@@ -873,6 +886,8 @@ impl DeveloperServer {
let peer = context.peer;
let request_id = context.id;
let working_dir = extract_working_dir_from_meta(&context.meta);
// Validate the shell command
self.validate_shell_command(command)?;
@@ -886,7 +901,7 @@ impl DeveloperServer {
// Execute the command and capture output
let output_result = self
.execute_shell_command(command, &peer, cancellation_token.clone())
.execute_shell_command(command, &peer, cancellation_token.clone(), working_dir)
.await;
// Clean up the process from tracking
@@ -970,6 +985,7 @@ impl DeveloperServer {
command: &str,
peer: &rmcp::service::Peer<RoleServer>,
cancellation_token: CancellationToken,
working_dir: Option<PathBuf>,
) -> Result<String, ErrorData> {
let mut shell_config = ShellConfig::default();
let shell_name = std::path::Path::new(&shell_config.executable)
@@ -977,10 +993,6 @@ impl DeveloperServer {
.and_then(|s| s.to_str())
.unwrap_or("bash");
let working_dir = std::env::var("GOOSE_WORKING_DIR")
.ok()
.map(std::path::PathBuf::from);
if let Some(ref env_file) = self.bash_env_file {
if shell_name == "bash" {
shell_config.envs.push((
+7 -3
View File
@@ -8,7 +8,6 @@ use std::os::unix::process::CommandExt;
pub struct ShellConfig {
pub executable: String,
pub args: Vec<String>,
#[allow(dead_code)]
pub envs: Vec<(OsString, OsString)>,
}
@@ -129,8 +128,13 @@ pub fn configure_shell_command(
.env("EDITOR", "sh -c 'echo \"Interactive editor not available in this environment.\" >&2; exit 1'")
.env("GIT_TERMINAL_PROMPT", "0")
.env("GIT_PAGER", "cat")
.args(&shell_config.args)
.arg(command);
.args(&shell_config.args);
for (key, value) in &shell_config.envs {
command_builder.env(key, value);
}
command_builder.arg(command);
// On Unix systems, create a new process group so we can kill child processes
#[cfg(unix)]
+4
View File
@@ -10,6 +10,10 @@ description.workspace = true
[lints]
workspace = true
[features]
default = []
cuda = ["goose/cuda"]
[dependencies]
goose = { path = "../goose" }
goose-mcp = { path = "../goose-mcp" }
+1
View File
@@ -576,6 +576,7 @@ derive_utoipa!(Icon as IconSchema);
goose::goose_apps::WindowProps,
goose::goose_apps::McpAppResource,
goose::goose_apps::CspMetadata,
goose::goose_apps::PermissionsMetadata,
goose::goose_apps::UiMetadata,
goose::goose_apps::ResourceMetadata,
super::routes::dictation::TranscribeRequest,
+6 -1
View File
@@ -947,7 +947,12 @@ async fn call_tool(
let tool_result = agent
.extension_manager
.dispatch_tool_call(&payload.session_id, tool_call, CancellationToken::default())
.dispatch_tool_call(
&payload.session_id,
tool_call,
None,
CancellationToken::default(),
)
.await
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
@@ -33,7 +33,7 @@
let guestIframe = null;
function createGuestIframe(html) {
function createGuestIframe(html, permissions) {
if (guestIframe) {
guestIframe.remove();
}
@@ -46,6 +46,17 @@
// allow-forms: needed if the app has forms
guestIframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms');
// Build Permission Policy allow attribute from requested permissions
// These control access to sensitive browser APIs like camera, microphone, etc.
var allowList = [];
if (permissions && permissions.camera) allowList.push('camera');
if (permissions && permissions.microphone) allowList.push('microphone');
if (permissions && permissions.geolocation) allowList.push('geolocation');
if (permissions && permissions.clipboardWrite) allowList.push('clipboard-write');
if (allowList.length > 0) {
guestIframe.setAttribute('allow', allowList.join('; '));
}
guestIframe.srcdoc = html;
guestIframe.style.cssText = 'width:100%; height:100%; border:none;';
@@ -73,8 +84,9 @@
if (method === 'ui/notifications/sandbox-resource-ready') {
var params = data.params || {};
var html = params.html || '';
var permissions = params.permissions || null;
createGuestIframe(html);
createGuestIframe(html, permissions);
return;
}
@@ -132,4 +144,4 @@
})();
</script>
</body>
</html>
</html>
+27 -8
View File
@@ -9,13 +9,17 @@ description.workspace = true
[features]
default = []
cuda = ["candle-core/cuda", "candle-nn/cuda"]
[lints]
workspace = true
[build-dependencies]
tokio = { workspace = true }
reqwest = { workspace = true, features = ["json", "rustls-tls-native-roots"], default-features = false }
reqwest = { workspace = true, features = [
"json",
"rustls-tls-native-roots",
], default-features = false }
[dependencies]
lru = "0.16"
@@ -51,7 +55,7 @@ sha2 = "0.10"
base64 = { workspace = true }
url = { workspace = true }
axum = "0.8.1"
webbrowser = {workspace = true}
webbrowser = { workspace = true }
lazy_static = "1.5.0"
tracing = { workspace = true }
tracing-subscriber = "0.3"
@@ -59,8 +63,16 @@ tracing-opentelemetry = "0.28"
opentelemetry = "0.27"
opentelemetry-appender-tracing = "0.27"
opentelemetry_sdk = { version = "0.27", features = ["rt-tokio", "metrics"] }
opentelemetry-otlp = { version = "0.27", features = ["http-proto", "reqwest-client"] }
keyring = { version = "3.6.2", features = ["apple-native", "windows-native", "sync-secret-service", "vendored"] }
opentelemetry-otlp = { version = "0.27", features = [
"http-proto",
"reqwest-client",
] }
keyring = { version = "3.6.2", features = [
"apple-native",
"windows-native",
"sync-secret-service",
"vendored",
] }
serde_yaml = "0.9.34"
once_cell = "1.20.2"
etcetera = { workspace = true }
@@ -69,7 +81,12 @@ utoipa = { version = "4.1", features = ["chrono"] }
tokio-cron-scheduler = "0.14.0"
urlencoding = "2.1"
v_htmlescape = "0.15"
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "sqlite", "chrono", "json"] }
sqlx = { version = "0.8", features = [
"runtime-tokio-rustls",
"sqlite",
"chrono",
"json",
] }
# For Bedrock provider
aws-config = { version = "=1.8.12", features = ["behavior-version-latest"] }
@@ -104,15 +121,17 @@ rubato = "0.16"
zip = "0.6"
sys-info = "0.9"
schemars = { version = "1.0.4", default-features = false, features = ["derive"] }
schemars = { version = "1.0.4", default-features = false, features = [
"derive",
] }
insta = "1.43.2"
paste = "1.0.0"
posthog-rs = "0.3.7"
shellexpand = "3.1.1"
indexmap = "2.12.0"
ignore = { workspace = true }
which = { workspace = true}
boa_engine = "0.21.0"
which = { workspace = true }
pctx_code_mode = "^0.2.2"
unbinder = "0.1.7"
[target.'cfg(target_os = "windows")'.dependencies]
+1
View File
@@ -509,6 +509,7 @@ impl Agent {
.dispatch_tool_call(
&session.id,
tool_call.clone(),
Some(session.working_dir.as_path()),
cancellation_token.unwrap_or_default(),
)
.await;
@@ -531,6 +531,7 @@ impl McpClientTrait for AppsManagerClient {
session_id: &str,
name: &str,
arguments: Option<JsonObject>,
_working_dir: Option<&str>,
_cancel_token: CancellationToken,
) -> Result<CallToolResult, Error> {
let result = match name {
@@ -297,6 +297,7 @@ impl McpClientTrait for ChatRecallClient {
session_id: &str,
name: &str,
arguments: Option<JsonObject>,
_working_dir: Option<&str>,
_cancellation_token: CancellationToken,
) -> Result<CallToolResult, Error> {
let content = match name {
File diff suppressed because it is too large Load Diff
+35 -16
View File
@@ -624,16 +624,6 @@ impl ExtensionManager {
.await?;
Box::new(client)
} else {
// Set GOOSE_WORKING_DIR in the current process for builtin extensions
// since they run in-process and read from std::env::var
if effective_working_dir.exists() && effective_working_dir.is_dir() {
std::env::set_var("GOOSE_WORKING_DIR", &effective_working_dir);
tracing::info!(
"Set GOOSE_WORKING_DIR for builtin extension: {:?}",
effective_working_dir
);
}
let (server_read, client_write) = tokio::io::duplex(65536);
let (client_read, server_write) = tokio::io::duplex(65536);
extension_fn(server_read, server_write);
@@ -1297,6 +1287,7 @@ impl ExtensionManager {
&self,
session_id: &str,
tool_call: CallToolRequestParams,
working_dir: Option<&std::path::Path>,
cancellation_token: CancellationToken,
) -> Result<ToolCallResult> {
let tool_name_str = tool_call.name.to_string();
@@ -1324,12 +1315,14 @@ impl ExtensionManager {
let notifications_receiver = client.lock().await.subscribe().await;
let session_id = session_id.to_string();
let actual_tool_name = resolved.actual_tool_name;
let working_dir_str = working_dir.map(|p| p.to_string_lossy().to_string());
let fut = async move {
tracing::debug!(
"dispatch_tool_call: calling client.call_tool tool={} session_id={}",
"dispatch_tool_call: calling client.call_tool tool={} session_id={} working_dir={:?}",
actual_tool_name,
session_id
session_id,
working_dir_str
);
let client_guard = client.lock().await;
client_guard
@@ -1337,6 +1330,7 @@ impl ExtensionManager {
&session_id,
&actual_tool_name,
arguments,
working_dir_str.as_deref(),
cancellation_token,
)
.await
@@ -1672,6 +1666,7 @@ mod tests {
_session_id: &str,
name: &str,
_arguments: Option<JsonObject>,
_working_dir: Option<&str>,
_cancellation_token: CancellationToken,
) -> Result<CallToolResult, Error> {
match name {
@@ -1745,7 +1740,12 @@ mod tests {
};
let result = extension_manager
.dispatch_tool_call("test-session-id", tool_call, CancellationToken::default())
.dispatch_tool_call(
"test-session-id",
tool_call,
None,
CancellationToken::default(),
)
.await;
assert!(result.is_ok());
@@ -1757,7 +1757,12 @@ mod tests {
};
let result = extension_manager
.dispatch_tool_call("test-session-id", tool_call, CancellationToken::default())
.dispatch_tool_call(
"test-session-id",
tool_call,
None,
CancellationToken::default(),
)
.await;
assert!(result.is_ok());
@@ -1769,7 +1774,12 @@ mod tests {
};
let result = extension_manager
.dispatch_tool_call("test-session-id", tool_call, CancellationToken::default())
.dispatch_tool_call(
"test-session-id",
tool_call,
None,
CancellationToken::default(),
)
.await;
assert!(result.is_ok());
@@ -1781,7 +1791,12 @@ mod tests {
};
let result = extension_manager
.dispatch_tool_call("test-session-id", tool_call, CancellationToken::default())
.dispatch_tool_call(
"test-session-id",
tool_call,
None,
CancellationToken::default(),
)
.await;
assert!(result.is_ok());
@@ -1796,6 +1811,7 @@ mod tests {
.dispatch_tool_call(
"test-session-id",
invalid_tool_call,
None,
CancellationToken::default(),
)
.await;
@@ -1817,6 +1833,7 @@ mod tests {
.dispatch_tool_call(
"test-session-id",
invalid_tool_call,
None,
CancellationToken::default(),
)
.await;
@@ -1918,6 +1935,7 @@ mod tests {
.dispatch_tool_call(
"test-session-id",
unavailable_tool_call,
None,
CancellationToken::default(),
)
.await;
@@ -1941,6 +1959,7 @@ mod tests {
.dispatch_tool_call(
"test-session-id",
available_tool_call,
None,
CancellationToken::default(),
)
.await;
@@ -435,6 +435,7 @@ impl McpClientTrait for ExtensionManagerClient {
session_id: &str,
name: &str,
arguments: Option<JsonObject>,
_working_dir: Option<&str>,
_cancellation_token: CancellationToken,
) -> Result<CallToolResult, Error> {
let result = match name {
+54 -30
View File
@@ -1,6 +1,6 @@
use crate::action_required_manager::ActionRequiredManager;
use crate::agents::types::SharedProvider;
use crate::session_context::SESSION_ID_HEADER;
use crate::session_context::{SESSION_ID_HEADER, WORKING_DIR_HEADER};
use rmcp::model::{
Content, CreateElicitationRequestParams, CreateElicitationResult, ElicitationAction, ErrorCode,
Extensions, JsonObject, Meta,
@@ -51,6 +51,7 @@ pub trait McpClientTrait: Send + Sync {
session_id: &str,
name: &str,
arguments: Option<JsonObject>,
working_dir: Option<&str>,
cancel_token: CancellationToken,
) -> Result<CallToolResult, Error>;
@@ -105,7 +106,7 @@ pub trait McpClientTrait: Send + Sync {
pub struct GooseClient {
notification_handlers: Arc<Mutex<Vec<Sender<ServerNotification>>>>,
provider: SharedProvider,
// Single-slot because calls are serialized per MCP client; see send_request_with_session.
// Single-slot because calls are serialized per MCP client.
current_session_id: Arc<Mutex<Option<String>>>,
}
@@ -386,13 +387,14 @@ impl McpClient {
self.docker_container.as_deref()
}
async fn send_request_with_session(
async fn send_request_with_context(
&self,
session_id: &str,
working_dir: Option<&str>,
request: ClientRequest,
cancel_token: CancellationToken,
) -> Result<ServerResult, Error> {
let request = inject_session_id_into_request(request, Some(session_id));
let request = inject_session_context_into_request(request, Some(session_id), working_dir);
// ExtensionManager serializes calls per MCP connection, so one current_session_id slot
// is sufficient for mapping callbacks to the active request session.
let handle = {
@@ -473,8 +475,9 @@ impl McpClientTrait for McpClient {
cancel_token: CancellationToken,
) -> Result<ListResourcesResult, Error> {
let res = self
.send_request_with_session(
.send_request_with_context(
session_id,
None,
ClientRequest::ListResourcesRequest(ListResourcesRequest {
params: Some(PaginatedRequestParams { meta: None, cursor }),
method: Default::default(),
@@ -497,8 +500,9 @@ impl McpClientTrait for McpClient {
cancel_token: CancellationToken,
) -> Result<ReadResourceResult, Error> {
let res = self
.send_request_with_session(
.send_request_with_context(
session_id,
None,
ClientRequest::ReadResourceRequest(ReadResourceRequest {
params: ReadResourceRequestParams {
meta: None,
@@ -524,8 +528,9 @@ impl McpClientTrait for McpClient {
cancel_token: CancellationToken,
) -> Result<ListToolsResult, Error> {
let res = self
.send_request_with_session(
.send_request_with_context(
session_id,
None,
ClientRequest::ListToolsRequest(ListToolsRequest {
params: Some(PaginatedRequestParams { meta: None, cursor }),
method: Default::default(),
@@ -546,6 +551,7 @@ impl McpClientTrait for McpClient {
session_id: &str,
name: &str,
arguments: Option<JsonObject>,
working_dir: Option<&str>,
cancel_token: CancellationToken,
) -> Result<CallToolResult, Error> {
let request = ClientRequest::CallToolRequest(CallToolRequest {
@@ -560,7 +566,7 @@ impl McpClientTrait for McpClient {
});
let result = self
.send_request_with_session(session_id, request, cancel_token)
.send_request_with_context(session_id, working_dir, request, cancel_token)
.await;
match result? {
@@ -576,8 +582,9 @@ impl McpClientTrait for McpClient {
cancel_token: CancellationToken,
) -> Result<ListPromptsResult, Error> {
let res = self
.send_request_with_session(
.send_request_with_context(
session_id,
None,
ClientRequest::ListPromptsRequest(ListPromptsRequest {
params: Some(PaginatedRequestParams { meta: None, cursor }),
method: Default::default(),
@@ -605,8 +612,9 @@ impl McpClientTrait for McpClient {
_ => None,
};
let res = self
.send_request_with_session(
.send_request_with_context(
session_id,
None,
ClientRequest::GetPromptRequest(GetPromptRequest {
params: GetPromptRequestParams {
meta: None,
@@ -633,20 +641,24 @@ impl McpClientTrait for McpClient {
}
}
/// Injects the given session_id into Extensions._meta.
/// None (or empty) removes any existing session id.
fn inject_session_id_into_extensions(
/// Injects the given session_id and working_dir into Extensions._meta.
/// None (or empty) removes any existing values.
fn inject_session_context_into_extensions(
mut extensions: Extensions,
session_id: Option<&str>,
working_dir: Option<&str>,
) -> Extensions {
let session_id = session_id.filter(|id| !id.is_empty());
let working_dir = working_dir.filter(|dir| !dir.is_empty());
let mut meta_map = extensions
.get::<Meta>()
.map(|meta| meta.0.clone())
.unwrap_or_default();
// JsonObject is case-sensitive, so we use retain for case-insensitive removal
meta_map.retain(|k, _| !k.eq_ignore_ascii_case(SESSION_ID_HEADER));
meta_map.retain(|k, _| {
!k.eq_ignore_ascii_case(SESSION_ID_HEADER) && !k.eq_ignore_ascii_case(WORKING_DIR_HEADER)
});
if let Some(session_id) = session_id {
meta_map.insert(
@@ -655,37 +667,51 @@ fn inject_session_id_into_extensions(
);
}
if let Some(working_dir) = working_dir {
meta_map.insert(
WORKING_DIR_HEADER.to_string(),
Value::String(working_dir.to_string()),
);
}
extensions.insert(Meta(meta_map));
extensions
}
fn inject_session_id_into_request(
fn inject_session_context_into_request(
request: ClientRequest,
session_id: Option<&str>,
working_dir: Option<&str>,
) -> ClientRequest {
match request {
ClientRequest::ListResourcesRequest(mut req) => {
req.extensions = inject_session_id_into_extensions(req.extensions, session_id);
req.extensions =
inject_session_context_into_extensions(req.extensions, session_id, working_dir);
ClientRequest::ListResourcesRequest(req)
}
ClientRequest::ReadResourceRequest(mut req) => {
req.extensions = inject_session_id_into_extensions(req.extensions, session_id);
req.extensions =
inject_session_context_into_extensions(req.extensions, session_id, working_dir);
ClientRequest::ReadResourceRequest(req)
}
ClientRequest::ListToolsRequest(mut req) => {
req.extensions = inject_session_id_into_extensions(req.extensions, session_id);
req.extensions =
inject_session_context_into_extensions(req.extensions, session_id, working_dir);
ClientRequest::ListToolsRequest(req)
}
ClientRequest::CallToolRequest(mut req) => {
req.extensions = inject_session_id_into_extensions(req.extensions, session_id);
req.extensions =
inject_session_context_into_extensions(req.extensions, session_id, working_dir);
ClientRequest::CallToolRequest(req)
}
ClientRequest::ListPromptsRequest(mut req) => {
req.extensions = inject_session_id_into_extensions(req.extensions, session_id);
req.extensions =
inject_session_context_into_extensions(req.extensions, session_id, working_dir);
ClientRequest::ListPromptsRequest(req)
}
ClientRequest::GetPromptRequest(mut req) => {
req.extensions = inject_session_id_into_extensions(req.extensions, session_id);
req.extensions =
inject_session_context_into_extensions(req.extensions, session_id, working_dir);
ClientRequest::GetPromptRequest(req)
}
other => other,
@@ -814,7 +840,8 @@ mod tests {
*slot = Some(session_id.to_string());
}
let extensions = inject_session_id_into_extensions(Extensions::new(), ext_session);
let extensions =
inject_session_context_into_extensions(Extensions::new(), ext_session, None);
let resolved = client.resolve_session_id(&extensions).await;
@@ -830,8 +857,6 @@ mod tests {
#[test_case(list_prompts_request; "list_prompts")]
#[test_case(get_prompt_request; "get_prompt")]
fn test_request_injects_session(request_builder: fn(Extensions) -> ClientRequest) {
use serde_json::json;
let session_id = "test-session-id";
let mut extensions = Extensions::new();
extensions.insert(
@@ -843,7 +868,7 @@ mod tests {
);
let request = request_builder(extensions);
let request = inject_session_id_into_request(request, Some(session_id));
let request = inject_session_context_into_request(request, Some(session_id), None);
let extensions = request_extensions(&request).expect("request should have extensions");
let meta = extensions
.get::<Meta>()
@@ -861,10 +886,9 @@ mod tests {
#[test]
fn test_session_id_in_mcp_meta() {
use serde_json::json;
let session_id = "test-session-789";
let extensions = inject_session_id_into_extensions(Default::default(), Some(session_id));
let extensions =
inject_session_context_into_extensions(Default::default(), Some(session_id), None);
let mcp_meta = extensions.get::<Meta>().unwrap();
assert_eq!(
@@ -904,7 +928,7 @@ mod tests {
expected_meta: serde_json::Value,
) {
use rmcp::model::Extensions;
use serde_json::{from_value, json};
use serde_json::from_value;
let mut extensions = Extensions::new();
extensions.insert(
@@ -916,7 +940,7 @@ mod tests {
.unwrap(),
);
let extensions = inject_session_id_into_extensions(extensions, session_id);
let extensions = inject_session_context_into_extensions(extensions, session_id, None);
let mcp_meta = extensions.get::<Meta>().unwrap();
assert_eq!(&mcp_meta.0, expected_meta.as_object().unwrap());
+1
View File
@@ -32,5 +32,6 @@ pub use execute_commands::COMPACT_TRIGGERS;
pub use extension::ExtensionConfig;
pub use extension_manager::ExtensionManager;
pub use prompt_manager::PromptManager;
pub use subagent_handler::SUBAGENT_TOOL_REQUEST_TYPE;
pub use subagent_task_config::TaskConfig;
pub use types::{FrontendTool, RetryConfig, SessionConfig, SuccessCheck};
+305 -42
View File
@@ -1,12 +1,18 @@
use crate::{
agents::{subagent_task_config::TaskConfig, Agent, AgentConfig, AgentEvent, SessionConfig},
conversation::{message::Message, Conversation},
conversation::{
message::{Message, MessageContent},
Conversation,
},
prompt_template::render_template,
recipe::Recipe,
};
use anyhow::{anyhow, Result};
use futures::StreamExt;
use rmcp::model::{ErrorCode, ErrorData};
use rmcp::model::{
ErrorCode, ErrorData, LoggingLevel, LoggingMessageNotification,
LoggingMessageNotificationMethod, LoggingMessageNotificationParam, ServerNotification,
};
use serde::Serialize;
use std::future::Future;
use std::pin::Pin;
@@ -17,7 +23,7 @@ use tracing::{debug, info};
pub type OnMessageCallback = Arc<dyn Fn(&Message) + Send + Sync>;
#[derive(Serialize)]
pub(crate) struct SubagentPromptContext {
pub struct SubagentPromptContext {
pub max_turns: usize,
pub subagent_id: String,
pub task_instructions: String,
@@ -36,7 +42,7 @@ pub async fn run_complete_subagent_task(
session_id: String,
cancellation_token: Option<CancellationToken>,
) -> Result<String, anyhow::Error> {
run_subagent_task_with_callback(
run_complete_subagent_task_with_notifications(
config,
recipe,
task_config,
@@ -57,7 +63,7 @@ pub async fn run_subagent_task_with_callback(
cancellation_token: Option<CancellationToken>,
on_message: Option<OnMessageCallback>,
) -> Result<String, anyhow::Error> {
let (messages, final_output) = get_agent_messages(
let (messages, final_output) = get_agent_messages_with_callback(
config,
recipe,
task_config,
@@ -78,7 +84,44 @@ pub async fn run_subagent_task_with_callback(
return Ok(output);
}
let response_text = if return_last_only {
Ok(extract_response_text(&messages, return_last_only))
}
pub async fn run_complete_subagent_task_with_notifications(
config: AgentConfig,
recipe: Recipe,
task_config: TaskConfig,
return_last_only: bool,
session_id: String,
cancellation_token: Option<CancellationToken>,
notification_tx: Option<tokio::sync::mpsc::UnboundedSender<rmcp::model::ServerNotification>>,
) -> Result<String, anyhow::Error> {
let (messages, final_output) = get_agent_messages_with_notifications(
config,
recipe,
task_config,
session_id,
cancellation_token,
notification_tx,
)
.await
.map_err(|e| {
ErrorData::new(
ErrorCode::INTERNAL_ERROR,
format!("Failed to execute task: {}", e),
None,
)
})?;
if let Some(output) = final_output {
return Ok(output);
}
Ok(extract_response_text(&messages, return_last_only))
}
fn extract_response_text(messages: &Conversation, return_last_only: bool) -> String {
if return_last_only {
messages
.messages()
.last()
@@ -129,12 +172,12 @@ pub async fn run_subagent_task_with_callback(
.collect();
all_text_content.join("\n")
};
Ok(response_text)
}
}
fn get_agent_messages(
pub const SUBAGENT_TOOL_REQUEST_TYPE: &str = "subagent_tool_request";
fn get_agent_messages_with_callback(
config: AgentConfig,
recipe: Recipe,
task_config: TaskConfig,
@@ -152,11 +195,11 @@ fn get_agent_messages(
let agent = Arc::new(Agent::with_config(config));
agent
.update_provider(task_config.provider, &session_id)
.update_provider(task_config.provider.clone(), &session_id)
.await
.map_err(|e| anyhow!("Failed to set provider on sub agent: {}", e))?;
for extension in task_config.extensions {
for extension in &task_config.extensions {
if let Err(e) = agent.add_extension(extension.clone(), &session_id).await {
debug!(
"Failed to add extension '{}' to subagent: {}",
@@ -171,24 +214,8 @@ fn get_agent_messages(
.apply_recipe_components(recipe.response.clone(), true)
.await;
let tools = agent.list_tools(&session_id, None).await;
let subagent_prompt = render_template(
"subagent_system.md",
&SubagentPromptContext {
max_turns: task_config
.max_turns
.expect("TaskConfig always sets max_turns"),
subagent_id: session_id.clone(),
task_instructions: system_instructions,
tool_count: tools.len(),
available_tools: tools
.iter()
.map(|t| t.name.to_string())
.collect::<Vec<_>>()
.join(", "),
},
)
.map_err(|e| anyhow!("Failed to render subagent system prompt: {}", e))?;
let subagent_prompt =
build_subagent_prompt(&agent, &task_config, &session_id, system_instructions).await?;
agent.override_system_prompt(subagent_prompt).await;
let user_message = Message::user().with_text(user_task);
@@ -206,10 +233,15 @@ fn get_agent_messages(
retry_config: recipe.retry,
};
let mut stream = agent
.reply(user_message, session_config, cancellation_token)
let mut stream =
crate::session_context::with_session_id(Some(session_id.to_string()), async {
agent
.reply(user_message, session_config, cancellation_token)
.await
})
.await
.map_err(|e| anyhow!("Failed to get reply from agent: {}", e))?;
while let Some(message_result) = stream.next().await {
match message_result {
Ok(AgentEvent::Message(msg)) => {
@@ -229,17 +261,248 @@ fn get_agent_messages(
}
}
let final_output = if has_response_schema {
agent
.final_output_tool
.lock()
.await
.as_ref()
.and_then(|tool| tool.final_output.clone())
} else {
None
};
let final_output = get_final_output(&agent, has_response_schema).await;
Ok((conversation, final_output))
})
}
fn get_agent_messages_with_notifications(
config: AgentConfig,
recipe: Recipe,
task_config: TaskConfig,
session_id: String,
cancellation_token: Option<CancellationToken>,
notification_tx: Option<tokio::sync::mpsc::UnboundedSender<rmcp::model::ServerNotification>>,
) -> AgentMessagesFuture {
Box::pin(async move {
let system_instructions = recipe.instructions.clone().unwrap_or_default();
let user_task = recipe
.prompt
.clone()
.unwrap_or_else(|| "Begin.".to_string());
let agent = Arc::new(Agent::with_config(config));
agent
.update_provider(task_config.provider.clone(), &session_id)
.await
.map_err(|e| anyhow!("Failed to set provider on sub agent: {}", e))?;
for extension in &task_config.extensions {
if let Err(e) = agent.add_extension(extension.clone(), &session_id).await {
debug!(
"Failed to add extension '{}' to subagent: {}",
extension.name(),
e
);
}
}
let has_response_schema = recipe.response.is_some();
agent
.apply_recipe_components(recipe.response.clone(), true)
.await;
let subagent_prompt =
build_subagent_prompt(&agent, &task_config, &session_id, system_instructions).await?;
agent.override_system_prompt(subagent_prompt).await;
let user_message = Message::user().with_text(user_task);
let mut conversation = Conversation::new_unvalidated(vec![user_message.clone()]);
if let Some(activities) = recipe.activities {
for activity in activities {
info!("Recipe activity: {}", activity);
}
}
let session_config = SessionConfig {
id: session_id.clone(),
schedule_id: None,
max_turns: task_config.max_turns.map(|v| v as u32),
retry_config: recipe.retry,
};
conversation = run_subagent_stream(
agent.clone(),
user_message,
session_config,
cancellation_token,
&session_id,
&notification_tx,
conversation,
)
.await?;
let final_output = get_final_output(&agent, has_response_schema).await;
Ok((conversation, final_output))
})
}
async fn build_subagent_prompt(
agent: &Agent,
task_config: &TaskConfig,
session_id: &str,
system_instructions: String,
) -> Result<String> {
let tools = agent.list_tools(session_id, None).await;
render_template(
"subagent_system.md",
&SubagentPromptContext {
max_turns: task_config
.max_turns
.expect("TaskConfig always sets max_turns"),
subagent_id: session_id.to_string(),
task_instructions: system_instructions,
tool_count: tools.len(),
available_tools: tools
.iter()
.map(|t| t.name.to_string())
.collect::<Vec<_>>()
.join(", "),
},
)
.map_err(|e| anyhow!("Failed to render subagent system prompt: {}", e))
}
async fn run_subagent_stream(
agent: Arc<Agent>,
user_message: Message,
session_config: SessionConfig,
cancellation_token: Option<CancellationToken>,
session_id: &str,
notification_tx: &Option<tokio::sync::mpsc::UnboundedSender<rmcp::model::ServerNotification>>,
mut conversation: Conversation,
) -> Result<Conversation> {
let mut stream = crate::session_context::with_session_id(Some(session_id.to_string()), async {
agent
.reply(user_message, session_config, cancellation_token)
.await
})
.await
.map_err(|e| anyhow!("Failed to get reply from agent: {}", e))?;
while let Some(message_result) = stream.next().await {
match message_result {
Ok(AgentEvent::Message(msg)) => {
if let Some(ref tx) = notification_tx {
for content in &msg.content {
if let Some(notif) = create_tool_notification(content, session_id) {
if tx.send(notif).is_err() {
debug!("Notification receiver dropped for subagent {}", session_id);
}
}
}
}
conversation.push(msg);
}
Ok(AgentEvent::McpNotification(_)) => {}
Ok(AgentEvent::ModelChange { .. }) => {}
Ok(AgentEvent::HistoryReplaced(updated_conversation)) => {
conversation = updated_conversation;
}
Err(e) => {
tracing::error!("Error receiving message from subagent: {}", e);
break;
}
}
}
Ok(conversation)
}
async fn get_final_output(agent: &Agent, has_response_schema: bool) -> Option<String> {
if has_response_schema {
agent
.final_output_tool
.lock()
.await
.as_ref()
.and_then(|tool| tool.final_output.clone())
} else {
None
}
}
fn create_tool_notification(
content: &MessageContent,
subagent_id: &str,
) -> Option<ServerNotification> {
if let MessageContent::ToolRequest(req) = content {
let tool_call = req.tool_call.as_ref().ok()?;
Some(ServerNotification::LoggingMessageNotification(
LoggingMessageNotification {
method: LoggingMessageNotificationMethod,
params: LoggingMessageNotificationParam {
level: LoggingLevel::Info,
logger: Some(format!("subagent:{}", subagent_id)),
data: serde_json::json!({
"type": SUBAGENT_TOOL_REQUEST_TYPE,
"subagent_id": subagent_id,
"tool_call": {
"name": tool_call.name,
"arguments": tool_call.arguments
}
}),
},
extensions: Default::default(),
},
))
} else {
None
}
}
#[cfg(test)]
mod tests {
use super::{create_tool_notification, SUBAGENT_TOOL_REQUEST_TYPE};
use crate::conversation::message::MessageContent;
use rmcp::model::{CallToolRequestParams, ServerNotification};
use serde_json::json;
#[test]
fn create_tool_notification_for_tool_request() {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "developer__shell".to_string().into(),
arguments: Some(json!({"command": "ls"}).as_object().unwrap().clone()),
};
let content = MessageContent::tool_request("req1", Ok(tool_call));
let notification =
create_tool_notification(&content, "session_1").expect("expected notification");
let ServerNotification::LoggingMessageNotification(log_notif) = notification else {
panic!("expected logging notification");
};
let data = log_notif
.params
.data
.as_object()
.expect("expected object data");
assert_eq!(
data.get("type").and_then(|v| v.as_str()),
Some(SUBAGENT_TOOL_REQUEST_TYPE)
);
assert_eq!(
data.get("subagent_id").and_then(|v| v.as_str()),
Some("session_1")
);
let tool_call = data
.get("tool_call")
.and_then(|v| v.as_object())
.expect("expected tool_call object");
assert_eq!(
tool_call.get("name").and_then(|v| v.as_str()),
Some("developer__shell")
);
}
#[test]
fn create_tool_notification_ignores_non_tool_request() {
let content = MessageContent::text("hello");
assert!(create_tool_notification(&content, "session_1").is_none());
}
}
+2 -1
View File
@@ -1463,6 +1463,7 @@ impl McpClientTrait for SummonClient {
session_id: &str,
name: &str,
arguments: Option<JsonObject>,
_working_dir: Option<&str>,
cancellation_token: CancellationToken,
) -> Result<CallToolResult, Error> {
let content = match name {
@@ -1647,7 +1648,7 @@ You review code."#;
assert!(names.contains(&"load") && names.contains(&"delegate"));
let result = client
.call_tool("test", "unknown", None, CancellationToken::new())
.call_tool("test", "unknown", None, None, CancellationToken::new())
.await
.unwrap();
assert!(result.is_error.unwrap_or(false));
@@ -174,6 +174,7 @@ impl McpClientTrait for TodoClient {
session_id: &str,
name: &str,
arguments: Option<JsonObject>,
_working_dir: Option<&str>,
_cancellation_token: CancellationToken,
) -> Result<CallToolResult, Error> {
let content = match name {
+3 -1
View File
@@ -4,4 +4,6 @@ pub mod resource;
pub use app::{fetch_mcp_apps, GooseApp, WindowProps};
pub use cache::McpAppCache;
pub use resource::{CspMetadata, McpAppResource, ResourceMetadata, UiMetadata};
pub use resource::{
CspMetadata, McpAppResource, PermissionsMetadata, ResourceMetadata, UiMetadata,
};
+28
View File
@@ -14,6 +14,30 @@ pub struct CspMetadata {
pub resource_domains: Option<Vec<String>>,
}
/// Sandbox permissions for MCP Apps
/// Specifies which browser capabilities the UI needs access to.
/// Maps to the iframe Permission Policy `allow` attribute.
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq, Default)]
#[serde(rename_all = "camelCase")]
pub struct PermissionsMetadata {
/// Request camera access (maps to Permission Policy `camera` feature)
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub camera: bool,
/// Request microphone access (maps to Permission Policy `microphone` feature)
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub microphone: bool,
/// Request geolocation access (maps to Permission Policy `geolocation` feature)
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub geolocation: bool,
/// Request clipboard write access (maps to Permission Policy `clipboard-write` feature)
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub clipboard_write: bool,
}
fn is_default_permissions(p: &PermissionsMetadata) -> bool {
*p == PermissionsMetadata::default()
}
/// UI-specific metadata for MCP resources
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
@@ -21,6 +45,9 @@ pub struct UiMetadata {
/// Content Security Policy configuration
#[serde(skip_serializing_if = "Option::is_none")]
pub csp: Option<CspMetadata>,
/// Sandbox permissions requested by the UI
#[serde(default, skip_serializing_if = "is_default_permissions")]
pub permissions: PermissionsMetadata,
/// Preferred domain for the app (used for CORS)
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
@@ -87,6 +114,7 @@ impl McpAppResource {
meta: Some(ResourceMetadata {
ui: Some(UiMetadata {
csp: Some(csp),
permissions: PermissionsMetadata::default(),
domain: None,
prefers_border: None,
}),
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -36,7 +36,7 @@ const DEFAULT_TIMEOUT_SECS: u64 = 600;
const DATABRICKS_PROVIDER_NAME: &str = "databricks";
pub const DATABRICKS_DEFAULT_MODEL: &str = "databricks-claude-sonnet-4";
const DATABRICKS_DEFAULT_FAST_MODEL: &str = "gemini-2-5-flash";
const DATABRICKS_DEFAULT_FAST_MODEL: &str = "databricks-claude-haiku-4-5";
pub const DATABRICKS_KNOWN_MODELS: &[&str] = &[
"databricks-claude-sonnet-4-5",
"databricks-claude-3-7-sonnet",
+1
View File
@@ -1,6 +1,7 @@
use tokio::task_local;
pub const SESSION_ID_HEADER: &str = "agent-session-id";
pub const WORKING_DIR_HEADER: &str = "agent-working-dir";
task_local! {
pub static SESSION_ID: Option<String>;
+6 -1
View File
@@ -267,7 +267,12 @@ async fn test_replayed_session(
arguments: tool_call.arguments,
};
let result = extension_manager
.dispatch_tool_call("test-session-id", tool_call, CancellationToken::default())
.dispatch_tool_call(
"test-session-id",
tool_call,
None,
CancellationToken::default(),
)
.await;
let tool_result = result?;
@@ -34,9 +34,10 @@ goose is compatible with a wide range of LLM providers, allowing you to choose a
| [LiteLLM](https://docs.litellm.ai/docs/) | LiteLLM proxy supporting multiple models with automatic prompt caching and unified API access. | `LITELLM_HOST`, `LITELLM_BASE_PATH` (optional), `LITELLM_API_KEY` (optional), `LITELLM_CUSTOM_HEADERS` (optional), `LITELLM_TIMEOUT` (optional) |
| [Mistral AI](https://mistral.ai/) | Provides access to Mistral models including general-purpose models, specialized coding models (Codestral), and multimodal models (Pixtral). | `MISTRAL_API_KEY` |
| [Ollama](https://ollama.com/) | Local model runner supporting Qwen, Llama, DeepSeek, and other open-source models. **Because this provider runs locally, you must first [download and run a model](#local-llms).** | `OLLAMA_HOST` |
| [Ramalama](https://ramalama.ai/) | Local model using native [OCI](https://opencontainers.org/) container runtimes, [CNCF](https://www.cncf.io/) tools, and supporting models as OCI artifacts. Ramalama API an compatible alternative to Ollama and can be used with the goose Ollama provider. Supports Qwen, Llama, DeepSeek, and other open-source models. **Because this provider runs locally, you must first [download and run a model](#local-llms).** | `OLLAMA_HOST` |
| [OpenAI](https://platform.openai.com/api-keys) | Provides gpt-4o, o1, and other advanced language models. Also supports OpenAI-compatible endpoints (e.g., self-hosted LLaMA, vLLM, KServe). **o1-mini and o1-preview are not supported because goose uses tool calling.** | `OPENAI_API_KEY`, `OPENAI_HOST` (optional), `OPENAI_ORGANIZATION` (optional), `OPENAI_PROJECT` (optional), `OPENAI_CUSTOM_HEADERS` (optional) |
| [OpenRouter](https://openrouter.ai/) | API gateway for unified access to various models with features like rate-limiting management. | `OPENROUTER_API_KEY` |
| [OVHcloud AI](https://www.ovhcloud.com/en/public-cloud/ai-endpoints/) | Provides access to open-source models including Qwen, Llama, Mistral, and DeepSeek through AI Endpoints service. | `OVHCLOUD_API_KEY` |
| [Ramalama](https://ramalama.ai/) | Local model using native [OCI](https://opencontainers.org/) container runtimes, [CNCF](https://www.cncf.io/) tools, and supporting models as OCI artifacts. Ramalama API is a compatible alternative to Ollama and can be used with the goose Ollama provider. Supports Qwen, Llama, DeepSeek, and other open-source models. **Because this provider runs locally, you must first [download and run a model](#local-llms).** | `OLLAMA_HOST` |
| [Snowflake](https://docs.snowflake.com/user-guide/snowflake-cortex/aisql#choosing-a-model) | Access the latest models using Snowflake Cortex services, including Claude models. **Requires a Snowflake account and programmatic access token (PAT)**. | `SNOWFLAKE_HOST`, `SNOWFLAKE_TOKEN` |
| [Tetrate Agent Router Service](https://router.tetrate.ai) | Unified API gateway for AI models including Claude, Gemini, GPT, open-weight models, and others. Supports PKCE authentication flow for secure API key generation. | `TETRATE_API_KEY`, `TETRATE_HOST` (optional) |
| [Venice AI](https://venice.ai/home) | Provides access to open source models like Llama, Mistral, and Qwen while prioritizing user privacy. **Requires an account and an [API key](https://docs.venice.ai/overview/guides/generating-api-key)**. | `VENICE_API_KEY`, `VENICE_HOST` (optional), `VENICE_BASE_PATH` (optional), `VENICE_MODELS_PATH` (optional) |
@@ -19,6 +19,7 @@ The configuration files allow you to set default behaviors, configure language m
- **permission.yaml** - Tool permission levels configured via `goose configure`
- **secrets.yaml** - API keys and secrets (only when keyring is disabled)
- **permissions/tool_permissions.json** - Runtime permission decisions (auto-managed)
- **prompts/** - Customized [prompt templates](/docs/guides/prompt-templates)
In addition to editing configuration files directly, many settings can be managed from goose Desktop and goose CLI:
- **goose Desktop**: From the `Settings` page and the bottom toolbar
+28 -10
View File
@@ -38,6 +38,10 @@ The goose CLI plan mode uses two configuration values:
goose also supports automatic model switching with [Lead/Worker mode](/docs/guides/environment-variables#leadworker-model-configuration), which provides turn-based switching between two models to help balance model capabilities with cost and speed.
:::
:::tip Customize Plan Format
You can also customize how goose creates plans by editing the `plan.md` [prompt template](/docs/guides/prompt-templates).
:::
### Set goose planner environment variables
You might add these lines to your bash shell config file (.bashrc) to add the planner environment variables:
```bash
@@ -318,13 +322,27 @@ To enter planning mode, type `/plan`. Optionally, you can append your plan desc
( O)> /endplan
```
<div className={styles.categorySection}>
<h2 className={styles.categoryTitle}>📚 Featured Tutorial</h2>
<div className={styles.cardGrid}>
<Card
title="Planning Complex Tasks"
description="Learn how to use the Plan feature to break down complex tasks into manageable, executable steps."
link="/docs/tutorials/plan-feature-devcontainer-setup"
/>
</div>
</div>
## Additional Resources
import ContentCardCarousel from '@site/src/components/ContentCardCarousel';
import blogBanner from '@site/blog/2025-12-19-does-your-ai-agent-need-a-plan/blog-banner.png';
<ContentCardCarousel
items={[
{
type: 'blog',
title: 'Does Your AI Agent Need a Plan?',
description: 'Knowing when and how to plan with an AI agent can produce better results.',
thumbnailUrl: blogBanner,
linkUrl: '/goose/blog/2025/12/19/does-your-ai-agent-need-a-plan',
date: '2025-12-19',
duration: '7 min read'
},
{
type: 'topic',
title: 'Planning Complex Tasks',
description: 'Learn how to use the Plan feature to break down complex tasks into manageable, executable steps.',
linkUrl: '/goose/docs/tutorials/plan-feature-devcontainer-setup',
}
]}
/>
@@ -55,6 +55,71 @@ export GOOSE_PROVIDER__HOST="https://api.anthropic.com"
export GOOSE_PROVIDER__API_KEY="your-api-key-here"
```
### Custom Model Definitions
Define custom model configurations with provider-specific parameters and context limits. This is useful for enabling provider beta features (like extended context windows) or configuring models with specific settings.
| Variable | Purpose | Values | Default |
|----------|---------|---------|---------|
| `GOOSE_PREDEFINED_MODELS` | Define custom model configurations | JSON array of model objects | None |
**Model Configuration Fields:**
| Field | Required | Type | Description |
|-------|----------|------|-------------|
| `id` | No | number | Optional numeric identifier |
| `name` | Yes | string | Model name used to reference this configuration |
| `provider` | Yes | string | Provider name (e.g., "databricks", "openai", "anthropic") |
| `alias` | No | string | Display name for the model |
| `subtext` | No | string | Additional descriptive text |
| `context_limit` | No | number | Override the default context window size in tokens |
| `request_params` | No | object | Provider-specific parameters included in API requests |
:::info
The `id`, `alias`, and `subtext` fields are currently not used.
:::
When a custom model's `context_limit` is specified, it takes precedence over pattern-matching but can still be overridden by explicit environment variables like [`GOOSE_CONTEXT_LIMIT`](#model-context-limit-overrides).
**Examples**
```bash
# Enable Anthropic's 1M context window with beta header
export GOOSE_PREDEFINED_MODELS='[
{
"id": 1,
"name": "claude-sonnet-4-1m",
"provider": "anthropic",
"alias": "Claude Sonnet 4 (1M context)",
"subtext": "Anthropic",
"context_limit": 1000000,
"request_params": {
"anthropic_beta": ["context-1m-2025-08-07"]
}
}
]'
# Define multiple custom models
export GOOSE_PREDEFINED_MODELS='[
{
"id": 1,
"name": "gpt-4-custom",
"provider": "openai",
"alias": "GPT-4 (200k)",
"context_limit": 200000
},
{
"id": 2,
"name": "internal-model",
"provider": "databricks",
"alias": "Internal Model (500k)",
"context_limit": 500000
}
]'
```
Custom context limits and request parameters are applied when the model is used. Custom context limits are displayed in goose CLI's [token usage indicator](/docs/guides/sessions/smart-context-management#token-usage).
### Lead/Worker Model Configuration
These variables configure a [lead/worker model pattern](/docs/tutorials/lead-worker) where a powerful lead model handles initial planning and complex reasoning, then switches to a faster/cheaper worker model for execution. The switch happens automatically based on your settings.
@@ -157,6 +222,7 @@ These variables control how goose manages conversation sessions and context.
| `GOOSE_MAX_TURNS` | [Maximum number of turns](/docs/guides/sessions/smart-context-management#maximum-turns) allowed without user input | Integer (e.g., 10, 50, 100) | 1000 |
| `GOOSE_SUBAGENT_MAX_TURNS` | Sets the maximum turns allowed for a [subagent](/docs/guides/subagents) to complete before timeout | Integer (e.g., 25) | 25 |
| `CONTEXT_FILE_NAMES` | Specifies custom filenames for [hint/context files](/docs/guides/context-engineering/using-goosehints#custom-context-files) | JSON array of strings (e.g., `["CLAUDE.md", ".goosehints"]`) | `[".goosehints"]` |
| `GOOSE_PROMPT_EDITOR` | [External editor](/docs/guides/goose-cli-commands#external-editor-mode) to use for composing prompts instead of CLI input | Editor command (e.g., "vim", "code --wait") | Unset (uses CLI input) |
| `GOOSE_CLI_THEME` | [Theme](/docs/guides/goose-cli-commands#themes) for CLI response markdown | "light", "dark", "ansi" | "dark" |
| `GOOSE_CLI_NEWLINE_KEY` | Customize the keyboard shortcut for [inserting newlines in CLI input](/docs/guides/goose-cli-commands#keyboard-shortcuts) | Single character (e.g., "n", "m") | "j" (Ctrl+J) |
| `GOOSE_RANDOM_THINKING_MESSAGES` | Controls whether to show amusing random messages during processing | "true", "false" | "true" |
@@ -187,6 +253,9 @@ export GOOSE_SUBAGENT_MAX_TURNS=50
# Use multiple context files
export CONTEXT_FILE_NAMES='["CLAUDE.md", ".goosehints", ".cursorrules", "project_rules.txt"]'
# Use vim for composing prompts
export GOOSE_PROMPT_EDITOR=vim
# Set the ANSI theme for the session
export GOOSE_CLI_THEME=ansi
@@ -187,6 +187,7 @@ Start or resume interactive chat sessions.
- **`-n, --name <name>`**: Give the session a name
- **`--path <path>`**: Legacy parameter for specifying session by file path
- **`-r, --resume`**: Resume a previous session
- **`--fork`**: Create a new duplicate session with copied history. Must be used with `--resume`. Provide `--name` or `--session-id` to fork a specific session. Otherwise forks the most recent session.
- **`--history`**: Show previous messages when resuming a session
- **`--debug`**: Enable debug mode to output complete tool responses, detailed parameter values, and full file paths
- **`--max-tool-repetitions <NUMBER>`**: Set the maximum number of times the same tool can be called consecutively with identical parameters. Helps prevent infinite loops.
@@ -208,6 +209,12 @@ goose session --resume --session-id 20251108_2
goose session --resume --path ./session.json # exported session
goose session --resume --path ./session.jsonl # legacy session storage
# Fork a specific session by name
goose session --resume --fork --name my-project
# Fork the most recent session and show message history
goose session --resume --fork --history
# Start with extensions
goose session --with-extension "npx -y @modelcontextprotocol/server-memory"
goose session --with-builtin developer
@@ -740,6 +747,59 @@ goose session --name use-custom-theme
---
### External Editor Mode
For composing longer prompts or working with complex code snippets, you can configure goose to use your preferred text editor instead of CLI input. This replaces the standard CLI input and keyboard shortcuts for the entire session.
**How it works:**
1. goose opens your configured editor with a template file
2. Type your prompt after the `# Your prompt:` heading (conversation history is shown below for context)
3. Save the file and close/exit the editor to send your prompt to goose
4. goose processes your prompt and reopens the editor with the response added to the conversation history
5. Repeat steps 2-4 for each message in the conversation
You can use any editor that accepts a file path argument, such as vim, nano, emacs, and VS Code.
**Configuration:**
<Tabs>
<TabItem value="envvar" label="Environment Variable" default>
Applies to the current session only.
```bash
# For terminal editors like vim or nano
export GOOSE_PROMPT_EDITOR=vim
# Or for GUI editors like VS Code (use --wait flag)
export GOOSE_PROMPT_EDITOR="code --wait"
```
</TabItem>
<TabItem value="config" label="Config File">
Persists across all sessions unless overridden by the environment variable.
1. Navigate to the goose [configuration file](/docs/guides/config-files). For example, navigate to `~/.config/goose/config.yaml` on macOS.
2. Add `GOOSE_PROMPT_EDITOR` and set it to your preferred editor:
```yaml
# For terminal editors like vim or nano
GOOSE_PROMPT_EDITOR: vim
# Or for GUI editors like VS Code (use --wait flag)
GOOSE_PROMPT_EDITOR: code --wait
```
</TabItem>
</Tabs>
**Using GUI Editors:**
GUI editors require a `--wait` or equivalent flag to ensure goose waits for you to finish editing before continuing. Without this flag, the editor opens but goose immediately proceeds as if you're done. Terminal editors like vim and nano don't need this flag.
---
### Command History Search
The `Ctrl+R` shortcut provides interactive search through your stored CLI [command history](/docs/guides/logs#command-history). This feature makes it easy to find and reuse recent commands without retyping them. When you type a search term, goose searches backwards through your history for matches.
@@ -32,7 +32,7 @@ Traditional MCP tool calling and Code Mode are two different approaches to the s
| Aspect | Traditional | Code Mode |
|--------|------------------|-----------|
| **Tool Discovery** | All tools from enabled extensions, for example:<br/>• `developer.shell`<br/>• `developer.text_editor`<br/>• `github.list_issues`<br/>• `github.get_pull_request`<br/>• `slack.send_message`<br/>• ... *potentially many more* | Code Execution extension's meta-tools:<br/>• `search_modules`<br/>• `read_module`<br/>• `execute_code`<br/><br/>The LLM uses these tools to discover tools from other enabled extensions as needed |
| **Tool Discovery** | All tools from enabled extensions, for example:<br/>• `developer.shell`<br/>• `developer.text_editor`<br/>• `github.list_issues`<br/>• `github.get_pull_request`<br/>• `slack.send_message`<br/>• ... *potentially many more* | Code Execution extension's meta-tools:<br/>• `list_functions`<br/>• `get_function_details`<br/>• `execute`<br/><br/>The LLM uses these tools to discover tools from other enabled extensions as needed |
| **Tool Calling** | • Sequential tool calls<br/>• Each result sent to the LLM before the next call | • May require tool discovery calls<br/>• Multiple tool calls batched in one execution<br/>• Intermediate results are chained and processed locally |
| **Context Window** | Every LLM call includes all tool definitions from enabled extensions | Every LLM call includes the 3 meta-tool definitions, plus any tool definitions previously discovered in the session |
| **Best For** | • 1-3 enabled extensions<br/>• Simple tasks using 1-2 tools | • 5+ extensions<br/>• Well-defined multi-step workflows |
@@ -0,0 +1,137 @@
---
sidebar_position: 86
title: Customizing Prompt Templates
sidebar_label: Prompt Templates
description: Learn how to customize the prompt templates that define goose's behavior in different situations
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import { PanelLeft } from 'lucide-react';
goose comes with built-in prompt templates that guide its behavior in different situations. You can edit these templates to customize how goose responds, creates plans, decides what to save during compaction, and more.
## How It Works
goose's default prompt templates are defined in the codebase and embedded in the application. You can override any default by creating a custom version in your local config directory (either directly or via goose Desktop).
When you customize a template:
- Your customizations persist across goose updates
- Changes to defaults in the codebase don't affect your customized templates
- You can reset to default templates at any time
- Changes take effect in new sessions
Your changes can range from major updates to minor adjustments such as:
- Edit `system.md` to have goose respond in Dutch by adding an instruction to "Reply in Dutch"
- Edit `plan.md` to add time estimates by adding instructions to "Include an estimated time for each step (e.g., "~5 min", "~30 min", "~2 hours")."
See [Template Variable Syntax](#template-variable-syntax) for important information about modifying template variables.
:::info Related Configuration
Other goose settings and features can also affect behavior or provide context, such as [config files](/docs/guides/config-files), [.goosehints](/docs/guides/context-engineering/using-goosehints), and [skills](/docs/guides/context-engineering/using-skills).
:::
## Managing Prompt Templates
<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
goose Desktop users can manage templates from the `Settings` page.
**To customize a template:**
1. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
2. Click `Settings` in the sidebar
3. Click the `Prompts` tab
4. Click `Edit` next to the template you want to change
5. Make your changes in the editor. You can click `Restore Default` to start over from the default template at any time.
6. Click `Save` to apply your customization
Customized prompt templates display a `Customized` badge.
**To reset a template to its default:**
1. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
2. Click `Settings` in the sidebar
3. Click the `Prompts` tab
4. Click `Edit` next to the template you want to reset
5. Click `Reset to Default` to delete your local template file
Or click `Reset All` at the top of the tab to delete all of your local template files.
</TabItem>
<TabItem value="cli" label="goose CLI">
goose CLI users can edit template files directly in the file system.
Custom templates are stored in:
- **macOS/Linux:** `~/.config/goose/prompts/`
- **Windows:** `%APPDATA%\Block\goose\config\prompts\`
**To customize a template:**
1. Create the `prompts` directory if it doesn't exist
2. Copy the template file name from the table above (e.g., `system.md`)
3. Create a file with that name in your prompts directory
4. Add your custom content and save your changes. We recommend that you start by reviewing or copying the default template (linked in the [table](#available-prompt-templates) above).
**To reset a template to its default:**
1. Delete the template file from your `prompts` directory
</TabItem>
</Tabs>
### Available Prompt Templates
The following default templates can be customized.
| Template | Description | Applies To |
|----------|-------------|------------|
| [system.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/system.md) | General system prompt defining goose's role, capabilities, and response format | Desktop and CLI |
| [apps_create.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/apps_create.md) | Prompt for generating new standalone apps (in development) | Desktop only |
| [apps_iterate.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/apps_iterate.md) | Prompt for updating existing standalone apps (in development) | Desktop only |
| [compaction.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/compaction.md) | Prompt for summarizing conversation history when context limits are reached | Desktop and CLI |
| [desktop_prompt.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/desktop_prompt.md) | Context about the user interface and available features | Desktop only |
| [desktop_recipe_instruction.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/desktop_recipe_instruction.md) | Instructions for executing recipes | Desktop only |
| [permission_judge.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/permission_judge.md) | Prompt for analyzing tool operations for read-only detection | Desktop and CLI |
| [plan.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/plan.md) | Instructions for creating detailed, actionable plans with clarifying questions | CLI only |
| [recipe.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/recipe.md) | Prompt for generating recipe files from conversations | Desktop and CLI |
| [subagent_system.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/subagent_system.md) | System prompt for subagents spawned to handle specific tasks | Desktop and CLI |
Customizable templates are enumerated in the `TEMPLATE_REGISTRY` array in [`prompt_template.rs`](https://github.com/block/goose/blob/main/crates/goose/src/prompt_template.rs).
### Template Variable Syntax
Templates use [Jinja2](https://jinja.palletsprojects.com/) syntax for dynamic content:
- `{{ variable }}` - Inserts a value (e.g., `{{ extensions }}` lists enabled extensions)
- `{% if condition %}...{% endif %}` - Conditional sections
- `{% for item in list %}...{% endfor %}` - Loops over items
Check out the default templates (linked to from the [table](#available-prompt-templates) above) to find common variables, such as `{{ extensions }}` and `{{ hints }}`.
:::warning
Be careful when modifying template variables, as incorrect changes can break functionality. Test your changes in a new session to ensure they work as expected.
:::
## Additional Resources
import ContentCardCarousel from '@site/src/components/ContentCardCarousel';
import promptBanner from '@site/blog/2025-03-19-better-ai-prompting/prompt.png';
<ContentCardCarousel
items={[
{
type: 'blog',
title: 'AI Prompting 101: How to Get the Best Responses from Your AI Agent',
description: 'Learn different prompting styles—from instruction-based to chain-of-thought—and discover which approach works best for your needs.',
thumbnailUrl: promptBanner,
linkUrl: '/goose/blog/2025/03/19/better-ai-prompting',
date: '2025-03-19',
duration: '8 min read'
}
]}
/>
@@ -180,6 +180,10 @@ You can turn your current goose session into a reusable recipe that includes the
</TabItem>
</Tabs>
:::tip Customize Recipe Generation
You can customize how goose generates recipes by editing the `recipe.md` [prompt template](/docs/guides/prompt-templates).
:::
## Edit Recipe
<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
@@ -73,16 +73,20 @@ Forking sessions is useful to:
<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
1. Hover over any of your previous messages
2. Click the <Edit2 className="inline" size={16} /> `Edit` button that appears
3. Make your changes in the inline editor
4. Click `Fork Session` to save your changes and start a new session (or use `Cmd+Enter` (macOS) or `Ctrl+Enter` (Windows/Linux))
goose copies the conversation history from the original session to the new session. The new session is named "(edited)" and the original session is unchanged.
</TabItem>
goose creates a new session with conversation history up to and including your edited message. The new session is named "(edited)" and the original session remains unchanged.
:::tip Fork vs Duplicate
- **Fork Session** (Edit button on a message): Creates a new session with history up to a specific edited message. Use this to explore different approaches from a particular point in the conversation.
- **[Duplicate Session](/docs/guides/sessions/session-management#duplicate-sessions)** (Copy button in session list): Creates a complete copy of the entire session. Use this to preserve a working session or reuse its configuration.
:::
</TabItem>
<TabItem value="cli" label="goose CLI">
Message editing options are not available in the goose CLI.
Message editing is not available in the goose CLI, but you can [duplicate entire sessions](/docs/guides/sessions/session-management#duplicate-sessions) using the `--fork` flag.
</TabItem>
</Tabs>
@@ -53,7 +53,15 @@ In your first session, goose prompts you to [set up an LLM (Large Language Model
| Focus goose Window | `Cmd+Option+G` | `Ctrl+Alt+G` |
| Keep goose Window Always on Top | `Cmd+Shift+T` | `Ctrl+Shift+T` |
<br />
#### Customize Keyboard Shortcuts
You can customize these keyboard shortcuts in the **Settings** menu:
1. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
2. Click `Settings`
3. Click the `Keyboard` tab
Changes to global shortcuts (Focus Window, Quick Launcher) take effect immediately. Changes to application shortcuts (New Chat, Settings, etc.) require restarting goose.
#### Quick Launcher
Start a new session by typing your prompt into a popup:
1. Press `Cmd+Option+Shift+G` (macOS) or `Ctrl+Alt+Shift+G` (Windows/Linux) to open the popup
@@ -143,6 +151,10 @@ Search allows you to find specific content within sessions or find specific sess
| Toggle Case-Sensitivity | `Aa` | `Aa` |
| Close Search | `Esc` or `X` | `Esc` or `X` |
:::tip Customize Search Shortcuts
You can [customize](#keyboard-shortcuts) the Find, Find Next, and Find Previous keyboard shortcuts in **Settings** → **Keyboard** tab.
:::
:::info No Regex or operator support
Using regular expressions or search operators in search text isn't supported.
:::
@@ -328,6 +340,63 @@ While you can resume sessions, we recommend creating new sessions for new tasks
</TabItem>
</Tabs>
## Duplicate Sessions
Create a complete copy of any session to reuse configurations, experiment with variations, or preserve important work.
<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
Duplicate a session from the session list:
1. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
2. Click `View All` at the bottom of the `Chat` section
3. Find the session you want to duplicate
4. Hover over the session card to reveal the action buttons
5. Click the <Copy className="inline" size={16} /> button that appears in the top-right corner
The duplicated session includes:
- Complete conversation history
- All session metadata and settings
- Provider and model configuration
- Extension data and configurations
- Recipe information (if applicable)
The new session is named the same as the original and appears at the top of your session list.
:::tip Duplicate vs Fork Session
- **Duplicate** (Copy button in session list): Creates a complete copy of the entire session. Use this to preserve a working session or reuse its configuration.
- **[Fork Session](/docs/guides/sessions/in-session-actions#fork-session)** (Edit button on a message): Creates a new session with conversation history up to a specific edited message. Use this when editing a message to explore different approaches from that point.
:::
</TabItem>
<TabItem value="cli" label="goose CLI">
Create a new session by copying all messages from a previous session using the `--fork` flag along with `--resume`.
```bash
# Fork the most recent session
goose session --resume --fork
# Fork a specific session by name
goose session --resume --fork --name my-project
# Fork a specific session by ID
goose session --resume --fork --session-id 20251108_3
# Fork and show message history
goose session --resume --fork --history
```
The forked session includes:
- Complete conversation history from the original session
- All session metadata and settings
- Provider and model configuration
- Extension data and configurations
- Recipe information (if applicable)
</TabItem>
</Tabs>
## Delete Sessions
<Tabs groupId="interface">
@@ -41,6 +41,10 @@ When you reach the auto-compaction threshold:
2. Once complete, you'll see a confirmation message that the conversation was compacted and summarized.
3. Continue the session. Your previous conversation remains visible, but only the compacted conversion is included in the active context for goose.
:::tip Customize Compaction
You can customize how goose summarizes conversations during compaction by editing the `compaction.md` [prompt template](/docs/guides/prompt-templates).
:::
### Manual Compaction
You can also trigger compaction manually before reaching context or token limits:
+4
View File
@@ -248,6 +248,10 @@ Subagents use the following pre-configured settings, but you can override any de
| **Extensions** | Inherited from parent | Specify which extensions to use in your prompt |
| **Return Mode** | All subagent information provided in main session | Specify how much detail you want in your prompt |
:::tip Advanced Customization
You can also customize subagent behavior by editing the `subagent_system.md` [prompt template](/docs/guides/prompt-templates).
:::
### Customizing Settings in Prompts
You can override any default by including the setting in your natural language request:
+69 -24
View File
@@ -20,7 +20,7 @@ goose supports two types of `.gooseignore` files:
- **Local ignore file** - Create a `.gooseignore` file at the root of the directory you'd like it applied to. These restrictions will only apply when working in a specific directory.
:::tip
You can use both global and local `.gooseignore` files simultaneously. When both exist, goose will combine the restrictions from both files to determine which paths are restricted.
You can use both global and local `.gooseignore` files simultaneously. When both exist, goose will apply patterns from both files, with local patterns able to override global ones using negation.
:::
## Example `.gooseignore` file
@@ -41,46 +41,91 @@ downloads/ # Ignore everything in the "downloads" directory
# Ignore all files with this name in any directory
**/credentials.json # Ignore all files named "credentials.json" in any directory
# Complex patterns
*.log # Ignore all .log files
!error.log # Except for error.log file
```
## Negation Patterns
Use the `!` prefix to exclude files from ignore rules. This allows you to ignore broad patterns while allowing specific exceptions.
Within each `.gooseignore` file, patterns are processed in order from top to bottom, so later patterns can override earlier ones. Negation patterns also work across files - you can use negation in your local `.gooseignore` to allow access to files blocked by your global `.gooseignore`.
```plaintext
# Ignore all environment files
**/.env*
# But allow the example file
!.env.example
# Ignore all log files
*.log
# But allow error logs
!error.log
# Ignore all JSON files in the config directory
config/*.json
# But allow the template
!config/template.json
```
:::tip Pattern Order Matters
Negation patterns must come after the patterns they're negating. The `!` pattern re-includes files that were previously ignored.
:::
## Ignore File Types and Priority
goose respects ignore rules from global `.gooseignore` and local `.gooseignore` files. It uses a priority system to determine which files should be ignored.
### 1. Global `.gooseignore`
- Highest priority and always applied first
- Located at `~/.config/goose/.gooseignore`
- Affects all projects on your machine
goose respects ignore rules from global and local `.gooseignore` files, using a priority system where later patterns can override earlier ones.
### When You Have Ignore Files
When `.gooseignore` files exist, patterns are applied in this order:
1. **Global `.gooseignore`** (applied first)
- Located at `~/.config/goose/.gooseignore`
- Affects all projects on your machine
2. **Local `.gooseignore`** (applied second, can override global)
- Located in the current working directory (the root of the directory you want these rules applied to)
- Project-specific rules that can override global patterns
```
~/.config/goose/
└── .gooseignore ← Applied to all projects
```
### 2. Local `.gooseignore`
- Project-specific rules
- Located in your project root directory
```
~/.config/goose/
└── .gooseignore ← Global rules applied first
└── .gooseignore ← Global patterns applied first
Project/
├── .gooseignore ← Local rules applied second
├── .gooseignore ← Local patterns applied second (can override global)
└── src/
```
### 3. Default Patterns
By default, if you haven't created any .gooseignore files, goose will not modify files matching these patterns:
Because patterns are processed in order, you can use negation patterns in your local `.gooseignore` to allow access to files that were blocked by global patterns.
**Example: Override global restrictions in a specific project**
```plaintext
# In ~/.config/goose/.gooseignore (global)
**/.env* # Block all .env files everywhere
# In your-project/.gooseignore (local)
!.env.example # Allow .env.example in this project only
```
In this example, `.env` and `.env.local` remain blocked, but `.env.example` is accessible in this specific project.
### Default Patterns (No Ignore Files)
If you haven't created any `.gooseignore` files (neither global nor local), goose automatically protects these sensitive files:
```plaintext
**/.env
**/.env.*
**/secrets.*
```
:::info
These default patterns are only active when **no** `.gooseignore` files exist. Once you create either a global or local `.gooseignore` file, you'll need to add these patterns yourself if you want to keep them.
:::
## Common use cases
Here are some typical scenarios where `.gooseignore` is helpful:
@@ -89,4 +134,4 @@ Here are some typical scenarios where `.gooseignore` is helpful:
- **Third-Party Code**: Keep goose from changing external libraries or dependencies
- **Important Configurations**: Protect critical configuration files from accidental modifications
- **Version Control**: Prevent changes to version control files like `.git` directory
- **Custom Restrictions**: Create `.gooseignore` files to define which files goose should not access
- **Custom Restrictions**: Create `.gooseignore` files to define which files goose should not access
+10 -2
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env -S uv run --quiet --script
# /// script
# dependencies = ["textual>=0.87.0"]
# dependencies = ["textual>=0.87.0", "pyperclip"]
# ///
"""
WARNING: entirely vibe coded. use as a throwaway tool
@@ -17,6 +17,8 @@ import zipfile
from pathlib import Path
from typing import Optional, Any
import pyperclip
from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Static, Tree, ListView, ListItem, Label, Input
from textual.containers import Horizontal, Vertical, VerticalScroll, Container
@@ -145,6 +147,7 @@ class TextViewerModal(ModalScreen):
BINDINGS = [
Binding("escape,q,enter", "dismiss", "Close", show=True),
Binding("c", "copy", "Copy", show=True),
]
def __init__(self, title: str, text: str):
@@ -158,12 +161,17 @@ class TextViewerModal(ModalScreen):
yield Static(f"[bold]{self.title}[/bold]", id="modal-title")
with VerticalScroll(id="modal-scroll"):
yield Static(self.text, id="modal-text")
yield Static("[dim]Press Escape, Q, or Enter to close[/dim]", id="modal-footer")
yield Static("[dim]Press C to copy, Escape/Q/Enter to close[/dim]", id="modal-footer")
def action_dismiss(self):
"""Dismiss the modal."""
self.app.pop_screen()
def action_copy(self):
"""Copy the text to clipboard."""
pyperclip.copy(self.text)
self.notify("Copied to clipboard")
class SearchOverlay(Container):
"""Search overlay widget."""
+18
View File
@@ -2,6 +2,11 @@
# Compaction smoke test script
# Tests both manual (trigger prompt) and auto compaction (threshold-based)
#
# Environment variable overrides:
# COMPACTION_PROVIDER - Override the provider for tests 1 & 2 (default: use system default)
# COMPACTION_MODEL - Override the model for tests 1 & 2 (default: use system default)
# SKIP_BUILD - Skip cargo build if set
if [ -f .env ]; then
export $(grep -v '^#' .env | xargs)
@@ -19,6 +24,19 @@ fi
SCRIPT_DIR=$(pwd)
GOOSE_BIN="$SCRIPT_DIR/target/release/goose"
# Apply provider/model overrides if set
if [ -n "$COMPACTION_PROVIDER" ]; then
echo "Using override provider: $COMPACTION_PROVIDER"
export GOOSE_PROVIDER="$COMPACTION_PROVIDER"
fi
if [ -n "$COMPACTION_MODEL" ]; then
echo "Using override model: $COMPACTION_MODEL"
export GOOSE_MODEL="$COMPACTION_MODEL"
fi
if [ -n "$COMPACTION_PROVIDER" ] || [ -n "$COMPACTION_MODEL" ]; then
echo ""
fi
# Validation function to check compaction structure in session JSON
validate_compaction() {
local session_id=$1
+3 -3
View File
@@ -182,9 +182,9 @@ if [ "$CODE_EXEC_MODE" = true ]; then
echo "Mode: code_execution (JS batching)"
BUILTINS="developer,code_execution"
# Match code_execution tool usage:
# - "execute_code | code_execution" or "read_module | code_execution" (fallback format)
# - "tool call | execute_code" or "tool calls | execute_code" (new format with tool_graph)
SUCCESS_PATTERN="(execute_code \| code_execution)|(read_module \| code_execution)|(tool calls? \| execute_code)"
# - "execute | code_execution" or "get_function_details | code_execution" (fallback format)
# - "tool call | execute" or "tool calls | execute" (new format with tool_graph)
SUCCESS_PATTERN="(execute \| code_execution)|(get_function_details \| code_execution)|(tool calls? \| execute)"
SUCCESS_MSG="code_execution tool called"
FAILURE_MSG="no code_execution tools called"
else
+26 -1
View File
@@ -10,7 +10,7 @@
"license": {
"name": "Apache-2.0"
},
"version": "1.22.0"
"version": "1.23.0"
},
"paths": {
"/action-required/tool-confirmation": {
@@ -5249,6 +5249,28 @@
"never_allow"
]
},
"PermissionsMetadata": {
"type": "object",
"description": "Sandbox permissions for MCP Apps\nSpecifies which browser capabilities the UI needs access to.\nMaps to the iframe Permission Policy `allow` attribute.",
"properties": {
"camera": {
"type": "boolean",
"description": "Request camera access (maps to Permission Policy `camera` feature)"
},
"clipboardWrite": {
"type": "boolean",
"description": "Request clipboard write access (maps to Permission Policy `clipboard-write` feature)"
},
"geolocation": {
"type": "boolean",
"description": "Request geolocation access (maps to Permission Policy `geolocation` feature)"
},
"microphone": {
"type": "boolean",
"description": "Request microphone access (maps to Permission Policy `microphone` feature)"
}
}
},
"PricingData": {
"type": "object",
"required": [
@@ -7021,6 +7043,9 @@
"description": "Preferred domain for the app (used for CORS)",
"nullable": true
},
"permissions": {
"$ref": "#/components/schemas/PermissionsMetadata"
},
"prefersBorder": {
"type": "boolean",
"description": "Whether the app prefers to have a border around it",
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "goose-app",
"version": "1.22.0",
"version": "1.23.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "goose-app",
"version": "1.22.0",
"version": "1.23.0",
"license": "Apache-2.0",
"dependencies": {
"@mcp-ui/client": "^5.17.3",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "goose-app",
"productName": "Goose",
"version": "1.22.0",
"version": "1.23.0",
"description": "Goose App",
"engines": {
"node": "^24.10.0",
File diff suppressed because one or more lines are too long
+25
View File
@@ -667,6 +667,30 @@ export type ParseRecipeResponse = {
*/
export type PermissionLevel = 'always_allow' | 'ask_before' | 'never_allow';
/**
* Sandbox permissions for MCP Apps
* Specifies which browser capabilities the UI needs access to.
* Maps to the iframe Permission Policy `allow` attribute.
*/
export type PermissionsMetadata = {
/**
* Request camera access (maps to Permission Policy `camera` feature)
*/
camera?: boolean;
/**
* Request clipboard write access (maps to Permission Policy `clipboard-write` feature)
*/
clipboardWrite?: boolean;
/**
* Request geolocation access (maps to Permission Policy `geolocation` feature)
*/
geolocation?: boolean;
/**
* Request microphone access (maps to Permission Policy `microphone` feature)
*/
microphone?: boolean;
};
export type PricingData = {
context_length?: number | null;
currency: string;
@@ -1273,6 +1297,7 @@ export type UiMetadata = {
* Preferred domain for the app (used for CORS)
*/
domain?: string | null;
permissions?: PermissionsMetadata;
/**
* Whether the app prefers to have a border around it
*/
@@ -95,13 +95,14 @@ const menuItems: NavigationEntry[] = [
];
const getSessionDisplayName = (session: Session): string => {
if (!shouldShowNewChatTitle(session)) {
return session.name;
}
if (session.recipe?.title) {
return session.recipe.title;
}
return DEFAULT_CHAT_TITLE;
if (shouldShowNewChatTitle(session)) {
return DEFAULT_CHAT_TITLE;
}
return session.name;
};
const SessionList = React.memo<{
@@ -15,6 +15,7 @@ import {
ToolResult,
ToolCancelled,
CspMetadata,
PermissionsMetadata,
McpMethodParams,
McpMethodResponse,
} from './types';
@@ -40,6 +41,7 @@ interface McpAppRendererProps {
interface ResourceData {
html: string | null;
csp: CspMetadata | null;
permissions: PermissionsMetadata | null;
prefersBorder: boolean;
}
@@ -58,6 +60,7 @@ export default function McpAppRenderer({
const [resource, setResource] = useState<ResourceData>({
html: cachedHtml || null,
csp: null,
permissions: null,
prefersBorder: true,
});
const [error, setError] = useState<string | null>(null);
@@ -82,13 +85,20 @@ export default function McpAppRenderer({
if (response.data) {
const content = response.data;
const meta = content._meta as
| { ui?: { csp?: CspMetadata; prefersBorder?: boolean } }
| {
ui?: {
csp?: CspMetadata;
permissions?: PermissionsMetadata;
prefersBorder?: boolean;
};
}
| undefined;
if (content.text !== cachedHtml) {
setResource({
html: content.text,
csp: meta?.ui?.csp || null,
permissions: meta?.ui?.permissions || null,
prefersBorder: meta?.ui?.prefersBorder ?? true,
});
}
@@ -241,6 +251,7 @@ export default function McpAppRenderer({
const { iframeRef, proxyUrl } = useSandboxBridge({
resourceHtml: resource.html || '',
resourceCsp: resource.csp,
resourcePermissions: resource.permissions,
resourceUri,
toolInput,
toolInputPartial,
+5 -1
View File
@@ -1,4 +1,8 @@
export type { CspMetadata, CallToolResponse as ToolResult } from '../../api/types.gen';
export type {
CspMetadata,
PermissionsMetadata,
CallToolResponse as ToolResult,
} from '../../api/types.gen';
export type ContentBlock =
| { type: 'text'; text: string }
@@ -9,6 +9,7 @@ import type {
ToolCancelled,
HostContext,
CspMetadata,
PermissionsMetadata,
} from './types';
import { fetchMcpAppProxyUrl } from './utils';
import { useTheme } from '../../contexts/ThemeContext';
@@ -18,6 +19,7 @@ import { errorMessage } from '../../utils/conversionUtils';
interface SandboxBridgeOptions {
resourceHtml: string;
resourceCsp: CspMetadata | null;
resourcePermissions: PermissionsMetadata | null;
resourceUri: string;
toolInput?: ToolInput;
toolInputPartial?: ToolInputPartial;
@@ -40,6 +42,7 @@ export function useSandboxBridge(options: SandboxBridgeOptions): SandboxBridgeRe
const {
resourceHtml,
resourceCsp,
resourcePermissions,
resourceUri,
toolInput,
toolInputPartial,
@@ -80,7 +83,7 @@ export function useSandboxBridge(options: SandboxBridgeOptions): SandboxBridgeRe
sendToSandbox({
jsonrpc: '2.0',
method: 'ui/notifications/sandbox-resource-ready',
params: { html: resourceHtml, csp: resourceCsp },
params: { html: resourceHtml, csp: resourceCsp, permissions: resourcePermissions },
});
break;
@@ -181,6 +184,7 @@ export function useSandboxBridge(options: SandboxBridgeOptions): SandboxBridgeRe
[
resourceHtml,
resourceCsp,
resourcePermissions,
resolvedTheme,
sendToSandbox,
onMcpRequest,
@@ -291,10 +291,79 @@ interface Progress {
message?: string;
}
interface SubagentToolRequestData {
type: 'subagent_tool_request';
subagent_id: string;
tool_call: {
name: string;
arguments?: { tool_graph?: ToolGraphNode[] };
};
}
const isSubagentToolRequestData = (data: unknown): data is SubagentToolRequestData => {
if (!data || typeof data !== 'object') {
return false;
}
const record = data as Record<string, unknown>;
if (record.type !== 'subagent_tool_request') {
return false;
}
if (typeof record.subagent_id !== 'string') {
return false;
}
if (!record.tool_call || typeof record.tool_call !== 'object') {
return false;
}
const toolCall = record.tool_call as Record<string, unknown>;
return typeof toolCall.name === 'string';
};
const formatSubagentToolCall = (data: SubagentToolRequestData): string => {
const subagentId = data.subagent_id;
const toolCall = data.tool_call;
const toolCallName = toolCall.name;
const shortId = subagentId?.split('_').pop() || subagentId;
const parts = toolCallName.split('__').reverse();
const toolName = parts[0] || 'unknown';
const extensionName = parts.slice(1).reverse().join('__') || '';
const toolGraph = toolCall.arguments?.tool_graph;
if (toolName === 'execute_code' && toolGraph && toolGraph.length > 0) {
const plural = toolGraph.length === 1 ? '' : 's';
const header = `[subagent:${shortId}] ${toolGraph.length} tool call${plural} | execute_code`;
const lines = toolGraph.map((node, idx) => {
const deps =
node.depends_on && node.depends_on.length > 0
? ` (uses ${node.depends_on.map((d) => d + 1).join(', ')})`
: '';
return ` ${idx + 1}. ${node.tool}: ${node.description}${deps}`;
});
return [header, ...lines].join('\n');
}
return extensionName
? `[subagent:${shortId}] ${toolName} | ${extensionName}`
: `[subagent:${shortId}] ${toolName}`;
};
const logToString = (logMessage: NotificationEvent) => {
const message = logMessage.message as { method: string; params: unknown };
const params = message.params as Record<string, unknown>;
if (
params &&
params.data &&
typeof params.data === 'object' &&
'type' in params.data &&
params.data.type === 'subagent_tool_request'
) {
if (isSubagentToolRequestData(params.data)) {
return formatSubagentToolCall(params.data);
}
}
// Special case for the developer system shell logs
if (
params &&
@@ -545,7 +614,7 @@ function ToolCallView({
case 'computer_control':
return `poking around...`;
case 'execute_code': {
case 'execute': {
const toolGraph = args.tool_graph as unknown as ToolGraphNode[] | undefined;
if (toolGraph && Array.isArray(toolGraph) && toolGraph.length > 0) {
if (toolGraph.length === 1) {
@@ -639,19 +708,16 @@ function ToolCallView({
}
>
{(() => {
const toolName = toolCall.name.substring(toolCall.name.lastIndexOf('__') + 2);
const toolGraph = toolCall.arguments?.tool_graph as unknown as ToolGraphNode[] | undefined;
const code = toolCall.arguments?.code as unknown as string | undefined;
const hasToolGraph =
toolName === 'execute_code' &&
toolGraph &&
Array.isArray(toolGraph) &&
toolGraph.length > 0;
const toolGraph = toolCall.arguments?.tool_graph as unknown as ToolGraphNode[] | undefined;
if (hasToolGraph) {
if (
toolCall.name === 'code_execution__execute' &&
(typeof code === 'string' || Array.isArray(toolGraph))
) {
return (
<div className="border-t border-borderSubtle">
<ToolGraphView toolGraph={toolGraph} code={code} />
<CodeModeView toolGraph={toolGraph} code={code} />
</div>
);
}
@@ -692,7 +758,7 @@ function ToolCallView({
<>
{toolResults.map((result, index) => (
<div key={index} className={cn('border-t border-borderSubtle')}>
<ToolResultView result={result} isStartExpanded={false} />
<ToolResultView toolCall={toolCall} result={result} isStartExpanded={false} />
</div>
))}
</>
@@ -724,18 +790,19 @@ function ToolDetailsView({ toolCall, isStartExpanded }: ToolDetailsViewProps) {
);
}
interface ToolGraphViewProps {
toolGraph: ToolGraphNode[];
interface CodeModeViewProps {
toolGraph?: ToolGraphNode[];
code?: string;
}
function ToolGraphView({ toolGraph, code }: ToolGraphViewProps) {
function CodeModeView({ toolGraph, code }: CodeModeViewProps) {
const renderGraph = () => {
if (toolGraph.length === 0) return null;
const graph = toolGraph ?? [];
if (graph.length === 0) return null;
const lines: string[] = [];
toolGraph.forEach((node, index) => {
graph.forEach((node, index) => {
const deps =
node.depends_on.length > 0 ? ` (uses ${node.depends_on.map((d) => d + 1).join(', ')})` : '';
lines.push(`${index + 1}. ${node.tool}: ${node.description}${deps}`);
@@ -746,16 +813,19 @@ function ToolGraphView({ toolGraph, code }: ToolGraphViewProps) {
return (
<div className="px-4 py-2">
<pre className="font-mono text-xs text-textSubtle whitespace-pre-wrap">{renderGraph()}</pre>
{toolGraph && (
<pre className="font-mono text-xs text-textSubtle whitespace-pre-wrap">{renderGraph()}</pre>
)}
{code && (
<div className="border-t border-borderSubtle -mx-4 mt-2">
<ToolCallExpandable
label={<span className="pl-4 font-sans text-sm">Code</span>}
isStartExpanded={false}
>
<pre className="font-mono text-xs text-textSubtle whitespace-pre-wrap overflow-x-auto px-4 py-2">
{code}
</pre>
<MarkdownContent
content={'```typescript\n' + code + '\n```'}
className="whitespace-pre-wrap max-w-full overflow-x-auto"
/>
</ToolCallExpandable>
</div>
)}
@@ -764,11 +834,15 @@ function ToolGraphView({ toolGraph, code }: ToolGraphViewProps) {
}
interface ToolResultViewProps {
toolCall: {
name: string;
arguments: Record<string, unknown>;
};
result: Content;
isStartExpanded: boolean;
}
function ToolResultView({ result, isStartExpanded }: ToolResultViewProps) {
function ToolResultView({ toolCall, result, isStartExpanded }: ToolResultViewProps) {
const hasText = (c: Content): c is Content & { text: string } =>
'text' in c && typeof (c as Record<string, unknown>).text === 'string';
@@ -780,6 +854,18 @@ function ToolResultView({ result, isStartExpanded }: ToolResultViewProps) {
const hasResource = (c: Content): c is Content & { resource: unknown } => 'resource' in c;
const wrapMarkdown = (text: string): string => {
if (
['code_execution__list_functions', 'code_execution__get_function_details'].includes(
toolCall.name
)
) {
return '```typescript\n' + text + '\n```';
} else {
return text;
}
};
return (
<ToolCallExpandable
label={<span className="pl-4 py-1 font-sans text-sm">Output</span>}
@@ -788,7 +874,7 @@ function ToolResultView({ result, isStartExpanded }: ToolResultViewProps) {
<div className="pl-4 pr-4 py-4">
{hasText(result) && (
<MarkdownContent
content={result.text}
content={wrapMarkdown(result.text)}
className="whitespace-pre-wrap max-w-full overflow-x-auto"
/>
)}
@@ -3,7 +3,6 @@ import { FolderDot } from 'lucide-react';
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/Tooltip';
import { updateWorkingDir } from '../../api';
import { toast } from 'react-toastify';
import { setCurrentWorkingDir } from '../../utils/workingDir';
interface DirSwitcherProps {
className: string;
@@ -43,7 +42,6 @@ export const DirSwitcher: React.FC<DirSwitcherProps> = ({
const newDir = result.filePaths[0];
window.electron.addRecentDir(newDir);
setCurrentWorkingDir(newDir);
if (sessionId) {
onWorkingDirChange?.(newDir);
@@ -58,6 +58,7 @@ import {
} from '../ui/dropdown-menu';
import { getSearchShortcutText } from '../../utils/keyboardShortcuts';
import { errorMessage } from '../../utils/conversionUtils';
import { AppEvents } from '../../constants/events';
export default function RecipesView() {
const setView = useNavigation();
@@ -149,6 +150,9 @@ export default function RecipesView() {
});
const session = newAgent.data;
trackRecipeStarted(true, undefined, false);
window.dispatchEvent(new CustomEvent(AppEvents.SESSION_CREATED, { detail: { session } }));
setView('pair', {
disableAnimation: true,
resumeSessionId: session.id,
@@ -38,7 +38,9 @@ const isUserMessage = (message: Message): boolean => {
if (message.role === 'assistant') {
return false;
}
return !message.content.every((c) => c.type === 'toolConfirmationRequest');
return !message.content.every(
(c) => c.type === 'actionRequired' && c.data.actionType === 'toolConfirmation'
);
};
const filterMessagesForDisplay = (messages: Message[]): Message[] => {
@@ -1,6 +1,6 @@
import { useEffect, useMemo, useState } from 'react';
import { Button } from '../../ui/button';
import { ChevronDownIcon, SlidersHorizontal } from 'lucide-react';
import { ChevronDownIcon, SlidersHorizontal, AlertCircle } from 'lucide-react';
import { getTools, PermissionLevel, ToolInfo, upsertPermissions } from '../../../api';
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '../../ui/dialog';
import {
@@ -33,6 +33,8 @@ export default function PermissionModal({ extensionName, onClose }: PermissionMo
const [tools, setTools] = useState<ToolInfo[]>([]);
const [updatedPermissions, setUpdatedPermissions] = useState<Record<string, string>>({});
const [isLoading, setIsLoading] = useState(true);
const [loadError, setLoadError] = useState<string | null>(null);
const hasChanges = useMemo(() => {
return Object.keys(updatedPermissions).some(
@@ -43,12 +45,22 @@ export default function PermissionModal({ extensionName, onClose }: PermissionMo
useEffect(() => {
const fetchTools = async () => {
if (!sessionId) {
setIsLoading(false);
setLoadError('no_session');
return;
}
setIsLoading(true);
setLoadError(null);
try {
const response = await getTools({
query: { extension_name: extensionName, session_id: sessionId },
});
if (response.error) {
console.error('Failed to get tools');
console.error('Failed to get tools:', response.error);
setLoadError('fetch_failed');
} else {
const filteredTools = (response.data || []).filter(
(tool: ToolInfo) =>
@@ -58,6 +70,9 @@ export default function PermissionModal({ extensionName, onClose }: PermissionMo
}
} catch (err) {
console.error('Error fetching tools:', err);
setLoadError('fetch_failed');
} finally {
setIsLoading(false);
}
};
@@ -121,9 +136,8 @@ export default function PermissionModal({ extensionName, onClose }: PermissionMo
</DialogHeader>
<div className="py-4">
{tools.length === 0 ? (
<div className="flex items-center justify-center">
{/* Loading spinner */}
{isLoading ? (
<div className="flex items-center justify-center py-8">
<svg
className="animate-spin h-8 w-8 text-grey-50 dark:text-white"
xmlns="http://www.w3.org/2000/svg"
@@ -141,6 +155,28 @@ export default function PermissionModal({ extensionName, onClose }: PermissionMo
<path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z"></path>
</svg>
</div>
) : loadError === 'no_session' ? (
<div className="flex flex-col items-center justify-center py-8 text-center">
<AlertCircle className="h-12 w-12 text-textSubtle mb-4" />
<p className="text-textStandard font-medium mb-2">No active session</p>
<p className="text-sm text-textSubtle max-w-sm">
Start a chat session first to configure tool permissions for this extension. Tool
permissions are loaded from the active session's extensions.
</p>
</div>
) : loadError === 'fetch_failed' ? (
<div className="flex flex-col items-center justify-center py-8 text-center">
<AlertCircle className="h-12 w-12 text-textSubtle mb-4" />
<p className="text-textStandard font-medium mb-2">Failed to load tools</p>
<p className="text-sm text-textSubtle max-w-sm">
Could not load tools for this extension. The extension may not be loaded in the
current session.
</p>
</div>
) : tools.length === 0 ? (
<div className="flex flex-col items-center justify-center py-8 text-center">
<p className="text-textSubtle">No tools available for this extension.</p>
</div>
) : (
<div className="space-y-4">
{tools.map((tool) => (
@@ -187,11 +223,13 @@ export default function PermissionModal({ extensionName, onClose }: PermissionMo
<DialogFooter>
<Button variant="outline" onClick={handleClose}>
Cancel
</Button>
<Button disabled={!hasChanges} onClick={handleSave}>
Save Changes
{loadError ? 'Close' : 'Cancel'}
</Button>
{!loadError && (
<Button disabled={!hasChanges} onClick={handleSave}>
Save Changes
</Button>
)}
</DialogFooter>
</DialogContent>
</Dialog>
+2 -1
View File
@@ -257,7 +257,8 @@ async function streamFromResponse(
currentMessages = pushMessage(currentMessages, msg);
const hasToolConfirmation = msg.content.some(
(content) => content.type === 'toolConfirmationRequest'
(content) =>
content.type === 'actionRequired' && content.data.actionType === 'toolConfirmation'
);
const hasElicitation = msg.content.some(
+3
View File
@@ -9,6 +9,9 @@ import type { FixedExtensionEntry } from './components/ConfigContext';
import { AppEvents } from './constants/events';
export function shouldShowNewChatTitle(session: Session): boolean {
if (session.recipe) {
return false;
}
return !session.user_set_name && session.message_count === 0;
}
+2 -9
View File
@@ -1,11 +1,4 @@
// Track the current working dir for this window (updated when user changes it)
let currentWorkingDir: string | null = null;
export const setCurrentWorkingDir = (dir: string): void => {
currentWorkingDir = dir;
};
export const getInitialWorkingDir = (): string => {
// Use the current dir if set, otherwise fall back to initial config
return currentWorkingDir ?? (window.appConfig?.get('GOOSE_WORKING_DIR') as string) ?? '';
// Fall back to initial config from app startup
return (window.appConfig?.get('GOOSE_WORKING_DIR') as string) ?? '';
};