diff --git a/.github/workflows/build-exe-for-python-sdk.yml b/.github/workflows/build-exe-for-python-sdk.yml index 7df809d414..5042778b72 100644 --- a/.github/workflows/build-exe-for-python-sdk.yml +++ b/.github/workflows/build-exe-for-python-sdk.yml @@ -410,7 +410,7 @@ jobs: || github.event.pull_request.user.login == 'dependabot[bot]')) env: DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY_EXTERNAL }} - DEEPSEEK_BASE_URL: https://api.deepseek.com + DEEPSEEK_BASE_URL: https://api.deepseek.com/anthropic run: | set -euo pipefail blackbox_root="$(python -c 'import tempfile; print(tempfile.mkdtemp(prefix="dsh-sdk-blackbox-live-"))')" @@ -431,7 +431,7 @@ jobs: shell: pwsh env: DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY_EXTERNAL }} - DEEPSEEK_BASE_URL: https://api.deepseek.com + DEEPSEEK_BASE_URL: https://api.deepseek.com/anthropic run: | $blackboxRoot = (& python -c 'import tempfile; print(tempfile.mkdtemp(prefix="dsh-sdk-blackbox-live-"))').Trim() Remove-Item Env:PYTHONPATH -ErrorAction SilentlyContinue diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 5bc604e7a0..f4335f78bb 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -3,7 +3,7 @@ name: E2E (real DeepSeek API) # Real-API end-to-end suite (`pnpm run test:e2e`). Unlike ci.yml this job # consumes the DEEPSEEK_API_KEY_EXTERNAL secret (mapped to the env var # DEEPSEEK_API_KEY the tests read) and hits the external API at -# https://api.deepseek.com (DEEPSEEK_BASE_URL is pinned to it explicitly so a +# https://api.deepseek.com/anthropic (DEEPSEEK_BASE_URL is pinned explicitly so a # stray repo-root .env can't redirect the run). # # pull_request IS a trigger, but GitHub withholds repo secrets from BOTH forked @@ -117,7 +117,7 @@ jobs: - name: E2E tests (real DeepSeek API) env: DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY_EXTERNAL }} - DEEPSEEK_BASE_URL: https://api.deepseek.com + DEEPSEEK_BASE_URL: https://api.deepseek.com/anthropic DSH_E2E_MAX_WORKERS: 4 DSH_EXAMPLE_MODE: lib run: pnpm run test:e2e diff --git a/apps/web/tests/expected/onboarding-deepseek-config/default-models.expected.md b/apps/web/tests/expected/onboarding-deepseek-config/default-models.expected.md index fa787426ad..72fd3d739c 100644 --- a/apps/web/tests/expected/onboarding-deepseek-config/default-models.expected.md +++ b/apps/web/tests/expected/onboarding-deepseek-config/default-models.expected.md @@ -33,7 +33,7 @@ - group: - text: 自定义设置 API 地址 - textbox "API 地址": - - /placeholder: https://api.deepseek.com + - /placeholder: https://api.deepseek.com/anthropic - text: 请填写与当前连接配置兼容的 API 地址。 - region "模型目录": - text: 模型目录 正在使用适配器默认模型 diff --git a/apps/web/tests/expected/onboarding-deepseek-config/models.expected.md b/apps/web/tests/expected/onboarding-deepseek-config/models.expected.md index 74aebff1f4..a67e6bad77 100644 --- a/apps/web/tests/expected/onboarding-deepseek-config/models.expected.md +++ b/apps/web/tests/expected/onboarding-deepseek-config/models.expected.md @@ -33,7 +33,7 @@ - group: - text: 自定义设置 API 地址 - textbox "API 地址": - - /placeholder: https://api.deepseek.com + - /placeholder: https://api.deepseek.com/anthropic - text: 请填写与当前连接配置兼容的 API 地址。 - region "模型目录": - text: 模型目录 已自定义模型目录 diff --git a/packages/llm/llm-deepseek/tests/adapter.e2e.ts b/packages/llm/llm-deepseek/tests/adapter.e2e.ts index 61d77eb697..6270d385ca 100644 --- a/packages/llm/llm-deepseek/tests/adapter.e2e.ts +++ b/packages/llm/llm-deepseek/tests/adapter.e2e.ts @@ -111,6 +111,7 @@ async function harness(model: string, config: Partial = {}) { await ctx.plugin(E2eAttachmentStore) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', + baseURL: LlmDeepSeek.PUBLIC_BASE_URL, ...model === VISION ? { models: [{ id: VISION, inputModalities: ['text', 'image'] }] } : {}, ...config, }) @@ -154,7 +155,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () contexts.push(ctx) await ctx.plugin(LlmRuntime) await ctx.plugin(LocalAttachments) - await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', maxTokens: 4096 }) + await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: LlmDeepSeek.PUBLIC_BASE_URL, maxTokens: 4096 }) const model = 'deepseek-flash' await expect(ctx.llm.resolveModelInfo('deepseek-official', model)).resolves.toMatchObject({ inputModalities: ['text', 'image'], systemPromptUpdate: 'in-history', @@ -181,7 +182,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () it.skipIf(!VISION_E2E_ENABLED)('uses the built-in official route to upload, reference, and delete one image', async () => { const key = process.env.DEEPSEEK_API_KEY if (key === undefined) throw new Error('e2e ran without DEEPSEEK_API_KEY') - const baseURL = process.env.DEEPSEEK_BASE_URL ?? LlmDeepSeek.PUBLIC_BASE_URL + const baseURL = LlmDeepSeek.PUBLIC_BASE_URL const ctx = await harness(VISION, { baseURL }) await ctx.plugin(E2eAttachmentStore) const attachments = ctx.attachments as E2eAttachmentStore @@ -233,7 +234,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () await ctx.plugin(DeepSeekLlmApiExtensionRegistry) await ctx.plugin(SessionLogDeepSeek, { enabled: true }) await ctx.plugin(PluginPackageInventoryDeepSeek) - await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', thinking: 'disabled' }) + await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: LlmDeepSeek.PUBLIC_BASE_URL, thinking: 'disabled' }) const session = ctx.sessions.create(SessionId('real-extension-fields')) session.append('turn/start', { turn: 1 }) @@ -263,7 +264,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () contexts.push(ctx) await ctx.plugin(LlmRuntime) await ctx.plugin(LocalCredentialProvider, { path: join(dir, '.credentials.yaml'), watch: false }) - await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions' }) + await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: LlmDeepSeek.PUBLIC_BASE_URL }) const result = await assemble(ctx, { model: FLASH, diff --git a/packages/llm/llm-pi-ai/tests/adapter.e2e.ts b/packages/llm/llm-pi-ai/tests/adapter.e2e.ts index dd83070033..0368a38324 100644 --- a/packages/llm/llm-pi-ai/tests/adapter.e2e.ts +++ b/packages/llm/llm-pi-ai/tests/adapter.e2e.ts @@ -24,7 +24,7 @@ async function harness(_model: string, config: Partial = {} providers: { deepseek: { ...process.env.DEEPSEEK_API_KEY === undefined ? {} : { apiKey: process.env.DEEPSEEK_API_KEY }, - ...process.env.DEEPSEEK_BASE_URL === undefined ? {} : { baseURL: process.env.DEEPSEEK_BASE_URL }, + baseURL: LlmDeepSeek.PUBLIC_BASE_URL, ...config, }, }, diff --git a/python/sdk/tests/test_smoke_model.py b/python/sdk/tests/test_smoke_model.py index 3216b662c1..9457d1d2bc 100644 --- a/python/sdk/tests/test_smoke_model.py +++ b/python/sdk/tests/test_smoke_model.py @@ -3,6 +3,7 @@ from __future__ import annotations import json import runpy import subprocess +import urllib.request from pathlib import Path from types import SimpleNamespace @@ -170,59 +171,76 @@ def test_live_smoke_rejects_unrelated_tool_without_exact_receipt( def test_child_prompt_precedes_runtime_context(prompt_name: str, expected: str) -> None: chunks = SMOKE["completion_chunks"]({ "messages": [ - {"role": "user", "content": SMOKE[prompt_name]}, - {"role": "user", "content": "Current runtime context"}, + {"role": "user", "content": [ + {"type": "text", "text": SMOKE[prompt_name]}, + {"type": "text", "text": "Current runtime context"}, + ]}, ], }) assert any( - choice.get("delta", {}).get("content") == expected + chunk.get("delta", {}).get("text") == expected for chunk in chunks - for choice in chunk.get("choices", []) ) def test_mcp_smoke_requests_the_discovered_tool() -> None: chunks = SMOKE["completion_chunks"]({ - "messages": [{"role": "user", "content": SMOKE["MCP_PROMPT"]}], - "tools": [{"type": "function", "function": {"name": "mcp__fixture__add"}}], + "messages": [{"role": "user", "content": [{"type": "text", "text": SMOKE["MCP_PROMPT"]}]}], + "tools": [{"name": "mcp__fixture__add", "input_schema": {"type": "object"}}], }) calls = [ - call + chunk["content_block"] for chunk in chunks - for choice in chunk.get("choices", []) - for call in choice.get("delta", {}).get("tool_calls", []) + if chunk.get("type") == "content_block_start" ] - assert calls[0]["function"] == { - "name": "mcp__fixture__add", - "arguments": '{"a": 19, "b": 23}', - } + assert calls == [{"type": "tool_use", "id": "mcp-add", "name": "mcp__fixture__add", "input": {}}] + arguments = next(chunk["delta"]["partial_json"] for chunk in chunks if chunk.get("type") == "content_block_delta") + assert json.loads(arguments) == {"a": 19, "b": 23} def test_mcp_smoke_accepts_the_external_server_result() -> None: chunks = SMOKE["completion_chunks"]({ "messages": [ - {"role": "user", "content": SMOKE["MCP_PROMPT"]}, + {"role": "user", "content": [{"type": "text", "text": SMOKE["MCP_PROMPT"]}]}, { "role": "assistant", - "tool_calls": [{ - "id": "mcp-add", - "type": "function", - "function": {"name": "mcp__fixture__add", "arguments": '{}'}, + "content": [{ + "type": "tool_use", "id": "mcp-add", "name": "mcp__fixture__add", "input": {}, }], }, - {"role": "tool", "tool_call_id": "mcp-add", "content": "42"}, + {"role": "user", "content": [ + {"type": "tool_result", "tool_use_id": "mcp-add", "content": [{"type": "text", "text": "42"}]}, + ]}, ], }) assert any( - choice.get("delta", {}).get("content") == SMOKE["MCP_TEXT"] + chunk.get("delta", {}).get("text") == SMOKE["MCP_TEXT"] for chunk in chunks - for choice in chunk.get("choices", []) ) +def test_mock_model_serves_native_messages_events() -> None: + with SMOKE["MockModel"]() as model: + body = {"model": "smoke-model", "stream": True, "messages": [{ + "role": "user", "content": [{"type": "text", "text": "hello"}], + }]} + request = urllib.request.Request( + model.url + "/v1/messages", data=json.dumps(body).encode(), + headers={"content-type": "application/json"}, + ) + with urllib.request.urlopen(request) as response: + stream = response.read().decode() + frames = [frame.splitlines() for frame in stream.strip().split("\n\n")] + events = [json.loads(frame[1].removeprefix("data: ")) for frame in frames] + assert all(frame[0] == f"event: {event['type']}" for frame, event in zip(frames, events)) + assert events[0]["type"] == "message_start" + assert events[-1] == {"type": "message_stop"} + assert next(event["delta"]["text"] for event in events if event["type"] == "content_block_delta") == SMOKE["EXPECTED_TEXT"] + + def test_advanced_snapshot_normalizes_catalog_child_creation_time() -> None: value = { "type": "subagent/catalog", diff --git a/scripts/smoke-python-runtime.py b/scripts/smoke-python-runtime.py index d0c1405436..9feed97f15 100644 --- a/scripts/smoke-python-runtime.py +++ b/scripts/smoke-python-runtime.py @@ -307,6 +307,9 @@ class MockModelHandler(BaseHTTPRequestHandler): requests: list[dict[str, object]] = [] def do_POST(self) -> None: + if self.path != "/v1/messages": + self.send_error(404) + return content_length = int(self.headers.get("content-length", "0")) body = json.loads(self.rfile.read(content_length)) self.requests.append(body) @@ -315,8 +318,7 @@ class MockModelHandler(BaseHTTPRequestHandler): self.end_headers() chunks = completion_chunks(body) for chunk in chunks: - self.wfile.write(f"data: {json.dumps(chunk)}\n\n".encode()) - self.wfile.write(b"data: [DONE]\n\n") + self.wfile.write(f"event: {chunk['type']}\ndata: {json.dumps(chunk)}\n\n".encode()) self.wfile.flush() def log_message(self, _format: str, *_args: object) -> None: @@ -333,9 +335,14 @@ def completion_chunks(body: dict[str, object]) -> list[dict[str, object]]: if not isinstance(latest, dict): raise AssertionError(f"model request has an invalid latest message: {body}") - if latest.get("role") == "tool": - call_id, tool_name = latest_tool_call(messages) - tool_text = message_text(latest.get("content")) + tool_results = [ + block for block in latest.get("content", []) + if isinstance(block, dict) and block.get("type") == "tool_result" + ] + if tool_results: + result = tool_results[-1] + call_id, tool_name = latest_tool_call(messages, result.get("tool_use_id")) + tool_text = message_text(result.get("content")) mcp = mcp_tool_followup(call_id, tool_name, tool_text) if mcp is not None: return mcp @@ -360,9 +367,11 @@ def completion_chunks(body: dict[str, object]) -> list[dict[str, object]]: raise AssertionError(f"unexpected tool follow-up: {tool_name}") user_prompts = [ - message_text(message.get("content")) + block["text"] for message in reversed(messages) if isinstance(message, dict) and message.get("role") == "user" + for block in message.get("content", []) + if isinstance(block, dict) and block.get("type") == "text" ] minimal_prompt = next((prompt for prompt in user_prompts if prompt == MINIMAL_PROMPT), None) # The minimal composition's assembled system prompt, advertised tool schemas, and @@ -459,7 +468,7 @@ def completion_chunks(body: dict[str, object]) -> list[dict[str, object]]: {"a": 19, "b": 23}, ) if prompt == PROFILE_PLUGIN_PROMPT: - system_text = "\n".join( + system_text = message_text(body.get("system")) + "\n" + "\n".join( message_text(message.get("content")) for message in messages if isinstance(message, dict) and message.get("role") == "system" @@ -654,64 +663,67 @@ def advanced_tool_followup( def text_chunks(text: str) -> list[dict[str, object]]: - """Build a complete streaming text response.""" + """Build a complete Messages text response.""" return [ - {"choices": [{"delta": {"role": "assistant", "content": None, "reasoning_content": ""}}]}, - {"choices": [{"delta": {"content": text}}]}, - { - "choices": [{"delta": {"content": ""}, "finish_reason": "stop"}], - "usage": {"prompt_tokens": 3, "completion_tokens": 3}, - }, + message_start(), + {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}}, + {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": text}}, + {"type": "content_block_stop", "index": 0}, + {"type": "message_delta", "delta": {"stop_reason": "end_turn"}, "usage": {"output_tokens": 3}}, + {"type": "message_stop"}, ] def tool_call_chunks(call_id: str, name: str, arguments: dict[str, object]) -> list[dict[str, object]]: - """Build a complete streaming function-call response.""" + """Build a complete Messages tool-use response.""" return [ - {"choices": [{"delta": {"role": "assistant", "content": None, "reasoning_content": ""}}]}, + message_start(), { - "choices": [{ - "delta": { - "tool_calls": [{ - "index": 0, - "id": call_id, - "type": "function", - "function": {"name": name, "arguments": json.dumps(arguments)}, - }], - }, - }], + "type": "content_block_start", "index": 0, + "content_block": {"type": "tool_use", "id": call_id, "name": name, "input": {}}, }, { - "choices": [{"delta": {"content": ""}, "finish_reason": "tool_calls"}], - "usage": {"prompt_tokens": 3, "completion_tokens": 3}, + "type": "content_block_delta", "index": 0, + "delta": {"type": "input_json_delta", "partial_json": json.dumps(arguments)}, }, + {"type": "content_block_stop", "index": 0}, + {"type": "message_delta", "delta": {"stop_reason": "tool_use"}, "usage": {"output_tokens": 3}}, + {"type": "message_stop"}, ] -def latest_tool_call(messages: list[object]) -> tuple[str, str]: +def message_start() -> dict[str, object]: + """Start a Messages response with deterministic token usage.""" + return { + "type": "message_start", + "message": {"id": "msg_smoke", "model": "smoke-model", "usage": {"input_tokens": 3, "output_tokens": 0}}, + } + + +def latest_tool_call(messages: list[object], result_id: object) -> tuple[str, str]: """Find the assistant call id and name paired with the latest tool result.""" for message in reversed(messages[:-1]): if not isinstance(message, dict): continue - calls = message.get("tool_calls") + calls = message.get("content") if not isinstance(calls, list): continue for call in reversed(calls): if not isinstance(call, dict): continue - function = call.get("function") call_id = call.get("id") if ( isinstance(call_id, str) - and isinstance(function, dict) - and isinstance(function.get("name"), str) + and call_id == result_id + and call.get("type") == "tool_use" + and isinstance(call.get("name"), str) ): - return call_id, function["name"] + return call_id, call["name"] raise AssertionError(f"tool result has no preceding assistant tool call: {messages}") def message_text(content: object) -> str: - """Read OpenAI text content in either string or block-list form.""" + """Read Messages text content in either string or block-list form.""" if isinstance(content, str): return content if isinstance(content, list): @@ -732,9 +744,8 @@ def advertised_tool_names(body: dict[str, object]) -> set[str]: for tool in tools: if not isinstance(tool, dict): continue - function = tool.get("function") - if isinstance(function, dict) and isinstance(function.get("name"), str): - names.add(function["name"]) + if isinstance(tool.get("name"), str): + names.add(tool["name"]) return names @@ -1878,13 +1889,18 @@ def build_in_history_snapshot_files( request_prompts = [] for index, request in enumerate(requests): messages = request["messages"] - assert messages[0]["role"] == "system" and message_text(messages[0]["content"]) == prompts[0] + assert message_text(request.get("system")) == prompts[0] assert request["tools"] == requests[0]["tools"], "prompt update changed tool schemas" positions = [position for position, message in enumerate(messages) if message["role"] == "system"] - texts = [message_text(messages[position]["content"]) for position in positions] + texts = [message_text(request["system"]), *[ + message_text(messages[position]["content"]) for position in positions + ]] assert texts == (prompts[:1] if index == 0 else prompts), texts if index > 0: - assert messages[positions[1] - 1]["role"] == "tool", messages + previous = messages[positions[0] - 1] + assert previous["role"] == "user" and any( + block.get("type") == "tool_result" for block in previous["content"] + ), messages request_prompts.append(texts) evidence = { "requestSystemPrompts": request_prompts, @@ -1914,6 +1930,7 @@ def build_minimal_snapshot_files( if not isinstance(messages, list): raise AssertionError(f"minimal model request has no messages: {body}") snapshot.append({ + "system": minimal_snapshot_text(body.get("system"), cwd), "tools": minimal_snapshot_text(body.get("tools"), cwd), "messages": [ minimal_snapshot_message(message, cwd) @@ -1928,22 +1945,30 @@ def minimal_snapshot_message(message: object, cwd: Path) -> dict[str, object]: if not isinstance(message, dict): raise AssertionError(f"minimal model request has an invalid message: {message}") role = message.get("role") - if role in ("system", "user"): + if role == "system": return {"role": role, "text": minimal_snapshot_text(message_text(message.get("content")), cwd)} + if role == "user": + content = [] + for block in message.get("content", []): + if block.get("type") == "tool_result": + content.append({"type": "tool_result", "tool_use_id": block.get("tool_use_id"), "content": "{{tool-result}}"}) + elif block.get("type") == "text": + content.append(minimal_snapshot_text(block, cwd)) + else: + raise AssertionError(f"minimal user message has unexpected content: {block}") + return {"role": role, "content": content} if role == "assistant": - calls = message.get("tool_calls") + calls = message.get("content") if not isinstance(calls, list): raise AssertionError(f"minimal assistant message has no tool calls: {message}") return { "role": role, "toolCalls": [ - {"id": call.get("id"), "name": (call.get("function") or {}).get("name")} + {"id": call.get("id"), "name": call.get("name")} for call in calls - if isinstance(call, dict) + if isinstance(call, dict) and call.get("type") == "tool_use" ], } - if role == "tool": - return {"role": role, "toolCallId": message.get("tool_call_id"), "text": "{{tool-result}}"} raise AssertionError(f"minimal model request has an unexpected message role: {message}") @@ -2061,6 +2086,7 @@ def build_restart_snapshot_files( request_value = [ { "model": request.get("model"), + "system": "{{system}}" if request.get("system") else None, "messages": restart_request_messages(request), "toolNames": sorted(advertised_tool_names(request)), } diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/result.json b/scripts/snapshots/python-sdk-single-exe/advanced/result.json index 15c0628102..668f1330c5 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/result.json +++ b/scripts/snapshots/python-sdk-single-exe/advanced/result.json @@ -217,7 +217,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -243,6 +255,16 @@ "dt": [], "id": "advanced-define", "name": "cordis_define", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-define", "args": [ "{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}" ] @@ -280,6 +302,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -385,7 +419,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -411,6 +457,16 @@ "dt": [], "id": "advanced-run", "name": "cordis_run", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-run", "args": [ "{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}" ] @@ -448,6 +504,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -622,7 +690,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -648,6 +728,16 @@ "dt": [], "id": "advanced-code", "name": "run_code", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-code", "args": [ "{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}" ] @@ -685,6 +775,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -821,7 +923,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -847,6 +961,16 @@ "dt": [], "id": "advanced-denied-native", "name": "snapshot_double", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-denied-native", "args": [ "{\"value\": -1}" ] @@ -884,6 +1008,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -990,7 +1126,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -1016,6 +1164,16 @@ "dt": [], "id": "advanced-denied-ptc", "name": "run_code", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-denied-ptc", "args": [ "{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}" ] @@ -1053,6 +1211,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -1194,7 +1364,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -1220,6 +1402,16 @@ "dt": [], "id": "advanced-direct-child", "name": "subagent", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-direct-child", "args": [ "{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}" ] @@ -1257,6 +1449,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -1370,7 +1574,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -1396,6 +1612,16 @@ "dt": [], "id": "advanced-workflow", "name": "workflow", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-workflow", "args": [ "{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}" ] @@ -1433,6 +1659,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -1585,7 +1823,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -1611,6 +1861,16 @@ "dt": [], "id": "advanced-undefine", "name": "cordis_undefine", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-undefine", "args": [ "{\"pluginId\": \"snap-1\"}" ] @@ -1648,6 +1908,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -1814,7 +2086,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] + } }, "id": "{{message:1}}" }, @@ -1873,6 +2157,18 @@ "type": "finish", "reason": { "kind": "stop" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] } } } @@ -2274,7 +2570,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -2300,6 +2608,16 @@ "dt": [], "id": "advanced-define", "name": "cordis_define", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-define", "args": [ "{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}" ] @@ -2337,6 +2655,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -2478,7 +2808,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -2504,6 +2846,16 @@ "dt": [], "id": "advanced-run", "name": "cordis_run", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-run", "args": [ "{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}" ] @@ -2541,6 +2893,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -2763,7 +3127,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -2789,6 +3165,16 @@ "dt": [], "id": "advanced-code", "name": "run_code", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-code", "args": [ "{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}" ] @@ -2826,6 +3212,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -3010,7 +3408,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -3036,6 +3446,16 @@ "dt": [], "id": "advanced-denied-native", "name": "snapshot_double", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-denied-native", "args": [ "{\"value\": -1}" ] @@ -3073,6 +3493,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -3215,7 +3647,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -3241,6 +3685,16 @@ "dt": [], "id": "advanced-denied-ptc", "name": "run_code", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-denied-ptc", "args": [ "{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}" ] @@ -3278,6 +3732,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -3467,7 +3933,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -3493,6 +3971,16 @@ "dt": [], "id": "advanced-direct-child", "name": "subagent", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-direct-child", "args": [ "{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}" ] @@ -3530,6 +4018,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -3893,7 +4393,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] + } }, "id": "{{messageId}}" }, @@ -3952,6 +4464,18 @@ "type": "finish", "reason": { "kind": "stop" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] } } } @@ -4127,7 +4651,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -4153,6 +4689,16 @@ "dt": [], "id": "advanced-workflow", "name": "workflow", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-workflow", "args": [ "{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}" ] @@ -4190,6 +4736,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -4584,7 +5142,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] + } }, "id": "{{messageId}}" }, @@ -4643,6 +5213,18 @@ "type": "finish", "reason": { "kind": "stop" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] } } } @@ -4849,7 +5431,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] + } }, "id": "{{messageId}}" }, @@ -4875,6 +5469,16 @@ "dt": [], "id": "advanced-undefine", "name": "cordis_undefine", + "args": [ + "" + ] + }, + { + "type": "tool-call-chunks", + "time0": 0, + "index": 0, + "dt": [], + "id": "advanced-undefine", "args": [ "{\"pluginId\": \"snap-1\"}" ] @@ -4912,6 +5516,18 @@ "type": "finish", "reason": { "kind": "tool-calls" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "tool-call" + } + ] } } } @@ -5126,7 +5742,19 @@ "source": { "kind": "model", "provider": "deepseek-official", - "model": "smoke-model" + "model": "smoke-model", + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] + } }, "id": "{{message:1}}" }, @@ -5185,6 +5813,18 @@ "type": "finish", "reason": { "kind": "stop" + }, + "replayState": { + "response": { + "kind": "deepseek-messages", + "version": 1, + "model": "smoke-model" + }, + "blocks": [ + { + "type": "text" + } + ] } } } diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v3.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v3.jsonl index b52081d64b..8c5f74fd05 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v3.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.1.v3.jsonl @@ -14,6 +14,6 @@ {"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}} {"type":"session/title","data":{"title":"Reply with exactly DIRECT_CHILD_OK and","messageSeqs":[9],"source":{"kind":"fallback"}}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{child-1}}","sessionFormatVersion":3,"throughSeq":13}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["DIRECT_CHILD_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DIRECT_CHILD_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["DIRECT_CHILD_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"DIRECT_CHILD_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v3.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v3.jsonl index 4bda653cb2..58eed2574e 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v3.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.2.v3.jsonl @@ -14,6 +14,6 @@ {"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}} {"type":"session/title","data":{"title":"Reply with exactly WORKFLOW_CHILD_OK and","messageSeqs":[9],"source":{"kind":"fallback"}}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{child-2}}","sessionFormatVersion":3,"throughSeq":13}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"WORKFLOW_CHILD_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["WORKFLOW_CHILD_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"WORKFLOW_CHILD_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"WORKFLOW_CHILD_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["WORKFLOW_CHILD_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"WORKFLOW_CHILD_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/scripts/snapshots/python-sdk-single-exe/advanced/session.v3.jsonl b/scripts/snapshots/python-sdk-single-exe/advanced/session.v3.jsonl index 98c16d93fd..ae9ae50949 100644 --- a/scripts/snapshots/python-sdk-single-exe/advanced/session.v3.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/advanced/session.v3.jsonl @@ -13,13 +13,13 @@ {"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}} {"type":"session/title","data":{"title":"Run the advanced packaged-runtime snapsh","messageSeqs":[8],"source":{"kind":"fallback"}}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":12}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-define","name":"cordis_define","arguments":"{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-define","name":"cordis_define","args":["{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-define","name":"cordis_define","arguments":"{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-define","name":"cordis_define","arguments":"{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-define","name":"cordis_define","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-define","args":["{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-define","name":"cordis_define","arguments":"{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"advanced-define","name":"cordis_define","arguments":"{\"plugin\": {\"kind\": \"new\", \"idPrefix\": \"snap\"}, \"name\": \"Snapshot Double\", \"purpose\": \"Expose a deterministic doubling tool for executable snapshot verification.\", \"code\": {\"host\": \"return (ctx) => {\\n ctx.on('tools/pre-execute', (exec, next) => {\\n if (exec.name !== 'snapshot_double' || exec.arguments.value !== -1) return next()\\n return {\\n kind: 'deny',\\n reason: 'Auto review rejected tool \\\"snapshot_double\\\"; its body was not executed',\\n info: {\\n name: 'AutoReviewDeniedError', code: 'AUTO_REVIEW_DENIED',\\n reason: ' transport raw\\\\r\\\\nreason ',\\n },\\n }\\n })\\n harness.registerTool(ctx, harness.defineTool({\\n name: 'snapshot_double',\\n description: 'Double a number for executable snapshot verification.',\\n parameters: { value: { type: 'number', required: true } },\\n output: {\\n schema: { type: 'number' },\\n render(_args, value) {\\n return [{ type: 'text', text: String(value) }]\\n }\\n },\\n async execute(args) {\\n return args.value * 2\\n }\\n }))\\n}\\n\"}}"}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"source":{"kind":"tool","callId":"advanced-define"},"content":[{"type":"tool-result","toolCallId":"advanced-define","content":[{"type":"text","text":"Defined snap-1/pkg-1 (Snapshot Double); it is not running yet. Use cordis_run to activate this Package."}],"isError":false}],"role":"user","id":"{{messageId}}"},"meta":{"pluginId":"snap-1","packageId":"pkg-1"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"step/start","data":{"turn":1,"step":2}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":18}} -{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-run","name":"cordis_run","arguments":"{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-run","name":"cordis_run","args":["{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-run","name":"cordis_run","arguments":"{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-run","name":"cordis_run","arguments":"{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-run","name":"cordis_run","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-run","args":["{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-run","name":"cordis_run","arguments":"{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":2,"callId":"advanced-run","name":"cordis_run","arguments":"{\"pluginId\": \"snap-1\", \"packageId\": \"pkg-1\", \"mode\": \"run\"}"}} {"type":"tool/result","data":{"turn":1,"step":2,"message":{"source":{"kind":"tool","callId":"advanced-run"},"content":[{"type":"tool-result","toolCallId":"advanced-run","content":[{"type":"text","text":"snap-1/pkg-1 is running (run-1)."}],"isError":false}],"role":"user","id":"{{messageId}}"},"meta":{"pluginId":"snap-1","packageId":"pkg-1","pluginRunId":"run-1"}},"sourceEventSeqs":[21],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":2}} @@ -27,7 +27,7 @@ {"type":"system/message","data":{"turn":1,"step":3,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"plugin","plugin":"@deepseek-ai/dsh-system-prompt"},"id":"{{messageId}}"}},"sourceEventSeqs":[7],"surfaceOp":{"op":"replace","startSeq":7,"endSeq":7}} {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"smoke-model","maxTokens":256000,"reasoningEffort":"high"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"tools":["cordis_define","cordis_inspect_list","cordis_inspect_query","cordis_inspect_self","cordis_run","cordis_stop","cordis_undefine","job_kill","job_list","job_output","run_code","snapshot_double","subagent","workflow"]},"reason":"change","startsSeries":true}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":26}} -{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-code","name":"run_code","args":["{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-code","name":"run_code","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-code","args":["{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":3,"callId":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Run the temporary Plugin tool\"}"}} {"type":"tool/ptc-dispatch-start","data":{"rootCallId":"advanced-code","parentCallId":"advanced-code","subCallId":"advanced-code:ptc:1","name":"snapshot_double","arguments":{"value":21}}} {"type":"tool/ptc-dispatch","data":{"rootCallId":"advanced-code","parentCallId":"advanced-code","subCallId":"advanced-code:ptc:1","name":"snapshot_double","arguments":{"value":21},"isError":false,"content":[{"type":"text","text":"42"}]}} @@ -35,13 +35,13 @@ {"type":"step/end","data":{"turn":1,"step":3}} {"type":"step/start","data":{"turn":1,"step":4}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":34}} -{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-denied-native","name":"snapshot_double","arguments":"{\"value\": -1}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-denied-native","name":"snapshot_double","args":["{\"value\": -1}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-denied-native","name":"snapshot_double","arguments":"{\"value\": -1}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-denied-native","name":"snapshot_double","arguments":"{\"value\": -1}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-denied-native","name":"snapshot_double","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-denied-native","args":["{\"value\": -1}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-denied-native","name":"snapshot_double","arguments":"{\"value\": -1}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":4,"callId":"advanced-denied-native","name":"snapshot_double","arguments":"{\"value\": -1}"}} {"type":"tool/result","data":{"turn":1,"step":4,"message":{"source":{"kind":"tool","callId":"advanced-denied-native"},"content":[{"type":"tool-result","toolCallId":"advanced-denied-native","content":[{"type":"text","text":"Error: Auto review rejected tool \"snapshot_double\"; its body was not executed"}],"isError":true}],"role":"user","id":"{{messageId}}"},"error":{"name":"AutoReviewDeniedError","code":"AUTO_REVIEW_DENIED","reason":" transport raw\r\nreason "}},"sourceEventSeqs":[37],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":4}} {"type":"step/start","data":{"turn":1,"step":5}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":40}} -{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-denied-ptc","name":"run_code","arguments":"{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-denied-ptc","name":"run_code","args":["{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-denied-ptc","name":"run_code","arguments":"{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-denied-ptc","name":"run_code","arguments":"{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-denied-ptc","name":"run_code","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-denied-ptc","args":["{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-denied-ptc","name":"run_code","arguments":"{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":5,"callId":"advanced-denied-ptc","name":"run_code","arguments":"{\"code\": \"try { await tools.snapshot_double({ value: -1 }) } catch (error) { return error.message }\", \"description\": \"Catch a structured inner tool denial\"}"}} {"type":"tool/ptc-dispatch-start","data":{"rootCallId":"advanced-denied-ptc","parentCallId":"advanced-denied-ptc","subCallId":"advanced-denied-ptc:ptc:1","name":"snapshot_double","arguments":{"value":-1}}} {"type":"tool/ptc-dispatch","data":{"rootCallId":"advanced-denied-ptc","parentCallId":"advanced-denied-ptc","subCallId":"advanced-denied-ptc:ptc:1","name":"snapshot_double","arguments":{"value":-1},"isError":true,"error":{"name":"AutoReviewDeniedError","code":"AUTO_REVIEW_DENIED","reason":" transport raw\r\nreason "},"content":[{"type":"text","text":"Error: Auto review rejected tool \"snapshot_double\"; its body was not executed"}]}} @@ -49,14 +49,14 @@ {"type":"step/end","data":{"turn":1,"step":5}} {"type":"step/start","data":{"turn":1,"step":6}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":48}} -{"type":"assistant/message","data":{"turn":1,"step":6,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-direct-child","name":"subagent","args":["{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":6,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-direct-child","name":"subagent","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-direct-child","args":["{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-direct-child","name":"subagent","arguments":"{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":6,"callId":"advanced-direct-child","name":"subagent","arguments":"{\"description\": \"Check direct child\", \"prompt\": \"Reply with exactly DIRECT_CHILD_OK and nothing else.\"}"}} {"type":"subagent/catalog","data":{"version":0,"childId":"{{child-1}}","childCreatedAt":0,"mode":"one-shot","label":"Check direct child"}} {"type":"tool/result","data":{"turn":1,"step":6,"message":{"source":{"kind":"tool","callId":"advanced-direct-child"},"content":[{"type":"tool-result","toolCallId":"advanced-direct-child","content":[{"type":"text","text":"DIRECT_CHILD_OK"}],"isError":false}],"role":"user","id":"{{messageId}}"}},"sourceEventSeqs":[51],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":6}} {"type":"step/start","data":{"turn":1,"step":7}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":55}} -{"type":"assistant/message","data":{"turn":1,"step":7,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-workflow","name":"workflow","args":["{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":7,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-workflow","name":"workflow","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-workflow","args":["{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":7,"callId":"advanced-workflow","name":"workflow","arguments":"{\"script\": \"phase('Delegate')\\nconst reply = await agent('Reply with exactly WORKFLOW_CHILD_OK and nothing else.', { label: 'workflow-child' })\\nreturn { reply }\", \"meta\": {\"name\": \"advanced-exe-snapshot\", \"description\": \"exercise one packaged workflow child\"}}"}} {"type":"tool-workflow/run-start","data":{"runId":"{{workflow-run}}","name":"advanced-exe-snapshot"}} {"type":"subagent/catalog","data":{"version":0,"childId":"{{child-2}}","childCreatedAt":0,"mode":"one-shot"}} @@ -67,7 +67,7 @@ {"type":"step/end","data":{"turn":1,"step":7}} {"type":"step/start","data":{"turn":1,"step":8}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":66}} -{"type":"assistant/message","data":{"turn":1,"step":8,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-undefine","name":"cordis_undefine","arguments":"{\"pluginId\": \"snap-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-undefine","name":"cordis_undefine","args":["{\"pluginId\": \"snap-1\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-undefine","name":"cordis_undefine","arguments":"{\"pluginId\": \"snap-1\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":8,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-undefine","name":"cordis_undefine","arguments":"{\"pluginId\": \"snap-1\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-undefine","name":"cordis_undefine","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-undefine","args":["{\"pluginId\": \"snap-1\"}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-undefine","name":"cordis_undefine","arguments":"{\"pluginId\": \"snap-1\"}"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"tool-calls"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"tool-call"}]}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":8,"callId":"advanced-undefine","name":"cordis_undefine","arguments":"{\"pluginId\": \"snap-1\"}"}} {"type":"tool/result","data":{"turn":1,"step":8,"message":{"source":{"kind":"tool","callId":"advanced-undefine"},"content":[{"type":"tool-result","toolCallId":"advanced-undefine","content":[{"type":"text","text":"Removed dynamic Plugin snap-1 and all of its Packages."}],"isError":false}],"role":"user","id":"{{messageId}}"}},"sourceEventSeqs":[69],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":8}} @@ -75,7 +75,7 @@ {"type":"system/message","data":{"turn":1,"step":9,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"plugin","plugin":"@deepseek-ai/dsh-system-prompt"},"id":"{{messageId}}"}},"sourceEventSeqs":[25],"surfaceOp":{"op":"replace","startSeq":25,"endSeq":25}} {"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"smoke-model","maxTokens":256000,"reasoningEffort":"high"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"tools":["cordis_define","cordis_inspect_list","cordis_inspect_query","cordis_inspect_self","cordis_run","cordis_stop","cordis_undefine","job_kill","job_list","job_output","run_code","subagent","workflow"]},"reason":"change","startsSeries":true}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":3,"throughSeq":74}} -{"type":"assistant/message","data":{"turn":1,"step":9,"message":{"role":"assistant","content":[{"type":"text","text":"ADVANCED_EXECUTABLE_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{message:1}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["ADVANCED_EXECUTABLE_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_EXECUTABLE_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":9,"message":{"role":"assistant","content":[{"type":"text","text":"ADVANCED_EXECUTABLE_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}},"id":"{{message:1}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["ADVANCED_EXECUTABLE_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"ADVANCED_EXECUTABLE_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":9}} {"type":"command/run","data":{"commandId":"{{command:1}}","name":"feedback","source":{"kind":"user"}}} {"type":"feedback/record","data":{"text":"The session needs a clearer explanation."}} diff --git a/scripts/snapshots/python-sdk-single-exe/minimal/model-visible.json b/scripts/snapshots/python-sdk-single-exe/minimal/model-visible.json index 6e8874b63a..599d9314b0 100644 --- a/scripts/snapshots/python-sdk-single-exe/minimal/model-visible.json +++ b/scripts/snapshots/python-sdk-single-exe/minimal/model-visible.json @@ -1,67 +1,65 @@ [ { + "system": "You are a helpful software engineer assistant.", "tools": [ { - "type": "function", - "function": { - "name": "bash", - "description": "Run commands in a bash shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* Network access depends on the task environment. Prefer configured mirrors/proxies when they are available.\n* State is persistent across command calls and discussions with the user.\n* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.", - "parameters": { - "type": "object", - "properties": { - "command": { - "type": "string", - "description": "The bash command to run. Relative path is preferred in the command." - } - }, - "required": [ - "command" - ] - } + "name": "bash", + "description": "Run commands in a bash shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* Network access depends on the task environment. Prefer configured mirrors/proxies when they are available.\n* State is persistent across command calls and discussions with the user.\n* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.", + "input_schema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The bash command to run. Relative path is preferred in the command." + } + }, + "required": [ + "command" + ] } } ], "messages": [ - { - "role": "system", - "text": "You are a helpful software engineer assistant." - }, { "role": "user", - "text": "Exercise the packaged minimal agent's persistent shell." + "content": [ + { + "type": "text", + "text": "Exercise the packaged minimal agent's persistent shell." + } + ] } ] }, { + "system": "You are a helpful software engineer assistant.", "tools": [ { - "type": "function", - "function": { - "name": "bash", - "description": "Run commands in a bash shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* Network access depends on the task environment. Prefer configured mirrors/proxies when they are available.\n* State is persistent across command calls and discussions with the user.\n* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.", - "parameters": { - "type": "object", - "properties": { - "command": { - "type": "string", - "description": "The bash command to run. Relative path is preferred in the command." - } - }, - "required": [ - "command" - ] - } + "name": "bash", + "description": "Run commands in a bash shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* Network access depends on the task environment. Prefer configured mirrors/proxies when they are available.\n* State is persistent across command calls and discussions with the user.\n* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.", + "input_schema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The bash command to run. Relative path is preferred in the command." + } + }, + "required": [ + "command" + ] } } ], "messages": [ - { - "role": "system", - "text": "You are a helpful software engineer assistant." - }, { "role": "user", - "text": "Exercise the packaged minimal agent's persistent shell." + "content": [ + { + "type": "text", + "text": "Exercise the packaged minimal agent's persistent shell." + } + ] }, { "role": "assistant", @@ -73,42 +71,46 @@ ] }, { - "role": "tool", - "toolCallId": "minimal-bash-1", - "text": "{{tool-result}}" + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "minimal-bash-1", + "content": "{{tool-result}}" + } + ] } ] }, { + "system": "You are a helpful software engineer assistant.", "tools": [ { - "type": "function", - "function": { - "name": "bash", - "description": "Run commands in a bash shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* Network access depends on the task environment. Prefer configured mirrors/proxies when they are available.\n* State is persistent across command calls and discussions with the user.\n* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.", - "parameters": { - "type": "object", - "properties": { - "command": { - "type": "string", - "description": "The bash command to run. Relative path is preferred in the command." - } - }, - "required": [ - "command" - ] - } + "name": "bash", + "description": "Run commands in a bash shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* Network access depends on the task environment. Prefer configured mirrors/proxies when they are available.\n* State is persistent across command calls and discussions with the user.\n* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.", + "input_schema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The bash command to run. Relative path is preferred in the command." + } + }, + "required": [ + "command" + ] } } ], "messages": [ - { - "role": "system", - "text": "You are a helpful software engineer assistant." - }, { "role": "user", - "text": "Exercise the packaged minimal agent's persistent shell." + "content": [ + { + "type": "text", + "text": "Exercise the packaged minimal agent's persistent shell." + } + ] }, { "role": "assistant", @@ -120,9 +122,14 @@ ] }, { - "role": "tool", - "toolCallId": "minimal-bash-1", - "text": "{{tool-result}}" + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "minimal-bash-1", + "content": "{{tool-result}}" + } + ] }, { "role": "assistant", @@ -134,9 +141,14 @@ ] }, { - "role": "tool", - "toolCallId": "minimal-bash-2", - "text": "{{tool-result}}" + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "minimal-bash-2", + "content": "{{tool-result}}" + } + ] } ] } diff --git a/scripts/snapshots/python-sdk-single-exe/minimal/win-x64/model-visible.json b/scripts/snapshots/python-sdk-single-exe/minimal/win-x64/model-visible.json index 728b73a1a0..0a4ae878b4 100644 --- a/scripts/snapshots/python-sdk-single-exe/minimal/win-x64/model-visible.json +++ b/scripts/snapshots/python-sdk-single-exe/minimal/win-x64/model-visible.json @@ -1,67 +1,65 @@ [ { + "system": "You are a helpful software engineer assistant.", "tools": [ { - "type": "function", - "function": { - "name": "pwsh", - "description": "Run commands in a PowerShell shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* You don't have access to the internet via this tool.\n* State is persistent across command calls and discussions with the user.\n* Use native Windows paths (C:\\...) and $env:NAME variables; this is PowerShell, not bash.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.", - "parameters": { - "type": "object", - "properties": { - "command": { - "type": "string", - "description": "The PowerShell command to run. Relative path is preferred in the command." - } - }, - "required": [ - "command" - ] - } + "name": "pwsh", + "description": "Run commands in a PowerShell shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* You don't have access to the internet via this tool.\n* State is persistent across command calls and discussions with the user.\n* Use native Windows paths (C:\\...) and $env:NAME variables; this is PowerShell, not bash.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.", + "input_schema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The PowerShell command to run. Relative path is preferred in the command." + } + }, + "required": [ + "command" + ] } } ], "messages": [ - { - "role": "system", - "text": "You are a helpful software engineer assistant." - }, { "role": "user", - "text": "Exercise the packaged minimal agent's persistent shell." + "content": [ + { + "type": "text", + "text": "Exercise the packaged minimal agent's persistent shell." + } + ] } ] }, { + "system": "You are a helpful software engineer assistant.", "tools": [ { - "type": "function", - "function": { - "name": "pwsh", - "description": "Run commands in a PowerShell shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* You don't have access to the internet via this tool.\n* State is persistent across command calls and discussions with the user.\n* Use native Windows paths (C:\\...) and $env:NAME variables; this is PowerShell, not bash.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.", - "parameters": { - "type": "object", - "properties": { - "command": { - "type": "string", - "description": "The PowerShell command to run. Relative path is preferred in the command." - } - }, - "required": [ - "command" - ] - } + "name": "pwsh", + "description": "Run commands in a PowerShell shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* You don't have access to the internet via this tool.\n* State is persistent across command calls and discussions with the user.\n* Use native Windows paths (C:\\...) and $env:NAME variables; this is PowerShell, not bash.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.", + "input_schema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The PowerShell command to run. Relative path is preferred in the command." + } + }, + "required": [ + "command" + ] } } ], "messages": [ - { - "role": "system", - "text": "You are a helpful software engineer assistant." - }, { "role": "user", - "text": "Exercise the packaged minimal agent's persistent shell." + "content": [ + { + "type": "text", + "text": "Exercise the packaged minimal agent's persistent shell." + } + ] }, { "role": "assistant", @@ -73,42 +71,46 @@ ] }, { - "role": "tool", - "toolCallId": "minimal-bash-1", - "text": "{{tool-result}}" + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "minimal-bash-1", + "content": "{{tool-result}}" + } + ] } ] }, { + "system": "You are a helpful software engineer assistant.", "tools": [ { - "type": "function", - "function": { - "name": "pwsh", - "description": "Run commands in a PowerShell shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* You don't have access to the internet via this tool.\n* State is persistent across command calls and discussions with the user.\n* Use native Windows paths (C:\\...) and $env:NAME variables; this is PowerShell, not bash.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.", - "parameters": { - "type": "object", - "properties": { - "command": { - "type": "string", - "description": "The PowerShell command to run. Relative path is preferred in the command." - } - }, - "required": [ - "command" - ] - } + "name": "pwsh", + "description": "Run commands in a PowerShell shell\n* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n* You don't have access to the internet via this tool.\n* State is persistent across command calls and discussions with the user.\n* Use native Windows paths (C:\\...) and $env:NAME variables; this is PowerShell, not bash.\n* Please avoid commands that may produce a very large amount of output.\n* Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.", + "input_schema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "The PowerShell command to run. Relative path is preferred in the command." + } + }, + "required": [ + "command" + ] } } ], "messages": [ - { - "role": "system", - "text": "You are a helpful software engineer assistant." - }, { "role": "user", - "text": "Exercise the packaged minimal agent's persistent shell." + "content": [ + { + "type": "text", + "text": "Exercise the packaged minimal agent's persistent shell." + } + ] }, { "role": "assistant", @@ -120,9 +122,14 @@ ] }, { - "role": "tool", - "toolCallId": "minimal-bash-1", - "text": "{{tool-result}}" + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "minimal-bash-1", + "content": "{{tool-result}}" + } + ] }, { "role": "assistant", @@ -134,9 +141,14 @@ ] }, { - "role": "tool", - "toolCallId": "minimal-bash-2", - "text": "{{tool-result}}" + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "minimal-bash-2", + "content": "{{tool-result}}" + } + ] } ] } diff --git a/scripts/snapshots/python-sdk-single-exe/restart/requests.json b/scripts/snapshots/python-sdk-single-exe/restart/requests.json index a7efe0f6ce..7954063aec 100644 --- a/scripts/snapshots/python-sdk-single-exe/restart/requests.json +++ b/scripts/snapshots/python-sdk-single-exe/restart/requests.json @@ -1,18 +1,20 @@ [ { "model": "smoke-model", + "system": "{{system}}", "messages": [ - { - "role": "system", - "content": "{{system}}" - }, { "role": "user", - "content": "Complete the first isolated Python SDK process turn." - }, - { - "role": "user", - "content": "Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations.\n\nApproval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)." + "content": [ + { + "type": "text", + "text": "Complete the first isolated Python SDK process turn." + }, + { + "type": "text", + "text": "Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations.\n\nApproval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)." + } + ] } ], "toolNames": [ @@ -33,18 +35,20 @@ }, { "model": "smoke-model", + "system": "{{system}}", "messages": [ - { - "role": "system", - "content": "{{system}}" - }, { "role": "user", - "content": "Complete the second isolated Python SDK process turn." - }, - { - "role": "user", - "content": "Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations.\n\nApproval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)." + "content": [ + { + "type": "text", + "text": "Complete the second isolated Python SDK process turn." + }, + { + "type": "text", + "text": "Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations.\n\nApproval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)." + } + ] } ], "toolNames": [ diff --git a/scripts/snapshots/python-sdk-single-exe/restart/session.1.v3.jsonl b/scripts/snapshots/python-sdk-single-exe/restart/session.1.v3.jsonl index 876cbd1c50..c887466891 100644 --- a/scripts/snapshots/python-sdk-single-exe/restart/session.1.v3.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/restart/session.1.v3.jsonl @@ -13,6 +13,6 @@ {"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}} {"type":"session/title","data":{"title":"Complete the first isolated Python","messageSeqs":[8],"source":{"kind":"fallback"}}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{session-1}}","sessionFormatVersion":3,"throughSeq":12}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PROCESS_ONE_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PROCESS_ONE_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PROCESS_ONE_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PROCESS_ONE_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PROCESS_ONE_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PROCESS_ONE_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/scripts/snapshots/python-sdk-single-exe/restart/session.2.v3.jsonl b/scripts/snapshots/python-sdk-single-exe/restart/session.2.v3.jsonl index 01211c938e..82aea237d4 100644 --- a/scripts/snapshots/python-sdk-single-exe/restart/session.2.v3.jsonl +++ b/scripts/snapshots/python-sdk-single-exe/restart/session.2.v3.jsonl @@ -13,6 +13,6 @@ {"type":"request/context","data":{"provider":"deepseek-official","model":"smoke-model","contextWindow":1000000}} {"type":"session/title","data":{"title":"Complete the second isolated Python","messageSeqs":[8],"source":{"kind":"fallback"}}} {"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{session-2}}","sessionFormatVersion":3,"throughSeq":12}} -{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PROCESS_TWO_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model"},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PROCESS_TWO_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PROCESS_TWO_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"PROCESS_TWO_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"smoke-model","replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}},"id":"{{messageId}}"},"usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6},"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["PROCESS_TWO_OK"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"PROCESS_TWO_OK"}}},{"type":"chunk","time":0,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3,"totalTokens":6}}},{"type":"chunk","time":0,"chunk":{"type":"finish","reason":{"kind":"stop"},"replayState":{"response":{"kind":"deepseek-messages","version":1,"model":"smoke-model"},"blocks":[{"type":"text"}]}}}]},"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}}