Merge branch 'master' into feature/minimal-compact-image

This commit is contained in:
LogosVeritas committed 2026-10-13 10:32:01 +08:00
commit 00a007d833
734 files changed
+19749 -4630

No files matched your search

+118
View File
@@ -0,0 +1,118 @@
"""Office content checks for installed Python runtime tests."""
from __future__ import annotations
import json
import shutil
import subprocess
import tempfile
from collections.abc import Iterator, Mapping, Sequence
from contextlib import contextmanager
from pathlib import Path
@contextmanager
def workspace(artifacts: Path | None = None, *, prefix: str = "dsh-office-render-") -> Iterator[Path]:
"""Retain only Office inputs, PNG batches, and errors before cleaning the temporary root."""
if artifacts is not None:
artifacts.mkdir(parents=True, exist_ok=False)
with tempfile.TemporaryDirectory(prefix=prefix) as temporary:
root = Path(temporary).resolve()
try:
yield root
except Exception as error:
if artifacts is not None:
(artifacts / "error.txt").write_text(f"{type(error).__name__}: {error}\n", encoding="utf-8")
raise
finally:
if artifacts is not None:
document = next(root.rglob("color-blocks.docx"), None)
if document is not None:
source = document.parent
for name in ("color-blocks.docx", "color-blocks.pptx", "color-blocks.xlsx"):
if (source / name).is_file():
shutil.copy2(source / name, artifacts / name)
for name in ("cli-docx", "cli-pptx", "cli-xlsx", "node-pptx"):
batch = source / name
if batch.is_dir():
destination = artifacts / name
destination.mkdir()
for file in batch.iterdir():
if file.is_file() and (file.suffix == ".png" or file.name == "manifest.json"):
shutil.copy2(file, destination / file.name)
def copy_documents(directory: Path) -> dict[str, Path]:
"""Copy the Kit's one-page color-block fixtures into a private test directory."""
documents = {}
for extension in ("docx", "pptx", "xlsx"):
source = Path(__file__).with_suffix("") / f"color-blocks.{extension}"
destination = directory / source.name
shutil.copy2(source, destination)
documents[extension] = destination
return documents
def check_image(path: Path) -> None:
"""Require visible colored blocks and text after compositing transparency onto white."""
from PIL import Image
with Image.open(path) as image:
rgba = image.convert("RGBA")
visible = Image.alpha_composite(Image.new("RGBA", rgba.size, "white"), rgba).convert("RGB")
red = blue = black = nonwhite = red_x = blue_x = 0
for index, (r, g, b) in enumerate(visible.get_flattened_data()):
x = index % visible.width
if r >= 160 and g <= 100 and b <= 100:
red += 1
red_x += x
if r <= 100 and g <= 160 and b >= 160:
blue += 1
blue_x += x
black += max(r, g, b) < 80
nonwhite += min(r, g, b) < 240
pixels = visible.width * visible.height
counts = {"red": red, "blue": blue, "black": black, "nonwhite": nonwhite, "pixels": pixels}
if red < pixels * 0.01 or blue < pixels * 0.01 or black < pixels * 0.0002 or nonwhite < pixels * 0.04:
raise AssertionError(f"Office image lacks visible color blocks or text: {path}: {counts}")
if red_x / red + visible.width * 0.1 >= blue_x / blue:
raise AssertionError(f"Office image has reversed or overlapping color blocks: {path}: {counts}")
def check_render_manifest(manifest: dict, expected_backend: str) -> Path:
"""Check direct-Office metadata and return its sole saved image path."""
assert manifest["backend"] == expected_backend, manifest
assert manifest["rasterEngine"] == "libreoffice", manifest
assert manifest["source"] == "saved", manifest
assert len(manifest["images"]) == 1, manifest
return Path(manifest["images"][0]["path"])
def check_render(manifest: dict, expected_backend: str) -> None:
"""Check direct-Office metadata and visible content in its sole output image."""
check_image(check_render_manifest(manifest, expected_backend))
def render_cli(
command: Sequence[str], documents: Mapping[str, Path], directory: Path,
expected_backend: str, environment: Mapping[str, str], *, check_content: bool = True,
) -> None:
"""Run the three document engines through the real CLI with isolated outputs."""
errors = []
for extension, document in documents.items():
selection = ["--sheet", "Render", "--range", "A1:B2"] if extension == "xlsx" else ["--pages", "1"]
try:
result = subprocess.run([
*command, "render", "--input", str(document), "--output-dir", str(directory / f"cli-{extension}"),
"--dpi", "72", "--timeout-ms", "120000", *selection,
], env=environment, capture_output=True, text=True, encoding="utf-8", timeout=480)
if result.returncode:
raise AssertionError(f"exit {result.returncode}: {result.stderr}")
manifest = json.loads(result.stdout)
if check_content:
check_render(manifest, expected_backend)
else:
check_render_manifest(manifest, expected_backend)
except Exception as error:
errors.append(f"{extension}: {type(error).__name__}: {error}")
if errors:
raise AssertionError("Office CLI content checks failed:\n" + "\n".join(errors))
Binary file not shown.
Binary file not shown.
Binary file not shown.
+15 -11
View File
@@ -1,4 +1,4 @@
/** Exercise the wheel's external Office package from a shipped dsh profile. */
/** Exercise the wheel's Office API and model-shell commands from a shipped profile. */
import { readFile, writeFile } from 'node:fs/promises'
import { execFile } from 'node:child_process'
import { promisify } from 'node:util'
@@ -7,19 +7,23 @@ import { createConverter } from '@deepseek-ai/libreoffice-kit'
export const name = 'python-sdk-office-smoke'
export async function apply(ctx, config) {
const skill = await ctx.skills.get('office-export-pdf')
const json = skill?.content.match(/\n(\{\n[\s\S]+)$/u)?.[1]
if (json === undefined) throw new Error('Office skill did not supply CLI paths')
const { libreofficeKit: { node, cli: entry } } = JSON.parse(json)
async function cli(args) {
const result = await promisify(execFile)(node, [entry, ...args], { timeout: 120_000, env: { ...process.env, PATH: '' } })
return JSON.parse(result.stdout)
}
const capabilities = await cli(['capabilities', '--json'])
await cli(['convert', '--input', config.input, '--output', config.output + '.cli.pdf'])
const pdf = await readFile(config.output + '.cli.pdf')
if (pdf.subarray(0, 5).toString() !== '%PDF-') throw new Error('Office shell command did not create a PDF')
const converter = await createConverter({ timeoutMs: 120_000 })
try {
const result = await converter.render({ inputPath: config.input, outputPath: config.output })
const skill = await ctx.skills.get('office-docx')
const json = skill?.content.match(/\n(\{\n[\s\S]+)$/u)?.[1]
if (json === undefined) throw new Error('Office skill did not supply CLI paths')
const { libreofficeKit: { node, cli } } = JSON.parse(json)
const options = { env: { ...process.env, PATH: '' }, timeout: 120_000 }
const capabilities = await promisify(execFile)(node, [cli, 'capabilities', '--json'], options)
await promisify(execFile)(node, [cli, 'convert', '--input', config.input, '--output', config.output + '.cli.pdf'], options)
const pdf = await readFile(config.output + '.cli.pdf')
if (pdf.subarray(0, 5).toString() !== '%PDF-') throw new Error('Skill CLI did not create a PDF')
await writeFile(config.result, JSON.stringify({ ...result, capabilities: JSON.parse(capabilities.stdout), moduleUrl: import.meta.resolve('@deepseek-ai/libreoffice-kit') }))
const images = await converter.renderImages({ inputPath: config.imageInput, outputDir: config.imageOutput, pages: [1], dpi: 72 })
await writeFile(config.result, JSON.stringify({ ...result, images, capabilities, moduleUrl: import.meta.resolve('@deepseek-ai/libreoffice-kit') }))
} finally {
await converter.dispose()
}
+17 -4
View File
@@ -1,6 +1,6 @@
/** Deterministic tool and denial fixture for the packaged SDK snapshot. */
/** Deterministic job-backed tool and denial fixture for the packaged SDK snapshot. */
export const name = 'python-snapshot-tool'
export const inject = ['tools']
export const inject = ['tools', 'jobs']
/** @param {import('@deepseek-ai/cordis').Context} ctx - Scenario-owned tool registration. */
export function apply(ctx) {
@@ -25,8 +25,21 @@ export function apply(ctx) {
return [{ type: 'text', text: String(value) }]
}
},
async execute(args) {
return args.value * 2
async execute(args, exec) {
const owner = exec.agent
if (owner === undefined) throw new Error('snapshot tool requires an owner')
const id = ctx.jobs.start({
kind: 'snapshot',
label: 'snapshot_double',
owner: owner.id,
toolCall: { callId: exec.callId, rootCallId: exec.rootCallId },
run: () => ({
cancel() {},
done: Promise.resolve({ status: 'completed', result: String(args.value * 2) }),
}),
})
await ctx.jobs.wait(id, 60_000, owner.id)
return Number(ctx.jobs.read(id, owner.id).result)
}
})
}
+4 -1
View File
@@ -281,6 +281,8 @@ export const EVENT_WALK_EXEMPTIONS: Record<string, string> = {
* appear on more than one page.
*/
export const LINK_MAP: Readonly<Record<string, string>> = {
RemoteStream: 'typert.md',
RemoteUplinkWindow: 'typert.md',
EventLogOptions: 'otel.md',
EventLogReporter: 'otel.md',
SessionLogOptions: 'otel.md',
@@ -350,6 +352,7 @@ export const LINK_MAP: Readonly<Record<string, string>> = {
LlmModelInfo: 'llm-streaming.md',
LlmProviderInfo: 'llm-streaming.md',
LlmConfigurableProvider: 'llm-streaming.md',
LlmNativeAuth: 'llm-streaming.md',
LlmModelDiscoveryRequest: 'llm-streaming.md',
LlmDiscoveredModel: 'llm-streaming.md',
ResolvedRetryPolicy: 'llm-streaming.md',
@@ -957,7 +960,7 @@ export const TYPE_LINK_EXEMPTIONS: Readonly<Record<string, string>> = {
TerminalEnvironment: 'Browser terminal environment fields are owned by packages/api/terminal-controller/README.md',
WebTerminalInfo: 'Browser terminal metadata is owned by packages/api/terminal-controller/README.md',
TerminalCreateRequest: 'Browser terminal allocation fields are owned by packages/api/terminal-controller/README.md',
TerminalAttachmentId: 'Browser terminal input ownership is owned by packages/api/terminal-controller/README.md',
TerminalInput: 'Browser terminal input commands are owned by packages/api/terminal-controller/README.md',
TerminalFrame: 'Browser terminal stream frames are owned by packages/api/terminal-controller/README.md',
TerminalRetentionFrame: 'Browser terminal window holds are owned by packages/api/terminal-controller/README.md',
WebTerminalId: 'Browser terminal identity is owned by packages/api/terminal-controller/README.md',
+39
View File
@@ -0,0 +1,39 @@
import { readFileSync } from 'node:fs'
import { resolve } from 'node:path'
import yaml from 'js-yaml'
import { expect, it } from 'vitest'
const workflow = yaml.load(readFileSync(resolve(import.meta.dirname, '../.github/workflows/macos-package.yml'), 'utf8')) as {
on: Record<string, unknown>
permissions: Record<string, string>
concurrency: { group: string; 'cancel-in-progress': boolean }
jobs: Record<string, {
'runs-on': string[]
steps: Array<{ id?: string; name?: string; if?: string; uses?: string; run?: string; with?: Record<string, unknown> }>
}>
}
it('confines signed Mac packaging to manual dispatch and a dedicated Apple Silicon runner', () => {
expect(Object.keys(workflow.on)).toEqual(['workflow_dispatch'])
expect(workflow.permissions).toEqual({ contents: 'read' })
expect(workflow.concurrency).toEqual({ group: 'macos-desktop-package', 'cancel-in-progress': false })
expect(workflow.jobs.package!['runs-on']).toEqual(['self-hosted', 'macOS', 'ARM64', 'dsh-mac-package-trial'])
const steps = workflow.jobs.package!.steps
expect(steps.find(step => step.id === 'checkout')?.with).toMatchObject({ 'persist-credentials': false, clean: true })
for (const step of steps) expect(step.run ?? '').not.toContain('${{ inputs.')
const uploads = steps.filter(step => step.uses?.startsWith('actions/upload-artifact@'))
expect(uploads).toHaveLength(2)
expect(uploads[0]?.if).toBe("always() && steps.checkout.outcome == 'success'")
expect(uploads[1]?.if).toBe('success()')
expect(uploads[1]?.with?.path).toBe('apps/desktop/.desktop-build/targets/mac-arm64/${{ steps.settings.outputs.artifacts }}/*.dmg\napps/desktop/.desktop-build/targets/mac-arm64/${{ steps.settings.outputs.artifacts }}/*.zip\n')
})
it('defaults to notarization and labels the explicit debugging option', () => {
expect(workflow.on.workflow_dispatch).toMatchObject({ inputs: { skip_notarization: {
type: 'boolean', default: false,
description: 'Skip notarization/stapling: internal debugging only, not for distribution or updates',
} } })
const steps = workflow.jobs.package!.steps
expect(steps.filter(step => step.run?.includes('args+=(--skip-notarization)'))).toHaveLength(2)
expect(steps.at(-1)?.with?.name).toContain('${{ steps.settings.outputs.mode }}')
})
+12 -3
View File
@@ -334,11 +334,20 @@ describe('one-time V4 migration command', () => {
const backendUrl = pathToFileURL(join(repository, 'packages/session/session-persistence-jsonl/src/index.ts')).href
const generationUrl = pathToFileURL(join(repository, 'packages/session/session-persistence-jsonl/src/generation.ts')).href
await writeFile(entrypoint, `
const { default: Backend } = await import(${JSON.stringify(backendUrl)});
const Backend = await import(${JSON.stringify(backendUrl)});
const { Context } = await import(${JSON.stringify(pathToFileURL(join(repository, 'vendor/cordis/src/index.ts')).href)});
const { JsonlGenerationSourceChangedError } = await import(${JSON.stringify(generationUrl)});
const open = Backend.prototype.open;
const ctx = new Context();
let prototype;
try {
await ctx.plugin(Backend, { root: ${JSON.stringify(temporaryRoot())} });
prototype = Object.getPrototypeOf(ctx.sessionPersistence);
} finally {
await ctx.fiber.dispose();
}
const open = prototype.open;
let changed = false;
Backend.prototype.open = async function(id, access, options) {
prototype.open = async function(id, access, options) {
if (id === 'a-parent' && access === 'write' && !changed) {
changed = true;
throw new JsonlGenerationSourceChangedError(${JSON.stringify(child.path)});
+1 -1
View File
@@ -10,7 +10,7 @@ import { inspect, parseArgs } from 'node:util'
import { Context } from '@deepseek-ai/cordis'
import { SESSION_FORMAT_VERSION, SessionId } from '@deepseek-ai/dsh-session'
import { sessionFormatCatalog } from '@deepseek-ai/dsh-session-format-catalog'
import JsonlSessionPersistence from '@deepseek-ai/dsh-session-persistence-jsonl'
import * as JsonlSessionPersistence from '@deepseek-ai/dsh-session-persistence-jsonl'
import { encodeSegment, generationLogFilename, parseGenerationLogFilename, type JsonlCompression } from '../packages/session/session-persistence-jsonl/src/format.ts'
import { JsonlGenerationSourceChangedError } from '../packages/session/session-persistence-jsonl/src/generation.ts'
import { classifyMigrationFailure, type MigrationFailureDiagnostic } from './migration-failure-summary.ts'
-7
View File
@@ -98,7 +98,6 @@
},
"apps/web/tests/shipped-composition.e2e.ts": {
"5bb6193769cfbb9fc09abd705fed714917784de269546fde14ac1171fb00644b": 1,
"b2def0b3b454c0ec221ad44faa663f941032cc45334ac72eec66a0f556890234": 1,
"c0a4d4dd9b52881eb8190c56fb8ea5a25a70590b78b1e4a0996defab767699f0": 1
},
"apps/web/tests/smoke-real.e2e.ts": {
@@ -1773,9 +1772,6 @@
"5cedcf47f5df159bc794dc2adf05d8b8eeccc56b14993d2fb505b127627c5742": 1,
"73c54fafe9b5e31d842b420a12bc4188fae6e222bfb64d6e204172f324c34356": 1
},
"packages/skill/skill-office/tests/skill-office.spec.ts": {
"154da39139a0074bad3d13a624e5fa62d1f7ce19dc8b9c28a73af3263cd7f10e": 1
},
"packages/skill/skill/tests/skill.spec.ts": {
"0166546b07456dbfb8e79af5fd97d72bf4ed2cbe6f6847c06f169967d53d7d9a": 2,
"138acc1c7a8ca06c545f59db3a0f12e2814711ae41ed699f9ecdf30c00a2921a": 1,
@@ -2058,9 +2054,6 @@
"2f2c5a76501f35183d9708040f1f79cc30c8c9da5278823aa19ece7af67f5812": 1,
"ec229b2914993fe3b9cabeffe88aaca92dac0aed964d27a4704cd64202044127": 1
},
"packages/typert/protocol/src/index.ts": {
"35e98b658709d2dead42b6fc80150e0cac9075c55ea512cae80951983bd1f69c": 1
},
"packages/typert/protocol/tests/protocol.spec.ts": {
"418fc1acbd1aac8b6b9ba1ac25f30a4fc33d632e372085c73f396e76b9da883a": 1,
"539af7158f6057075289d3b1543bd5b692887755287d81f91d9b9c7cc14cf9cb": 1,
+1 -3
View File
@@ -137,8 +137,7 @@ it('copies complete Office resources outside the application archive and removes
try {
const source = join(root, 'package', 'assets')
const destination = join(root, 'Contents', 'Resources', 'runtime', 'office-skills')
await mkdir(join(source, 'scripts'), { recursive: true })
await writeFile(join(source, 'scripts', 'check_office.py'), 'print("checker")\n')
await mkdir(source, { recursive: true })
for (const name of ['office-docx', 'office-pptx', 'office-xlsx']) {
await mkdir(join(source, name))
await writeFile(join(source, name, 'SKILL.md'), `# ${name}\n`)
@@ -149,7 +148,6 @@ it('copies complete Office resources outside the application archive and removes
for (const name of ['office-docx', 'office-pptx', 'office-xlsx']) {
expect(await readFile(join(destination, name, 'SKILL.md'), 'utf8')).toBe(`# ${name}\n`)
}
expect(await readFile(join(destination, 'scripts', 'check_office.py'), 'utf8')).toBe('print("checker")\n')
await expect(readFile(join(destination, 'obsolete.py'))).rejects.toMatchObject({ code: 'ENOENT' })
} finally { await rm(root, { recursive: true, force: true }) }
})
+1 -1
View File
@@ -262,7 +262,7 @@ export function smokePrimaryRuntime(root: string, environment: NodeJS.ProcessEnv
const options = { stdio: 'inherit', timeout: 120_000, env: environment } as const
execFileSync(entries.python, ['-I', '-B', '-c', 'import decimal, xml.parsers.expat, lzma, uuid, numpy, pandas; assert numpy.arange(4).sum() == 6; assert pandas.DataFrame({"n": [1, 2]}).n.sum() == 3'], options)
execFileSync(entries.python, ['-I', '-B', join(import.meta.dirname, 'smoke.py'), JSON.stringify(manifest.pythonPackages),
manifest.python, join(dirname(root), 'office-skills', 'scripts', 'check_office.py')], options)
manifest.python], options)
execFileSync(entries.python, ['-I', '-B', '-m', 'pip', 'check'], options)
if (entries.node !== undefined) execFileSync(entries.node, ['-e', `if (process.versions.node !== ${JSON.stringify(manifest.node)}) process.exit(1)`], options)
if (entries.pnpm !== undefined && entries.node !== undefined) execFileSync(entries.node, [entries.pnpm, '--version'], options)
-8
View File
@@ -120,14 +120,6 @@ def main():
finally:
reopened_workbook.close()
assert pandas.read_excel(root / "workbook.xlsx")["Value"].iloc[0] == 42
for file, arguments in [
("document.docx", ["--contains", "Office 文档"]),
("presentation.pptx", ["--contains", "Office 演示", "--count", "1"]),
("workbook.xlsx", ["--contains", "Value", "--count", "1"]),
]:
checked = subprocess.run([sys.executable, "-I", "-B", sys.argv[3], str(root / file), *arguments],
check=False, capture_output=True, text=True, timeout=30)
assert checked.returncode == 0 and json.loads(checked.stdout)["verdict"] == "pass", checked.stdout + checked.stderr
print("Office runtime versions and document round trips passed.")
@@ -126,14 +126,19 @@ describe('recorded-session corpus policy', () => {
)
it('bounds explicitly retained roles and requires a baseline/current majority', () => {
const retiredOffice = ['native', 'ptc'].map(mode => ({
key: `session/office-retired-${mode}`,
selectedVersions: [SESSION_FORMAT_VERSION],
retained: { version: SESSION_FORMAT_VERSION, coverage: ['retired-tools'] as const },
}))
expect(assertSnapshotCorpusPolicy([
baseline, current,
{ ...completeV0, selectedVersions: Array<number>(9).fill(0) }, ...adjacent,
]).retainedRoles).toBe(11)
{ ...completeV0, selectedVersions: Array<number>(9).fill(0) }, ...adjacent, ...retiredOffice,
]).retainedRoles).toBe(13)
expect(() => assertSnapshotCorpusPolicy([
baseline, current,
{ ...completeV0, selectedVersions: Array<number>(10).fill(0) }, ...adjacent,
])).toThrow('Session corpus retains 12 historical roles; maximum is 11')
{ ...completeV0, selectedVersions: Array<number>(10).fill(0) }, ...adjacent, ...retiredOffice,
])).toThrow('Session corpus retains 14 historical roles; maximum is 13')
expect(() => assertSnapshotCorpusPolicy([
{ ...baseline, selectedVersions: [3] }, completeV0, ...adjacent,
])).toThrow(`Session corpus requires a baseline/current majority; baseline=1, current=0, retained=${1 + adjacent.length}`)
+2 -1
View File
@@ -22,7 +22,8 @@ export interface SnapshotCorpusGenerationSummary {
}
const RETAINED_BASELINE_VERSION = 3
const MAX_RETAINED_ROLES = 11
// Includes native and PTC Office recordings that retain removed tools.
const MAX_RETAINED_ROLES = 13
const REQUIRED_V0_COVERAGE = new Set([
'multi-hop',
'packed-row',
+2 -2
View File
@@ -209,7 +209,7 @@ it('keeps V3 replay input plus bounded declared historical migration coverage',
const summary = assertSnapshotCorpusPolicy(inventory)
expect(summary.baselineRoles).toBeGreaterThan(0)
expect(summary).toMatchObject({
retainedRoles: 11,
retainedScenarios: 8,
retainedRoles: 13,
retainedScenarios: 10,
})
})
+69 -17
View File
@@ -11,6 +11,7 @@ import json
import os
import queue
import re
import runpy
import secrets
import shutil
import subprocess
@@ -127,6 +128,11 @@ MINIMAL_SNAPSHOT_DIRECTORY = (
if IS_WINDOWS:
MINIMAL_SNAPSHOT_DIRECTORY /= "win-x64"
MINIMAL_SNAPSHOT_FILENAMES = ("model-visible.json",)
AUTHORING_SNAPSHOT_DIRECTORY = (
Path(__file__).resolve().parent / "snapshots" / "python-sdk-single-exe" / "authoring"
)
if IS_WINDOWS:
AUTHORING_SNAPSHOT_DIRECTORY /= "win-x64"
IN_HISTORY_SNAPSHOT_DIRECTORY = (
Path(__file__).resolve().parent / "snapshots" / "python-sdk-single-exe" / "minimal-in-history"
)
@@ -924,8 +930,10 @@ def _smoke_sdk_authoring_cached(base_url: str, executable: Path, update_snapshot
requests = MockModelHandler.requests[first:]
assert len(requests) == 2, requests
prompt = json.dumps(requests[0], ensure_ascii=False)
for name in ("office-docx", "office-pptx", "office-xlsx"):
assert ("- `office`:" in prompt) == (mode != "disabled"), mode
for name in ("office-docx", "office-pptx", "office-xlsx", "office-render", "office-recalculate", "office-export-pdf"):
assert (name in prompt) == (mode != "disabled"), (mode, name)
assert "render --input" not in prompt and "libreofficeKit" not in prompt, mode
assert ("CUSTOM_OFFICE_DOCX" in prompt) == (mode == "replacement"), mode
tool_result = next(block for message in requests[1]["messages"]
for block in message.get("content", [])
@@ -941,27 +949,33 @@ def _smoke_sdk_authoring_cached(base_url: str, executable: Path, update_snapshot
subprocess.run([
str(python), "-I", "-B", str(Path(__file__).parent / "primary-runtime/smoke.py"),
json.dumps(manifest["pythonPackages"]), manifest["python"],
str(resources / "office-skills/scripts/check_office.py"),
], check=True, timeout=120,
env={name: value for name, value in os.environ.items()
if not re.search(r"KEY|SECRET|TOKEN|PASSWORD", name, re.I)})
schema = next(tool for tool in requests[0]["tools"] if tool.get("name") == "load_workspace_dependencies")
visible = {"tool": schema, "result": {**dependencies, "python": "{{python}}", "pythonPackages": "{{site-packages}}",
catalogs = [message_text(message.get("content", [])) for message in requests[0]["messages"]
if "<available_skills>" in message_text(message.get("content", []))]
assert len(catalogs) == 1, catalogs
for actual, token in snapshot_directory_replacements(root, "{{cwd}}"):
catalogs = [catalog.replace(actual, token) for catalog in catalogs]
visible = {"tool": schema, "catalogs": catalogs, "result": {**dependencies, "python": "{{python}}", "pythonPackages": "{{site-packages}}",
**{name: "{{" + name + "}}" for name in ("node", "nodePackages", "pnpm")}}}
compare_snapshot_files(
{"model-visible.json": json.dumps(visible, indent=2, ensure_ascii=False) + "\n"},
update_snapshots, Path(__file__).parent / "snapshots/python-sdk-single-exe/authoring",
update_snapshots, AUTHORING_SNAPSHOT_DIRECTORY,
("model-visible.json",),
)
print("smoke-python-runtime: bundled Python, default skills, replacement and disabled skills passed")
def smoke_sdk_office(executable: Path) -> None:
"""Relocate the wheel payload and convert a real DOCX with the target platform engine."""
"""Exercise the relocated profile's bundled Office API and shell commands."""
from deepseek_harness import DeepSeekHarness
with tempfile.TemporaryDirectory(prefix="dsh-sdk-office-") as temporary:
root = Path(temporary).resolve()
checks_path = Path(__file__).resolve().parent / "fixtures/office-render.py"
checks = runpy.run_path(checks_path)
artifacts = os.environ.get("DSH_OFFICE_TEST_ARTIFACTS")
with checks["workspace"](None if artifacts is None else Path(artifacts), prefix="dsh-sdk-office-") as root:
relocated = root / executable.name
stem = executable.name.removesuffix(".exe")
resources = executable.with_name(stem.removeprefix("deepseek-harness-sdk-runtime-"))
@@ -987,11 +1001,18 @@ def smoke_sdk_office(executable: Path) -> None:
raise AssertionError(f"Office sidecar must contain only {expected_backend}: {engines}")
plugin = root / "office.mjs"
shutil.copy2(Path(__file__).resolve().parent / "fixtures/python-sdk-office.mjs", plugin)
document = root / "document.docx"
with zipfile.ZipFile(document, "w", compression=zipfile.ZIP_DEFLATED) as archive:
archive.writestr("[Content_Types].xml", '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/></Types>')
archive.writestr("_rels/.rels", '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>')
archive.writestr("word/document.xml", '<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body><w:p><w:r><w:t>Python Office wheel</w:t></w:r></w:p><w:sectPr><w:pgSz w:w="12240" w:h="15840"/></w:sectPr></w:body></w:document>')
documents = checks["copy_documents"](root)
document = documents["docx"]
environment = {key: value for key, value in os.environ.items()
if not key.startswith("DSH_") and not any(part in key.upper() for part in ("KEY", "SECRET", "TOKEN", "PASSWORD"))}
environment.update(PATH="")
node = office / "node/bin" / ("node.exe" if native.startswith("win32-") else "node")
cli = adapter.parent / "lib/cli.js"
checks["render_cli"](
[str(node), str(cli)], documents, root, expected_backend, environment,
check_content=False,
)
mode = expected_backend
output = root / f"{mode}.pdf"
@@ -1001,7 +1022,8 @@ def smoke_sdk_office(executable: Path) -> None:
"id": "python-sdk-office-smoke",
"inject": ["skills"],
"name": plugin.as_uri(),
"config": {"input": str(document), "output": str(output), "result": str(result_path)},
"config": {"input": str(document), "output": str(output), "result": str(result_path),
"imageInput": str(documents["pptx"]), "imageOutput": str(root / "node-pptx")},
}]}]))
with DeepSeekHarness(
provider="deepseek-official",
@@ -1013,9 +1035,9 @@ def smoke_sdk_office(executable: Path) -> None:
api_key="sk-keyless-smoke",
base_url="http://127.0.0.1:9",
env={"DSH_PERMISSION_MODE": "danger-full-access", "DSH_TELEMETRY_DISABLED": "1", "DSH_RESOURCE_CACHE": str(root / "cache")},
# The startup plugin awaits a converter with a 120-second deadline before JSON-RPC is ready.
initialize_timeout_seconds=180,
request_timeout_seconds=180,
# Startup performs three serial Office operations with 120-second engine deadlines.
initialize_timeout_seconds=480,
request_timeout_seconds=480,
):
pass
result = json.loads(result_path.read_text())
@@ -1023,6 +1045,7 @@ def smoke_sdk_office(executable: Path) -> None:
raise AssertionError(f"Office conversion did not use {expected_backend}: {result}")
if not result["moduleUrl"].startswith(office.as_uri() + "/"):
raise AssertionError(f"Office module was not loaded from the downloaded sidecar: {result}")
checks["check_render_manifest"](result["images"], expected_backend)
pdf = output.read_bytes()
if len(pdf) < 100 or not pdf.startswith(b"%PDF-"):
raise AssertionError(f"Office conversion produced an invalid PDF at {output}")
@@ -1039,7 +1062,7 @@ from pathlib import Path
from xml.etree import ElementTree
from deepseek_harness.office import convert, render_images, recalculate
root = Path(sys.argv[1])
assert convert(root / 'document.docx', root / 'python.pdf').backend == sys.argv[2]
assert convert(root / 'color-blocks.docx', root / 'python.pdf').backend == sys.argv[2]
rendered = render_images(root / 'python.pdf', root / 'images', pages=[1])
assert rendered.images and rendered.images[0].path.read_bytes().startswith(b'\\x89PNG')
recalculate(root / 'input.xlsx', root / 'calculated.xlsx')
@@ -1646,6 +1669,19 @@ def smoke_sdk_snapshot_mode(
)
assert result.final_response == SNAPSHOT_FINAL_TEXT, (result.final_response, harness.client._runtime_diagnostics())
jobs = [event for event in result.events if event.get("type") in ("job/registered", "job/settled")]
assert [event["type"] for event in jobs] == ["job/registered", "job/settled"], jobs
registered, settled = (event["data"] for event in jobs)
assert registered["jobId"] == settled["jobId"]
assert registered["startedAt"] == settled["startedAt"] <= settled["finishedAt"]
assert settled["producerReported"] is True and settled["status"] == "completed"
root_call_id = "advanced-code" if mode == "ptc" else "advanced-native"
call_id = root_call_id + ":ptc:1" if mode == "ptc" else root_call_id
assert registered["toolCall"] == {"callId": call_id, "rootCallId": root_call_id}
subscribed_jobs = [notification.payload["event"] for notification in result.notifications
if notification.method == "session.event"
and notification.payload.get("event", {}).get("type") in ("job/registered", "job/settled")]
assert subscribed_jobs == jobs
offloads = [event for event in result.events if event.get("type") == "image/offload"]
if len(offloads) != 1 or "surfaceOp" in offloads[0]:
raise AssertionError(f"advanced snapshot expected one standalone image offload: {offloads}")
@@ -1690,6 +1726,8 @@ def smoke_sdk_snapshot_mode(
if "WORKFLOW_CHILD_OK" not in render_jsonl(logs[child_ids[1]]):
raise AssertionError("second advanced child log has no workflow-subagent result")
assert [event for event in logs[SNAPSHOT_SESSION_ID] if event.get("type") in ("job/registered", "job/settled")] == jobs
files = build_snapshot_files(result, logs, child_ids, root)
compare_snapshot_files(
files, update_snapshots, ADVANCED_SNAPSHOT_DIRECTORY if mode == "native" else ADVANCED_SNAPSHOT_ROOT / "advanced-ptc",
@@ -2676,6 +2714,14 @@ def normalize_snapshot_value(
if not isinstance(value, dict):
return value
if value.get("type") in ("job/registered", "job/settled"):
data = value.get("data")
job_id = data.get("jobId") if isinstance(data, dict) else None
if (isinstance(job_id, str) and not re.fullmatch(r"\{\{id:[1-9]\d*\}\}", job_id)
and not any(actual == job_id for actual, _ in replacements)):
index = 1 + sum(token.startswith("{{id:") for _, token in replacements)
replacements.append((job_id, "{{id:" + str(index) + "}}"))
normalized = {
key: normalize_snapshot_value(item, replacements)
for key, item in value.items()
@@ -2686,6 +2732,12 @@ def normalize_snapshot_value(
data = normalized.get("data")
if isinstance(data, dict) and "childCreatedAt" in data:
data["childCreatedAt"] = 0
if normalized.get("type") in ("job/registered", "job/settled"):
data = normalized.get("data")
if isinstance(data, dict):
for field in ("startedAt", "finishedAt"):
if field in data:
data[field] = 0
if "seq" in normalized and "time" in normalized:
normalized["time"] = 0
if normalized.get("type") in ("assistant/message", "assistant/attempt"):
@@ -457,9 +457,45 @@
}
},
{
"type": "tool/ptc-dispatch",
"type": "job/registered",
"seq": 24,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-code:ptc:1",
"rootCallId": "advanced-code"
}
}
},
{
"type": "job/settled",
"seq": 25,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-code:ptc:1",
"rootCallId": "advanced-code"
},
"finishedAt": 0,
"status": "completed",
"cause": "producer",
"producerReported": true
}
},
{
"type": "tool/ptc-dispatch",
"seq": 26,
"time": 0,
"data": {
"rootCallId": "advanced-code",
"parentCallId": "advanced-code",
@@ -479,7 +515,7 @@
},
{
"type": "tool/result",
"seq": 25,
"seq": 27,
"time": 0,
"data": {
"turn": 1,
@@ -508,7 +544,7 @@
},
{
"type": "step/end",
"seq": 26,
"seq": 28,
"time": 0,
"data": {
"turn": 1,
@@ -517,7 +553,7 @@
},
{
"type": "step/start",
"seq": 27,
"seq": 29,
"time": 0,
"data": {
"turn": 1,
@@ -526,17 +562,17 @@
},
{
"type": "session-log-deepseek/delivery-accepted",
"seq": 28,
"seq": 30,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 27
"throughSeq": 29
}
},
{
"type": "assistant/message",
"seq": 29,
"seq": 31,
"time": 0,
"data": {
"turn": 1,
@@ -660,7 +696,7 @@
},
{
"type": "tool/call",
"seq": 30,
"seq": 32,
"time": 0,
"data": {
"turn": 1,
@@ -672,7 +708,7 @@
},
{
"type": "tool/ptc-dispatch-start",
"seq": 31,
"seq": 33,
"time": 0,
"data": {
"rootCallId": "advanced-denied-ptc",
@@ -686,7 +722,7 @@
},
{
"type": "tool/ptc-dispatch",
"seq": 32,
"seq": 34,
"time": 0,
"data": {
"rootCallId": "advanced-denied-ptc",
@@ -712,7 +748,7 @@
},
{
"type": "tool/result",
"seq": 33,
"seq": 35,
"time": 0,
"data": {
"turn": 1,
@@ -735,13 +771,13 @@
}
},
"sourceEventSeqs": [
30
32
],
"surfaceOp": "append"
},
{
"type": "step/end",
"seq": 34,
"seq": 36,
"time": 0,
"data": {
"turn": 1,
@@ -750,7 +786,7 @@
},
{
"type": "step/start",
"seq": 35,
"seq": 37,
"time": 0,
"data": {
"turn": 1,
@@ -759,17 +795,17 @@
},
{
"type": "session-log-deepseek/delivery-accepted",
"seq": 36,
"seq": 38,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 35
"throughSeq": 37
}
},
{
"type": "assistant/message",
"seq": 37,
"seq": 39,
"time": 0,
"data": {
"turn": 1,
@@ -877,7 +913,7 @@
},
{
"type": "step/end",
"seq": 38,
"seq": 40,
"time": 0,
"data": {
"turn": 1,
@@ -886,7 +922,7 @@
},
{
"type": "command/run",
"seq": 39,
"seq": 41,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -898,7 +934,7 @@
},
{
"type": "feedback/record",
"seq": 40,
"seq": 42,
"time": 0,
"data": {
"text": "The session needs a clearer explanation."
@@ -906,7 +942,7 @@
},
{
"type": "command/done",
"seq": 41,
"seq": 43,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -916,7 +952,7 @@
},
{
"type": "feedback/record",
"seq": 42,
"seq": 44,
"time": 0,
"data": {
"category": "other"
@@ -924,7 +960,7 @@
},
{
"type": "feedback/message-put",
"seq": 43,
"seq": 45,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -941,7 +977,7 @@
},
{
"type": "feedback/message-put",
"seq": 44,
"seq": 46,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -957,7 +993,7 @@
},
{
"type": "feedback/message-delete",
"seq": 45,
"seq": 47,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -966,7 +1002,7 @@
},
{
"type": "turn/end",
"seq": 46,
"seq": 48,
"time": 0,
"data": {
"turn": 1,
@@ -1563,9 +1599,57 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
"type": "tool/ptc-dispatch",
"type": "job/registered",
"seq": 24,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-code:ptc:1",
"rootCallId": "advanced-code"
}
}
}
}
},
{
"method": "session.event",
"payload": {
"sessionId": "{{parent}}",
"event": {
"type": "job/settled",
"seq": 25,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-code:ptc:1",
"rootCallId": "advanced-code"
},
"finishedAt": 0,
"status": "completed",
"cause": "producer",
"producerReported": true
}
}
}
},
{
"method": "session.event",
"payload": {
"sessionId": "{{parent}}",
"event": {
"type": "tool/ptc-dispatch",
"seq": 26,
"time": 0,
"data": {
"rootCallId": "advanced-code",
"parentCallId": "advanced-code",
@@ -1591,7 +1675,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/result",
"seq": 25,
"seq": 27,
"time": 0,
"data": {
"turn": 1,
@@ -1626,7 +1710,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 26,
"seq": 28,
"time": 0,
"data": {
"turn": 1,
@@ -1641,7 +1725,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/start",
"seq": 27,
"seq": 29,
"time": 0,
"data": {
"turn": 1,
@@ -1656,12 +1740,12 @@
"sessionId": "{{parent}}",
"event": {
"type": "session-log-deepseek/delivery-accepted",
"seq": 28,
"seq": 30,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 27
"throughSeq": 29
}
}
}
@@ -1672,7 +1756,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "assistant/message",
"seq": 29,
"seq": 31,
"time": 0,
"data": {
"turn": 1,
@@ -1802,7 +1886,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/call",
"seq": 30,
"seq": 32,
"time": 0,
"data": {
"turn": 1,
@@ -1820,7 +1904,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/ptc-dispatch-start",
"seq": 31,
"seq": 33,
"time": 0,
"data": {
"rootCallId": "advanced-denied-ptc",
@@ -1840,7 +1924,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/ptc-dispatch",
"seq": 32,
"seq": 34,
"time": 0,
"data": {
"rootCallId": "advanced-denied-ptc",
@@ -1872,7 +1956,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/result",
"seq": 33,
"seq": 35,
"time": 0,
"data": {
"turn": 1,
@@ -1895,7 +1979,7 @@
}
},
"sourceEventSeqs": [
30
32
],
"surfaceOp": "append"
}
@@ -1907,7 +1991,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 34,
"seq": 36,
"time": 0,
"data": {
"turn": 1,
@@ -1922,7 +2006,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/start",
"seq": 35,
"seq": 37,
"time": 0,
"data": {
"turn": 1,
@@ -1937,12 +2021,12 @@
"sessionId": "{{parent}}",
"event": {
"type": "session-log-deepseek/delivery-accepted",
"seq": 36,
"seq": 38,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 35
"throughSeq": 37
}
}
}
@@ -1953,7 +2037,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "assistant/message",
"seq": 37,
"seq": 39,
"time": 0,
"data": {
"turn": 1,
@@ -2067,7 +2151,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 38,
"seq": 40,
"time": 0,
"data": {
"turn": 1,
@@ -2082,7 +2166,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "command/run",
"seq": 39,
"seq": 41,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -2100,7 +2184,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/record",
"seq": 40,
"seq": 42,
"time": 0,
"data": {
"text": "The session needs a clearer explanation."
@@ -2114,7 +2198,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "command/done",
"seq": 41,
"seq": 43,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -2130,7 +2214,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/record",
"seq": 42,
"seq": 44,
"time": 0,
"data": {
"category": "other"
@@ -2144,7 +2228,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/message-put",
"seq": 43,
"seq": 45,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -2167,7 +2251,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/message-put",
"seq": 44,
"seq": 46,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -2189,7 +2273,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/message-delete",
"seq": 45,
"seq": 47,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -2204,7 +2288,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "turn/end",
"seq": 46,
"seq": 48,
"time": 0,
"data": {
"turn": 1,
@@ -23,19 +23,21 @@
{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Call the configured 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\": \"Call the configured 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\": \"Call the configured 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":1,"callId":"advanced-code","name":"run_code","arguments":"{\"code\": \"return await tools.snapshot_double({ value: 21 })\", \"description\": \"Call the configured 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":"job/registered","data":{"jobId":"{{id:1}}","owner":"{{parent}}","kind":"snapshot","label":"snapshot_double","startedAt":0,"toolCall":{"callId":"advanced-code:ptc:1","rootCallId":"advanced-code"}}}
{"type":"job/settled","data":{"jobId":"{{id:1}}","owner":"{{parent}}","kind":"snapshot","label":"snapshot_double","startedAt":0,"toolCall":{"callId":"advanced-code:ptc:1","rootCallId":"advanced-code"},"finishedAt":0,"status":"completed","cause":"producer","producerReported":true}}
{"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"}]}}
{"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-code"},"toolCallId":"advanced-code","content":[{"type":"text","text":"42"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[22],"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":4,"throughSeq":27}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":29}}
{"type":"assistant/message","data":{"turn":1,"step":2,"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":2,"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"}]}}
{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-denied-ptc"},"toolCallId":"advanced-denied-ptc","content":[{"type":"text","text":"Auto review rejected tool \"snapshot_double\"; its body was not executed"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[30],"surfaceOp":"append"}
{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-denied-ptc"},"toolCallId":"advanced-denied-ptc","content":[{"type":"text","text":"Auto review rejected tool \"snapshot_double\"; its body was not executed"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[32],"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":2}}
{"type":"step/start","data":{"turn":1,"step":3}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":35}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":37}}
{"type":"assistant/message","data":{"turn":1,"step":3,"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":3}}
{"type":"command/run","data":{"commandId":"{{command:1}}","name":"feedback","source":{"kind":"user"}}}
@@ -459,9 +459,45 @@
}
},
{
"type": "tool/result",
"type": "job/registered",
"seq": 23,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-native",
"rootCallId": "advanced-native"
}
}
},
{
"type": "job/settled",
"seq": 24,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-native",
"rootCallId": "advanced-native"
},
"finishedAt": 0,
"status": "completed",
"cause": "producer",
"producerReported": true
}
},
{
"type": "tool/result",
"seq": 25,
"time": 0,
"data": {
"turn": 1,
"step": 1,
@@ -489,7 +525,7 @@
},
{
"type": "step/end",
"seq": 24,
"seq": 26,
"time": 0,
"data": {
"turn": 1,
@@ -498,7 +534,7 @@
},
{
"type": "step/start",
"seq": 25,
"seq": 27,
"time": 0,
"data": {
"turn": 1,
@@ -507,17 +543,17 @@
},
{
"type": "session-log-deepseek/delivery-accepted",
"seq": 26,
"seq": 28,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 25
"throughSeq": 27
}
},
{
"type": "assistant/message",
"seq": 27,
"seq": 29,
"time": 0,
"data": {
"turn": 1,
@@ -641,7 +677,7 @@
},
{
"type": "tool/call",
"seq": 28,
"seq": 30,
"time": 0,
"data": {
"turn": 1,
@@ -653,7 +689,7 @@
},
{
"type": "tool/result",
"seq": 29,
"seq": 31,
"time": 0,
"data": {
"turn": 1,
@@ -681,13 +717,13 @@
}
},
"sourceEventSeqs": [
28
30
],
"surfaceOp": "append"
},
{
"type": "step/end",
"seq": 30,
"seq": 32,
"time": 0,
"data": {
"turn": 1,
@@ -696,7 +732,7 @@
},
{
"type": "step/start",
"seq": 31,
"seq": 33,
"time": 0,
"data": {
"turn": 1,
@@ -705,17 +741,17 @@
},
{
"type": "session-log-deepseek/delivery-accepted",
"seq": 32,
"seq": 34,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 31
"throughSeq": 33
}
},
{
"type": "assistant/message",
"seq": 33,
"seq": 35,
"time": 0,
"data": {
"turn": 1,
@@ -839,7 +875,7 @@
},
{
"type": "tool/call",
"seq": 34,
"seq": 36,
"time": 0,
"data": {
"turn": 1,
@@ -851,7 +887,7 @@
},
{
"type": "subagent/catalog",
"seq": 35,
"seq": 37,
"time": 0,
"data": {
"version": 0,
@@ -863,7 +899,7 @@
},
{
"type": "tool/result",
"seq": 36,
"seq": 38,
"time": 0,
"data": {
"turn": 1,
@@ -886,13 +922,13 @@
}
},
"sourceEventSeqs": [
34
36
],
"surfaceOp": "append"
},
{
"type": "step/end",
"seq": 37,
"seq": 39,
"time": 0,
"data": {
"turn": 1,
@@ -901,7 +937,7 @@
},
{
"type": "step/start",
"seq": 38,
"seq": 40,
"time": 0,
"data": {
"turn": 1,
@@ -910,17 +946,17 @@
},
{
"type": "session-log-deepseek/delivery-accepted",
"seq": 39,
"seq": 41,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 38
"throughSeq": 40
}
},
{
"type": "agent/inbox/spliced",
"seq": 40,
"seq": 42,
"time": 0,
"data": {
"target": "next-step",
@@ -955,7 +991,7 @@
},
{
"type": "assistant/message",
"seq": 41,
"seq": 43,
"time": 0,
"data": {
"turn": 1,
@@ -1079,7 +1115,7 @@
},
{
"type": "tool/call",
"seq": 42,
"seq": 44,
"time": 0,
"data": {
"turn": 1,
@@ -1091,7 +1127,7 @@
},
{
"type": "tool-workflow/run-start",
"seq": 43,
"seq": 45,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -1100,7 +1136,7 @@
},
{
"type": "subagent/catalog",
"seq": 44,
"seq": 46,
"time": 0,
"data": {
"version": 0,
@@ -1112,7 +1148,7 @@
},
{
"type": "tool-workflow/agent-start",
"seq": 45,
"seq": 47,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -1124,7 +1160,7 @@
},
{
"type": "tool-workflow/agent-end",
"seq": 46,
"seq": 48,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -1134,7 +1170,7 @@
},
{
"type": "tool-workflow/run-end",
"seq": 47,
"seq": 49,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -1143,7 +1179,7 @@
},
{
"type": "tool/result",
"seq": 48,
"seq": 50,
"time": 0,
"data": {
"turn": 1,
@@ -1166,13 +1202,13 @@
}
},
"sourceEventSeqs": [
42
44
],
"surfaceOp": "append"
},
{
"type": "step/end",
"seq": 49,
"seq": 51,
"time": 0,
"data": {
"turn": 1,
@@ -1181,7 +1217,7 @@
},
{
"type": "agent/inbox/spliced",
"seq": 50,
"seq": 52,
"time": 0,
"data": {
"target": "next-step",
@@ -1192,7 +1228,7 @@
},
{
"type": "step/start",
"seq": 51,
"seq": 53,
"time": 0,
"data": {
"turn": 1,
@@ -1201,7 +1237,7 @@
},
{
"type": "user/message",
"seq": 52,
"seq": 54,
"time": 0,
"data": {
"content": [
@@ -1231,17 +1267,17 @@
},
{
"type": "session-log-deepseek/delivery-accepted",
"seq": 53,
"seq": 55,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 52
"throughSeq": 54
}
},
{
"type": "assistant/message",
"seq": 54,
"seq": 56,
"time": 0,
"data": {
"turn": 1,
@@ -1349,7 +1385,7 @@
},
{
"type": "step/end",
"seq": 55,
"seq": 57,
"time": 0,
"data": {
"turn": 1,
@@ -1358,7 +1394,7 @@
},
{
"type": "command/run",
"seq": 56,
"seq": 58,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -1370,7 +1406,7 @@
},
{
"type": "feedback/record",
"seq": 57,
"seq": 59,
"time": 0,
"data": {
"text": "The session needs a clearer explanation."
@@ -1378,7 +1414,7 @@
},
{
"type": "command/done",
"seq": 58,
"seq": 60,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -1388,7 +1424,7 @@
},
{
"type": "feedback/record",
"seq": 59,
"seq": 61,
"time": 0,
"data": {
"category": "other"
@@ -1396,7 +1432,7 @@
},
{
"type": "feedback/message-put",
"seq": 60,
"seq": 62,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -1413,7 +1449,7 @@
},
{
"type": "feedback/message-put",
"seq": 61,
"seq": 63,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -1429,7 +1465,7 @@
},
{
"type": "feedback/message-delete",
"seq": 62,
"seq": 64,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -1438,7 +1474,7 @@
},
{
"type": "turn/end",
"seq": 63,
"seq": 65,
"time": 0,
"data": {
"turn": 1,
@@ -2031,9 +2067,57 @@
"payload": {
"sessionId": "{{parent}}",
"event": {
"type": "tool/result",
"type": "job/registered",
"seq": 23,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-native",
"rootCallId": "advanced-native"
}
}
}
}
},
{
"method": "session.event",
"payload": {
"sessionId": "{{parent}}",
"event": {
"type": "job/settled",
"seq": 24,
"time": 0,
"data": {
"jobId": "{{id:1}}",
"owner": "{{parent}}",
"kind": "snapshot",
"label": "snapshot_double",
"startedAt": 0,
"toolCall": {
"callId": "advanced-native",
"rootCallId": "advanced-native"
},
"finishedAt": 0,
"status": "completed",
"cause": "producer",
"producerReported": true
}
}
}
},
{
"method": "session.event",
"payload": {
"sessionId": "{{parent}}",
"event": {
"type": "tool/result",
"seq": 25,
"time": 0,
"data": {
"turn": 1,
"step": 1,
@@ -2067,7 +2151,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 24,
"seq": 26,
"time": 0,
"data": {
"turn": 1,
@@ -2082,7 +2166,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/start",
"seq": 25,
"seq": 27,
"time": 0,
"data": {
"turn": 1,
@@ -2097,12 +2181,12 @@
"sessionId": "{{parent}}",
"event": {
"type": "session-log-deepseek/delivery-accepted",
"seq": 26,
"seq": 28,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 25
"throughSeq": 27
}
}
}
@@ -2113,7 +2197,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "assistant/message",
"seq": 27,
"seq": 29,
"time": 0,
"data": {
"turn": 1,
@@ -2243,7 +2327,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/call",
"seq": 28,
"seq": 30,
"time": 0,
"data": {
"turn": 1,
@@ -2261,7 +2345,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/result",
"seq": 29,
"seq": 31,
"time": 0,
"data": {
"turn": 1,
@@ -2289,7 +2373,7 @@
}
},
"sourceEventSeqs": [
28
30
],
"surfaceOp": "append"
}
@@ -2301,7 +2385,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 30,
"seq": 32,
"time": 0,
"data": {
"turn": 1,
@@ -2316,7 +2400,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/start",
"seq": 31,
"seq": 33,
"time": 0,
"data": {
"turn": 1,
@@ -2331,12 +2415,12 @@
"sessionId": "{{parent}}",
"event": {
"type": "session-log-deepseek/delivery-accepted",
"seq": 32,
"seq": 34,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 31
"throughSeq": 33
}
}
}
@@ -2347,7 +2431,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "assistant/message",
"seq": 33,
"seq": 35,
"time": 0,
"data": {
"turn": 1,
@@ -2477,7 +2561,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/call",
"seq": 34,
"seq": 36,
"time": 0,
"data": {
"turn": 1,
@@ -2617,7 +2701,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "subagent/catalog",
"seq": 35,
"seq": 37,
"time": 0,
"data": {
"version": 0,
@@ -2635,7 +2719,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/result",
"seq": 36,
"seq": 38,
"time": 0,
"data": {
"turn": 1,
@@ -2658,7 +2742,7 @@
}
},
"sourceEventSeqs": [
34
36
],
"surfaceOp": "append"
}
@@ -2670,7 +2754,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 37,
"seq": 39,
"time": 0,
"data": {
"turn": 1,
@@ -2685,7 +2769,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/start",
"seq": 38,
"seq": 40,
"time": 0,
"data": {
"turn": 1,
@@ -2700,12 +2784,12 @@
"sessionId": "{{parent}}",
"event": {
"type": "session-log-deepseek/delivery-accepted",
"seq": 39,
"seq": 41,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 38
"throughSeq": 40
}
}
}
@@ -3095,7 +3179,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "agent/inbox/spliced",
"seq": 40,
"seq": 42,
"time": 0,
"data": {
"target": "next-step",
@@ -3153,7 +3237,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "assistant/message",
"seq": 41,
"seq": 43,
"time": 0,
"data": {
"turn": 1,
@@ -3283,7 +3367,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/call",
"seq": 42,
"seq": 44,
"time": 0,
"data": {
"turn": 1,
@@ -3301,7 +3385,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool-workflow/run-start",
"seq": 43,
"seq": 45,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -3438,7 +3522,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "subagent/catalog",
"seq": 44,
"seq": 46,
"time": 0,
"data": {
"version": 0,
@@ -3456,7 +3540,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool-workflow/agent-start",
"seq": 45,
"seq": 47,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -3870,7 +3954,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool-workflow/agent-end",
"seq": 46,
"seq": 48,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -3886,7 +3970,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool-workflow/run-end",
"seq": 47,
"seq": 49,
"time": 0,
"data": {
"runId": "{{workflow-run}}",
@@ -3901,7 +3985,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "tool/result",
"seq": 48,
"seq": 50,
"time": 0,
"data": {
"turn": 1,
@@ -3924,7 +4008,7 @@
}
},
"sourceEventSeqs": [
42
44
],
"surfaceOp": "append"
}
@@ -3936,7 +4020,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 49,
"seq": 51,
"time": 0,
"data": {
"turn": 1,
@@ -3951,7 +4035,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "agent/inbox/spliced",
"seq": 50,
"seq": 52,
"time": 0,
"data": {
"target": "next-step",
@@ -3968,7 +4052,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/start",
"seq": 51,
"seq": 53,
"time": 0,
"data": {
"turn": 1,
@@ -3983,7 +4067,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "user/message",
"seq": 52,
"seq": 54,
"time": 0,
"data": {
"content": [
@@ -4019,12 +4103,12 @@
"sessionId": "{{parent}}",
"event": {
"type": "session-log-deepseek/delivery-accepted",
"seq": 53,
"seq": 55,
"time": 0,
"data": {
"sessionId": "{{parent}}",
"sessionFormatVersion": 4,
"throughSeq": 52
"throughSeq": 54
}
}
}
@@ -4035,7 +4119,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "assistant/message",
"seq": 54,
"seq": 56,
"time": 0,
"data": {
"turn": 1,
@@ -4149,7 +4233,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "step/end",
"seq": 55,
"seq": 57,
"time": 0,
"data": {
"turn": 1,
@@ -4164,7 +4248,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "command/run",
"seq": 56,
"seq": 58,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -4182,7 +4266,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/record",
"seq": 57,
"seq": 59,
"time": 0,
"data": {
"text": "The session needs a clearer explanation."
@@ -4196,7 +4280,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "command/done",
"seq": 58,
"seq": 60,
"time": 0,
"data": {
"commandId": "{{command:1}}",
@@ -4212,7 +4296,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/record",
"seq": 59,
"seq": 61,
"time": 0,
"data": {
"category": "other"
@@ -4226,7 +4310,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/message-put",
"seq": 60,
"seq": 62,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -4249,7 +4333,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/message-put",
"seq": 61,
"seq": 63,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -4271,7 +4355,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "feedback/message-delete",
"seq": 62,
"seq": 64,
"time": 0,
"data": {
"sessionId": "{{parent}}",
@@ -4286,7 +4370,7 @@
"sessionId": "{{parent}}",
"event": {
"type": "turn/end",
"seq": 63,
"seq": 65,
"time": 0,
"data": {
"turn": 1,
@@ -22,23 +22,25 @@
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":19}}
{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"advanced-native","name":"snapshot_double","arguments":"{\"value\": 21}"}],"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-native","name":"snapshot_double","args":[""]},{"type":"tool-call-chunks","time0":0,"index":0,"dt":[],"id":"advanced-native","args":["{\"value\": 21}"]},{"type":"chunk","time":0,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"advanced-native","name":"snapshot_double","arguments":"{\"value\": 21}"}}},{"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-native","name":"snapshot_double","arguments":"{\"value\": 21}"}}
{"type":"job/registered","data":{"jobId":"{{id:1}}","owner":"{{parent}}","kind":"snapshot","label":"snapshot_double","startedAt":0,"toolCall":{"callId":"advanced-native","rootCallId":"advanced-native"}}}
{"type":"job/settled","data":{"jobId":"{{id:1}}","owner":"{{parent}}","kind":"snapshot","label":"snapshot_double","startedAt":0,"toolCall":{"callId":"advanced-native","rootCallId":"advanced-native"},"finishedAt":0,"status":"completed","cause":"producer","producerReported":true}}
{"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-native"},"toolCallId":"advanced-native","content":[{"type":"text","text":"42"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[22],"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":4,"throughSeq":25}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":27}}
{"type":"assistant/message","data":{"turn":1,"step":2,"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":2,"callId":"advanced-denied-native","name":"snapshot_double","arguments":"{\"value\": -1}"}}
{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-denied-native"},"toolCallId":"advanced-denied-native","content":[{"type":"text","text":"Error: Auto review rejected tool \"snapshot_double\"; its body was not executed"}],"isError":true,"id":"{{messageId}}"},"error":{"name":"AutoReviewDeniedError","code":"AUTO_REVIEW_DENIED","reason":" transport raw\r\nreason "}},"sourceEventSeqs":[28],"surfaceOp":"append"}
{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-denied-native"},"toolCallId":"advanced-denied-native","content":[{"type":"text","text":"Error: Auto review rejected tool \"snapshot_double\"; its body was not executed"}],"isError":true,"id":"{{messageId}}"},"error":{"name":"AutoReviewDeniedError","code":"AUTO_REVIEW_DENIED","reason":" transport raw\r\nreason "}},"sourceEventSeqs":[30],"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":2}}
{"type":"step/start","data":{"turn":1,"step":3}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":31}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":33}}
{"type":"assistant/message","data":{"turn":1,"step":3,"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":3,"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":"continuable","label":"Check direct child"}}
{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-direct-child"},"toolCallId":"advanced-direct-child","content":[{"type":"text","text":"started subagent {{child-1}}"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[34],"surfaceOp":"append"}
{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-direct-child"},"toolCallId":"advanced-direct-child","content":[{"type":"text","text":"started subagent {{child-1}}"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[36],"surfaceOp":"append"}
{"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":4,"throughSeq":38}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":40}}
{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Background subagent {{child-1}} finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent {{child-1}} finished and will do no further work unless you send it more.","senderSessionId":"{{child-1}}"},"role":"user","id":"{{messageId}}"}]}}
{"type":"assistant/message","data":{"turn":1,"step":4,"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":4,"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\"}}"}}
@@ -47,12 +49,12 @@
{"type":"tool-workflow/agent-start","data":{"runId":"{{workflow-run}}","seq":1,"label":"workflow-child","phase":"Delegate","childId":"{{child-2}}"}}
{"type":"tool-workflow/agent-end","data":{"runId":"{{workflow-run}}","seq":1,"outcome":"completed"}}
{"type":"tool-workflow/run-end","data":{"runId":"{{workflow-run}}","stopReason":"completed"}}
{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-exe-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[42],"surfaceOp":"append"}
{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"advanced-workflow"},"toolCallId":"advanced-workflow","content":[{"type":"text","text":"workflow \"advanced-exe-snapshot\" completed (1 agent).\nReturn value:\n{\n \"reply\": \"WORKFLOW_CHILD_OK\"\n}"}],"isError":false,"id":"{{messageId}}"}},"sourceEventSeqs":[44],"surfaceOp":"append"}
{"type":"step/end","data":{"turn":1,"step":4}}
{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[]}}
{"type":"step/start","data":{"turn":1,"step":5}}
{"type":"user/message","data":{"content":[{"type":"text","text":"Background subagent {{child-1}} finished and will do no further work unless you send it more."},{"type":"text","text":"Its closing message:"},{"type":"text","text":"DIRECT_CHILD_OK"}],"source":{"kind":"subagent-settled","form":"notice","summary":"Background subagent {{child-1}} finished and will do no further work unless you send it more.","senderSessionId":"{{child-1}}"},"role":"user","id":"{{messageId}}"},"surfaceOp":"append"}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":52}}
{"type":"session-log-deepseek/delivery-accepted","data":{"sessionId":"{{parent}}","sessionFormatVersion":4,"throughSeq":54}}
{"type":"assistant/message","data":{"turn":1,"step":5,"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":5}}
{"type":"command/run","data":{"commandId":"{{command:1}}","name":"feedback","source":{"kind":"user"}}}
@@ -7,6 +7,9 @@
"properties": {}
}
},
"catalogs": [
"Query the packaged Python environment for Office authoring.Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent working directory: \"{{cwd}}\".\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`).<system-reminder>\nA skill is a reusable set of task-specific instructions. The following skills are available in this session:\n\n<available_skills>\n- `office`: Create, edit, inspect, or convert Office documents, spreadsheets, presentations, and PDFs. Load to choose the relevant workflow.\n- `office-docx`: Create, read, edit, and validate Word documents (.docx).\n- `office-export-pdf`: Convert an Office document to a requested PDF with LibreOffice Kit.\n- `office-pptx`: Create, read, edit, and validate PowerPoint presentations (.pptx).\n- `office-recalculate`: Refresh spreadsheet formula caches and verify calculated values with LibreOffice Kit.\n- `office-render`: Render requested document images or inspect visual layout with LibreOffice Kit.\n- `office-xlsx`: Read, create, edit, and validate Excel workbooks, data, and formulas (.xlsx).\n</available_skills>\n\nIf the user names a skill, or the task clearly matches a skill's description, call the `skill` tool with the exact skill name before taking task actions. Load all applicable skills, then follow their full instructions. This catalog contains summaries only; do not infer or follow a skill's instructions until it has been loaded.\nA user may also invoke a skill directly; its <skill_content> block then appears in this conversation. Follow it, and do not call the `skill` tool again for that skill.\n</system-reminder>"
],
"result": {
"python": "{{python}}",
"node": "{{node}}",
@@ -0,0 +1,35 @@
{
"tool": {
"name": "load_workspace_dependencies",
"description": "Get absolute paths to bundled Python and library directories, plus bundled Python distribution versions. Node.js and pnpm paths are included when the payload provides them. Python includes numpy, pandas, python-docx, python-pptx, openpyxl, Pillow, lxml, and XlsxWriter. Use these libraries for Office files unless the user or workspace instructions select another environment. When Node.js and pnpm paths are returned, run pnpm with that Node executable and pnpm script path. This does not change PATH or package-manager settings.",
"input_schema": {
"type": "object",
"properties": {}
}
},
"catalogs": [
"Query the packaged Python environment for Office authoring.Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent working directory: \"{{cwd}}\".\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`).<system-reminder>\nA skill is a reusable set of task-specific instructions. The following skills are available in this session:\n\n<available_skills>\n- `diagnose-windows-sandbox-acl`: Use on Windows for unexpected DSH sandbox access denials: workspace writes or listing fail, or an ordinarily readable path cannot be read. One bundled command inspects the path and every ancestor and repairs the ACL problems it proves in that same run. Expected confinement denials need no ACL repair.\n- `office`: Create, edit, inspect, or convert Office documents, spreadsheets, presentations, and PDFs. Load to choose the relevant workflow.\n- `office-docx`: Create, read, edit, and validate Word documents (.docx).\n- `office-export-pdf`: Convert an Office document to a requested PDF with LibreOffice Kit.\n- `office-pptx`: Create, read, edit, and validate PowerPoint presentations (.pptx).\n- `office-recalculate`: Refresh spreadsheet formula caches and verify calculated values with LibreOffice Kit.\n- `office-render`: Render requested document images or inspect visual layout with LibreOffice Kit.\n- `office-xlsx`: Read, create, edit, and validate Excel workbooks, data, and formulas (.xlsx).\n</available_skills>\n\nIf the user names a skill, or the task clearly matches a skill's description, call the `skill` tool with the exact skill name before taking task actions. Load all applicable skills, then follow their full instructions. This catalog contains summaries only; do not infer or follow a skill's instructions until it has been loaded.\nA user may also invoke a skill directly; its <skill_content> block then appears in this conversation. Follow it, and do not call the `skill` tool again for that skill.\n</system-reminder>"
],
"result": {
"python": "{{python}}",
"node": "{{node}}",
"nodePackages": "{{nodePackages}}",
"pnpm": "{{pnpm}}",
"pythonPackages": "{{site-packages}}",
"pythonDistributions": {
"numpy": "2.3.5",
"pandas": "3.0.1",
"python-dateutil": "2.9.0.post0",
"six": "1.17.0",
"tzdata": "2025.2",
"python-docx": "1.2.0",
"python-pptx": "1.0.2",
"openpyxl": "3.1.5",
"Pillow": "12.3.0",
"lxml": "6.1.3",
"XlsxWriter": "3.2.9",
"typing_extensions": "4.16.0",
"et_xmlfile": "2.0.0"
}
}
}
+25
View File
@@ -1226,6 +1226,21 @@
"symbol": "JobKindMap",
"source": "packages/jobs/jobs/src/view.ts"
},
{
"doc": "docs/subsystems/jobs.md",
"symbol": "JobRegisteredData",
"source": "packages/jobs/jobs/src/types.ts"
},
{
"doc": "docs/subsystems/jobs.md",
"symbol": "JobSettledData",
"source": "packages/jobs/jobs/src/types.ts"
},
{
"doc": "docs/subsystems/jobs.md",
"symbol": "JobToolCall",
"source": "packages/jobs/jobs/src/types.ts"
},
{
"doc": "docs/subsystems/jobs.md",
"symbol": "JobSpec",
@@ -1886,6 +1901,11 @@
"symbol": "LlmConfigurableProvider",
"source": "packages/llm/llm/src/types.ts"
},
{
"doc": "docs/subsystems/llm-streaming.md",
"symbol": "LlmNativeAuth",
"source": "packages/llm/llm/src/types.ts"
},
{
"doc": "docs/subsystems/permission-presets.md",
"symbol": "Config",
@@ -2071,6 +2091,11 @@
"symbol": "PeerScope",
"source": "packages/typert/protocol/src/types.ts"
},
{
"doc": "docs/subsystems/typert.md",
"symbol": "RemoteUplinkWindow",
"source": "packages/typert/protocol/src/types.ts"
},
{
"doc": "docs/subsystems/typert.md",
"symbol": "RemoteInvocation",