Merge branch 'master' into feature/minimal-compact-image
This commit is contained in:
commit
00a007d833
734 files changed
+19749
-4630
No files matched your search
@@ -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.
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -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',
|
||||
|
||||
@@ -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 }}')
|
||||
})
|
||||
@@ -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)});
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 }) }
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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}`)
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
})
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user