From d9342fcb5dcb5302e115cccb8246c6aeced53d37 Mon Sep 17 00:00:00 2001 From: Yichen Jiang Date: Wed, 23 Sep 2026 19:16:59 +0800 Subject: [PATCH 001/155] feat(ssh): package standalone POSIX helper runtimes --- .../workflows/build-exe-for-ssh-helper.yml | 127 +++++++++++++ .github/workflows/ci-master.yml | 8 + .github/workflows/ci.yml | 9 +- .github/workflows/publish-ssh-helper.yml | 76 ++++++++ apps/desktop/tests/ptc-runtime.spec.ts | 2 +- docs/config-catalog.i18n.yaml | 4 +- docs/config-catalog.md | 49 +++-- docs/config-catalog.zh.md | 49 +++-- docs/module-graph.i18n.yaml | 4 +- docs/module-graph.md | 5 +- docs/module-graph.zh.md | 5 +- docs/subsystems/ssh.i18n.yaml | 4 +- docs/subsystems/ssh.md | 33 ++-- docs/subsystems/ssh.zh.md | 33 ++-- package.json | 1 + .../ptc-runtime-node/README.i18n.yaml | 4 +- .../ptc-runtime/ptc-runtime-node/README.md | 5 +- .../ptc-runtime/ptc-runtime-node/README.zh.md | 5 +- .../ptc-runtime/ptc-runtime-node/src/index.ts | 26 +-- .../ptc-runtime-node/src/launch.ts | 50 ++++- .../tests/host-failures.spec.ts | 29 ++- .../ptc-runtime-node/tests/launch.spec.ts | 28 ++- packages/ssh/README.i18n.yaml | 4 +- packages/ssh/README.md | 1 + packages/ssh/README.zh.md | 1 + .../ssh/ssh-helper-runtime/README.i18n.yaml | 6 + packages/ssh/ssh-helper-runtime/README.md | 107 +++++++++++ packages/ssh/ssh-helper-runtime/README.zh.md | 107 +++++++++++ packages/ssh/ssh-helper-runtime/package.json | 64 +++++++ packages/ssh/ssh-helper-runtime/src/index.ts | 39 ++++ .../tests/fixtures/direct-helper.ts | 96 ++++++++++ .../tests/fixtures/driver.ts | 142 ++++++++++++++ .../tests/fixtures/sshd/Dockerfile | 8 + .../tests/fixtures/sshd/sshd_config | 13 ++ .../tests/fixtures/sshd/start.sh | 7 + packages/ssh/ssh-helper-runtime/tsconfig.json | 24 +++ packages/ssh/ssh/README.i18n.yaml | 4 +- packages/ssh/ssh/README.md | 11 +- packages/ssh/ssh/README.zh.md | 11 +- packages/ssh/ssh/package.json | 6 +- packages/ssh/ssh/src/helper-entry.ts | 8 +- packages/ssh/ssh/src/helper.ts | 5 +- packages/ssh/ssh/src/index.ts | 87 ++++++--- packages/ssh/ssh/src/protocol.ts | 2 +- packages/ssh/ssh/src/schemas.ts | 8 +- .../ssh/ssh/tests/connection-disposal.spec.ts | 4 +- packages/ssh/ssh/tests/fixtures/helper.ts | 8 +- .../ssh/ssh/tests/helper-boundaries.spec.ts | 23 ++- packages/ssh/ssh/tests/live.e2e.ts | 21 ++- .../ssh/ssh/tests/startup-behavior.spec.ts | 42 +++-- packages/ssh/ssh/tsconfig.json | 3 + pnpm-lock.yaml | 115 ++++++++++++ ...uild-exe-for-python-sdk-native-pty.spec.ts | 2 +- scripts/build-exe-for-python-sdk.ts | 107 ++--------- scripts/build-exe-for-ssh-helper.ts | 174 ++++++++++++++++++ scripts/check-workspace-constraints.ts | 2 + scripts/ci-workflow.spec.ts | 54 +++++- scripts/doc-standard.spec.ts | 1 + ...native-pty.ts => executable-native-pty.ts} | 6 +- scripts/executable-packaging.spec.ts | 46 +++++ scripts/executable-packaging.ts | 113 ++++++++++++ scripts/no-unknown-casts.baseline.json | 5 - scripts/prepare-linux-node-pty.sh | 23 +++ scripts/ssh-helper/artifact.spec.ts | 117 ++++++++++++ scripts/ssh-helper/artifact.ts | 88 +++++++++ scripts/ssh-helper/native.ts | 74 ++++++++ scripts/ssh-helper/probe.ts | 42 +++++ scripts/ssh-helper/release.ts | 76 ++++++++ scripts/ssh-helper/worker-probe.ts | 67 +++++++ scripts/type-equiv.manifest.json | 5 + .../verify-package-readme-model-experience.ts | 1 + scripts/verify-runtime-closure.spec.ts | 10 + scripts/verify-runtime-closure.ts | 10 +- scripts/verify-ssh-helper-artifact.ts | 167 +++++++++++++++++ scripts/verify-ssh-helper-ssh.ts | 108 +++++++++++ tsconfig.base.json | 1 + tsconfig.host.json | 1 + 77 files changed, 2524 insertions(+), 309 deletions(-) create mode 100644 .github/workflows/build-exe-for-ssh-helper.yml create mode 100644 .github/workflows/publish-ssh-helper.yml create mode 100644 packages/ssh/ssh-helper-runtime/README.i18n.yaml create mode 100644 packages/ssh/ssh-helper-runtime/README.md create mode 100644 packages/ssh/ssh-helper-runtime/README.zh.md create mode 100644 packages/ssh/ssh-helper-runtime/package.json create mode 100644 packages/ssh/ssh-helper-runtime/src/index.ts create mode 100644 packages/ssh/ssh-helper-runtime/tests/fixtures/direct-helper.ts create mode 100644 packages/ssh/ssh-helper-runtime/tests/fixtures/driver.ts create mode 100644 packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/Dockerfile create mode 100644 packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/sshd_config create mode 100644 packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/start.sh create mode 100644 packages/ssh/ssh-helper-runtime/tsconfig.json create mode 100644 scripts/build-exe-for-ssh-helper.ts rename scripts/{build-exe-for-python-sdk-native-pty.ts => executable-native-pty.ts} (82%) create mode 100644 scripts/executable-packaging.spec.ts create mode 100644 scripts/executable-packaging.ts create mode 100644 scripts/prepare-linux-node-pty.sh create mode 100644 scripts/ssh-helper/artifact.spec.ts create mode 100644 scripts/ssh-helper/artifact.ts create mode 100644 scripts/ssh-helper/native.ts create mode 100644 scripts/ssh-helper/probe.ts create mode 100644 scripts/ssh-helper/release.ts create mode 100644 scripts/ssh-helper/worker-probe.ts create mode 100644 scripts/verify-ssh-helper-artifact.ts create mode 100644 scripts/verify-ssh-helper-ssh.ts diff --git a/.github/workflows/build-exe-for-ssh-helper.yml b/.github/workflows/build-exe-for-ssh-helper.yml new file mode 100644 index 0000000000..15455ddda2 --- /dev/null +++ b/.github/workflows/build-exe-for-ssh-helper.yml @@ -0,0 +1,127 @@ +name: Build SSH helper + +on: + workflow_call: + inputs: + targets: + description: Comma-separated native Node 24 targets; empty builds all four. + type: string + default: '' + release: + description: Retain a complete release build when another run starts. + type: boolean + default: false + workflow_dispatch: + inputs: + targets: + description: Linux/macOS x64/arm64 pkg targets; empty builds all four. + type: string + default: '' + +permissions: + contents: read + +concurrency: + group: ssh-helper-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ !inputs.release }} + +env: + DSH_TELEMETRY_DISABLED: '1' + +jobs: + plan: + runs-on: ubuntu-latest + timeout-minutes: 5 + outputs: + matrix: ${{ steps.targets.outputs.matrix }} + steps: + - name: Validate native targets + id: targets + env: + REQUESTED_TARGETS: ${{ inputs.targets }} + run: | + node --input-type=module <<'JS' + import { appendFileSync } from 'node:fs'; + const runners = { + 'node24-linux-x64': 'ubuntu-24.04', + 'node24-linux-arm64': 'ubuntu-24.04-arm', + 'node24-macos-arm64': 'macos-latest', + 'node24-macos-x64': 'macos-15-intel', + }; + const raw = process.env.REQUESTED_TARGETS; + const targets = raw ? raw.split(',').map(value => value.trim()) : Object.keys(runners); + if (new Set(targets).size !== targets.length || targets.some(target => !Object.hasOwn(runners, target))) throw new Error('Invalid or duplicate SSH helper target'); + appendFileSync(process.env.GITHUB_OUTPUT, `matrix=${JSON.stringify(targets.map(target => ({target, runner: runners[target]})))}\n`); + JS + + build: + needs: plan + name: ${{ matrix.target }} + runs-on: ${{ matrix.runner }} + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(needs.plan.outputs.matrix) }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: pnpm/action-setup@v4 + with: + dest: ${{ runner.temp }}/setup-pnpm-${{ github.run_id }}-${{ github.run_attempt }} + - uses: actions/setup-node@v6 + with: + node-version: 24 + cache: pnpm + - uses: actions/cache@v4 + with: + path: ~/.pkg-cache + key: ssh-pkg-${{ matrix.target }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: ssh-pkg-${{ matrix.target }}- + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Prepare Linux compiler and sandbox + if: runner.os == 'Linux' + run: | + sudo apt-get update -q + sudo apt-get install -yq musl-tools bubblewrap + if sysctl kernel.apparmor_restrict_unprivileged_userns >/dev/null 2>&1; then + sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 + fi + bwrap --ro-bind / / --dev /dev --unshare-pid --proc /proc --die-with-parent -- true + - name: Build compatible Linux PTY addon + if: runner.os == 'Linux' + run: bash scripts/prepare-linux-node-pty.sh + - name: Build native release archive + env: + HELPER_TARGET: ${{ matrix.target }} + run: pnpm exec tsx scripts/build-exe-for-ssh-helper.ts --target="$HELPER_TARGET" + - name: Verify relocated executable and confinement + env: + HELPER_TARGET: ${{ matrix.target }} + run: | + archives=(dist-exe/ssh-helper/*.tar.gz) + test "${#archives[@]}" -eq 1 + pnpm exec tsx scripts/verify-ssh-helper-artifact.ts --archive="${archives[0]}" --sandbox=required --report="dist-exe/ssh-helper/$HELPER_TARGET.json" + - name: Verify the packaged Landlock backend + if: runner.os == 'Linux' + env: + HELPER_TARGET: ${{ matrix.target }} + run: | + archives=(dist-exe/ssh-helper/*.tar.gz) + pnpm exec tsx scripts/verify-ssh-helper-artifact.ts --archive="${archives[0]}" --sandbox=required --backend=landlock-run --report="dist-exe/ssh-helper/$HELPER_TARGET.landlock.json" + - name: Verify OpenSSH on glibc 2.28 without Node + if: runner.os == 'Linux' + env: + HELPER_TARGET: ${{ matrix.target }} + run: | + archives=(dist-exe/ssh-helper/*.tar.gz) + test "${#archives[@]}" -eq 1 + pnpm exec tsx scripts/verify-ssh-helper-ssh.ts --archive="${archives[0]}" --report="dist-exe/ssh-helper/$HELPER_TARGET.ssh.json" + - name: Upload verified archive and evidence + uses: actions/upload-artifact@v7 + with: + name: ssh-helper-${{ matrix.target }} + path: dist-exe/ssh-helper/* + if-no-files-found: error diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index be96b7effa..4c480a1b54 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -13,6 +13,7 @@ on: options: - larger-runner-benchmark - consolidated-runner-benchmark + - ssh-helper # New master pushes and manual runs replace obsolete checks in this workflow/ref. # Standby drills share cancellation; use completed runs as readiness evidence. @@ -30,6 +31,13 @@ env: DSH_TELEMETRY_DISABLED: '1' jobs: + ssh-helper: + if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_dispatch' && inputs.suite == 'ssh-helper') + name: ssh helper / native artifacts + uses: ./.github/workflows/build-exe-for-ssh-helper.yml + with: + targets: ${{ github.event_name == 'workflow_dispatch' && 'node24-linux-x64,node24-linux-arm64,node24-macos-arm64,node24-macos-x64' || 'node24-linux-arm64,node24-macos-arm64,node24-macos-x64' }} + # These native runtime carriers are post-merge checks; release keeps all targets. python-runtime: if: github.event_name == 'push' && github.ref == 'refs/heads/master' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c2077159b..54445af779 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -494,6 +494,13 @@ jobs: secrets: DEEPSEEK_API_KEY_EXTERNAL: ${{ secrets.DEEPSEEK_API_KEY_EXTERNAL }} + ssh-helper: + if: github.event_name == 'pull_request' + name: ssh helper / Linux x64 + uses: ./.github/workflows/build-exe-for-ssh-helper.yml + with: + targets: node24-linux-x64 + # Native builds and process tests block pull requests independently of coverage. # Observational checks reuse the successful build and remain non-blocking. # Dependabot PRs are excluded from the self-hosted pool and stay queued for @@ -714,7 +721,7 @@ jobs: && github.event.pull_request.user.login != 'dependabot[bot]' && fromJSON('["self-hosted", "linux", "x64", "vm-backup"]') || 'ubuntu-latest' }} - needs: [node-24, node-24-coverage, node-24-bench, node-24-consumers, node-compat, python-sdk, python-runtime, windows-build, windows-native-tests] + needs: [node-24, node-24-coverage, node-24-bench, node-24-consumers, node-compat, python-sdk, python-runtime, ssh-helper, windows-build, windows-native-tests] if: ${{ !cancelled() && github.event_name == 'pull_request' }} steps: - name: Fail if any needed job did not succeed diff --git a/.github/workflows/publish-ssh-helper.yml b/.github/workflows/publish-ssh-helper.yml new file mode 100644 index 0000000000..766e8ed1bd --- /dev/null +++ b/.github/workflows/publish-ssh-helper.yml @@ -0,0 +1,76 @@ +name: Publish SSH helper + +# Select an existing dsh-v tag when dispatching. This never publishes npm packages. +on: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: publish-ssh-helper-${{ github.ref }} + cancel-in-progress: false + +jobs: + validate: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.tag.outputs.version }} + commit: ${{ steps.tag.outputs.commit }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - name: Verify selected release tag + id: tag + run: | + node --input-type=module <<'JS' + import { readFileSync, appendFileSync } from 'node:fs'; + import { execFileSync } from 'node:child_process'; + const {version} = JSON.parse(readFileSync('package.json', 'utf8')); + if (process.env.GITHUB_REF_TYPE !== 'tag' || process.env.GITHUB_REF_NAME !== `dsh-v${version}`) throw new Error('Dispatch from the matching dsh-v tag'); + const commit = execFileSync('git', ['rev-parse', 'HEAD'], {encoding:'utf8'}).trim(); + appendFileSync(process.env.GITHUB_OUTPUT, `version=${version}\ncommit=${commit}\n`); + JS + build: + needs: validate + uses: ./.github/workflows/build-exe-for-ssh-helper.yml + with: + release: true + publish: + needs: [validate, build] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: pnpm/action-setup@v4 + with: + dest: ${{ runner.temp }}/setup-pnpm-${{ github.run_id }}-${{ github.run_attempt }} + - uses: actions/setup-node@v6 + with: + node-version: 24 + cache: pnpm + - run: pnpm install --frozen-lockfile + - uses: actions/download-artifact@v8 + with: + pattern: ssh-helper-* + path: dist-exe/ssh-helper + merge-multiple: true + - name: Require complete evidence from the selected source commit + env: + RELEASE_VERSION: ${{ needs.validate.outputs.version }} + SOURCE_COMMIT: ${{ needs.validate.outputs.commit }} + run: pnpm exec tsx scripts/ssh-helper/release.ts --directory=dist-exe/ssh-helper --version="$RELEASE_VERSION" --commit="$SOURCE_COMMIT" + - name: Attach the verified archives to the GitHub release + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + RELEASE_TAG: ${{ github.ref_name }} + run: | + if ! gh release view "$RELEASE_TAG" >/dev/null 2>&1; then + gh release create "$RELEASE_TAG" --verify-tag --draft --title "$RELEASE_TAG" --notes 'SSH helper executables for Linux and macOS.' + fi + gh release upload "$RELEASE_TAG" dist-exe/ssh-helper/*.tar.gz dist-exe/ssh-helper/SHA256SUMS diff --git a/apps/desktop/tests/ptc-runtime.spec.ts b/apps/desktop/tests/ptc-runtime.spec.ts index 757bfe95b2..e2f8fca009 100644 --- a/apps/desktop/tests/ptc-runtime.spec.ts +++ b/apps/desktop/tests/ptc-runtime.spec.ts @@ -30,7 +30,7 @@ it.skipIf(process.platform !== 'darwin' || !electronInstalled).each(['workspace- await mkdir(cwd) vi.stubEnv('ELECTRON_RUN_AS_NODE', '1') vi.stubEnv('DSH_TEST_RUNTIME_SECRET', 'must-not-inherit') - const runtime = await mountRuntime(ctx, { nodeExecutable: electron }, { mode, workspaceRoot: cwd }) + const runtime = await mountRuntime(ctx, { launch: { kind: 'node-script', executable: electron } }, { mode, workspaceRoot: cwd }) const result = await runtime.run(runtime.resolve({ // Bound startup failure before the outer test deadline, leaving time for managed cleanup. timeoutMs: 30_000, diff --git a/docs/config-catalog.i18n.yaml b/docs/config-catalog.i18n.yaml index 22a29bf6ac..c84deb462f 100644 --- a/docs/config-catalog.i18n.yaml +++ b/docs/config-catalog.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/config-catalog.md -config-catalog.md: f86f02fbec949c0212c3c038f47d1fdf50d239fe -config-catalog.zh.md: d56d5bdef41e76ce7a41e3d582a1a8afde18766b +config-catalog.md: 33bddf183cd14f7aca92b5a21ae5a9141f6a40b7 +config-catalog.zh.md: a9e8f61b4dfba631e661be3d556161de579ccb26 diff --git a/docs/config-catalog.md b/docs/config-catalog.md index f86f02fbec..33bddf183c 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -2194,7 +2194,9 @@ Requires: `fs` · `subprocess` · `sandbox` · `sandboxPolicy` ```ts config-catalog /** Deployment-varying runtime bounds and launch choices. */ -export interface Config extends LaunchConfig { +export interface Config { + /** Worker invocation in the subprocess world; omitted selects the local carrier. */ + launch?: LaunchConfig /** Default elapsed deadline, including nested tool and approval waits. */ timeoutMs?: number /** Maximum numeric elapsed budget accepted by resolve. */ @@ -2211,16 +2213,23 @@ export interface Config extends LaunchConfig { graceMs?: number } -/** Deployment-owned Node executable and optional preinstalled built bootstrap. */ -export interface LaunchConfig { - /** Executable in the subprocess world; defaults to the current Node executable. */ - nodeExecutable?: string - /** Absolute preinstalled built bootstrap in the execution world. */ +/** Deployment-owned worker invocation in the subprocess execution world. */ +export type LaunchConfig = { + /** Start a separately installed Node executable and JavaScript bootstrap. */ + kind: 'node-script' + /** Executable name or path resolved by the subprocess provider. */ + executable: string + /** Absolute preinstalled bootstrap; omitted maps this package's bootstrap into the execution world. */ bootstrapPath?: string +} | { + /** Start the private PTC worker embedded in a packaged executable. */ + kind: 'embedded' + /** Packaged executable name or path resolved by the subprocess provider. */ + executable: string } ``` -Source: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:26`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) +Source: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:27`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) @@ -2799,18 +2808,14 @@ Source: [`packages/spill/spill-policy/src/index.ts:25`](../packages/spill/spill- export interface Config { /** OpenSSH host alias, including its existing user, key and known-host configuration. */ host: string - /** Absolute remote Node executable. */ - node: string + /** Explicit script or self-contained executable invocation. */ + launch: HelperLaunch /** Absolute path to the installed, bundled helper entry. */ helper: string /** SHA-256 of that bundled helper; mismatches refuse the connection. */ helperHash: string /** Absolute remote default workspace. */ workspace: string - /** Optional preinstalled built PTC entry, paired with its expected digest. */ - bootstrapPath?: string - /** SHA-256 of bootstrapPath; both fields must be supplied together. */ - bootstrapHash?: string /** Connection and administrative-request deadline, at most 2,147,483,647 milliseconds. */ requestTimeoutMs?: number /** Maximum JSON payload bytes per helper request or response. */ @@ -2820,9 +2825,24 @@ export interface Config { /** Remote helper lease; loss of heartbeats starts remote managed cleanup. */ leaseMs?: number } + +/** Installed helper invocation; script deployments may also install a PTC bootstrap. */ +export type HelperLaunch = { + /** Run the installed script with a separately installed Node executable. */ + kind: 'node-script' + /** Absolute remote Node executable. */ + node: string + /** Absolute remote PTC bootstrap; requires bootstrapHash. */ + bootstrapPath?: string + /** Lowercase SHA-256 of bootstrapPath; requires that path. */ + bootstrapHash?: string +} | { + /** Run the helper executable with its embedded Node and PTC worker. */ + kind: 'executable' +} ``` -Source: [`packages/ssh/ssh/src/index.ts:17`](../packages/ssh/ssh/src/index.ts) +Source: [`packages/ssh/ssh/src/index.ts:33`](../packages/ssh/ssh/src/index.ts) @@ -4248,6 +4268,7 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them. - `@deepseek-ai/dsh-session-snapshot` ([`packages/test-support/session-snapshot/src/index.ts`](../packages/test-support/session-snapshot/src/index.ts)) - `@deepseek-ai/dsh-session-telemetry` ([`packages/session/session-telemetry/src/index.ts`](../packages/session/session-telemetry/src/index.ts)) - `@deepseek-ai/dsh-session-title-llm` ([`packages/session/session-title-llm/src/index.ts`](../packages/session/session-title-llm/src/index.ts)) +- `@deepseek-ai/dsh-ssh-helper-runtime` ([`packages/ssh/ssh-helper-runtime/src/index.ts`](../packages/ssh/ssh-helper-runtime/src/index.ts)) - `@deepseek-ai/dsh-subagent-in-process-driver` ([`packages/subagent/subagent-in-process-driver/src/index.ts`](../packages/subagent/subagent-in-process-driver/src/index.ts)) - `@deepseek-ai/dsh-timeout` ([`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts)) - `@deepseek-ai/dsh-typert-generator` ([`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts)) diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index d56d5bdef4..a9e8f61b4d 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -2196,7 +2196,9 @@ export interface Config { ```ts config-catalog /** Deployment-varying runtime bounds and launch choices. */ -export interface Config extends LaunchConfig { +export interface Config { + /** Worker invocation in the subprocess world; omitted selects the local carrier. */ + launch?: LaunchConfig /** Default elapsed deadline, including nested tool and approval waits. */ timeoutMs?: number /** Maximum numeric elapsed budget accepted by resolve. */ @@ -2213,16 +2215,23 @@ export interface Config extends LaunchConfig { graceMs?: number } -/** Deployment-owned Node executable and optional preinstalled built bootstrap. */ -export interface LaunchConfig { - /** Executable in the subprocess world; defaults to the current Node executable. */ - nodeExecutable?: string - /** Absolute preinstalled built bootstrap in the execution world. */ +/** Deployment-owned worker invocation in the subprocess execution world. */ +export type LaunchConfig = { + /** Start a separately installed Node executable and JavaScript bootstrap. */ + kind: 'node-script' + /** Executable name or path resolved by the subprocess provider. */ + executable: string + /** Absolute preinstalled bootstrap; omitted maps this package's bootstrap into the execution world. */ bootstrapPath?: string +} | { + /** Start the private PTC worker embedded in a packaged executable. */ + kind: 'embedded' + /** Packaged executable name or path resolved by the subprocess provider. */ + executable: string } ``` -来源: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:26`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) +来源: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:27`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) @@ -2801,18 +2810,14 @@ export interface Config { export interface Config { /** OpenSSH host alias, including its existing user, key and known-host configuration. */ host: string - /** Absolute remote Node executable. */ - node: string + /** Explicit script or self-contained executable invocation. */ + launch: HelperLaunch /** Absolute path to the installed, bundled helper entry. */ helper: string /** SHA-256 of that bundled helper; mismatches refuse the connection. */ helperHash: string /** Absolute remote default workspace. */ workspace: string - /** Optional preinstalled built PTC entry, paired with its expected digest. */ - bootstrapPath?: string - /** SHA-256 of bootstrapPath; both fields must be supplied together. */ - bootstrapHash?: string /** Connection and administrative-request deadline, at most 2,147,483,647 milliseconds. */ requestTimeoutMs?: number /** Maximum JSON payload bytes per helper request or response. */ @@ -2822,9 +2827,24 @@ export interface Config { /** Remote helper lease; loss of heartbeats starts remote managed cleanup. */ leaseMs?: number } + +/** Installed helper invocation; script deployments may also install a PTC bootstrap. */ +export type HelperLaunch = { + /** Run the installed script with a separately installed Node executable. */ + kind: 'node-script' + /** Absolute remote Node executable. */ + node: string + /** Absolute remote PTC bootstrap; requires bootstrapHash. */ + bootstrapPath?: string + /** Lowercase SHA-256 of bootstrapPath; requires that path. */ + bootstrapHash?: string +} | { + /** Run the helper executable with its embedded Node and PTC worker. */ + kind: 'executable' +} ``` -来源: [`packages/ssh/ssh/src/index.ts:17`](../packages/ssh/ssh/src/index.ts) +来源: [`packages/ssh/ssh/src/index.ts:33`](../packages/ssh/ssh/src/index.ts) @@ -4250,6 +4270,7 @@ export interface Config { - `@deepseek-ai/dsh-session-snapshot`([`packages/test-support/session-snapshot/src/index.ts`](../packages/test-support/session-snapshot/src/index.ts)) - `@deepseek-ai/dsh-session-telemetry`([`packages/session/session-telemetry/src/index.ts`](../packages/session/session-telemetry/src/index.ts)) - `@deepseek-ai/dsh-session-title-llm`([`packages/session/session-title-llm/src/index.ts`](../packages/session/session-title-llm/src/index.ts)) +- `@deepseek-ai/dsh-ssh-helper-runtime`([`packages/ssh/ssh-helper-runtime/src/index.ts`](../packages/ssh/ssh-helper-runtime/src/index.ts)) - `@deepseek-ai/dsh-subagent-in-process-driver`([`packages/subagent/subagent-in-process-driver/src/index.ts`](../packages/subagent/subagent-in-process-driver/src/index.ts)) - `@deepseek-ai/dsh-timeout`([`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts)) - `@deepseek-ai/dsh-typert-generator`([`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts)) diff --git a/docs/module-graph.i18n.yaml b/docs/module-graph.i18n.yaml index 6ae367c64a..93f4e9e84f 100644 --- a/docs/module-graph.i18n.yaml +++ b/docs/module-graph.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/module-graph.md -module-graph.md: bfe3e5faa7168b03848ac76d2dd2584d4aa31f5e -module-graph.zh.md: bfa0f83e14cbcf89599fa207ec919195128db49e +module-graph.md: 27c593699e5ca7c1d0a1da2610e7a08602c4b8b5 +module-graph.zh.md: 82b18fa42d5d63fd131e8ca6c966c3dfabdd1c24 diff --git a/docs/module-graph.md b/docs/module-graph.md index bfe3e5faa7..27c593699e 100644 --- a/docs/module-graph.md +++ b/docs/module-graph.md @@ -376,6 +376,7 @@ flowchart TD pkg_fs_ssh["fs-ssh"] pkg_sandbox_ssh["sandbox-ssh"] pkg_ssh["ssh"] + pkg_ssh_helper_runtime["ssh-helper-runtime"] pkg_subprocess_ssh["subprocess-ssh"] end subgraph group_storage["packages/storage"] @@ -957,6 +958,7 @@ flowchart TD pkg_ssh --> pkg_session_projection pkg_ssh --> pkg_subprocess pkg_ssh --> pkg_subprocess_local + pkg_ssh --> pkg_util_values pkg_tool_terminal --> pkg_agent pkg_tool_terminal --> pkg_jobs pkg_tool_terminal --> pkg_llm @@ -1446,6 +1448,7 @@ flowchart TD | [`session-format-v1-to-v2`](../packages/session/session-format-v1-to-v2) | `session` | — | | [`session-format-v2-to-v3`](../packages/session/session-format-v2-to-v3) | `session` | — | | [`session-format-v3-to-v4`](../packages/session/session-format-v3-to-v4) | `session` | — | +| [`ssh-helper-runtime`](../packages/ssh/ssh-helper-runtime) | `ssh` | — | | [`storage`](../packages/storage/storage) | `storage` | — | | [`win32-process`](../packages/subprocess/win32-process) | `subprocess` | — | | [`llm-mock-server`](../packages/test-support/llm-mock-server) | `test-support` | — | @@ -1598,7 +1601,7 @@ flowchart TD | [`shell-env`](../packages/shell/shell-env) | `shell` | [`app-boot`](../packages/boot/app-boot), [`home-paths`](../packages/util/home-paths), [`shell`](../packages/shell/shell), [`tools`](../packages/core/tools) | | [`tool-bash-persistent`](../packages/shell/tool-bash-persistent) | `shell` | [`agent`](../packages/core/agent), [`terminal`](../packages/terminal/terminal), [`timeout`](../packages/util/timeout), [`tools`](../packages/core/tools) | | [`tool-pwsh-persistent`](../packages/shell/tool-pwsh-persistent) | `shell` | [`agent`](../packages/core/agent), [`terminal`](../packages/terminal/terminal), [`timeout`](../packages/util/timeout), [`tools`](../packages/core/tools) | -| [`ssh`](../packages/ssh/ssh) | `ssh` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`fs-local`](../packages/fs/fs-local), [`fs-sandbox`](../packages/fs/fs-sandbox), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-local`](../packages/sandbox/sandbox-local), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session-projection`](../packages/session/session-projection), [`subprocess`](../packages/subprocess/subprocess), [`subprocess-local`](../packages/subprocess/subprocess-local) | +| [`ssh`](../packages/ssh/ssh) | `ssh` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`fs-local`](../packages/fs/fs-local), [`fs-sandbox`](../packages/fs/fs-sandbox), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-local`](../packages/sandbox/sandbox-local), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session-projection`](../packages/session/session-projection), [`subprocess`](../packages/subprocess/subprocess), [`subprocess-local`](../packages/subprocess/subprocess-local), [`util-values`](../packages/util/values) | | [`tool-terminal`](../packages/terminal/tool-terminal) | `terminal` | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`system-prompt`](../packages/core/system-prompt), [`terminal`](../packages/terminal/terminal), [`tools`](../packages/core/tools) | | [`llm-replay`](../packages/test-support/llm-replay) | `test-support` | [`compaction`](../packages/compaction/compaction), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`tool-workflow`](../packages/workflow/tool-workflow) | `workflow` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`jobs`](../packages/jobs/jobs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`workflow`](../packages/workflow/workflow) | diff --git a/docs/module-graph.zh.md b/docs/module-graph.zh.md index bfa0f83e14..82b18fa42d 100644 --- a/docs/module-graph.zh.md +++ b/docs/module-graph.zh.md @@ -378,6 +378,7 @@ flowchart TD pkg_fs_ssh["fs-ssh"] pkg_sandbox_ssh["sandbox-ssh"] pkg_ssh["ssh"] + pkg_ssh_helper_runtime["ssh-helper-runtime"] pkg_subprocess_ssh["subprocess-ssh"] end subgraph group_storage["packages/storage"] @@ -959,6 +960,7 @@ flowchart TD pkg_ssh --> pkg_session_projection pkg_ssh --> pkg_subprocess pkg_ssh --> pkg_subprocess_local + pkg_ssh --> pkg_util_values pkg_tool_terminal --> pkg_agent pkg_tool_terminal --> pkg_jobs pkg_tool_terminal --> pkg_llm @@ -1448,6 +1450,7 @@ flowchart TD | [`session-format-v1-to-v2`](../packages/session/session-format-v1-to-v2) | `session` | — | | [`session-format-v2-to-v3`](../packages/session/session-format-v2-to-v3) | `session` | — | | [`session-format-v3-to-v4`](../packages/session/session-format-v3-to-v4) | `session` | — | +| [`ssh-helper-runtime`](../packages/ssh/ssh-helper-runtime) | `ssh` | — | | [`storage`](../packages/storage/storage) | `storage` | — | | [`win32-process`](../packages/subprocess/win32-process) | `subprocess` | — | | [`llm-mock-server`](../packages/test-support/llm-mock-server) | `test-support` | — | @@ -1600,7 +1603,7 @@ flowchart TD | [`shell-env`](../packages/shell/shell-env) | `shell` | [`app-boot`](../packages/boot/app-boot), [`home-paths`](../packages/util/home-paths), [`shell`](../packages/shell/shell), [`tools`](../packages/core/tools) | | [`tool-bash-persistent`](../packages/shell/tool-bash-persistent) | `shell` | [`agent`](../packages/core/agent), [`terminal`](../packages/terminal/terminal), [`timeout`](../packages/util/timeout), [`tools`](../packages/core/tools) | | [`tool-pwsh-persistent`](../packages/shell/tool-pwsh-persistent) | `shell` | [`agent`](../packages/core/agent), [`terminal`](../packages/terminal/terminal), [`timeout`](../packages/util/timeout), [`tools`](../packages/core/tools) | -| [`ssh`](../packages/ssh/ssh) | `ssh` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`fs-local`](../packages/fs/fs-local), [`fs-sandbox`](../packages/fs/fs-sandbox), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-local`](../packages/sandbox/sandbox-local), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session-projection`](../packages/session/session-projection), [`subprocess`](../packages/subprocess/subprocess), [`subprocess-local`](../packages/subprocess/subprocess-local) | +| [`ssh`](../packages/ssh/ssh) | `ssh` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`fs-local`](../packages/fs/fs-local), [`fs-sandbox`](../packages/fs/fs-sandbox), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-local`](../packages/sandbox/sandbox-local), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session-projection`](../packages/session/session-projection), [`subprocess`](../packages/subprocess/subprocess), [`subprocess-local`](../packages/subprocess/subprocess-local), [`util-values`](../packages/util/values) | | [`tool-terminal`](../packages/terminal/tool-terminal) | `terminal` | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`system-prompt`](../packages/core/system-prompt), [`terminal`](../packages/terminal/terminal), [`tools`](../packages/core/tools) | | [`llm-replay`](../packages/test-support/llm-replay) | `test-support` | [`compaction`](../packages/compaction/compaction), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`tool-workflow`](../packages/workflow/tool-workflow) | `workflow` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`jobs`](../packages/jobs/jobs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`workflow`](../packages/workflow/workflow) | diff --git a/docs/subsystems/ssh.i18n.yaml b/docs/subsystems/ssh.i18n.yaml index bc2ae1d070..8845cda64c 100644 --- a/docs/subsystems/ssh.i18n.yaml +++ b/docs/subsystems/ssh.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/subsystems/ssh.md -ssh.md: 04480e6ec397490f2e61851c956b9d318c1ef54f -ssh.zh.md: 32d7c8b6c2936240b82b02de3a29adeda724171f +ssh.md: 440e42c26d8505bc2d961bc8f49b5a7798007c41 +ssh.zh.md: 862d8402a163e0688789a02a8a3b235e23ed3794 diff --git a/docs/subsystems/ssh.md b/docs/subsystems/ssh.md index 04480e6ec3..440e42c26d 100644 --- a/docs/subsystems/ssh.md +++ b/docs/subsystems/ssh.md @@ -8,7 +8,7 @@ The [SSH provider family](../../packages/ssh/README.md) supplies one remote file Filesystem identities, executable lookup, process cwd, sandbox workspace roots and language-server file URLs refer to the SSH host. Providers canonicalize paths where the files exist, preserving filesystem interpretation of `symlink/..`. The policy resolver carries absolute execution-world spelling without trying to resolve remote paths on the Harness host. -`processPath()` supplies a path usable by the paired subprocess provider. `processPathFromHostPath()` remains unavailable for SSH; installing a remote artifact does not make an arbitrary host path portable. [`NodePtcRuntime`](../../packages/ptc-runtime/ptc-runtime-node/README.md) therefore takes an explicitly installed, digest-verified remote bootstrap. +`processPath()` supplies a path usable by the paired subprocess provider. `processPathFromHostPath()` remains unavailable for SSH; installing a remote artifact does not make an arbitrary host path portable. [`NodePtcRuntime`](../../packages/ptc-runtime/ptc-runtime-node/README.md) therefore takes the verified remote launch configuration: an installed script bootstrap or the [helper executable’s embedded worker](../../packages/ssh/ssh-helper-runtime/README.md). ## Transport and trust @@ -30,23 +30,36 @@ See the [decision record](../../.agents/notes/implemented/architecture/2026-09-1 ## Connection API +```ts type-equiv +/** Installed helper invocation; script deployments may also install a PTC bootstrap. */ +type HelperLaunch = { + /** Run the installed script with a separately installed Node executable. */ + kind: 'node-script' + /** Absolute remote Node executable. */ + node: string + /** Absolute remote PTC bootstrap; requires bootstrapHash. */ + bootstrapPath?: string + /** Lowercase SHA-256 of bootstrapPath; requires that path. */ + bootstrapHash?: string +} | { + /** Run the helper executable with its embedded Node and PTC worker. */ + kind: 'executable' +} +``` + ```ts type-equiv /** Deployment-owned SSH identity and installed helper; no model argument selects these values. */ interface Config { /** OpenSSH host alias, including its existing user, key and known-host configuration. */ host: string - /** Absolute remote Node executable. */ - node: string + /** Explicit script or self-contained executable invocation. */ + launch: HelperLaunch /** Absolute path to the installed, bundled helper entry. */ helper: string /** SHA-256 of that bundled helper; mismatches refuse the connection. */ helperHash: string /** Absolute remote default workspace. */ workspace: string - /** Optional preinstalled built PTC entry, paired with its expected digest. */ - bootstrapPath?: string - /** SHA-256 of bootstrapPath; both fields must be supplied together. */ - bootstrapHash?: string /** Connection and administrative-request deadline, at most 2,147,483,647 milliseconds. */ requestTimeoutMs?: number /** Maximum JSON payload bytes per helper request or response. */ @@ -67,10 +80,8 @@ declare class SshConnection extends Service { constructor(ctx: Context, config: Config); /** Hold plugin readiness until the remote identity and helper digest are verified. */ async [Service.init](): Promise; - /** Verified remote Node executable for the paired PTC runtime. */ - get nodeExecutable(): string; - /** Verified preinstalled PTC entry; unconfigured runtimes fail before program execution. */ - get bootstrapPath(): string; + /** Verified remote PTC launch configuration; script deployments require a verified bootstrap. */ + get ptcLaunch(): { kind: 'embedded'; executable: string } | { kind: 'node-script'; executable: string; bootstrapPath: string }; /** * Send a helper operation; cancellation never replays an ambiguous mutation. * @param method - the private helper operation. diff --git a/docs/subsystems/ssh.zh.md b/docs/subsystems/ssh.zh.md index 32d7c8b6c2..862d8402a1 100644 --- a/docs/subsystems/ssh.zh.md +++ b/docs/subsystems/ssh.zh.md @@ -8,7 +8,7 @@ 文件系统身份、可执行文件查找、进程 cwd、沙箱工作区根目录及语言服务器文件 URL 都指向 SSH 主机。提供方在文件实际存在的位置规范化路径,保留文件系统对 `symlink/..` 的解释。策略解析器保留执行环境中的绝对路径写法,不尝试在 Harness 主机上解析远端路径。 -`processPath()` 提供配套子进程提供方可用的路径。SSH 的 `processPathFromHostPath()` 仍不可用;安装远端产物不意味着任意主机路径可移植。因此 [`NodePtcRuntime`](../../packages/ptc-runtime/ptc-runtime-node/README.zh.md) 使用显式安装并经过摘要验证的远端引导程序。 +`processPath()` 提供配套子进程提供方可用的路径。SSH 的 `processPathFromHostPath()` 仍不可用;安装远端产物不意味着任意主机路径可移植。因此 [`NodePtcRuntime`](../../packages/ptc-runtime/ptc-runtime-node/README.zh.md) 使用验证后的远端启动配置:已安装的脚本引导程序,或 [helper 可执行文件内嵌的 worker](../../packages/ssh/ssh-helper-runtime/README.zh.md)。 ## 传输与信任 @@ -30,23 +30,36 @@ headless 通过已挂载的文件系统提供方记录和检查 Session cwd。 ## 连接 API +```ts type-equiv +/** Installed helper invocation; script deployments may also install a PTC bootstrap. */ +type HelperLaunch = { + /** Run the installed script with a separately installed Node executable. */ + kind: 'node-script' + /** Absolute remote Node executable. */ + node: string + /** Absolute remote PTC bootstrap; requires bootstrapHash. */ + bootstrapPath?: string + /** Lowercase SHA-256 of bootstrapPath; requires that path. */ + bootstrapHash?: string +} | { + /** Run the helper executable with its embedded Node and PTC worker. */ + kind: 'executable' +} +``` + ```ts type-equiv /** Deployment-owned SSH identity and installed helper; no model argument selects these values. */ interface Config { /** OpenSSH host alias, including its existing user, key and known-host configuration. */ host: string - /** Absolute remote Node executable. */ - node: string + /** Explicit script or self-contained executable invocation. */ + launch: HelperLaunch /** Absolute path to the installed, bundled helper entry. */ helper: string /** SHA-256 of that bundled helper; mismatches refuse the connection. */ helperHash: string /** Absolute remote default workspace. */ workspace: string - /** Optional preinstalled built PTC entry, paired with its expected digest. */ - bootstrapPath?: string - /** SHA-256 of bootstrapPath; both fields must be supplied together. */ - bootstrapHash?: string /** Connection and administrative-request deadline, at most 2,147,483,647 milliseconds. */ requestTimeoutMs?: number /** Maximum JSON payload bytes per helper request or response. */ @@ -67,10 +80,8 @@ declare class SshConnection extends Service { constructor(ctx: Context, config: Config); /** Hold plugin readiness until the remote identity and helper digest are verified. */ async [Service.init](): Promise; - /** Verified remote Node executable for the paired PTC runtime. */ - get nodeExecutable(): string; - /** Verified preinstalled PTC entry; unconfigured runtimes fail before program execution. */ - get bootstrapPath(): string; + /** Verified remote PTC launch configuration; script deployments require a verified bootstrap. */ + get ptcLaunch(): { kind: 'embedded'; executable: string } | { kind: 'node-script'; executable: string; bootstrapPath: string }; /** * Send a helper operation; cancellation never replays an ambiguous mutation. * @param method - the private helper operation. diff --git a/package.json b/package.json index a7acc3ab12..fda3fdebc7 100644 --- a/package.json +++ b/package.json @@ -228,6 +228,7 @@ "@vitest/coverage-v8": "^4.1.8", "@yao-pkg/pkg": "6.21.0", "@yarnpkg/cli-dist": "4.17.1", + "zod": "^4.4.3", "eslint-plugin-sonarjs": "^4.1.0", "execa": "^10.0.0", "extract-zip": "^2.0.1", diff --git a/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml b/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml index 4c672e15a9..444762d01b 100644 --- a/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml +++ b/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/ptc-runtime/ptc-runtime-node/README.md -README.md: 5196d6982c3bf8edda3b8b825e41db83f6994141 -README.zh.md: 16c9f8fc426b1f2d28eaa039ba259f08088664a8 +README.md: 398d633ad5719c350abe9df09f5720eb49bf7798 +README.zh.md: b4b9f24a840b77b84264c19cc99bdc1cd72bfa2c diff --git a/packages/ptc-runtime/ptc-runtime-node/README.md b/packages/ptc-runtime/ptc-runtime-node/README.md index 5196d6982c..398d633ad5 100644 --- a/packages/ptc-runtime/ptc-runtime-node/README.md +++ b/packages/ptc-runtime/ptc-runtime-node/README.md @@ -52,8 +52,7 @@ Configure the provider row after its required services are available: | `maxMessageBytes` | `134,217,728` | Limit for a control frame, outstanding argument bytes and queued control writes | | `maxPendingCalls` | `128` | Maximum simultaneous host binding calls | | `graceMs` | `3,000` | Managed termination and output-drain grace | -| `nodeExecutable` | Current Node executable | Executable resolved in the subprocess execution world | -| `bootstrapPath` | Package bootstrap | Optional absolute path to a preinstalled built bootstrap in that world | +| `launch` | Local carrier | Explicit `{ kind: "node-script", executable, bootstrapPath? }` or `{ kind: "embedded", executable }` in the subprocess world | The [configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-ptc-runtime-node) defines accepted config fields. `resolve(request)` supplies cwd, the numeric or null deadline choice and the execution policy; `run(spec)` accepts those resolved inputs and does not fill missing values. @@ -91,7 +90,7 @@ Length-framed JSON travels separately from stdout/stderr. The host bounds frames ### Source and built bootstraps -Source execution loads an erasable-only bootstrap closure without relying on sibling built exports. Built execution uses the packaged `process.js` entry. An execution world that cannot map the host bootstrap requires a preinstalled compatible `bootstrapPath`; a host path is never assumed to name the same remote file. +Source execution loads an erasable-only bootstrap closure without relying on sibling built exports. Built script execution uses `process.js`; a remote script deployment supplies `launch.bootstrapPath`. Embedded carriers launch their private worker through `launch.executable`. `resolveLaunch()` selects the local default during construction; an explicit remote invocation never depends on whether the client itself is packaged. A host path is never assumed to name the same remote file. ### Source map diff --git a/packages/ptc-runtime/ptc-runtime-node/README.zh.md b/packages/ptc-runtime/ptc-runtime-node/README.zh.md index 16c9f8fc42..b4b9f24a84 100644 --- a/packages/ptc-runtime/ptc-runtime-node/README.zh.md +++ b/packages/ptc-runtime/ptc-runtime-node/README.zh.md @@ -52,8 +52,7 @@ kind: "package-reference" | `maxMessageBytes` | `134,217,728` | 控制帧、未完成参数字节和排队控制写入的上限 | | `maxPendingCalls` | `128` | 同时进行的 Host 绑定调用数量上限 | | `graceMs` | `3,000` | 受管终止与输出排空宽限时间 | -| `nodeExecutable` | 当前 Node 可执行文件 | 在子进程执行世界中解析的可执行文件 | -| `bootstrapPath` | 包内 bootstrap | 该执行世界中预先安装的构建后 bootstrap 的可选绝对路径 | +| `launch` | 本地载体 | 子进程环境中显式的 `{ kind: "node-script", executable, bootstrapPath? }` 或 `{ kind: "embedded", executable }` | [配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-ptc-runtime-node)定义可接受的配置字段。`resolve(request)` 补全 cwd、数值或 null 截止选择与执行策略;`run(spec)` 接受这些已解析输入,不补缺省值。 @@ -91,7 +90,7 @@ Host 擦除可擦除类型,在配置的执行世界中解析可执行文件与 ### 源代码与构建后 bootstrap -源代码执行加载仅含可擦除语法的 bootstrap 依赖,不依赖同级包的构建后导出。构建后执行使用包内 `process.js` 入口。无法映射 Host bootstrap 的执行世界需要预先安装兼容的 `bootstrapPath`;不会假设 Host 路径对应同一个远程文件。 +源代码执行加载仅含可擦除语法的 bootstrap 依赖,不依赖同级包的构建后导出。构建后脚本使用 `process.js`,远端脚本部署提供 `launch.bootstrapPath`。内嵌载体通过 `launch.executable` 启动私有 worker。`resolveLaunch()` 在构造时选择本地默认值;显式的远端调用不依赖客户端自身是否打包。不会假设 Host 路径对应同一个远程文件。 ### 源码索引 diff --git a/packages/ptc-runtime/ptc-runtime-node/src/index.ts b/packages/ptc-runtime/ptc-runtime-node/src/index.ts index 680366cf89..4291cd4f6c 100644 --- a/packages/ptc-runtime/ptc-runtime-node/src/index.ts +++ b/packages/ptc-runtime/ptc-runtime-node/src/index.ts @@ -14,8 +14,9 @@ import type {} from '@deepseek-ai/dsh-fs' import { snapshotJsonValue } from '@deepseek-ai/dsh-util-values' import { validateBindings } from './bindings.ts' import { JsonChannel } from './channel.ts' -import { bootstrapArgs } from './launch.ts' +import { bootstrapArgs, resolveLaunch } from './launch.ts' import type { LaunchConfig } from './launch.ts' +export type { LaunchConfig } from './launch.ts' import { OutputLedger } from './output-ledger.ts' import { drainOutput } from './output-stream.ts' import { STARTUP_ENVIRONMENT_NAMES } from './environment.ts' @@ -23,7 +24,9 @@ import { decodePtcJsonWire, encodePtcJsonWire } from './json-wire.ts' import type { ProgramBootData } from './protocol.ts' /** Deployment-varying runtime bounds and launch choices. */ -export interface Config extends LaunchConfig { +export interface Config { + /** Worker invocation in the subprocess world; omitted selects the local carrier. */ + launch?: LaunchConfig /** Default elapsed deadline, including nested tool and approval waits. */ timeoutMs?: number /** Maximum numeric elapsed budget accepted by resolve. */ @@ -40,7 +43,7 @@ export interface Config extends LaunchConfig { graceMs?: number } -type ResolvedConfig = Required> & Pick +type ResolvedConfig = Required interface LiveRun { controller: AbortController; finished: Promise } const STRIP_PREFIX = 'async function __dsh_program__() {\n' const STRIP_SUFFIX = '\n}' @@ -59,8 +62,10 @@ export class NodePtcRuntime extends PtcRuntime { maxMessageBytes: z.number().default(134_217_728), maxPendingCalls: z.number().default(128), graceMs: z.number().default(3_000), - nodeExecutable: z.string(), - bootstrapPath: z.string(), + launch: z.union([ + z.object({ kind: z.const('node-script').required(), executable: z.string().required(), bootstrapPath: z.string() }), + z.object({ kind: z.const('embedded').required(), executable: z.string().required() }), + ]), }) readonly language = 'typescript' readonly isolation = 'process' @@ -73,7 +78,7 @@ export class NodePtcRuntime extends PtcRuntime { constructor(ctx: Context, config: Config) { super(ctx) - this.config = { ...config, nodeExecutable: config.nodeExecutable ?? process.execPath } as ResolvedConfig + this.config = { ...config, launch: resolveLaunch(config.launch) } as ResolvedConfig for (const [key, value] of Object.entries(this.config)) { if (typeof value === 'number' && (!Number.isFinite(value) || value <= 0)) throw new Error(`ptc-runtime-node: ${key} must be positive and finite`) } @@ -84,8 +89,6 @@ export class NodePtcRuntime extends PtcRuntime { if (!Number.isSafeInteger(this.config.maxMessageBytes) || this.config.maxMessageBytes > 0xffff_ffff) throw new Error('ptc-runtime-node: maxMessageBytes must fit an unsigned 32-bit frame length') if (!Number.isSafeInteger(this.config.maxPendingCalls)) throw new Error('ptc-runtime-node: maxPendingCalls must be an integer') if (!Number.isSafeInteger(this.config.maxOldGenerationSizeMb)) throw new Error('ptc-runtime-node: maxOldGenerationSizeMb must be an integer') - if (this.config.nodeExecutable.length === 0) throw new Error('ptc-runtime-node: nodeExecutable must be non-empty') - if (this.config.bootstrapPath !== undefined && !isAbsolute(this.config.bootstrapPath)) throw new Error('ptc-runtime-node: bootstrapPath must be absolute') ctx.effect(() => async () => { this.disposed = true const active = [...this.live] @@ -214,13 +217,14 @@ export class NodePtcRuntime extends PtcRuntime { })), maxOutputBytes: this.config.maxOutputBytes, } - const executable = await this.ctx.subprocess.resolveExecutable(this.config.nodeExecutable, undefined, signal) + const executable = await this.ctx.subprocess.resolveExecutable(this.config.launch.executable, undefined, signal) // Abort callbacks can settle execution before or during an awaited operation. // oxlint-disable-next-line typescript/no-unnecessary-condition if (settled) return await result.promise - const packaged = 'pkg' in process && this.config.bootstrapPath === undefined + const packaged = this.config.launch.kind === 'embedded' const heapFlag = `--max-old-space-size=${this.config.maxOldGenerationSizeMb}` - const argv = [executable, ...packaged ? [] : [heapFlag], ...bootstrapArgs(this.ctx.fs, this.config, this.config.maxMessageBytes)] + const argv = [executable, ...packaged ? [] : [heapFlag], + ...bootstrapArgs(this.ctx.fs, this.config.launch, this.config.maxMessageBytes)] confined = policy.mode === 'danger-full-access' ? undefined : await this.ctx.sandbox.confine(argv, { ...policy, mode: policy.mode }, signal) // oxlint-disable-next-line typescript/no-unnecessary-condition -- Cancellation can settle during awaited confinement. if (settled) return await result.promise diff --git a/packages/ptc-runtime/ptc-runtime-node/src/launch.ts b/packages/ptc-runtime/ptc-runtime-node/src/launch.ts index 7a88482197..01bc12e798 100644 --- a/packages/ptc-runtime/ptc-runtime-node/src/launch.ts +++ b/packages/ptc-runtime/ptc-runtime-node/src/launch.ts @@ -1,26 +1,56 @@ /** Select source or built bootstrap assets in the mounted execution world. */ -import { dirname, resolve } from 'node:path' +import { dirname, isAbsolute, resolve } from 'node:path' import { fileURLToPath, pathToFileURL } from 'node:url' import type { FileSystem } from '@deepseek-ai/dsh-fs' +import { assertNever } from '@deepseek-ai/dsh-util-values' -/** Deployment-owned Node executable and optional preinstalled built bootstrap. */ -export interface LaunchConfig { - /** Executable in the subprocess world; defaults to the current Node executable. */ - nodeExecutable?: string - /** Absolute preinstalled built bootstrap in the execution world. */ +/** Deployment-owned worker invocation in the subprocess execution world. */ +export type LaunchConfig = { + /** Start a separately installed Node executable and JavaScript bootstrap. */ + kind: 'node-script' + /** Executable name or path resolved by the subprocess provider. */ + executable: string + /** Absolute preinstalled bootstrap; omitted maps this package's bootstrap into the execution world. */ bootstrapPath?: string +} | { + /** Start the private PTC worker embedded in a packaged executable. */ + kind: 'embedded' + /** Packaged executable name or path resolved by the subprocess provider. */ + executable: string +} + +/** + * Resolve the local carrier default or validate an explicit execution-world invocation. + * @param config - explicit remote or local worker configuration; omitted selects this carrier. + * @returns the worker invocation without guessing from the execution world's paths. + */ +export function resolveLaunch(config?: LaunchConfig): LaunchConfig { + const launch: LaunchConfig = config ?? { kind: 'pkg' in process ? 'embedded' : 'node-script', executable: process.execPath } + if (launch.executable.length === 0) throw new Error('ptc-runtime-node: launch.executable must be non-empty') + if (launch.kind === 'node-script' && launch.bootstrapPath !== undefined && !isAbsolute(launch.bootstrapPath)) { + throw new Error('ptc-runtime-node: launch.bootstrapPath must be absolute') + } + return launch } /** * Select explicit arguments without inheriting host loader or inspector flags. * @param fs - Filesystem mapping host bootstrap assets into the process world. - * @param config - Optional preinstalled built bootstrap. + * @param config - resolved worker invocation. * @param maxMessageBytes - Validated frame and queued-write limit. * @returns Arguments following the resolved Node executable. */ -export function bootstrapArgs(fs: FileSystem, config: LaunchConfig, maxMessageBytes: number): string[] { - if (config.bootstrapPath !== undefined) return [config.bootstrapPath, String(maxMessageBytes)] - if ('pkg' in process) return [String(maxMessageBytes)] +export function bootstrapArgs(fs: Pick, config: LaunchConfig, maxMessageBytes: number): string[] { + switch (config.kind) { + case 'embedded': return [String(maxMessageBytes)] + case 'node-script': return scriptBootstrapArgs(fs, config.bootstrapPath, maxMessageBytes) + /* v8 ignore next -- Callers supply the resolved, closed LaunchConfig union. */ + default: return assertNever(config) + } +} + +function scriptBootstrapArgs(fs: Pick, bootstrapPath: string | undefined, maxMessageBytes: number): string[] { + if (bootstrapPath !== undefined) return [bootstrapPath, String(maxMessageBytes)] const mapped = (path: string): string => { const result = fs.processPathFromHostPath(path) if (result === undefined) throw new Error(`PTC runtime bootstrap is unavailable in the subprocess execution world: ${path}`) diff --git a/packages/ptc-runtime/ptc-runtime-node/tests/host-failures.spec.ts b/packages/ptc-runtime/ptc-runtime-node/tests/host-failures.spec.ts index 6ac19764d2..883009f014 100644 --- a/packages/ptc-runtime/ptc-runtime-node/tests/host-failures.spec.ts +++ b/packages/ptc-runtime/ptc-runtime-node/tests/host-failures.spec.ts @@ -117,8 +117,8 @@ describe('Node runtime host failures', () => { [{ maxMessageBytes: 0x1_0000_0000 }, 'maxMessageBytes'], [{ maxPendingCalls: 1.5 }, 'maxPendingCalls'], [{ maxOldGenerationSizeMb: 1.5 }, 'maxOldGenerationSizeMb'], - [{ nodeExecutable: '' }, 'nodeExecutable'], - [{ bootstrapPath: 'relative-bootstrap.js' }, 'bootstrapPath'], + [{ launch: { kind: 'node-script', executable: '' } }, 'launch.executable'], + [{ launch: { kind: 'node-script', executable: process.execPath, bootstrapPath: 'relative-bootstrap.js' } }, 'bootstrapPath'], ])('rejects deployment configuration %j', async (config, field) => { await expect(mountRuntime(new Context(), config)).rejects.toThrow(field) }) @@ -496,22 +496,15 @@ describe('Node runtime host failures', () => { expect(env.DSH_TEST_RUNTIME_SECRET).toBeUndefined() }) - it('selects the private packaged bootstrap without leaking ambient environment', async () => { - const h = await setup() + it('selects the remote embedded bootstrap without leaking ambient environment', async () => { + const h = await setup({ launch: { kind: 'embedded', executable: process.execPath } }) h.onBoot(() => { h.emit({ type: 'done' }) }) - const prior = Object.getOwnPropertyDescriptor(process, 'pkg') - try { - Object.defineProperty(process, 'pkg', { configurable: true, value: {} }) - expect((await h.start()).error).toBeUndefined() - const spec = h.spawn.mock.calls[0]?.[0] - expect(spec?.env?.DSH_PTC_RUNTIME_NODE).toBe('1') - expect(Object.hasOwn(spec?.env ?? {}, 'PATH')).toBe(false) - expect(spec?.argv).toEqual([process.execPath, '134217728']) - expect(Object.fromEntries(Object.entries(spec?.env ?? {}).filter(([, value]) => value !== undefined))) - .toEqual({ DSH_PTC_RUNTIME_NODE: '1', NODE_OPTIONS: '--max-old-space-size=512' }) - } finally { - if (prior === undefined) Reflect.deleteProperty(process, 'pkg') - else Object.defineProperty(process, 'pkg', prior) - } + expect((await h.start()).error).toBeUndefined() + const spec = h.spawn.mock.calls[0]?.[0] + expect(spec?.env?.DSH_PTC_RUNTIME_NODE).toBe('1') + expect(Object.hasOwn(spec?.env ?? {}, 'PATH')).toBe(false) + expect(spec?.argv).toEqual([process.execPath, '134217728']) + expect(Object.fromEntries(Object.entries(spec?.env ?? {}).filter(([, value]) => value !== undefined))) + .toEqual({ DSH_PTC_RUNTIME_NODE: '1', NODE_OPTIONS: '--max-old-space-size=512' }) }) }) diff --git a/packages/ptc-runtime/ptc-runtime-node/tests/launch.spec.ts b/packages/ptc-runtime/ptc-runtime-node/tests/launch.spec.ts index b7de3df646..c295c0d89c 100644 --- a/packages/ptc-runtime/ptc-runtime-node/tests/launch.spec.ts +++ b/packages/ptc-runtime/ptc-runtime-node/tests/launch.spec.ts @@ -1,25 +1,35 @@ import { expect, it } from 'vitest' -import type { FileSystem } from '@deepseek-ai/dsh-fs' -import { bootstrapArgs } from '../src/launch.ts' +import { bootstrapArgs, resolveLaunch } from '../src/launch.ts' + +const unmapped = { processPathFromHostPath: () => undefined } +const noMapping = { processPathFromHostPath: () => { throw new Error('must not map a remote worker') } } it('uses an explicit installed bootstrap without pretending it maps the host file', () => { - const fs = { processPathFromHostPath: () => { throw new Error('must not map') } } as unknown as FileSystem - expect(bootstrapArgs(fs, { bootstrapPath: '/remote/process.js' }, 2048)).toEqual(['/remote/process.js', '2048']) + expect(bootstrapArgs(noMapping, { kind: 'node-script', executable: '/remote/node', bootstrapPath: '/remote/process.js' }, 2048)) + .toEqual(['/remote/process.js', '2048']) }) it('fails when the execution world cannot read the source bootstrap', () => { - const fs = { processPathFromHostPath: () => undefined } as unknown as FileSystem - expect(() => bootstrapArgs(fs, {}, 2048)).toThrow('unavailable in the subprocess execution world') + expect(() => bootstrapArgs(unmapped, { kind: 'node-script', executable: process.execPath }, 2048)) + .toThrow('unavailable in the subprocess execution world') }) -it('selects the private packaged bootstrap through the existing executable', () => { +it('uses a remote embedded worker when the client runs ordinary Node', () => { + const launch = resolveLaunch({ kind: 'embedded', executable: '/remote/dsh-ssh-helper' }) + expect(launch).toEqual({ kind: 'embedded', executable: '/remote/dsh-ssh-helper' }) + expect(bootstrapArgs(noMapping, launch, 2048)).toEqual(['2048']) +}) + +it('resolves the local carrier once while preserving an explicit remote script choice', () => { const prior = Object.getOwnPropertyDescriptor(process, 'pkg') try { Object.defineProperty(process, 'pkg', { configurable: true, value: {} }) - const fs = { processPathFromHostPath: () => { throw new Error('pkg does not expose a host bootstrap file') } } as unknown as FileSystem - expect(bootstrapArgs(fs, {}, 2048)).toEqual(['2048']) + expect(resolveLaunch()).toEqual({ kind: 'embedded', executable: process.execPath }) + const remote = resolveLaunch({ kind: 'node-script', executable: '/remote/node', bootstrapPath: '/remote/process.js' }) + expect(bootstrapArgs(noMapping, remote, 2048)).toEqual(['/remote/process.js', '2048']) } finally { if (prior === undefined) Reflect.deleteProperty(process, 'pkg') else Object.defineProperty(process, 'pkg', prior) } + expect(resolveLaunch()).toEqual({ kind: 'node-script', executable: process.execPath }) }) diff --git a/packages/ssh/README.i18n.yaml b/packages/ssh/README.i18n.yaml index 1a01bd9b8e..ec8fb49e84 100644 --- a/packages/ssh/README.i18n.yaml +++ b/packages/ssh/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/ssh/README.md -README.md: 905c17a8e59cd95ded0fc8b299eac83f8530004e -README.zh.md: 9833c8c087070a3ce62699a0e4c88f998491f79d +README.md: ff7db269993f75d6137ebfdb86edbfd2f3b51223 +README.zh.md: 0a8944680ea26acdb7923bb68e63e238328852f7 diff --git a/packages/ssh/README.md b/packages/ssh/README.md index 905c17a8e5..ff7db26999 100644 --- a/packages/ssh/README.md +++ b/packages/ssh/README.md @@ -23,6 +23,7 @@ This family runs files, ordinary processes, terminals and sandbox enforcement on | Package | Responsibility | Service | |---|---|---| | [`ssh`](ssh/README.md) | Connection, helper identity and transport lifecycle | `ctx.ssh` | +| [`ssh-helper-runtime`](ssh-helper-runtime/README.md) | Private Node-free executable distribution | — | | [`fs-ssh`](fs-ssh/README.md) | Remote file identity, reads and guarded atomic mutations | `ctx.fs` | | [`subprocess-ssh`](subprocess-ssh/README.md) | Executable lookup, processes, control streams and terminals | `ctx.subprocess` | | [`sandbox-ssh`](sandbox-ssh/README.md) | Remote file-effect confinement and enforcement facts | `ctx.sandbox` | diff --git a/packages/ssh/README.zh.md b/packages/ssh/README.zh.md index 9833c8c087..0a8944680e 100644 --- a/packages/ssh/README.zh.md +++ b/packages/ssh/README.zh.md @@ -23,6 +23,7 @@ kind: "package-group" | 包 | 职责 | 服务 | |---|---|---| | [`ssh`](ssh/README.zh.md) | 连接、辅助程序身份及传输生命周期 | `ctx.ssh` | +| [`ssh-helper-runtime`](ssh-helper-runtime/README.zh.md) | 无须安装 Node 的私有可执行文件发行包 | — | | [`fs-ssh`](fs-ssh/README.zh.md) | 远端文件身份、读取及带保护的原子修改 | `ctx.fs` | | [`subprocess-ssh`](subprocess-ssh/README.zh.md) | 可执行文件查找、进程、控制流及终端 | `ctx.subprocess` | | [`sandbox-ssh`](sandbox-ssh/README.zh.md) | 远端文件效果限制及执行信息 | `ctx.sandbox` | diff --git a/packages/ssh/ssh-helper-runtime/README.i18n.yaml b/packages/ssh/ssh-helper-runtime/README.i18n.yaml new file mode 100644 index 0000000000..211e111b8d --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/README.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write packages/ssh/ssh-helper-runtime/README.md +README.md: 4039fd6bf4a8312459d282d06e2f25c2b8a49334 +README.zh.md: 13058ba86d8b227e0b78a9663fc12b12fae562d7 diff --git a/packages/ssh/ssh-helper-runtime/README.md b/packages/ssh/ssh-helper-runtime/README.md new file mode 100644 index 0000000000..4039fd6bf4 --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/README.md @@ -0,0 +1,107 @@ +--- +description: "Build and verify SSH helper executables with an embedded Node runtime for Linux and macOS." +kind: "package-library" +--- + +# @deepseek-ai/dsh-ssh-helper-runtime + +English | [中文](README.zh.md) + +## Summary + +Run the SSH helper on a remote machine without installing Node or npm packages. Each archive includes the executable, its native resources and integrity metadata. The private carrier supports managed processes, terminals, sandboxing and an embedded PTC worker through the existing SSH providers. Project commands still use the remote machine’s own development tools. + +## Table of Contents + +- [Use this package](#use-this-package) +- [Understand the implementation](#understand-the-implementation) +- [Further Exploration](#further-exploration) +- [Model Experience](#model-experience) +- [Known Limitations and Deferred Work](#known-limitations-and-deferred-work) +- [Dev Note](#dev-note) + +----- + + +## Use this package + +### Build and installation + +This private workspace produces release archives; it is not a profile plugin or an npm CLI. From a checkout with dependencies installed, build the current native platform: + +```sh +pnpm exec tsx scripts/build-exe-for-ssh-helper.ts +``` + +The builder requires Node 24, a C/C++ compiler and the development headers from that Node installation. Linux additionally needs `musl-gcc`; its node-pty addon must meet the glibc baseline. The [native workflow](../../../.github/workflows/build-exe-for-ssh-helper.yml) prepares the compatible addon before packaging. `--target` selects one native target, `--skip-build` reuses prepared JS/native outputs, and `--dry-run` validates the target and dependency declarations without building. + +| Target | Native archive | Checked deployment baseline | +|---|---|---| +| `node24-linux-x64` | `linux-x64` | glibc 2.28 | +| `node24-linux-arm64` | `linux-arm64` | glibc 2.28 | +| `node24-macos-x64` | `macos-x64` | macOS 14 deployment target | +| `node24-macos-arm64` | `macos-arm64` | macOS 14 deployment target | + +Outputs live under `dist-exe/ssh-helper/`. Each `dsh-ssh-helper---.tar.gz` has a companion `.sha256` file. The archive contains `dsh-ssh-helper`, `native/system/`, licenses and `manifest.json`; macOS also includes `dsh-ssh-helper-spawn-helper`. The manifest records the source commit, whether the source tree was dirty, embedded Node version, protocol and every payload file’s digest and permissions. + +Verify the archive checksum, then extract the whole directory into a versioned runtime location outside the project and replaced temporary mounts. Keep the native resources beside the executable. The installation can be read-only; the helper user needs a writable temporary/cache location. Configure [`dsh-ssh`](../ssh/README.md) with `launch: { kind: "executable" }`, the absolute `helper` path and the executable’s SHA-256 from the manifest. The client obtains the embedded PTC invocation through `ctx.ssh.ptcLaunch`. + +### Verification and publication + +The [artifact verifier](../../../scripts/verify-ssh-helper-artifact.ts) accepts `--archive` and an optional `--report` path. It validates and relocates the archive, makes installation files read-only, and runs two concurrent Loader compositions sharing a fresh native cache. Those compositions exercise files, processes, PTY, native flock and PTC through the SSH providers. macOS also runs a worker under a policy denying the checkout and host Node. `--sandbox=required` requires real confinement; Linux’s additional `--backend=landlock-run` check makes the bwrap probe unavailable and requires the packaged Landlock runner. + +The [OpenSSH verifier](../../../scripts/verify-ssh-helper-ssh.ts) accepts a Linux `--archive`. It creates a temporary glibc 2.28 SSH server with no Node installation, mounts only the release and a disposable public key, and exercises the production connection. Its portability lane makes no kernel-confinement claim; the native host lane owns that check. Test identities, host keys, ports and workspaces are private to the run. + +PR CI requires Linux x64; master CI covers Linux arm64 and both macOS architectures. The manually dispatched native workflow defaults to all four targets. The [publication workflow](../../../.github/workflows/publish-ssh-helper.yml) accepts the matching `dsh-v` tag, requires complete same-commit evidence from clean builds, and attaches the tested archives and `SHA256SUMS` to that GitHub release. A missing release is created as a draft. GitHub Actions owns native platform and publication execution; deployment-target inspection alone does not establish execution on the oldest macOS version. + +----- + + +## Understand the implementation + +
+Implementation internals — click to expand + +The carrier embeds its closed dependency set with the repository’s patched `pkg --sea` pipeline. Its entry dispatches the SSH helper, managed subprocess runner or PTC worker. Shared [deployment helpers](../../../scripts/executable-packaging.ts) also serve the Python SDK builder. Production deploy restores development installation state before invoking build tools, so pnpm’s automatic dependency check cannot prune them. + +The operating system must execute the Landlock and PTY launchers from real files. A process-local resolution hook points the system package at its co-shipped native directory; node-pty uses its existing executable-relative spawn-helper convention. Binary inspection covers the embedded native modules before packaging and the external resources before publication. + +
+ +----- + + +## Further Exploration + +- [SSH connection](../ssh/README.md) — authentication, invocation and lifecycle. +- [PTC Node runtime](../../ptc-runtime/ptc-runtime-node/README.md) — explicit worker launch and execution limits. +- [SSH subsystem](../../../docs/subsystems/ssh.md) — remote execution coordinates. + +----- + + +## Model Experience + +None, as this private process carrier registers no model-facing tools or prompt content; its consumers own operation results. + +#### KV Cache effect + +The carrier adds no request-prefix content. + +## Known Limitations and Deferred Work + + + +- Windows and musl-based Linux are not build targets. Sandbox availability still depends on the target kernel and system tools. +- Automatic download, deployment, updates and connection UI are separate from archive production. +- The executable accepts private worker invocations, not arbitrary Node CLI arguments. Project `node` commands and nested JavaScript subprocesses need their own Node installation. + + +### Dev Note + +
+Working context for maintainers — click to expand + +No invariant companion is published. This process entry has no independently observed Cordis state; archive verification and the owning providers enforce its deployment and execution obligations. + +
diff --git a/packages/ssh/ssh-helper-runtime/README.zh.md b/packages/ssh/ssh-helper-runtime/README.zh.md new file mode 100644 index 0000000000..13058ba86d --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/README.zh.md @@ -0,0 +1,107 @@ +--- +description: "构建并验证内嵌 Node 运行时的 Linux 与 macOS SSH helper 可执行文件。" +kind: "package-library" +--- + +# @deepseek-ai/dsh-ssh-helper-runtime + +[English](README.md) | 中文 + +## 概述 + +远端机器无须安装 Node 或 npm 包即可运行 SSH helper。每个发行包都包含可执行文件、原生资源和完整性元数据。这个私有载体通过既有 SSH 提供方支持托管进程、终端、沙箱和内嵌 PTC worker。项目命令仍使用远端机器自身的开发工具。 + +## 目录 + +- [使用本包](#use-this-package) +- [理解实现](#understand-the-implementation) +- [进一步探索](#further-exploration) +- [模型体验](#model-experience) +- [已知限制与延后工作](#known-limitations-and-deferred-work) +- [开发备注](#dev-note) + +----- + + +## 使用本包 + +### 构建与安装 + +这个私有工作区生成发行压缩包,不是配置插件或 npm CLI。在已安装依赖的源码目录中构建当前原生平台: + +```sh +pnpm exec tsx scripts/build-exe-for-ssh-helper.ts +``` + +构建器需要 Node 24、C/C++ 编译器和该 Node 安装附带的开发头文件。Linux 还需要 `musl-gcc`,其 node-pty 扩展必须满足 glibc 基线。[原生构建工作流](../../../.github/workflows/build-exe-for-ssh-helper.yml) 在打包前准备兼容扩展。`--target` 选择一个原生目标,`--skip-build` 复用已准备的 JS/原生输出,`--dry-run` 校验目标与依赖声明而不构建。 + +| 目标 | 原生发行包 | 检查的部署基线 | +|---|---|---| +| `node24-linux-x64` | `linux-x64` | glibc 2.28 | +| `node24-linux-arm64` | `linux-arm64` | glibc 2.28 | +| `node24-macos-x64` | `macos-x64` | macOS 14 部署目标 | +| `node24-macos-arm64` | `macos-arm64` | macOS 14 部署目标 | + +产物位于 `dist-exe/ssh-helper/`。每个 `dsh-ssh-helper---.tar.gz` 都有配套的 `.sha256` 文件。压缩包包含 `dsh-ssh-helper`、`native/system/`、许可证和 `manifest.json`,macOS 还包含 `dsh-ssh-helper-spawn-helper`。清单记录源码提交、源码树是否存在未提交修改、内嵌 Node 版本、协议,以及每个产物文件的摘要和权限。 + +验证压缩包摘要后,将整个目录解压到项目及被替换的临时挂载之外的版本化运行时位置。原生资源须与可执行文件保持相对位置。安装目录可以只读,但 helper 用户需要可写的临时/缓存位置。为 [`dsh-ssh`](../ssh/README.zh.md) 配置 `launch: { kind: "executable" }`、绝对 `helper` 路径,以及清单中可执行文件的 SHA-256。客户端通过 `ctx.ssh.ptcLaunch` 获取内嵌 PTC 启动方式。 + +### 验证与发布 + +[产物验证器](../../../scripts/verify-ssh-helper-artifact.ts) 接受 `--archive` 和可选的 `--report` 路径。它校验并移动解压后的发行包,将安装文件设为只读,再运行两个共享全新原生缓存的并发 Loader 组合。这些组合通过 SSH 提供方验证文件、进程、PTY、原生 flock 和 PTC。macOS 还在拒绝访问源码目录和宿主 Node 的策略下运行 worker。`--sandbox=required` 要求真实隔离;Linux 额外的 `--backend=landlock-run` 检查使 bwrap 探测不可用,并要求使用包内 Landlock 启动器。 + +[OpenSSH 验证器](../../../scripts/verify-ssh-helper-ssh.ts) 接受 Linux `--archive`。它创建未安装 Node 的临时 glibc 2.28 SSH 服务器,仅挂载发行包和一次性公钥,并验证生产连接。这个可移植性测试不声明内核隔离能力,该检查由原生主机测试负责。测试身份、主机密钥、端口和工作区均由本次运行独占。 + +PR CI 要求 Linux x64 通过,master CI 覆盖 Linux arm64 和两种 macOS 架构。手动触发的原生工作流默认构建全部四个目标。[发布工作流](../../../.github/workflows/publish-ssh-helper.yml) 接受匹配的 `dsh-v` 标签,要求干净源码构建提供同一提交的完整验证证据,并将已测试的压缩包及 `SHA256SUMS` 附加到对应 GitHub Release。Release 不存在时创建草稿。原生平台与发布执行由 GitHub Actions 负责;仅检查部署目标不能证明已在最低 macOS 版本上运行。 + +----- + + +## 理解实现 + +
+实现细节 — 点击展开 + +载体通过仓库带补丁的 `pkg --sea` 流程内嵌完整依赖集合。入口分派 SSH helper、托管子进程启动器或 PTC worker。共享的[部署函数](../../../scripts/executable-packaging.ts) 也用于 Python SDK 构建器。生产部署会在调用构建工具前恢复开发依赖安装状态,避免 pnpm 的自动依赖检查将它们删除。 + +操作系统必须从真实文件执行 Landlock 和 PTY 启动器。进程内的解析钩子将 system 包指向随包分发的原生目录;node-pty 使用其既有的相对可执行文件定位 spawn-helper 的约定。二进制检查在打包前覆盖内嵌原生模块,并在发布前覆盖外部资源。 + +
+ +----- + + +## 进一步探索 + +- [SSH 连接](../ssh/README.zh.md) — 鉴权、启动与生命周期。 +- [PTC Node 运行时](../../ptc-runtime/ptc-runtime-node/README.zh.md) — 显式 worker 启动与执行限制。 +- [SSH 子系统](../../../docs/subsystems/ssh.zh.md) — 远端执行坐标。 + +----- + + +## 模型体验 + +None,因为这个私有进程载体不注册面向模型的工具或提示内容,操作结果由其消费方负责。 + +#### KV Cache 影响 + +载体不添加请求前缀内容。 + +## 已知限制与延后工作 + + + +- 构建目标不包含 Windows 和基于 musl 的 Linux。沙箱可用性仍取决于目标内核和系统工具。 +- 自动下载、部署、更新和连接 UI 独立于发行包生产。 +- 可执行文件接受私有 worker 调用,不接受任意 Node CLI 参数。项目中的 `node` 命令和嵌套 JavaScript 子进程需要单独安装 Node。 + + +### 开发备注 + +
+维护者工作上下文 — 点击展开 + +不发布 invariant 配套入口。这个进程入口没有独立观察的 Cordis 状态;产物校验与所属提供方负责其部署和执行义务。 + +
diff --git a/packages/ssh/ssh-helper-runtime/package.json b/packages/ssh/ssh-helper-runtime/package.json new file mode 100644 index 0000000000..53d00cd158 --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/package.json @@ -0,0 +1,64 @@ +{ + "name": "@deepseek-ai/dsh-ssh-helper-runtime", + "description": "Private executable carrier for the POSIX SSH helper and managed workers", + "version": "0.1.7-alpha.1", + "private": true, + "type": "module", + "main": "lib/index.js", + "types": "lib/types/index.d.ts", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "default": "./lib/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "lib/index.js", + "lib/types/**/*.d.ts" + ], + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "workspace:^" + }, + "devDependencies": { + "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:^", + "@deepseek-ai/dsh-fs-ssh": "workspace:^", + "@deepseek-ai/dsh-subprocess-ssh": "workspace:^", + "@deepseek-ai/dsh-sandbox-ssh": "workspace:^" + }, + "dependencies": { + "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cosmokit": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:^", + "@deepseek-ai/dsh-fs-local": "workspace:^", + "@deepseek-ai/dsh-fs-sandbox": "workspace:^", + "@deepseek-ai/dsh-http-proxy": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:^", + "@deepseek-ai/dsh-lazy-require": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-ptc-runtime": "workspace:^", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", + "@deepseek-ai/dsh-sandbox": "workspace:^", + "@deepseek-ai/dsh-sandbox-local": "workspace:^", + "@deepseek-ai/dsh-sandbox-policy": "workspace:^", + "@deepseek-ai/dsh-sandbox-windows-acl": "workspace:^", + "@deepseek-ai/dsh-scope": "workspace:^", + "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-session-projection": "workspace:^", + "@deepseek-ai/dsh-ssh": "workspace:^", + "@deepseek-ai/dsh-subprocess": "workspace:^", + "@deepseek-ai/dsh-subprocess-local": "workspace:^", + "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-util-crypto": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-win32-process": "workspace:^", + "@deepseek-ai/node-addon-system": "workspace:^", + "@deepseek-ai/schemastery": "workspace:^" + } +} diff --git a/packages/ssh/ssh-helper-runtime/src/index.ts b/packages/ssh/ssh-helper-runtime/src/index.ts new file mode 100644 index 0000000000..ecd0e20299 --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/src/index.ts @@ -0,0 +1,39 @@ +/** Private SEA dispatcher for the SSH helper and its managed process workers. */ +/* v8 ignore file -- the executable artifact suite runs this entry through pkg's SEA loader. */ +import { registerHooks } from 'node:module' +import { statSync } from 'node:fs' +import { dirname, join } from 'node:path' +import { isSea } from 'node:sea' +import { pathToFileURL } from 'node:url' + +/** + * Dispatch the co-shipped helper or worker once from the private SEA bootstrap. + * @returns after the selected process entry has completed its cleanup. + * @throws when invoked outside SEA or when native resources cannot be loaded. + */ +export async function runSshHelperRuntime(): Promise { + if (!isSea()) throw new Error('SSH helper runtime must run from its packaged executable') + + // The operating system executes Landlock outside the SEA virtual filesystem. + const nativeManifest = join(dirname(process.execPath), 'native', 'system', 'package.json') + statSync(nativeManifest) + const platformPackage = `@deepseek-ai/node-addon-system-${process.platform}-${process.arch}/package.json` + registerHooks({ + resolve(specifier, context, nextResolve) { + if (specifier === platformPackage) return { url: pathToFileURL(nativeManifest).href, shortCircuit: true } + return nextResolve(specifier, context) + }, + }) + + const selection = process.env.DSH_SUBPROCESS_RUNNER + Reflect.deleteProperty(process.env, 'DSH_SUBPROCESS_RUNNER') + if (process.env.DSH_PTC_RUNTIME_NODE === '1') { + Reflect.deleteProperty(process.env, 'DSH_PTC_RUNTIME_NODE') + await import('@deepseek-ai/dsh-ptc-runtime-node/process') + } else if (selection !== undefined) { + const { runSelectedSubprocessRunner } = await import('@deepseek-ai/dsh-subprocess-local/runner') + await runSelectedSubprocessRunner(selection) + } else { + await import('@deepseek-ai/dsh-ssh/helper') + } +} diff --git a/packages/ssh/ssh-helper-runtime/tests/fixtures/direct-helper.ts b/packages/ssh/ssh-helper-runtime/tests/fixtures/direct-helper.ts new file mode 100644 index 0000000000..85f36ceae8 --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/tests/fixtures/direct-helper.ts @@ -0,0 +1,96 @@ +/** Test-only transport to a real helper executable, retaining authenticated local stream sockets. */ +import { spawn } from 'node:child_process' +import { createConnection, type Socket } from 'node:net' +import { once } from 'node:events' +import assert from 'node:assert/strict' +import { Context, Service } from '@deepseek-ai/cordis' +import { z } from 'zod' +import { SshRpcPeer, SSH_PROTOCOL_VERSION } from '../../../ssh/src/protocol.ts' +import { helloSchema, type SshStreamEndpoint } from '../../../ssh/src/schemas.ts' +import { authenticateStream } from '../../../ssh/src/stream-security.ts' + +interface Config { executable: string; helperHash: string; workspace: string; home: string; path: string } + +/** Loader-mounted fixture; only its administrative transport differs from SshConnection. */ +export default class DirectHelper extends Service { + readonly ready: Promise> + private readonly rpc: SshRpcPeer + private readonly child: ReturnType + private readonly exited: Promise + private readonly sockets = new Set() + private closing: Promise | undefined + private diagnostic = '' + private readonly deadline: NodeJS.Timeout + + constructor(ctx: Context, private readonly config: Config) { + super(ctx, 'ssh') + const child = spawn(config.executable, [], { + cwd: config.workspace, stdio: ['pipe', 'pipe', 'pipe'], + env: { HOME: config.home, PATH: config.path, TMPDIR: config.home, NODE_OPTIONS: '--disable-sigusr1', DSH_ARTIFACT_SECRET: 'must-not-reach-program' }, + }) + this.child = child + this.exited = new Promise((resolve, reject) => { + child.once('error', reject) + child.once('close', (code, signal) => { + if (code === 0 && signal === null) resolve() + else reject(new Error(`Artifact helper exited (${code ?? signal}): ${this.diagnostic}`)) + }) + }) + void this.exited.catch(() => {}) + child.stderr.on('data', (chunk: Buffer) => { this.diagnostic = (this.diagnostic + chunk.toString()).slice(-8192) }) + this.rpc = new SshRpcPeer(child.stdout, child.stdin, 64 * 1024 * 1024, 128) + child.once('error', (error) => { this.rpc.close(error) }) + this.deadline = setTimeout(() => { child.kill('SIGKILL') }, 90_000) + this.ready = this.rpc.request('hello', { protocol: SSH_PROTOCOL_VERSION, workspace: config.workspace, leaseMs: 60_000 }, helloSchema, AbortSignal.timeout(20_000)) + .then((hello) => { + assert.equal(hello.hash, config.helperHash) + assert.equal(hello.executable, config.executable) + return hello + }) + void this.ready.catch(() => {}) + ctx.effect(() => () => this.dispose()) + } + + async [Service.init](): Promise { await this.ready } + + get ptcLaunch(): { kind: 'embedded'; executable: string } { return { kind: 'embedded', executable: this.config.executable } } + + async request(method: string, params: unknown, schema: z.ZodType, signal?: AbortSignal): Promise { + return this.rpc.request(method, params, schema, signal ?? AbortSignal.timeout(30_000)) + } + + async connectStream(endpoint: SshStreamEndpoint): Promise { + const socket = createConnection({ path: endpoint.path, allowHalfOpen: true }) + this.own(socket) + await once(socket, 'connect') + const secure = await authenticateStream(socket, endpoint.capability, 10_000) + this.own(secure) + return secure + } + + private own(socket: Socket): void { + this.sockets.add(socket) + socket.on('error', () => { socket.destroy() }) + socket.once('close', () => { this.sockets.delete(socket) }) + } + + dispose(): Promise { this.closing ??= this.close(); return this.closing } + + private async close(): Promise { + try { + await this.ready + await this.rpc.request('close', {}, z.null(), AbortSignal.timeout(10_000)) + this.child.stdin?.end() + } finally { + this.rpc.close() + const sockets = [...this.sockets].reverse().map(async (socket) => { + const closed = socket.closed ? Promise.resolve() : once(socket, 'close').catch(() => {}) + socket.destroy() + await closed + }) + this.child.stdin?.destroy() + try { await this.exited; await Promise.all(sockets) } + finally { clearTimeout(this.deadline) } + } + } +} diff --git a/packages/ssh/ssh-helper-runtime/tests/fixtures/driver.ts b/packages/ssh/ssh-helper-runtime/tests/fixtures/driver.ts new file mode 100644 index 0000000000..91cd74a56e --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/tests/fixtures/driver.ts @@ -0,0 +1,142 @@ +/** Test-only Loader consumer exercising files, processes, terminals and PTC through the SSH providers. */ +import assert from 'node:assert/strict' +import { writeFile } from 'node:fs/promises' +import { basename } from 'node:path' +import { Context } from '@deepseek-ai/cordis' +import { boot } from '@deepseek-ai/dsh-app-boot' +import type { SubprocessHandle } from '@deepseek-ai/dsh-subprocess' +import type {} from '@deepseek-ai/dsh-ssh' +import type {} from '@deepseek-ai/dsh-fs-ssh' +import type {} from '@deepseek-ai/dsh-subprocess-ssh' +import type {} from '@deepseek-ai/dsh-sandbox-ssh' +import type {} from '@deepseek-ai/dsh-ptc-runtime-node' + +const [configPath, reportPath, sandbox] = process.argv.slice(2) +if (configPath === undefined || reportPath === undefined || !['required', 'unavailable', 'portable'].includes(sandbox ?? '')) throw new Error('Artifact driver requires config, report, and expected sandbox availability') +const ctx = await boot('ssh-helper-artifact', configPath) +const checks: string[] = [] +const cleanupErrors: string[] = [] +const diagnostics = new Context() +diagnostics.logger = ctx.logger +diagnostics.logger.exporter({ levels: { default: 2 }, export: ({ type, args }) => { + if (type === 'error') cleanupErrors.push(args.map(value => String(value)).join(' ')) +} }) + +async function completed(handle: SubprocessHandle): Promise { + const outcome = await handle.done + assert.equal(await handle.waitForExit(), true) + assert.deepEqual(outcome, { exitCode: 0, signal: null }) + return handle.collected.stdout?.readFrom(0).text ?? '' +} + +try { + const hello = await ctx.ssh.ready + const root = hello.workspace + assert.equal(hello.kind, 'executable') + assert.equal(ctx.ssh.ptcLaunch.kind, 'embedded') + checks.push('executable-handshake') + + const target = await ctx.fs.resolve(`${root}/sample.txt`) + await ctx.fs.writeText(target, 'first\n你好\n') + assert.equal(await ctx.fs.readText(target), 'first\n你好\n') + assert.equal(Buffer.from(await ctx.fs.readByteRange(target, { offset: 0, length: 5 })).toString(), 'first') + assert.equal(Buffer.from(await ctx.fs.readBytes(target, undefined, 1024)).toString(), 'first\n你好\n') + await ctx.fs.editText(target, { oldString: 'first', newString: 'second', replaceAll: false }) + assert.equal(await ctx.fs.readText(target), 'second\n你好\n') + let streamed = '' + for await (const part of await ctx.fs.streamText(target)) streamed += part + assert.equal(streamed, 'second\n你好\n') + assert((await ctx.fs.listDir(await ctx.fs.resolve(root))).some(entry => entry.name === 'sample.txt')) + await assert.rejects(ctx.fs.writeText(target, 'denied', undefined, undefined, { mode: 'read-only', workspaceRoot: root })) + checks.push('guarded-files-and-streams') + + const options = { cwd: root, graceMs: 1000, stdio: { stdin: 'ignore', stdout: { maxBytes: 65_536 }, stderr: { maxBytes: 65_536 } } } as const + const ordinary = ctx.subprocess.spawn({ ...options, argv: ['/bin/sh', '-c', 'printf "ordinary"; printf "diagnostic" >&2'] }) + assert.equal(await completed(ordinary), 'ordinary') + assert.equal(ordinary.collected.stderr?.readFrom(0).text, 'diagnostic') + checks.push('managed-process-output') + if (process.env.DSH_VERIFY_NO_NODE === '1') { + assert.equal(await completed(ctx.subprocess.spawn({ ...options, argv: ['/bin/sh', '-c', 'set -e; if command -v node; then exit 90; fi; test ! -e /usr/bin/node; test ! -e /usr/local/bin/node; printf no-node'] })), 'no-node') + checks.push('target-has-no-node') + } + + const sleeping = ctx.subprocess.spawn({ ...options, stdio: { ...options.stdio, stdout: 'pipe' }, argv: ['/bin/sh', '-c', 'printf ready; exec /bin/sleep 60'] }) + await new Promise((resolve, reject) => { + const stdout = sleeping.stdout! + let text = '' + const cleanup = (): void => { clearTimeout(timer); stdout.off('data', read); stdout.off('error', failed); stdout.off('end', ended) } + const failed = (error: Error): void => { cleanup(); reject(error) } + const ended = (): void => { failed(new Error('Sleeping process exited before readiness')) } + const read = (bytes: Buffer): void => { text += bytes.toString(); if (text.includes('ready')) { cleanup(); resolve() } } + const timer = setTimeout(() => { failed(new Error('Sleeping process did not become ready')) }, 10_000) + stdout.on('data', read); stdout.once('error', failed); stdout.once('end', ended) + }) + sleeping.terminate() + await sleeping.done + assert.equal(await sleeping.waitForExit(), true) + sleeping.stdout?.destroy() + checks.push('process-cancellation') + + const terminal = await ctx.subprocess.spawnTerminal({ argv: ['/bin/sh'], cwd: root, env: {}, terminalType: 'xterm', cols: 80, rows: 24, graceMs: 1000 }) + let terminalText = '' + const terminalRead = (async () => { for await (const bytes of terminal.output) terminalText += Buffer.from(bytes).toString() })() + try { + await terminal.resize(100, 35) + await terminal.write("stty size; printf 'pty-result:%s\\n' 42; exit\n") + assert.equal((await terminal.done).exitCode, 0) + await terminalRead + assert(terminalText.includes('pty-result:42')) + assert(terminalText.includes('35 100')) + } finally { await terminal.terminate(); await terminalRead } + checks.push('native-pty') + + const runtime = ctx.ptcRuntime + const bindings = [{ global: 'tools', functions: { echo: async (input: unknown) => String(input) } }] + const policy = { mode: 'danger-full-access', workspaceRoot: root } as const + const result = await runtime.run(runtime.resolve({ + program: 'const fs=await import("node:fs/promises"); await fs.writeFile("ptc.txt","embedded"); console.log("worker-output"); return {value:await tools.echo("bridge"),env:Object.keys(process.env),executable:process.execPath,cwd:process.cwd()};', + bindings, cwd: root, sandboxPolicy: policy, + })) + assert.equal(result.error, undefined, JSON.stringify(result)) + assert.deepEqual(result.value, { value: 'bridge', env: [], executable: hello.executable, cwd: root }) + assert(result.logs.join('').includes('worker-output')) + assert.equal(await ctx.fs.readText(await ctx.fs.resolve(`${root}/ptc.txt`)), 'embedded') + const locked = await runtime.run(runtime.resolve({ + program: 'const fs=await import("node:fs"); const {tryLockExclusive}=await import("@deepseek-ai/node-addon-system/flock"); const fd=fs.openSync("native-lock","w"); try { await tryLockExclusive(fd); return "locked" } finally { fs.closeSync(fd) }', + bindings: [], cwd: root, sandboxPolicy: policy, + })) + assert.equal(locked.error, undefined, JSON.stringify(locked)) + assert.equal(locked.value, 'locked') + checks.push('native-flock') + const timed = await runtime.run(runtime.resolve({ program: 'while(true){}', bindings: [], cwd: root, sandboxPolicy: policy, timeoutMs: 1500 })) + assert.equal(timed.error?.kind, 'timeout') + checks.push('embedded-ptc-and-deadline') + + if (sandbox === 'required') { + const runner = process.env.DSH_EXPECT_SANDBOX_RUNNER + if (runner !== undefined) { + const invocation = await ctx.sandbox.confine(['/bin/sh', '-c', 'true'], { mode: 'read-only', workspaceRoot: root }) + assert.equal(basename(invocation.argv[0]!), runner) + } + const confined = await runtime.run(runtime.resolve({ + program: 'return await (await import("node:fs/promises")).readFile("ptc.txt","utf8")', bindings: [], cwd: root, + sandboxPolicy: { mode: 'read-only', workspaceRoot: root }, + })) + assert.equal(confined.error, undefined, JSON.stringify(confined)) + assert.equal(confined.value, 'embedded') + const denied = await runtime.run(runtime.resolve({ + program: 'await(await import("node:fs/promises")).writeFile("forbidden.txt","bad")', bindings: [], cwd: root, + sandboxPolicy: { mode: 'read-only', workspaceRoot: root }, + })) + assert.equal(denied.sandbox?.denied, true, JSON.stringify(denied)) + checks.push('sandbox-enforcement') + } else if (sandbox === 'unavailable') { + await assert.rejects(ctx.sandbox.confine(['/bin/sh', '-c', 'true'], { mode: 'read-only', workspaceRoot: root }), /sandbox|runner/i) + checks.push('sandbox-unavailable-refusal') + } + await writeFile(reportPath, `${JSON.stringify({ checks, platform: hello.platform, nodeVersion: hello.nodeVersion, sandboxLane: sandbox }, null, 2)}\n`) +} finally { + try { await ctx.fiber.dispose() } + finally { await diagnostics.fiber.dispose() } + assert.deepEqual(cleanupErrors, [], 'Loader or provider cleanup reported errors') +} diff --git a/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/Dockerfile b/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/Dockerfile new file mode 100644 index 0000000000..eb4a6ddaaa --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/Dockerfile @@ -0,0 +1,8 @@ +# glibc 2.28 target without Node or a checkout; only the release payload is mounted at runtime. +FROM almalinux:8.10 +RUN dnf install -y openssh-server procps-ng shadow-utils passwd && dnf clean all \ + && useradd --create-home dsh && passwd -d dsh \ + && rm -f /etc/ssh/ssh_host_*key* +COPY sshd_config /etc/ssh/sshd_config +COPY start.sh /start.sh +ENTRYPOINT ["/bin/sh", "/start.sh"] diff --git a/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/sshd_config b/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/sshd_config new file mode 100644 index 0000000000..d25091b508 --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/sshd_config @@ -0,0 +1,13 @@ +Port 22 +ListenAddress 0.0.0.0 +HostKey /etc/ssh/ssh_host_ed25519_key +PasswordAuthentication no +KbdInteractiveAuthentication no +PermitRootLogin no +UsePAM no +AuthenticationMethods publickey +AllowUsers dsh +AllowTcpForwarding yes +AllowStreamLocalForwarding yes +PidFile /run/sshd.pid +LogLevel VERBOSE diff --git a/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/start.sh b/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/start.sh new file mode 100644 index 0000000000..4562d13c3f --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/tests/fixtures/sshd/start.sh @@ -0,0 +1,7 @@ +#!/bin/sh +set -eu +ssh-keygen -q -t ed25519 -N '' -f /etc/ssh/ssh_host_ed25519_key +install -d -m 700 -o dsh -g dsh /home/dsh/.ssh +install -m 600 -o dsh -g dsh /fixture-key.pub /home/dsh/.ssh/authorized_keys +install -d -m 700 -o dsh -g dsh /home/dsh/workspace +exec /usr/sbin/sshd -D -e -f /etc/ssh/sshd_config diff --git a/packages/ssh/ssh-helper-runtime/tsconfig.json b/packages/ssh/ssh-helper-runtime/tsconfig.json new file mode 100644 index 0000000000..a60c8d9ec9 --- /dev/null +++ b/packages/ssh/ssh-helper-runtime/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib/types" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../../../vendor/cordis" + }, + { + "path": "../ssh" + }, + { + "path": "../../subprocess/subprocess-local" + }, + { + "path": "../../ptc-runtime/ptc-runtime-node" + } + ] +} diff --git a/packages/ssh/ssh/README.i18n.yaml b/packages/ssh/ssh/README.i18n.yaml index e62342e2a5..a663b3ca4f 100644 --- a/packages/ssh/ssh/README.i18n.yaml +++ b/packages/ssh/ssh/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/ssh/ssh/README.md -README.md: c978538491c3ce8045663b9e675d2141e541cacc -README.zh.md: 20c91b199aebdcf308d3e3f6c03f9188315e994a +README.md: 3df08097a354c01bd7f2ad3cf928f7c4a79d05f9 +README.zh.md: acec72885c5fa01cb9de1db881b0a7c72d9b1fa5 diff --git a/packages/ssh/ssh/README.md b/packages/ssh/ssh/README.md index c978538491..3df08097a3 100644 --- a/packages/ssh/ssh/README.md +++ b/packages/ssh/ssh/README.md @@ -31,20 +31,21 @@ Compose this service with [`fs-ssh`](../fs-ssh/README.md), [`subprocess-ssh`](.. Both endpoints require Linux or macOS. The local `ssh` command must support connection multiplexing and Unix-socket forwarding; the server must permit that forwarding. Configure the alias, credentials and known-host entry before startup: the service enables `BatchMode`, requires strict host-key checking, disables agent forwarding and adds no interactive authentication flow. -Install the built helper and its matching runtime dependencies on the remote host. Keep Node, helper, bootstrap and their dependencies outside the workspace and writable temporary roots. They must also remain outside a backend’s replaced temporary tree, such as bwrap’s private `/tmp`; the workspace may still be under `/tmp`. Digest verification detects an unexpected installed artifact after helper startup; it does not make writable deployment files safe to execute or authenticate a malicious SSH host. +Install an [SSH helper executable archive](../ssh-helper-runtime/README.md), or the built helper script with its matching Node dependencies. Keep the runtime outside the workspace and writable temporary roots. They must also remain outside a backend’s replaced temporary tree, such as bwrap’s private `/tmp`; the workspace may still be under `/tmp`. Digest verification detects an unexpected installed artifact after helper startup; it does not make writable deployment files safe to execute or authenticate a malicious SSH host. | Field | Default | Meaning | |---|---|---| | `host` | required | Existing OpenSSH host alias | -| `node`, `helper`, `workspace` | required | Absolute remote Node executable, bundled helper entry and default workspace | +| `launch` | required | `{ kind: "executable" }`, or `{ kind: "node-script", node: "/absolute/node" }` | +| `helper`, `workspace` | required | Absolute remote helper entry and default workspace | | `helperHash` | required | Lowercase SHA-256 of the installed helper entry | -| `bootstrapPath`, `bootstrapHash` | omitted | Paired remote PTC entry and its lowercase SHA-256 | +| `launch.bootstrapPath`, `launch.bootstrapHash` | omitted | Paired remote PTC script and digest; only for `node-script` | | `requestTimeoutMs` | `30000` | Connection and administrative-request deadline, from 1 through 2,147,483,647 ms | | `maxFrameBytes` | `67108864` | Per-message JSON payload ceiling, at most 64 MiB | | `maxPending` | `128` | Ordinary outstanding requests; heartbeat and bounded cleanup requests have reserved capacity | | `leaseMs` | `30000` | Helper heartbeat lease, from 3000 to 600000 ms | -For PTC, configure both bootstrap fields and pass the verified `ctx.ssh.nodeExecutable` and `ctx.ssh.bootstrapPath` to [`NodePtcRuntime`](../../ptc-runtime/ptc-runtime-node/README.md). Basic filesystem and Bash use may omit the pair. The `bootstrapPath` getter refuses an unconfigured PTC deployment. +Pass the verified `ctx.ssh.ptcLaunch` as the `launch` configuration of [`NodePtcRuntime`](../../ptc-runtime/ptc-runtime-node/README.md). Executable deployments include their worker. Script deployments require both bootstrap fields for PTC; filesystem and Bash use may omit them. The getter refuses an unconfigured script bootstrap. The client rejects mismatched protocol versions, runtime kinds and helper digests before readiness. ----- @@ -64,7 +65,7 @@ Failed startup and process results release their reservations after native quies For terminals opting into shell activity observation, root exit retains the reservation and its remaining work. Activity RPC continues to reach the provider; explicit termination awaits quiescence before releasing endpoints and recording the completed result. Helper connection disposal and lease expiry retain their existing termination authority. -The helper starts with `--disable-sigusr1`, so a same-user process signal cannot open its Node debugger. +The connection disables the helper’s SIGUSR1 debugger activation: the script invocation uses `--disable-sigusr1`, and the executable invocation supplies that flag through `NODE_OPTIONS`. diff --git a/packages/ssh/ssh/README.zh.md b/packages/ssh/ssh/README.zh.md index 20c91b199a..acec72885c 100644 --- a/packages/ssh/ssh/README.zh.md +++ b/packages/ssh/ssh/README.zh.md @@ -31,20 +31,21 @@ kind: "package-reference" 两端均需运行 Linux 或 macOS。本地 `ssh` 命令必须支持连接复用与 Unix 套接字转发,服务器也必须允许该转发。启动前配置主机别名、凭据与已知主机记录:本服务启用 `BatchMode`、要求严格检查主机密钥、禁用认证代理转发,且不提供交互认证流程。 -在远端主机安装已构建的辅助程序及其匹配的运行依赖。Node、辅助程序、引导程序及其依赖必须位于工作区和可写临时目录之外,也必须位于后端会替换的临时目录树之外,例如 bwrap 的私有 `/tmp`;工作区仍可位于 `/tmp` 下。摘要校验在辅助程序启动后发现非预期的已安装产物;它不能保证可写部署文件的执行安全,也不能认证恶意 SSH 主机。 +安装 [SSH helper 可执行文件发行包](../ssh-helper-runtime/README.zh.md),或已构建的 helper 脚本及其匹配的 Node 依赖。运行时必须位于工作区和可写临时目录之外,也必须位于后端会替换的临时目录树之外,例如 bwrap 的私有 `/tmp`;工作区仍可位于 `/tmp` 下。摘要校验在辅助程序启动后发现非预期的已安装产物;它不能保证可写部署文件的执行安全,也不能认证恶意 SSH 主机。 | 字段 | 默认值 | 含义 | |---|---|---| | `host` | 必填 | 已有的 OpenSSH 主机别名 | -| `node`、`helper`、`workspace` | 必填 | 远端 Node 可执行文件、辅助程序打包入口和默认工作区的绝对路径 | +| `launch` | 必填 | `{ kind: "executable" }`,或 `{ kind: "node-script", node: "/absolute/node" }` | +| `helper`、`workspace` | 必填 | 远端 helper 入口和默认工作区的绝对路径 | | `helperHash` | 必填 | 已安装辅助程序入口的小写 SHA-256 | -| `bootstrapPath`、`bootstrapHash` | 省略 | 成对提供的远端 PTC 入口及其小写 SHA-256 | +| `launch.bootstrapPath`、`launch.bootstrapHash` | 省略 | 成对提供的远端 PTC 脚本及摘要;仅用于 `node-script` | | `requestTimeoutMs` | `30000` | 连接与管理请求的截止时限,范围为 1 至 2,147,483,647 毫秒 | | `maxFrameBytes` | `67108864` | 每条 JSON 消息的负载上限,最大为 64 MiB | | `maxPending` | `128` | 普通未完成请求的数量上限;心跳与有界清理请求使用预留容量 | | `leaseMs` | `30000` | 辅助进程心跳租期,范围为 3000 至 600000 毫秒 | -使用 PTC 时,配置两个引导字段,并将验证后的 `ctx.ssh.nodeExecutable` 与 `ctx.ssh.bootstrapPath` 传给 [`NodePtcRuntime`](../../ptc-runtime/ptc-runtime-node/README.zh.md)。仅使用文件系统和 Bash 时可以省略这对字段。未配置 PTC 部署时,`bootstrapPath` getter 会拒绝访问。 +将验证后的 `ctx.ssh.ptcLaunch` 作为 [`NodePtcRuntime`](../../ptc-runtime/ptc-runtime-node/README.zh.md) 的 `launch` 配置。可执行文件部署包含 worker;脚本部署使用 PTC 时需要两个引导字段,仅使用文件系统和 Bash 时可以省略。脚本引导未配置时,getter 会拒绝访问。客户端在就绪前拒绝不匹配的协议版本、运行形式和 helper 摘要。 ----- @@ -64,7 +65,7 @@ OpenSSH 主连接承载私有管理 RPC。每条程序流使用独立转发的 U 终端启用 shell 活动观察时,根进程退出会保留 reservation 及其剩余工作。活动 RPC 继续访问 provider;明确终止时先等待进程范围完全停稳,再释放端点并记录完成结果。helper 连接卸载和租约到期仍保留原有的终止权限。 -辅助程序以 `--disable-sigusr1` 启动,因此同用户进程发送的信号无法开启其 Node 调试器。 +连接会禁用 helper 的 SIGUSR1 调试器激活:脚本调用使用 `--disable-sigusr1`,可执行文件调用通过 `NODE_OPTIONS` 提供该标志。 diff --git a/packages/ssh/ssh/package.json b/packages/ssh/ssh/package.json index 5439fa8028..56e036a8a9 100644 --- a/packages/ssh/ssh/package.json +++ b/packages/ssh/ssh/package.json @@ -55,7 +55,8 @@ "@deepseek-ai/dsh-sandbox-local": "workspace:^", "@deepseek-ai/dsh-sandbox-policy": "workspace:^", "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", @@ -78,6 +79,7 @@ "@deepseek-ai/dsh-sandbox-ssh": "workspace:^", "@deepseek-ai/dsh-lsp": "workspace:^", "@deepseek-ai/dsh-lsp-stdio": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:^" } } diff --git a/packages/ssh/ssh/src/helper-entry.ts b/packages/ssh/ssh/src/helper-entry.ts index 9b1d94b6d3..13bf8c44cf 100644 --- a/packages/ssh/ssh/src/helper-entry.ts +++ b/packages/ssh/ssh/src/helper-entry.ts @@ -1,6 +1,7 @@ /** Private OpenSSH process entry; the helper module owns request and cleanup behavior. */ /* v8 ignore file -- launched through plain Node in SSH acceptance; helper behavior is exercised through its explicit streams. */ import { fileURLToPath } from 'node:url' +import { isSea } from 'node:sea' import { runSshHelper } from './helper.ts' const controller = new AbortController() @@ -8,7 +9,12 @@ const stop = (): void => { controller.abort(new Error('SSH helper process termin for (const signal of ['SIGTERM', 'SIGHUP', 'SIGINT'] as const) process.once(signal, stop) try { if (process.argv.length !== 2) throw new Error('SSH helper accepts no command arguments') - await runSshHelper({ input: process.stdin, output: process.stdout, entryPath: fileURLToPath(import.meta.url), signal: controller.signal }) + const packaged = isSea() + await runSshHelper({ + input: process.stdin, output: process.stdout, + entryPath: packaged ? process.execPath : fileURLToPath(import.meta.url), + kind: packaged ? 'executable' : 'node-script', signal: controller.signal, + }) } catch (error) { process.stderr.write(`dsh-ssh-sandbox: ${error instanceof Error ? error.message : String(error)}\n`) process.exitCode = 127 diff --git a/packages/ssh/ssh/src/helper.ts b/packages/ssh/ssh/src/helper.ts index c3c0d26853..44bdadc382 100644 --- a/packages/ssh/ssh/src/helper.ts +++ b/packages/ssh/ssh/src/helper.ts @@ -42,6 +42,8 @@ export interface HelperTransport { output: Writable /** Installed entry whose digest is compared by the client. */ entryPath: string + /** Whether the installed entry includes its own Node and worker runtime. */ + kind: 'node-script' | 'executable' /** Process termination joins the same cleanup as transport loss. */ signal: AbortSignal } @@ -97,13 +99,14 @@ export async function runSshHelper(transport: HelperTransport): Promise { protocol: z.literal(SSH_PROTOCOL_VERSION), workspace: remotePath, leaseMs: z.number().int().min(3000).max(600_000), bootstrapPath: remotePath.optional(), }).strict().parse(raw) + if (transport.kind === 'executable' && input.bootstrapPath !== undefined) throw new Error('Executable SSH helper uses its embedded PTC bootstrap') workspace = ctx.fs.processPath(await ctx.fs.resolve(input.workspace, { signal })) leaseMs = input.leaseMs initialized = true touchLease() return { protocol: SSH_PROTOCOL_VERSION, hash: createHash('sha256').update(readFileSync(transport.entryPath)).digest('hex'), - platform: process.platform, nodeVersion: process.version, node: process.execPath, root, workspace, + kind: transport.kind, platform: process.platform, nodeVersion: process.version, executable: process.execPath, root, workspace, ...(input.bootstrapPath === undefined ? {} : { bootstrapHash: createHash('sha256').update(readFileSync(input.bootstrapPath)).digest('hex') }), } } diff --git a/packages/ssh/ssh/src/index.ts b/packages/ssh/ssh/src/index.ts index 40dd59253a..a3b6481928 100644 --- a/packages/ssh/ssh/src/index.ts +++ b/packages/ssh/ssh/src/index.ts @@ -7,28 +7,40 @@ import { createConnection, type Socket } from 'node:net' import { Context, Service } from '@deepseek-ai/cordis' import schema from '@deepseek-ai/schemastery' import { z } from 'zod' +import { assertNever } from '@deepseek-ai/dsh-util-values' import { SshRpcPeer, SSH_PROTOCOL_VERSION } from './protocol.ts' import { helloSchema, type SshStreamEndpoint } from './schemas.ts' import { authenticateStream } from './stream-security.ts' type Hello = z.infer +/** Installed helper invocation; script deployments may also install a PTC bootstrap. */ +export type HelperLaunch = { + /** Run the installed script with a separately installed Node executable. */ + kind: 'node-script' + /** Absolute remote Node executable. */ + node: string + /** Absolute remote PTC bootstrap; requires bootstrapHash. */ + bootstrapPath?: string + /** Lowercase SHA-256 of bootstrapPath; requires that path. */ + bootstrapHash?: string +} | { + /** Run the helper executable with its embedded Node and PTC worker. */ + kind: 'executable' +} + /** Deployment-owned SSH identity and installed helper; no model argument selects these values. */ export interface Config { /** OpenSSH host alias, including its existing user, key and known-host configuration. */ host: string - /** Absolute remote Node executable. */ - node: string + /** Explicit script or self-contained executable invocation. */ + launch: HelperLaunch /** Absolute path to the installed, bundled helper entry. */ helper: string /** SHA-256 of that bundled helper; mismatches refuse the connection. */ helperHash: string /** Absolute remote default workspace. */ workspace: string - /** Optional preinstalled built PTC entry, paired with its expected digest. */ - bootstrapPath?: string - /** SHA-256 of bootstrapPath; both fields must be supplied together. */ - bootstrapHash?: string /** Connection and administrative-request deadline, at most 2,147,483,647 milliseconds. */ requestTimeoutMs?: number /** Maximum JSON payload bytes per helper request or response. */ @@ -46,9 +58,12 @@ declare module '@deepseek-ai/cordis' { /** One non-reconnecting SSH session; loss invalidates all active operations. */ export class SshConnection extends Service { static Config: schema = schema.object({ - host: schema.string().required(), node: schema.string().required(), helper: schema.string().required(), + host: schema.string().required(), helper: schema.string().required(), + launch: schema.union([ + schema.object({ kind: schema.const('node-script').required(), node: schema.string().required(), bootstrapPath: schema.string(), bootstrapHash: schema.string() }), + schema.object({ kind: schema.const('executable').required() }), + ]).required(), helperHash: schema.string().required(), workspace: schema.string().required(), - bootstrapPath: schema.string(), bootstrapHash: schema.string(), requestTimeoutMs: schema.number().default(30_000), maxFrameBytes: schema.number().default(64 * 1024 * 1024), maxPending: schema.number().default(128), leaseMs: schema.number().default(30_000), }) @@ -67,7 +82,7 @@ export class SshConnection extends Service { private failure: Error | undefined private sockets = new Set() private nextSocket = 0 - private readonly config: Required> & Pick + private readonly config: Required private remote: Hello | undefined constructor(ctx: Context, config: Config) { @@ -75,13 +90,17 @@ export class SshConnection extends Service { if (process.platform !== 'linux' && process.platform !== 'darwin') throw new Error('SSH runtime requires a POSIX client') this.config = z.object({ host: z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_.@-]*$/), - node: z.string().startsWith('/'), helper: z.string().startsWith('/'), helperHash: z.string().regex(/^[0-9a-f]{64}$/), + launch: z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('node-script'), node: z.string().startsWith('/'), + bootstrapPath: z.string().startsWith('/').optional(), bootstrapHash: z.string().regex(/^[0-9a-f]{64}$/).optional(), + }).strict().refine(value => (value.bootstrapPath === undefined) === (value.bootstrapHash === undefined), 'bootstrapPath and bootstrapHash must be paired'), + z.object({ kind: z.literal('executable') }).strict(), + ]), + helper: z.string().startsWith('/'), helperHash: z.string().regex(/^[0-9a-f]{64}$/), workspace: z.string().startsWith('/'), requestTimeoutMs: z.number().int().positive().max(2_147_483_647), - bootstrapPath: z.string().startsWith('/').optional(), bootstrapHash: z.string().regex(/^[0-9a-f]{64}$/).optional(), maxFrameBytes: z.number().int().positive().max(64 * 1024 * 1024), maxPending: z.number().int().positive().max(128), leaseMs: z.number().int().min(3000).max(600_000), - }).refine(value => (value.bootstrapPath === undefined) === (value.bootstrapHash === undefined), 'bootstrapPath and bootstrapHash must be paired') - .parse(config) as typeof this.config + }).strict().parse(config) as Required this.ready = this.start() // Startup uses Node I/O, local validation, and Error-valued RPC failures. void this.ready.catch((error: unknown) => { this.fail(error as Error) }) @@ -91,16 +110,18 @@ export class SshConnection extends Service { /** Hold plugin readiness until the remote identity and helper digest are verified. */ async [Service.init](): Promise { await this.ready } - /** Verified remote Node executable for the paired PTC runtime. */ - get nodeExecutable(): string { + /** Verified remote PTC launch configuration; script deployments require a verified bootstrap. */ + get ptcLaunch(): { kind: 'embedded'; executable: string } | { kind: 'node-script'; executable: string; bootstrapPath: string } { if (this.remote === undefined) throw new Error('SSH helper is not ready') - return this.remote.node - } - - /** Verified preinstalled PTC entry; unconfigured runtimes fail before program execution. */ - get bootstrapPath(): string { - if (this.remote === undefined || this.config.bootstrapPath === undefined) throw new Error('SSH PTC requires a verified bootstrapPath and bootstrapHash') - return this.config.bootstrapPath + const launch = this.config.launch + switch (launch.kind) { + case 'executable': return { kind: 'embedded', executable: this.remote.executable } + case 'node-script': + if (launch.bootstrapPath === undefined) throw new Error('SSH PTC requires a verified bootstrapPath and bootstrapHash') + return { kind: 'node-script', executable: this.remote.executable, bootstrapPath: launch.bootstrapPath } + /* v8 ignore next -- Config parsing admits only these two launch kinds. */ + default: return assertNever(launch) + } } /** @@ -259,7 +280,22 @@ export class SshConnection extends Service { this.directory = await mkdtemp('/tmp/dsh-ssh-') if (this.closed) throw new Error('SSH connection closed before startup') const quote = (value: string): string => `'${value.replaceAll("'", "'\\''")}'` - const command = [this.config.node, '--disable-sigusr1', this.config.helper].map(quote).join(' ') + const launch = this.config.launch + let command: string + let bootstrapPath: string | undefined + let bootstrapHash: string | undefined + switch (launch.kind) { + case 'node-script': + command = [launch.node, '--disable-sigusr1', this.config.helper].map(quote).join(' ') + bootstrapPath = launch.bootstrapPath + bootstrapHash = launch.bootstrapHash + break + case 'executable': + command = `NODE_OPTIONS='--disable-sigusr1' ${quote(this.config.helper)}` + break + /* v8 ignore next -- Config parsing admits only these two launch kinds. */ + default: return assertNever(launch) + } const child = spawn('ssh', [ '-T', '-M', '-S', this.controlPath(), '-o', 'ControlPersist=no', '-o', 'BatchMode=yes', '-o', 'StrictHostKeyChecking=yes', '-o', 'ForwardAgent=no', '-o', 'ClearAllForwardings=yes', @@ -275,10 +311,11 @@ export class SshConnection extends Service { rpc.once('closed', (error) => { this.fail(error as Error) }) const hello = await rpc.request('hello', { protocol: SSH_PROTOCOL_VERSION, workspace: this.config.workspace, leaseMs: this.config.leaseMs, - ...(this.config.bootstrapPath === undefined ? {} : { bootstrapPath: this.config.bootstrapPath }), + ...(bootstrapPath === undefined ? {} : { bootstrapPath }), }, helloSchema, AbortSignal.timeout(this.config.requestTimeoutMs)) if (hello.hash !== this.config.helperHash) throw new Error('SSH helper digest differs from the configured artifact') - if (hello.bootstrapHash !== this.config.bootstrapHash) throw new Error('SSH PTC bootstrap digest differs from the configured artifact') + if (hello.kind !== launch.kind) throw new Error('SSH helper runtime differs from the configured launch kind') + if (hello.bootstrapHash !== bootstrapHash) throw new Error('SSH PTC bootstrap digest differs from the configured artifact') this.remote = hello let heartbeatPending: Promise | undefined this.heartbeat = setInterval(() => { diff --git a/packages/ssh/ssh/src/protocol.ts b/packages/ssh/ssh/src/protocol.ts index abca697f9b..500b995084 100644 --- a/packages/ssh/ssh/src/protocol.ts +++ b/packages/ssh/ssh/src/protocol.ts @@ -7,7 +7,7 @@ import { z } from 'zod' import type { Branded } from '@deepseek-ai/dsh-brand' /** Wire version shared by the installed helper and client package. */ -export const SSH_PROTOCOL_VERSION = 1 +export const SSH_PROTOCOL_VERSION = 2 /** Maximum prepared or running process handles owned by one helper. */ export const SSH_MAX_PROCESS_HANDLES = 128 diff --git a/packages/ssh/ssh/src/schemas.ts b/packages/ssh/ssh/src/schemas.ts index 78c8e4659d..be3d0dceb2 100644 --- a/packages/ssh/ssh/src/schemas.ts +++ b/packages/ssh/ssh/src/schemas.ts @@ -1,6 +1,7 @@ /** Strict JSON validation for SSH helper requests and remote observations. */ import { z } from 'zod' import type { Branded } from '@deepseek-ai/dsh-brand' +import { SSH_PROTOCOL_VERSION } from './protocol.ts' /** Identity of one prepared or running process in its owning SSH helper. */ export type SshProcessId = Branded<'SshProcessId'> @@ -54,7 +55,12 @@ export const spawnSchema = z.object({ }).strict().optional(), }).strict().refine(value => (value.stdio === undefined) !== (value.terminal === undefined), 'select ordinary or terminal execution') /** Connection handshake binds sockets and workspace to one helper process. */ -export const helloSchema = z.object({ protocol: z.literal(1), hash: z.string().regex(/^[0-9a-f]{64}$/), platform: z.enum(['linux', 'darwin']), nodeVersion: z.string(), node: remotePath, root: remotePath, workspace: remotePath, bootstrapHash: z.string().regex(/^[0-9a-f]{64}$/).optional() }).strict() +export const helloSchema = z.object({ + protocol: z.literal(SSH_PROTOCOL_VERSION), hash: z.string().regex(/^[0-9a-f]{64}$/), + kind: z.enum(['node-script', 'executable']), platform: z.enum(['linux', 'darwin']), + nodeVersion: z.string(), executable: remotePath, root: remotePath, workspace: remotePath, + bootstrapHash: z.string().regex(/^[0-9a-f]{64}$/).optional(), +}).strict() /** A prepared process publishes its sockets before target code may execute. */ export const streamEndpointSchema = z.object({ path: remotePath, capability: z.string().regex(/^[0-9a-f]{64}$/) }).strict() /** A stream capability reaches only the authenticated SSH client and its helper. */ diff --git a/packages/ssh/ssh/tests/connection-disposal.spec.ts b/packages/ssh/ssh/tests/connection-disposal.spec.ts index 0f53363ee9..c31b366658 100644 --- a/packages/ssh/ssh/tests/connection-disposal.spec.ts +++ b/packages/ssh/ssh/tests/connection-disposal.spec.ts @@ -68,7 +68,7 @@ async function setup(phase: 'connect' | 'authenticate', pauseControl?: 'forward' if (method === 'heartbeat') { heartbeatCalls++; return holdHeartbeat ? heartbeat.promise : null } if (method === 'ordinary') { ordinaryEntered.resolve(undefined); return ordinary.promise } if (method !== 'hello') throw new Error(`unexpected helper operation: ${method}`) - return { protocol: 1, hash: 'a'.repeat(64), platform: 'linux', nodeVersion: 'v24.19.0', node: '/usr/bin/node', root: '/tmp/remote-helper', workspace: '/workspace' } + return { protocol: 2, hash: 'a'.repeat(64), platform: 'linux', nodeVersion: 'v24.19.0', kind: 'node-script', executable: '/usr/bin/node', root: '/tmp/remote-helper', workspace: '/workspace' } }) const rawSocket = new PendingSocket() const secureSocket = new PendingSocket() @@ -110,7 +110,7 @@ async function setup(phase: 'connect' | 'authenticate', pauseControl?: 'forward' const socket = phase === 'connect' ? rawSocket : secureSocket const ctx = new Context() const fiber = ctx.plugin(SshConnection, { - host: 'hermetic-test', node: '/usr/bin/node', helper: '/opt/dsh/helper.js', helperHash: 'a'.repeat(64), workspace: '/workspace', + host: 'hermetic-test', launch: { kind: 'node-script', node: '/usr/bin/node' }, helper: '/opt/dsh/helper.js', helperHash: 'a'.repeat(64), workspace: '/workspace', requestTimeoutMs: 10_000, maxFrameBytes: 4096, maxPending: holdHeartbeat ? 1 : 8, leaseMs: 30_000, }) onTestFinished(async () => { diff --git a/packages/ssh/ssh/tests/fixtures/helper.ts b/packages/ssh/ssh/tests/fixtures/helper.ts index 7d0f83069f..fa69ca63c8 100644 --- a/packages/ssh/ssh/tests/fixtures/helper.ts +++ b/packages/ssh/ssh/tests/fixtures/helper.ts @@ -10,16 +10,16 @@ import { SshRpcPeer } from '../../src/protocol.ts' import { helloSchema, type SshStreamEndpoint } from '../../src/schemas.ts' import { authenticateStream } from '../../src/stream-security.ts' -export async function createHelperHarness(handshake = true, leaseMs = 30_000) { +export async function createHelperHarness(handshake = true, leaseMs = 30_000, kind: 'node-script' | 'executable' = 'node-script') { const root = await realpath(await mkdtemp('/tmp/dsh-ssh-rpc-')) const input = new PassThrough() const output = new PassThrough() const controller = new AbortController() - const serving = runSshHelper({ input, output, entryPath: fileURLToPath(new URL('../../src/helper-entry.ts', import.meta.url)), signal: controller.signal }) + const serving = runSshHelper({ input, output, kind, entryPath: fileURLToPath(new URL('../../src/helper-entry.ts', import.meta.url)), signal: controller.signal }) void serving.catch(() => {}) const client = new SshRpcPeer(output, input, 64 * 1024 * 1024, 128) const sockets = new Set() - const hello = () => client.request('hello', { protocol: 1, workspace: root, leaseMs }, helloSchema) + const hello = () => client.request('hello', { protocol: 2, workspace: root, leaseMs }, helloSchema) let closing: Promise | undefined const close = () => { closing ??= (async () => { @@ -44,7 +44,7 @@ export async function createHelperHarness(handshake = true, leaseMs = 30_000) { let facts: z.infer | undefined try { if (handshake) facts = await hello() } catch (error) { await close(); throw error } const connection = { - ready: Promise.resolve(facts), nodeExecutable: process.execPath, + ready: Promise.resolve(facts), request: (method: string, params: unknown, schema: z.ZodType, signal?: AbortSignal) => client.request(method, params, schema, signal), connectStream, dispose: close, diff --git a/packages/ssh/ssh/tests/helper-boundaries.spec.ts b/packages/ssh/ssh/tests/helper-boundaries.spec.ts index 69c6542392..361981b6f6 100644 --- a/packages/ssh/ssh/tests/helper-boundaries.spec.ts +++ b/packages/ssh/ssh/tests/helper-boundaries.spec.ts @@ -22,11 +22,11 @@ describe.skipIf(process.platform === 'win32')('SSH helper wire and lifecycle bou const controller = new AbortController() const platform = vi.spyOn(process, 'platform', 'get').mockReturnValue('win32') try { - await expect(runSshHelper({ input, output, entryPath, signal: controller.signal })).rejects.toThrow('POSIX host') + await expect(runSshHelper({ input, output, kind: 'node-script', entryPath, signal: controller.signal })).rejects.toThrow('POSIX host') } finally { platform.mockRestore() } controller.abort(new Error('startup cancelled')) try { - await expect(runSshHelper({ input, output, entryPath, signal: controller.signal })).rejects.toThrow('startup cancelled') + await expect(runSshHelper({ input, output, kind: 'node-script', entryPath, signal: controller.signal })).rejects.toThrow('startup cancelled') } finally { input.destroy(); output.destroy() } }) @@ -34,7 +34,7 @@ describe.skipIf(process.platform === 'win32')('SSH helper wire and lifecycle bou const input = new PassThrough() const output = new PassThrough() const controller = new AbortController() - const serving = runSshHelper({ input, output, entryPath, signal: controller.signal }) + const serving = runSshHelper({ input, output, kind: 'node-script', entryPath, signal: controller.signal }) controller.abort() try { await serving @@ -47,17 +47,26 @@ describe.skipIf(process.platform === 'win32')('SSH helper wire and lifecycle bou const test = await createHelperHarness(false) try { for (const params of [ - { protocol: 2, workspace: test.root, leaseMs: 3000 }, - { protocol: 1, workspace: 'relative', leaseMs: 3000 }, - { protocol: 1, workspace: test.root, leaseMs: 2999 }, + { protocol: 1, workspace: test.root, leaseMs: 3000 }, + { protocol: 2, workspace: 'relative', leaseMs: 3000 }, + { protocol: 2, workspace: test.root, leaseMs: 2999 }, ]) await expect(test.client.request('hello', params, helloSchema)).rejects.toThrow() const bootstrapPath = `${test.root}/bootstrap.js` await writeFile(bootstrapPath, 'export const identity = "test"\n') - const facts = await test.client.request('hello', { protocol: 1, workspace: test.root, leaseMs: 3000, bootstrapPath }, helloSchema) + const facts = await test.client.request('hello', { protocol: 2, workspace: test.root, leaseMs: 3000, bootstrapPath }, helloSchema) expect(facts.bootstrapHash).toBe(createHash('sha256').update(await readFile(bootstrapPath)).digest('hex')) } finally { await test.close() } }) + it('refuses an external bootstrap for an executable helper', async () => { + const test = await createHelperHarness(false, 30_000, 'executable') + try { + await expect(test.client.request('hello', { protocol: 2, workspace: test.root, leaseMs: 3000, bootstrapPath: '/external/process.js' }, helloSchema)) + .rejects.toThrow('embedded PTC bootstrap') + expect((await test.hello()).kind).toBe('executable') + } finally { await test.close() } + }) + it('expires the client lease and joins open text streams and reserved sockets', async () => { vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout'] }) let test: Awaited> | undefined diff --git a/packages/ssh/ssh/tests/live.e2e.ts b/packages/ssh/ssh/tests/live.e2e.ts index 6fd71de3c5..b3b7b2a3c3 100644 --- a/packages/ssh/ssh/tests/live.e2e.ts +++ b/packages/ssh/ssh/tests/live.e2e.ts @@ -27,6 +27,7 @@ const enabled = configPath !== undefined && process.platform !== 'win32' async function setup() { const config = JSON.parse(readFileSync(configPath as string, 'utf8')) as Config + if (config.launch.kind !== 'node-script') throw new Error('live.e2e requires a Node script deployment; executable acceptance is owned by ssh-helper-runtime') const ctx = new Context() const projection = ctx.plugin(SessionProjectionRegistry) const policy = ctx.plugin(SandboxPolicyService, { mode: 'workspace-write', workspaceRoot: config.workspace }) @@ -55,7 +56,7 @@ async function processResult(handle: SubprocessHandle) { async function removeOwned(test: Awaited>) { try { const handle = test.ctx.subprocess.spawn({ - argv: [test.hello.node, '-e', 'require("node:fs").rmSync(process.argv[1],{recursive:true,force:true})', test.root], + argv: [test.hello.executable, '-e', 'require("node:fs").rmSync(process.argv[1],{recursive:true,force:true})', test.root], cwd: test.hello.workspace, stdio: { stdin: 'ignore', stdout: { maxBytes: 1024 }, stderr: { maxBytes: 1024 } }, graceMs: 500, }) await processResult(handle) @@ -67,13 +68,13 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { const test = await setup() try { const prepared = await test.ctx.ssh.request('process.prepare', { - argv: [test.hello.node, '-e', 'process.stdout.write("legitimate-target")'], cwd: test.root, graceMs: 500, + argv: [test.hello.executable, '-e', 'process.stdout.write("legitimate-target")'], cwd: test.root, graceMs: 500, stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe', control: 'pipe' }, }, preparedSchema) const endpoint = prepared.streams.control! const attack = "let connected=false,secure=false;const s=require('node:tls').connect({path:process.argv[1],ciphers:'PSK-AES256-GCM-SHA384',minVersion:'TLSv1.2',maxVersion:'TLSv1.2',pskCallback:()=>({identity:'dsh-stream',psk:Buffer.alloc(32)}),checkServerIdentity:()=>undefined});s.on('connect',()=>{connected=true});s.on('secureConnect',()=>{secure=true});s.on('error',()=>{});s.on('close',()=>process.stdout.write(JSON.stringify({connected,secure})));" const attacker = test.ctx.subprocess.spawn({ - argv: (await test.ctx.sandbox.confine([test.hello.node, '-e', attack, endpoint.path], { + argv: (await test.ctx.sandbox.confine([test.hello.executable, '-e', attack, endpoint.path], { mode: 'read-only', workspaceRoot: test.root, })).argv, cwd: test.root, stdio: { stdin: 'ignore', stdout: { maxBytes: 4096 }, stderr: { maxBytes: 4096 } }, graceMs: 500, @@ -124,7 +125,7 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { .rejects.toMatchObject({ code: 'FS_SANDBOX_DENIED' }) const createLink = 'const fs=require(\'node:fs\');const root=process.argv[1];fs.mkdirSync(root+\'/physical/child\',{recursive:true});fs.mkdirSync(root+\'/lexical\');fs.symlinkSync(root+\'/physical/child\',root+\'/lexical/link\');' await processResult(ctx.subprocess.spawn({ - argv: [hello.node, '-e', createLink, root], cwd: root, + argv: [hello.executable, '-e', createLink, root], cwd: root, stdio: { stdin: 'ignore', stdout: { maxBytes: 1024 }, stderr: { maxBytes: 1024 } }, graceMs: 500, })) const resolved = await ctx.fs.resolve('file.txt', { cwd: `${root}/lexical/link/..` }) @@ -139,7 +140,7 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { const test = await setup() try { const code = 'const fs=require(\'node:fs\');const s=new(require(\'node:net\').Socket)({fd:7,readable:true,writable:true,allowHalfOpen:true});let a=[];s.on(\'data\',b=>a.push(b));s.on(\'end\',()=>{let denied;try{fs.writeFileSync(\'forbidden\',\'bad\')}catch(e){denied=e.code}process.stdout.write(JSON.stringify({pid:process.pid,denied,cgroup:process.platform===\'linux\'?fs.readFileSync(\'/proc/self/cgroup\',\'utf8\'):\'\'}));process.stderr.write(\'stderr\');s.end(Buffer.concat(a))});' - const argv = (await test.ctx.sandbox.confine([test.hello.node, '-e', code], { mode: 'read-only', workspaceRoot: test.root })).argv + const argv = (await test.ctx.sandbox.confine([test.hello.executable, '-e', code], { mode: 'read-only', workspaceRoot: test.root })).argv const handle = test.ctx.subprocess.spawn({ argv, cwd: test.root, stdio: { stdin: 'ignore', stdout: { maxBytes: 4096 }, stderr: { maxBytes: 4096 }, control: 'pipe' }, graceMs: 1000, @@ -167,7 +168,7 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { try { const code = 'const s=new(require(\'node:net\').Socket)({fd:7,readable:true,writable:true});const b=Buffer.alloc(65536,120);let n=0;function pump(){while(n<10000){n++;if(!process.stdout.write(b))return}}process.stdout.on(\'drain\',pump);s.on(\'data\',v=>s.write(v));pump();setInterval(()=>{},1000);' handle = test.ctx.subprocess.spawn({ - argv: (await test.ctx.sandbox.confine([test.hello.node, '-e', code], { mode: 'workspace-write', workspaceRoot: test.root })).argv, + argv: (await test.ctx.sandbox.confine([test.hello.executable, '-e', code], { mode: 'workspace-write', workspaceRoot: test.root })).argv, cwd: test.root, stdio: { stdin: 'ignore', stdout: 'pipe', stderr: { maxBytes: 1024 }, control: 'pipe' }, graceMs: 500, }) const reply = once(handle.control!, 'data') @@ -215,7 +216,7 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { try { const code = 'const fs=require(\'node:fs\');require(\'node:child_process\').spawn(process.execPath,[\'-e\',\'setInterval(()=>{},1000)\'],{detached:true,stdio:\'ignore\'}).unref();fs.appendFileSync(\'launches\',\'one\\n\');process.stdout.write(fs.readFileSync(\'/proc/self/cgroup\',\'utf8\'));setInterval(()=>{},1000);' const handle = victim.ctx.subprocess.spawn({ - argv: [victim.hello.node, '-e', code], cwd: victim.root, + argv: [victim.hello.executable, '-e', code], cwd: victim.root, stdio: { stdin: 'ignore', stdout: 'pipe', stderr: { maxBytes: 4096 } }, graceMs: 500, }) const [bytes] = await once(handle.stdout!, 'data') as [Buffer] @@ -238,7 +239,7 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { await victimConnection.dispose() try { await processResult(observer.ctx.subprocess.spawn({ - argv: [observer.hello.node, '-e', 'require("node:fs").rmSync(process.argv[1],{recursive:true,force:true})', victim.root], + argv: [observer.hello.executable, '-e', 'require("node:fs").rmSync(process.argv[1],{recursive:true,force:true})', victim.root], cwd: observer.root, stdio: { stdin: 'ignore', stdout: { maxBytes: 1024 }, stderr: { maxBytes: 1024 } }, graceMs: 500, })) } finally { await removeOwned(observer) } @@ -248,7 +249,7 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { it.skipIf(bootstrap === undefined)('runs PTC remotely with empty environment, bindings, denial and a bounded hot loop', async () => { const test = await setup() const fiber = test.ctx.plugin(NodePtcRuntime, { - nodeExecutable: test.ctx.ssh.nodeExecutable, bootstrapPath: test.ctx.ssh.bootstrapPath, + launch: test.ctx.ssh.ptcLaunch, }) try { await fiber @@ -281,7 +282,7 @@ describe.skipIf(!enabled)('POSIX SSH runtime acceptance', () => { await test.ctx.fs.writeText(await test.ctx.fs.resolve(`${test.root}/tsconfig.json`), '{"compilerOptions":{"strict":true}}') await test.ctx.fs.writeText(await test.ctx.fs.resolve(`${test.root}/source.ts`), 'export const answer: number = 42\nexport const doubled = answer * 2\n') stdio = test.ctx.plugin(LspStdio, { servers: { remoteTypescript: { - command: test.hello.node, args: [languageServer as string, '--stdio'], extensionToLanguage: { '.ts': 'typescript' }, + command: test.hello.executable, args: [languageServer as string, '--stdio'], extensionToLanguage: { '.ts': 'typescript' }, } } }) await stdio const request = { filePath: 'source.ts', workspaceRoot: test.root, position: { line: 1, character: 24 } } diff --git a/packages/ssh/ssh/tests/startup-behavior.spec.ts b/packages/ssh/ssh/tests/startup-behavior.spec.ts index 1c69f39748..f02c9c5176 100644 --- a/packages/ssh/ssh/tests/startup-behavior.spec.ts +++ b/packages/ssh/ssh/tests/startup-behavior.spec.ts @@ -52,12 +52,12 @@ class Child extends EventEmitter { } const config: Config = { - host: 'test-alias', node: '/remote/node', helper: '/remote/helper.js', helperHash: 'a'.repeat(64), workspace: '/remote/workspace', + host: 'test-alias', launch: { kind: 'node-script', node: '/remote/node' }, helper: '/remote/helper.js', helperHash: 'a'.repeat(64), workspace: '/remote/workspace', requestTimeoutMs: 1000, maxFrameBytes: 4096, maxPending: 8, leaseMs: 30_000, } const hello = { - protocol: 1, hash: 'a'.repeat(64), platform: 'linux', nodeVersion: 'v24.19.0', - node: '/canonical/node', root: '/tmp/remote-helper', workspace: '/canonical/workspace', + protocol: 2, hash: 'a'.repeat(64), platform: 'linux', nodeVersion: 'v24.19.0', + kind: 'node-script', executable: '/canonical/node', root: '/tmp/remote-helper', workspace: '/canonical/workspace', } function setup(options: { @@ -133,11 +133,11 @@ function setup(options: { describe.skipIf(process.platform === 'win32')('SSH connection startup', () => { it.each([ - { host: '-option' }, { host: 'alias; command' }, { node: 'relative' }, { helperHash: 'bad' }, - { bootstrapPath: '/remote/bootstrap.js' }, { bootstrapHash: 'b'.repeat(64) }, + { host: '-option' }, { host: 'alias; command' }, { launch: { kind: 'node-script', node: 'relative' } }, { helperHash: 'bad' }, + { launch: { kind: 'node-script', node: '/remote/node', bootstrapPath: '/remote/bootstrap.js' } }, { launch: { kind: 'node-script', node: '/remote/node', bootstrapHash: 'b'.repeat(64) } }, { requestTimeoutMs: 0 }, { requestTimeoutMs: 2_147_483_648 }, { maxFrameBytes: 64 * 1024 * 1024 + 1 }, { maxPending: 129 }, { leaseMs: 2999 }, - ])('rejects invalid deployment configuration before SSH starts: %j', (invalid) => { + ] satisfies Partial[])('rejects invalid deployment configuration before SSH starts: %j', (invalid) => { expect(() => setup({ config: invalid })).toThrow() expect(transport.spawn).not.toHaveBeenCalled() }) @@ -150,37 +150,47 @@ describe.skipIf(process.platform === 'win32')('SSH connection startup', () => { }) it('publishes only verified remote coordinates and quotes the configured executable paths', async () => { - const test = setup({ holdHello: true, config: { helper: "/remote/helper's file.js", bootstrapPath: '/remote/process.js', bootstrapHash: 'b'.repeat(64) }, hello: { bootstrapHash: 'b'.repeat(64) } }) - expect(() => test.service.nodeExecutable).toThrow('not ready') - expect(() => test.service.bootstrapPath).toThrow('verified bootstrapPath') + const test = setup({ holdHello: true, config: { helper: "/remote/helper's file.js", launch: { kind: 'node-script', node: '/remote/node', bootstrapPath: '/remote/process.js', bootstrapHash: 'b'.repeat(64) } }, hello: { bootstrapHash: 'b'.repeat(64) } }) + expect(() => test.service.ptcLaunch).toThrow('not ready') await test.helloEntered test.releaseHello() await test.service[Service.init]() - expect(test.service.nodeExecutable).toBe('/canonical/node') - expect(test.service.bootstrapPath).toBe('/remote/process.js') + expect(test.service.ptcLaunch).toEqual({ kind: 'node-script', executable: '/canonical/node', bootstrapPath: '/remote/process.js' }) const argv = transport.spawn.mock.calls[0]?.[1] as string[] expect(argv).toContain('StrictHostKeyChecking=yes') expect(argv).toContain('ForwardAgent=no') expect(argv.at(-1)).toBe("'/remote/node' '--disable-sigusr1' '/remote/helper'\\''s file.js'") - expect(test.calls[0]?.params).toEqual({ protocol: 1, workspace: '/remote/workspace', leaseMs: 30_000, bootstrapPath: '/remote/process.js' }) + expect(test.calls[0]?.params).toEqual({ protocol: 2, workspace: '/remote/workspace', leaseMs: 30_000, bootstrapPath: '/remote/process.js' }) }) it('permits filesystem-only deployments and refuses an unconfigured PTC bootstrap getter', async () => { const test = setup() await test.service.ready - expect(test.service.nodeExecutable).toBe('/canonical/node') - expect(() => test.service.bootstrapPath).toThrow('verified bootstrapPath') + expect(() => test.service.ptcLaunch).toThrow('verified bootstrapPath') expect(await test.service.request('echo', { value: 42 }, z.object({ value: z.number() }))).toEqual({ value: 42 }) }) + it('launches an executable directly and publishes its embedded PTC worker', async () => { + const test = setup({ + config: { launch: { kind: 'executable' }, helper: '/remote/helper with spaces' }, + hello: { kind: 'executable', executable: '/canonical/dsh-ssh-helper' }, + }) + await test.service.ready + expect(test.service.ptcLaunch).toEqual({ kind: 'embedded', executable: '/canonical/dsh-ssh-helper' }) + const argv = transport.spawn.mock.calls[0]?.[1] as string[] + expect(argv.at(-1)).toBe("NODE_OPTIONS='--disable-sigusr1' '/remote/helper with spaces'") + expect(test.calls[0]?.params).toEqual({ protocol: 2, workspace: '/remote/workspace', leaseMs: 30_000 }) + }) + it.each([ { hello: { hash: 'c'.repeat(64) }, error: 'helper digest' }, { hello: { bootstrapHash: 'c'.repeat(64) }, error: 'bootstrap digest' }, - { hello: { protocol: 2 }, error: 'Invalid' }, + { hello: { protocol: 1 }, error: 'Invalid' }, + { hello: { kind: 'executable' }, error: 'launch kind' }, ])('refuses a mismatched helper identity before readiness: $error', async ({ hello, error }) => { const test = setup({ hello }) await expect(test.service.ready).rejects.toThrow(error) - expect(() => test.service.nodeExecutable).toThrow('not ready') + expect(() => test.service.ptcLaunch).toThrow('not ready') await expect(test.service.request('echo', {}, z.unknown())).rejects.toThrow() }) diff --git a/packages/ssh/ssh/tsconfig.json b/packages/ssh/ssh/tsconfig.json index 072c367f57..d5115ca148 100644 --- a/packages/ssh/ssh/tsconfig.json +++ b/packages/ssh/ssh/tsconfig.json @@ -43,6 +43,9 @@ }, { "path": "../../util/brand" + }, + { + "path": "../../util/values" } ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0e50c53e52..e8245fe8e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,6 +181,9 @@ importers: vitest: specifier: ^4.1.8 version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-v8@4.1.8)(happy-dom@20.11.6)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.0.16(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)) + zod: + specifier: ^4.4.3 + version: 4.4.3 apps/cli: dependencies: @@ -11535,6 +11538,118 @@ importers: '@deepseek-ai/dsh-subprocess-ssh': specifier: workspace:^ version: link:../subprocess-ssh + '@deepseek-ai/dsh-util-values': + specifier: workspace:^ + version: link:../../util/values + + packages/ssh/ssh-helper-runtime: + dependencies: + '@deepseek-ai/cordis': + specifier: workspace:^ + version: link:../../../vendor/cordis + '@deepseek-ai/cosmokit': + specifier: link:../../../vendor/cosmokit + version: link:../../../vendor/cosmokit + '@deepseek-ai/dsh-agent': + specifier: workspace:^ + version: link:../../core/agent + '@deepseek-ai/dsh-brand': + specifier: workspace:^ + version: link:../../util/brand + '@deepseek-ai/dsh-fs': + specifier: workspace:^ + version: link:../../fs/fs + '@deepseek-ai/dsh-fs-local': + specifier: workspace:^ + version: link:../../fs/fs-local + '@deepseek-ai/dsh-fs-sandbox': + specifier: workspace:^ + version: link:../../fs/fs-sandbox + '@deepseek-ai/dsh-http-proxy': + specifier: workspace:^ + version: link:../../util/http-proxy + '@deepseek-ai/dsh-invariants': + specifier: workspace:^ + version: link:../../runtime-diagnostics/invariants + '@deepseek-ai/dsh-lazy-require': + specifier: workspace:^ + version: link:../../util/lazy-require + '@deepseek-ai/dsh-llm': + specifier: workspace:^ + version: link:../../llm/llm + '@deepseek-ai/dsh-ptc-runtime': + specifier: workspace:^ + version: link:../../ptc-runtime/ptc-runtime + '@deepseek-ai/dsh-ptc-runtime-node': + specifier: workspace:^ + version: link:../../ptc-runtime/ptc-runtime-node + '@deepseek-ai/dsh-sandbox': + specifier: workspace:^ + version: link:../../sandbox/sandbox + '@deepseek-ai/dsh-sandbox-local': + specifier: workspace:^ + version: link:../../sandbox/sandbox-local + '@deepseek-ai/dsh-sandbox-policy': + specifier: workspace:^ + version: link:../../sandbox/sandbox-policy + '@deepseek-ai/dsh-sandbox-windows-acl': + specifier: workspace:^ + version: link:../../sandbox/sandbox-windows-acl + '@deepseek-ai/dsh-scope': + specifier: workspace:^ + version: link:../../core/scope + '@deepseek-ai/dsh-session': + specifier: workspace:^ + version: link:../../core/session + '@deepseek-ai/dsh-session-projection': + specifier: workspace:^ + version: link:../../session/session-projection + '@deepseek-ai/dsh-ssh': + specifier: workspace:^ + version: link:../ssh + '@deepseek-ai/dsh-subprocess': + specifier: workspace:^ + version: link:../../subprocess/subprocess + '@deepseek-ai/dsh-subprocess-local': + specifier: workspace:^ + version: link:../../subprocess/subprocess-local + '@deepseek-ai/dsh-system-prompt': + specifier: workspace:^ + version: link:../../core/system-prompt + '@deepseek-ai/dsh-timeout': + specifier: workspace:^ + version: link:../../util/timeout + '@deepseek-ai/dsh-typert-protocol': + specifier: workspace:^ + version: link:../../typert/protocol + '@deepseek-ai/dsh-util-crypto': + specifier: workspace:^ + version: link:../../util/crypto + '@deepseek-ai/dsh-util-values': + specifier: workspace:^ + version: link:../../util/values + '@deepseek-ai/dsh-win32-process': + specifier: workspace:^ + version: link:../../subprocess/win32-process + '@deepseek-ai/node-addon-system': + specifier: workspace:^ + version: link:../../../native/system/packages/entry + '@deepseek-ai/schemastery': + specifier: link:../../../vendor/schemastery + version: link:../../../vendor/schemastery + devDependencies: + '@deepseek-ai/dsh-app-boot': + specifier: workspace:^ + version: link:../../boot/app-boot + '@deepseek-ai/dsh-fs-ssh': + specifier: workspace:^ + version: link:../fs-ssh + '@deepseek-ai/dsh-sandbox-ssh': + specifier: workspace:^ + version: link:../sandbox-ssh + '@deepseek-ai/dsh-subprocess-ssh': + specifier: workspace:^ + version: link:../subprocess-ssh packages/ssh/subprocess-ssh: dependencies: diff --git a/scripts/build-exe-for-python-sdk-native-pty.spec.ts b/scripts/build-exe-for-python-sdk-native-pty.spec.ts index cc7d0ef7fa..194d39e1b5 100644 --- a/scripts/build-exe-for-python-sdk-native-pty.spec.ts +++ b/scripts/build-exe-for-python-sdk-native-pty.spec.ts @@ -2,7 +2,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { dirname, join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' -import { resolveLinuxNodePtyAddon, resolveWindowsNodePtyAddons } from './build-exe-for-python-sdk-native-pty.ts' +import { resolveLinuxNodePtyAddon, resolveWindowsNodePtyAddons } from './executable-native-pty.ts' const roots: string[] = [] diff --git a/scripts/build-exe-for-python-sdk.ts b/scripts/build-exe-for-python-sdk.ts index 341bf95a35..fcd66312c1 100644 --- a/scripts/build-exe-for-python-sdk.ts +++ b/scripts/build-exe-for-python-sdk.ts @@ -7,12 +7,13 @@ */ import { spawn } from 'node:child_process' +import { materializeStagedLinks, pnpmInvocation, restoreLegacyHoists } from './executable-packaging.ts' import { existsSync, statSync } from 'node:fs' -import { chmod, copyFile, cp, lstat, mkdir, readFile, readdir, realpath, rm, writeFile } from 'node:fs/promises' +import { chmod, copyFile, cp, mkdir, readFile, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' -import { basename, dirname, extname, join, resolve, sep } from 'node:path' +import { basename, dirname, join, resolve, sep } from 'node:path' import { parseArgs } from 'node:util' -import { resolveLinuxNodePtyAddon, resolveWindowsNodePtyAddons } from './build-exe-for-python-sdk-native-pty.ts' +import { resolveLinuxNodePtyAddon, resolveWindowsNodePtyAddons } from './executable-native-pty.ts' import { copyOfficeSidecar, OFFICE_ASSET_IGNORES } from './build-exe-for-python-sdk-office.ts' import { preparePrimaryRuntime, smokePrimaryRuntime, type PrimaryRuntimeTarget } from './primary-runtime/prepare.ts' @@ -222,29 +223,6 @@ class BuildCli { } } -function pnpmInvocation(args: string[]): [command: string, args: string[]] { - const entrypoint = process.env.npm_execpath?.trim() - if (entrypoint !== undefined && entrypoint !== '') { - const extension = extname(entrypoint).toLowerCase() - if (extension === '.js' || extension === '.cjs' || extension === '.mjs') { - return [process.execPath, [entrypoint, ...args]] - } - if (extension !== '.cmd') return [entrypoint, args] - } - const home = process.env.PNPM_HOME?.trim() - if (home !== undefined && home !== '') { - const packageBin = resolve(home, '..', 'pnpm', 'bin') - for (const filename of ['pnpm.mjs', 'pnpm.cjs']) { - const candidate = resolve(packageBin, filename) - if (existsSync(candidate)) return [process.execPath, [candidate, ...args]] - } - } - if (process.platform === 'win32') { - throw new Error('build-exe-for-python-sdk: pnpm must expose a JavaScript entrypoint through npm_execpath or PNPM_HOME on Windows.') - } - return ['pnpm', args] -} - /** * Render a command for logs and errors, quoting arguments with spaces. * @param command - the executable. @@ -289,7 +267,7 @@ class SingleExeBuild { } if (this.cli.dryRun) console.log(`build-exe-for-python-sdk: [dry-run] rm -rf ${this.staging}`) else await rm(this.staging, { recursive: true, force: true }) - await this.runPnpm('deploy', [ + try { await this.runPnpm('deploy', [ '--filter', DEPLOY_ROOT_PACKAGE, 'deploy', @@ -301,7 +279,10 @@ class SingleExeBuild { '--config.auto-install-peers=false', '--config.link-workspace-packages=true', this.staging, - ]) + ]) } finally { + // Legacy deploy records production-only workspace state; restore the development installation before exec. + await this.runPnpm('restore development dependencies', ['install', '--offline', '--frozen-lockfile', '--prod=false', '--ignore-scripts']) + } await this.restoreLegacyHoists() await this.materializeStagedLinks() if (this.cli.dryRun) { @@ -322,38 +303,8 @@ class SingleExeBuild { console.log('build-exe-for-python-sdk: [dry-run] restore direct dependencies omitted by legacy deploy') return } - const manifestPath = join(this.staging, 'package.json') - const manifest = JSON.parse(await readFile(manifestPath, 'utf8')) as { - dependencies?: Record - } - const sourceNodeModules = resolve(root, DEPLOY_SOURCE_NODE_MODULES) - const restored: string[] = [] - for (const dependency of Object.keys(manifest.dependencies ?? {}).sort()) { - const destination = join(this.staging, 'node_modules', dependency) - if (existsSync(destination)) continue - const source = join(sourceNodeModules, dependency) - if (!existsSync(source)) { - throw new Error( - `build-exe-for-python-sdk: deployed dependency ${dependency} is absent from both ${destination} and ${source}.`, - ) - } - await mkdir(dirname(destination), { recursive: true }) - const nestedNodeModules = join(source, 'node_modules') - await cp(source, destination, { - recursive: true, - dereference: true, - filter: path => path !== nestedNodeModules && !path.startsWith(nestedNodeModules + sep), - }) - restored.push(dependency) - } - const stillMissing = Object.keys(manifest.dependencies ?? {}) - .filter(dependency => !existsSync(join(this.staging, 'node_modules', dependency))) - if (stillMissing.length > 0) { - throw new Error(`build-exe-for-python-sdk: staged dependencies remain missing: ${stillMissing.join(', ')}.`) - } - if (restored.length > 0) { - console.log(`build-exe-for-python-sdk: restored legacy deploy hoists: ${restored.join(', ')}`) - } + const restored = await restoreLegacyHoists(this.staging, resolve(root, DEPLOY_SOURCE_NODE_MODULES)) + if (restored.length > 0) console.log(`build-exe-for-python-sdk: restored legacy deploy hoists: ${restored.join(', ')}`) } /** Replace deploy-time package links with files and reject any remaining link. */ @@ -362,41 +313,7 @@ class SingleExeBuild { console.log('build-exe-for-python-sdk: [dry-run] materialize staged package links') return } - const nodeModules = join(this.staging, 'node_modules') - let remaining = await this.findSymlink(nodeModules) - while (remaining !== undefined) { - const segments = remaining.slice(nodeModules.length + 1).split(sep) - const binIndex = segments.lastIndexOf('.bin') - if (binIndex >= 0) { - await rm(join(nodeModules, ...segments.slice(0, binIndex + 1)), { recursive: true, force: true }) - remaining = await this.findSymlink(nodeModules) - continue - } - const destination = remaining - const source = await realpath(destination) - const nestedNodeModules = join(source, 'node_modules') - await rm(destination, { recursive: true, force: true }) - await cp(source, destination, { - recursive: true, - dereference: true, - filter: path => path !== nestedNodeModules && !path.startsWith(nestedNodeModules + sep), - }) - remaining = await this.findSymlink(nodeModules) - } - } - - /** Return the first symbolic link below a directory, if one exists. */ - private async findSymlink(directory: string): Promise { - for (const entry of await readdir(directory, { withFileTypes: true })) { - const path = join(directory, entry.name) - const metadata = await lstat(path) - if (metadata.isSymbolicLink()) return path - if (metadata.isDirectory()) { - const nested = await this.findSymlink(path) - if (nested !== undefined) return nested - } - } - return undefined + await materializeStagedLinks(join(this.staging, 'node_modules')) } /** Add the executable entry and pkg assets to the staged manifest. */ diff --git a/scripts/build-exe-for-ssh-helper.ts b/scripts/build-exe-for-ssh-helper.ts new file mode 100644 index 0000000000..4ca1c53a2e --- /dev/null +++ b/scripts/build-exe-for-ssh-helper.ts @@ -0,0 +1,174 @@ +/** Build a relocatable, native-host SSH helper archive with its private Node workers. */ +import { spawn, execFileSync } from 'node:child_process' +import { existsSync, globSync } from 'node:fs' +import { chmod, copyFile, cp, lstat, mkdir, mkdtemp, readFile, readdir, rm, writeFile } from 'node:fs/promises' +import { basename, dirname, join, resolve } from 'node:path' +import { parseArgs } from 'node:util' +import { build } from 'tsdown' +import { create as createTar } from 'tar' +import { verifyRuntimeClosure } from './verify-runtime-closure.ts' +import { materializeStagedLinks, pnpmInvocation, restoreLegacyHoists } from './executable-packaging.ts' +import { resolveLinuxNodePtyAddon } from './executable-native-pty.ts' +import { artifactManifestSchema, fileDigest, payloadFiles, SSH_HELPER_TARGETS, verifyPayload, type SshHelperTarget } from './ssh-helper/artifact.ts' +import { probeHelper } from './ssh-helper/probe.ts' +import { verifyNativePayload } from './ssh-helper/native.ts' + +const root = resolve(import.meta.dirname, '..') +const closureDirectory = 'packages/ssh/ssh-helper-runtime' +const closureName = '@deepseek-ai/dsh-ssh-helper-runtime' +const assets = ['package.json', 'lib/**/*.js', ...['js', 'cjs', 'mjs', 'json', 'node', 'so', 'so.*', 'dylib', 'wasm', 'sh', 'bash'].map(extension => `node_modules/**/*.${extension}`)] + +interface Manifest { name: string; version: string; license?: string; dependencies?: Record } + +async function manifest(path: string): Promise { return JSON.parse(await readFile(path, 'utf8')) as Manifest } + +async function run(command: string, args: string[]): Promise { + console.log(`ssh-helper build: ${[command, ...args].join(' ')}`) + await new Promise((resolve, reject) => { + const child = spawn(command, args, { cwd: root, stdio: 'inherit', env: { ...process.env, CI: 'true' } }) + child.once('error', reject) + child.once('close', (code, signal) => { + if (code === 0 && signal === null) resolve() + else reject(new Error(`SSH helper build command failed (${code ?? signal}): ${command}`)) + }) + }) +} + +async function pnpm(...args: string[]): Promise { const [command, argv] = pnpmInvocation(args); await run(command, argv) } + +async function compileRuntime(dependencies: Readonly>): Promise { + await pnpm('exec', 'tsx', 'native/system/scripts/build.ts') + await pnpm('exec', 'tsc', '-b', closureDirectory, 'native/system/packages/entry') + const names = new Set([closureName, ...Object.keys(dependencies)]) + for (const path of globSync(['packages/*/*/package.json', 'vendor/*/package.json'], { cwd: root }).sort()) { + if (!names.has((await manifest(join(root, path))).name)) continue + const cwd = dirname(join(root, path)) + const config = join(cwd, 'tsdown.config.ts') + if (existsSync(config)) await build({ cwd, config }) + else await build({ cwd, config: false, entry: ['lib/types/{index,invariant,startup}.js'], outDir: 'lib', format: ['esm'], platform: 'node', target: 'es2024', fixedExtension: false, dts: false, clean: false }) + } +} + +async function prepareNative(staging: string, product: string, platform: string, arch: 'x64' | 'arm64'): Promise { + const pty = join(staging, 'node_modules', 'node-pty') + await rm(join(pty, 'build'), { recursive: true, force: true }) + for (const entry of await readdir(join(pty, 'prebuilds'))) { + if (entry !== `${platform}-${arch}`) await rm(join(pty, 'prebuilds', entry), { recursive: true, force: true }) + } + if (platform === 'linux') { + const addon = resolveLinuxNodePtyAddon(join(root, 'packages/subprocess/subprocess-local/node_modules/node-pty'), arch) + await mkdir(join(pty, 'build/Release'), { recursive: true }) + await copyFile(addon, join(pty, 'build/Release/pty.node')) + } else { + const destination = join(product, 'dsh-ssh-helper-spawn-helper') + await copyFile(join(pty, 'prebuilds', `darwin-${arch}`, 'spawn-helper'), destination) + await chmod(destination, 0o755) + } + const source = join(root, 'native/system/packages', `${platform}-${arch}`) + const destination = join(product, 'native/system') + await mkdir(destination, { recursive: true }) + await copyFile(join(source, 'package.json'), join(destination, 'package.json')) + await cp(join(source, 'bin'), join(destination, 'bin'), { recursive: true }) + // The Linux carrier targets glibc; no unused musl addon travels in this archive. + if (platform === 'linux') await rm(join(destination, 'bin/musl'), { recursive: true, force: true }) + const binaries = platform === 'linux' ? ['bin/landlock-run', 'bin/glibc/system.node'] : ['bin/system.node'] + for (const binary of binaries) { + if (!(await lstat(join(destination, binary))).isFile()) throw new Error(`Missing SSH native resource: ${binary}`) + } +} + +async function copyLicenses(staging: string, product: string): Promise { + const destination = join(product, 'LICENSES') + await mkdir(destination, { recursive: true }) + const inventory: { name: string; version: string; license?: string }[] = [] + for (const path of globSync(['node_modules/*/package.json', 'node_modules/@*/*/package.json'], { cwd: staging }).sort()) { + const directory = dirname(join(staging, path)) + const data = await manifest(join(staging, path)) + inventory.push({ name: data.name, version: data.version, ...(data.license === undefined ? {} : { license: data.license }) }) + const licenses = (await readdir(directory)).filter(name => /^(?:licen[cs]e|copying|notice)(?:[.-]|$)/i.test(name)) + for (const name of licenses) { + const source = join(directory, name) + if (!(await lstat(source)).isFile()) continue + const output = join(destination, data.name.replaceAll('/', '__'), name) + await mkdir(dirname(output), { recursive: true }) + await copyFile(source, output) + } + } + await copyFile(join(root, 'LICENSE'), join(destination, 'deepseek-harness-MIT.txt')) + await copyFile(join(root, 'native/system/LICENSE'), join(destination, 'node-addon-system-BSD.txt')) + await writeFile(join(destination, 'packages.json'), `${JSON.stringify(inventory, null, 2)}\n`) +} + +/** + * Build the selected native target and retain only its complete release archive. + * @param argv - command-line arguments, excluding the interpreter and script. + */ +export async function buildSshHelper(argv: string[]): Promise { + const { values } = parseArgs({ args: argv, options: { + target: { type: 'string' }, output: { type: 'string' }, + 'skip-build': { type: 'boolean', default: false }, 'dry-run': { type: 'boolean', default: false }, + } }) + const host = `node24-${process.platform === 'darwin' ? 'macos' : process.platform}-${process.arch}` + const selected = values.target ?? host + if (!SSH_HELPER_TARGETS.some(target => target === selected)) throw new Error(`Unsupported SSH helper target: ${selected}`) + if (!values['dry-run'] && selected !== host) throw new Error(`SSH helper target ${selected} requires its native host; current host is ${host}`) + const target = selected as SshHelperTarget + const definition = await manifest(join(root, closureDirectory, 'package.json')) + const closure = await verifyRuntimeClosure(root, `${closureDirectory}/package.json`, false) + if (closure.failures.length > 0) throw new Error(`SSH helper runtime dependencies are incomplete:\n${closure.failures.join('\n')}`) + const output = resolve(root, values.output ?? 'dist-exe/ssh-helper') + if (values['dry-run']) { + console.log(`SSH helper ${target}: ${values['skip-build'] ? 'reuse built modules' : 'compile runtime'} -> deploy ${closureName} -> pkg --sea -> handshake -> ${output}`) + return + } + if (!values['skip-build']) await compileRuntime(definition.dependencies ?? {}) + await mkdir(join(root, '.dsh-build'), { recursive: true }) + const temporary = await mkdtemp(join(root, '.dsh-build/ssh-helper-')) + try { + const staging = join(temporary, 'staging') + const product = join(temporary, 'dsh-ssh-helper') + await mkdir(product) + try { + await pnpm('--filter', closureName, 'deploy', '--legacy', '--prod', '--config.allow-unused-patches=true', '--config.node-linker=hoisted', '--config.auto-install-peers=false', '--config.link-workspace-packages=true', staging) + } finally { + // Legacy deploy records production-only workspace state; pnpm's next exec otherwise prunes build tools. + await pnpm('install', '--offline', '--frozen-lockfile', '--prod=false', '--ignore-scripts') + } + await restoreLegacyHoists(staging, join(root, closureDirectory, 'node_modules')) + await materializeStagedLinks(join(staging, 'node_modules')) + await prepareNative(staging, product, process.platform, process.arch as 'x64' | 'arm64') + await verifyNativePayload(join(staging, 'node_modules'), target) + const stagedManifest = await manifest(join(staging, 'package.json')) + await writeFile(join(staging, 'runtime-bootstrap.mjs'), 'import { runSshHelperRuntime } from "./lib/index.js";\nawait runSshHelperRuntime();\n') + await writeFile(join(staging, 'package.json'), `${JSON.stringify({ ...stagedManifest, + bin: 'runtime-bootstrap.mjs', pkg: { assets, ignore: ['node_modules/@deepseek-ai/node-addon-system-*/**/*'] }, + }, null, 2)}\n`) + const executable = join(product, 'dsh-ssh-helper') + await pnpm('exec', 'pkg', staging, '--sea', '--targets', target, '--output', executable) + await chmod(executable, 0o755) + await verifyNativePayload(product, target) + await copyLicenses(staging, product) + const hello = await probeHelper(executable, product) + if (hello.kind !== 'executable' || hello.executable !== executable) throw new Error('Packaged SSH helper did not report its physical executable') + const metadata = artifactManifestSchema.parse({ + format: 1, version: definition.version, target, + commit: execFileSync('git', ['rev-parse', 'HEAD'], { cwd: root, encoding: 'utf8' }).trim(), + dirty: execFileSync('git', ['status', '--porcelain'], { cwd: root, encoding: 'utf8' }).trim() !== '', + protocol: hello.protocol, nodeVersion: hello.nodeVersion, + files: await Promise.all((await payloadFiles(product)).map(async path => ({ + path, sha256: await fileDigest(join(product, path)), mode: (await lstat(join(product, path))).mode & 0o777, + }))), + }) + await writeFile(join(product, 'manifest.json'), `${JSON.stringify(metadata, null, 2)}\n`) + await verifyPayload(product) + await mkdir(output, { recursive: true }) + const archive = join(output, `dsh-ssh-helper-${definition.version}-${target.slice('node24-'.length)}.tar.gz`) + await createTar({ cwd: temporary, file: archive, gzip: true, portable: true }, ['dsh-ssh-helper']) + await writeFile(`${archive}.sha256`, `${await fileDigest(archive)} ${basename(archive)}\n`) + console.log(`SSH helper archive: ${archive}`) + } finally { + await rm(temporary, { recursive: true, force: true }) + } +} + +if (import.meta.main) await buildSshHelper(process.argv.slice(2)) diff --git a/scripts/check-workspace-constraints.ts b/scripts/check-workspace-constraints.ts index 179f002f3c..425ab85afc 100644 --- a/scripts/check-workspace-constraints.ts +++ b/scripts/check-workspace-constraints.ts @@ -324,6 +324,8 @@ export function checkExperimentalManifest( } function isReleaseMemberDirectory(dir: string): boolean { + // The SSH carrier is distributed as executable archives, never as an npm application. + if (dir === 'packages/ssh/ssh-helper-runtime') return false return standardReleaseMemberDirectory.test(dir) || isPublicExperimentalPackageDirectory(dir) } diff --git a/scripts/ci-workflow.spec.ts b/scripts/ci-workflow.spec.ts index db3315e074..f40bb72ab3 100644 --- a/scripts/ci-workflow.spec.ts +++ b/scripts/ci-workflow.spec.ts @@ -533,7 +533,7 @@ describe('CI workflow', () => { }) .map(([name]) => name) .sort() - expect(pushReachable).toEqual(['python-runtime', 'serial-linux-selfhosted', 'serial-windows', 'windows']) + expect(pushReachable).toEqual(['python-runtime', 'serial-linux-selfhosted', 'serial-windows', 'ssh-helper', 'windows']) // Manual benchmarks retain their bounded fan-out. for (const name of ['larger-runner-benchmark', 'consolidated-runner-benchmark']) { @@ -607,6 +607,58 @@ describe('CI workflow', () => { expect(aggregate.needs).toContain('python-runtime') }) + it('requires SSH helper acceptance before publication and PR aggregation', () => { + const ci = loadWorkflow('.github/workflows/ci.yml') + expect(workflowJob(ci, 'ssh-helper')).toMatchObject({ + uses: './.github/workflows/build-exe-for-ssh-helper.yml', with: { targets: 'node24-linux-x64' }, + }) + expect(workflowJob(ci, 'all-checks-passed').needs).toContain('ssh-helper') + const master = workflowJob(loadWorkflow('.github/workflows/ci-master.yml'), 'ssh-helper') + expect(master.if).toContain("inputs.suite == 'ssh-helper'") + if (!isRecord(master.with)) throw new Error('SSH master caller must select native targets') + expect(evaluateRunsOn(master.with.targets, { github: { event_name: 'push' } })).toBe('node24-linux-arm64,node24-macos-arm64,node24-macos-x64') + expect(evaluateRunsOn(master.with.targets, { github: { event_name: 'workflow_dispatch' } })).toBe('node24-linux-x64,node24-linux-arm64,node24-macos-arm64,node24-macos-x64') + const workflow = loadWorkflow('.github/workflows/build-exe-for-ssh-helper.yml') + const build = workflowJob(workflow, 'build') + if (!Array.isArray(build.steps)) throw new Error('SSH build must define its verification steps') + const steps = build.steps.filter(isRecord) + const artifact = steps.findIndex(step => String(step.run).includes('scripts/verify-ssh-helper-artifact.ts')) + const transport = steps.findIndex(step => String(step.run).includes('scripts/verify-ssh-helper-ssh.ts')) + const landlock = steps.findIndex(step => String(step.run).includes('--backend=landlock-run')) + const upload = steps.findIndex(step => String(step.uses).startsWith('actions/upload-artifact@')) + expect(artifact).toBeGreaterThan(-1) + expect(landlock).toBeGreaterThan(artifact) + expect(transport).toBeGreaterThan(artifact) + expect(upload).toBeGreaterThan(transport) + for (const index of [artifact, transport, landlock, upload]) expect(steps[index]).not.toHaveProperty('continue-on-error', true) + const publish = loadWorkflow('.github/workflows/publish-ssh-helper.yml') + expect(publish.permissions).toEqual({ contents: 'read' }) + expect(workflowJob(publish, 'build')).toMatchObject({ needs: 'validate', with: { release: true } }) + expect(workflowJob(publish, 'publish')).toMatchObject({ needs: ['validate', 'build'], permissions: { contents: 'write' } }) + }) + + it('validates the SSH native matrix before allocating runners', () => { + const plan = workflowJob(loadWorkflow('.github/workflows/build-exe-for-ssh-helper.yml'), 'plan') + if (!Array.isArray(plan.steps)) throw new Error('SSH matrix plan has no steps') + const step: unknown = plan.steps.find(value => isRecord(value) && value.id === 'targets') + if (!isRecord(step) || typeof step.run !== 'string') throw new Error('SSH matrix plan has no script') + const source = step.run.split("<<'JS'\n")[1]?.split('\nJS')[0]?.replace(/^import .*;\n/gm, '') + if (source === undefined) throw new Error('SSH matrix plan must be an executable Node script') + const evaluate = (requested: string): unknown => { + let output = '' + runInNewContext(source, { + process: { env: { REQUESTED_TARGETS: requested, GITHUB_OUTPUT: 'output' } }, + appendFileSync: (_path: string, text: string) => { output += text }, + }, { timeout: 1000 }) + return JSON.parse(output.slice('matrix='.length)) + } + expect(evaluate('')).toHaveLength(4) + expect(evaluate('node24-linux-arm64')).toEqual([{ target: 'node24-linux-arm64', runner: 'ubuntu-24.04-arm' }]) + for (const invalid of ['node24-linux-arm64,node24-linux-arm64', 'node24-win-x64', 'node24-linux-x64,', ' ']) { + expect(() => evaluate(invalid)).toThrow('Invalid or duplicate') + } + }) + it('keeps every Vitest project process-isolated on native Windows', () => { const config = readFileSync(resolve(root, 'vitest.config.ts'), 'utf8') diff --git a/scripts/doc-standard.spec.ts b/scripts/doc-standard.spec.ts index 6c6663f286..8dd145cda4 100644 --- a/scripts/doc-standard.spec.ts +++ b/scripts/doc-standard.spec.ts @@ -69,6 +69,7 @@ const PACKAGE_LIBRARIES: Readonly> = { 'packages/sandbox/sandbox-windows-acl': 'Windows ACL sandbox library consumed by sandbox-local.', 'packages/sdk/client': 'Client-process library; the spawned runtime owns plugin behavior.', 'packages/sdk/protocol': 'Wire-protocol library with type declarations only.', + 'packages/ssh/ssh-helper-runtime': 'Private executable entry consumed by the packaging pipeline; no Cordis plugin export.', 'packages/session/session-format': 'Pure Session format planning, codec dispatch, and lossless JSON library.', 'packages/session/session-format-catalog': 'Generated build-static Session format inventory with no plugin registration.', 'packages/session/session-format-v0-to-v1': 'Pure released-v0 codec and adjacent migration library.', diff --git a/scripts/build-exe-for-python-sdk-native-pty.ts b/scripts/executable-native-pty.ts similarity index 82% rename from scripts/build-exe-for-python-sdk-native-pty.ts rename to scripts/executable-native-pty.ts index 3ce5295d5c..4563e6da25 100644 --- a/scripts/build-exe-for-python-sdk-native-pty.ts +++ b/scripts/executable-native-pty.ts @@ -1,4 +1,4 @@ -/** Resolve the native node-pty input used by the Python SDK runtime builder. */ +/** Resolve the native node-pty input used by the SDK and SSH executable builders. */ import { existsSync } from 'node:fs' import { join } from 'node:path' @@ -18,7 +18,7 @@ export function resolveLinuxNodePtyAddon( const prebuilt = join(packageDirectory, 'prebuilds', `linux-${arch}`, 'pty.node') if (existsSync(prebuilt)) return prebuilt throw new Error( - `build-exe-for-python-sdk: node-pty addon is absent from both ${built} and ${prebuilt}.`, + `executable-native-pty: node-pty addon is absent from both ${built} and ${prebuilt}.`, ) } @@ -39,7 +39,7 @@ export function resolveWindowsNodePtyAddons( ] const missing = addons.filter(path => !existsSync(path)) if (missing.length > 0) { - throw new Error(`build-exe-for-python-sdk: Windows node-pty addons are missing: ${missing.join(', ')}.`) + throw new Error(`executable-native-pty: Windows node-pty addons are missing: ${missing.join(', ')}.`) } return addons } diff --git a/scripts/executable-packaging.spec.ts b/scripts/executable-packaging.spec.ts new file mode 100644 index 0000000000..b5b50e05c6 --- /dev/null +++ b/scripts/executable-packaging.spec.ts @@ -0,0 +1,46 @@ +import { lstat, mkdir, mkdtemp, readFile, rm, symlink, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { expect, it, onTestFinished } from 'vitest' +import { materializeStagedLinks, restoreLegacyHoists } from './executable-packaging.ts' + +async function fixture() { + const root = await mkdtemp(join(tmpdir(), 'dsh-exe-deploy-')) + onTestFinished(() => rm(root, { recursive: true, force: true })) + const source = join(root, 'source') + const staging = join(root, 'staging') + await mkdir(source) + await mkdir(join(staging, 'node_modules'), { recursive: true }) + return { root, source, staging, modules: join(staging, 'node_modules') } +} + +it('restores omitted direct peers without copying their nested module instances', async () => { + const test = await fixture() + await writeFile(join(test.staging, 'package.json'), JSON.stringify({ dependencies: { peer: 'workspace:^' } })) + await mkdir(join(test.source, 'peer/node_modules/shadow'), { recursive: true }) + await writeFile(join(test.source, 'peer/index.js'), 'export const identity = 1\n') + await writeFile(join(test.source, 'peer/node_modules/shadow/index.js'), 'shadow') + expect(await restoreLegacyHoists(test.staging, test.source)).toEqual(['peer']) + expect(await readFile(join(test.modules, 'peer/index.js'), 'utf8')).toBe('export const identity = 1\n') + await expect(lstat(join(test.modules, 'peer/node_modules'))).rejects.toThrow('ENOENT') + expect(await restoreLegacyHoists(test.staging, test.source)).toEqual([]) +}) + +it('rejects a missing dependency instead of packaging an incomplete graph', async () => { + const test = await fixture() + await writeFile(join(test.staging, 'package.json'), JSON.stringify({ dependencies: { missing: 'workspace:^' } })) + await expect(restoreLegacyHoists(test.staging, test.source)).rejects.toThrow('absent from both') +}) + +it('materializes a package junction without deleting its source and drops linked command directories', async () => { + const test = await fixture() + await mkdir(join(test.source, 'peer')) + await writeFile(join(test.source, 'peer/index.js'), 'intact') + await symlink(join(test.source, 'peer'), join(test.modules, 'peer'), 'junction') + await symlink(join(test.source, 'peer'), join(test.modules, '.bin'), 'junction') + await materializeStagedLinks(test.modules) + expect((await lstat(join(test.modules, 'peer'))).isSymbolicLink()).toBe(false) + expect(await readFile(join(test.modules, 'peer/index.js'), 'utf8')).toBe('intact') + expect(await readFile(join(test.source, 'peer/index.js'), 'utf8')).toBe('intact') + await expect(lstat(join(test.modules, '.bin'))).rejects.toThrow('ENOENT') +}) diff --git a/scripts/executable-packaging.ts b/scripts/executable-packaging.ts new file mode 100644 index 0000000000..3e2b5f6d50 --- /dev/null +++ b/scripts/executable-packaging.ts @@ -0,0 +1,113 @@ +/** Shared production-deploy preparation for the SDK and SSH executable carriers. */ +import { existsSync } from 'node:fs' +import { cp, lstat, mkdir, readFile, readdir, realpath, rm, unlink } from 'node:fs/promises' +import { dirname, extname, join, resolve, sep } from 'node:path' + +/** + * Resolve pnpm without invoking a command shell, including Windows shims. + * @param args - pnpm arguments. + * @returns the executable and its argument vector. + */ +export function pnpmInvocation(args: string[]): [command: string, args: string[]] { + const entrypoint = process.env.npm_execpath?.trim() + if (entrypoint !== undefined && entrypoint !== '') { + const extension = extname(entrypoint).toLowerCase() + if (extension === '.js' || extension === '.cjs' || extension === '.mjs') { + return [process.execPath, [entrypoint, ...args]] + } + if (extension !== '.cmd') return [entrypoint, args] + } + const home = process.env.PNPM_HOME?.trim() + if (home !== undefined && home !== '') { + const packageBin = resolve(home, '..', 'pnpm', 'bin') + for (const filename of ['pnpm.mjs', 'pnpm.cjs']) { + const candidate = resolve(packageBin, filename) + if (existsSync(candidate)) return [process.execPath, [candidate, ...args]] + } + } + if (process.platform === 'win32') { + throw new Error('executable-packaging: pnpm must expose a JavaScript entrypoint through npm_execpath or PNPM_HOME on Windows.') + } + return ['pnpm', args] +} + +/** + * Restore direct dependencies omitted by pnpm's legacy hoister, excluding nested module trees. + * @param staging - deployed runtime root. + * @param sourceNodeModules - deploy source's installed dependencies. + * @returns names restored from the source installation. + */ +export async function restoreLegacyHoists(staging: string, sourceNodeModules: string): Promise { + const manifestPath = join(staging, 'package.json') + const manifest = JSON.parse(await readFile(manifestPath, 'utf8')) as { + dependencies?: Record + } + const restored: string[] = [] + for (const dependency of Object.keys(manifest.dependencies ?? {}).sort()) { + const destination = join(staging, 'node_modules', dependency) + if (existsSync(destination)) continue + const source = join(sourceNodeModules, dependency) + if (!existsSync(source)) { + throw new Error( + `executable-packaging: deployed dependency ${dependency} is absent from both ${destination} and ${source}.`, + ) + } + await mkdir(dirname(destination), { recursive: true }) + const nestedNodeModules = join(source, 'node_modules') + await cp(source, destination, { + recursive: true, + dereference: true, + filter: path => path !== nestedNodeModules && !path.startsWith(nestedNodeModules + sep), + }) + restored.push(dependency) + } + const stillMissing = Object.keys(manifest.dependencies ?? {}) + .filter(dependency => !existsSync(join(staging, 'node_modules', dependency))) + if (stillMissing.length > 0) { + throw new Error(`executable-packaging: staged dependencies remain missing: ${stillMissing.join(', ')}.`) + } + return restored +} + +/** + * Materialize deployed package links and remove command shims before embedding files. + * @param nodeModules - deployed dependency directory, owned by the current build. + */ +export async function materializeStagedLinks(nodeModules: string): Promise { + let remaining = await findSymlink(nodeModules) + while (remaining !== undefined) { + const segments = remaining.slice(nodeModules.length + 1).split(sep) + const binIndex = segments.lastIndexOf('.bin') + if (binIndex >= 0) { + const directory = join(nodeModules, ...segments.slice(0, binIndex + 1)) + if ((await lstat(directory)).isSymbolicLink()) await unlink(directory) + else await rm(directory, { recursive: true, force: true }) + remaining = await findSymlink(nodeModules) + continue + } + const destination = remaining + const source = await realpath(destination) + const nestedNodeModules = join(source, 'node_modules') + await unlink(destination) + await cp(source, destination, { + recursive: true, + dereference: true, + filter: path => path !== nestedNodeModules && !path.startsWith(nestedNodeModules + sep), + }) + remaining = await findSymlink(nodeModules) + } +} + +/** Return the first symbolic link below a directory, if one exists. */ +async function findSymlink(directory: string): Promise { + for (const entry of await readdir(directory, { withFileTypes: true })) { + const path = join(directory, entry.name) + const metadata = await lstat(path) + if (metadata.isSymbolicLink()) return path + if (metadata.isDirectory()) { + const nested = await findSymlink(path) + if (nested !== undefined) return nested + } + } + return undefined +} diff --git a/scripts/no-unknown-casts.baseline.json b/scripts/no-unknown-casts.baseline.json index 5bc8b14c95..c8648bb3b8 100644 --- a/scripts/no-unknown-casts.baseline.json +++ b/scripts/no-unknown-casts.baseline.json @@ -1534,11 +1534,6 @@ "aa5de2d4958ec64219565d53ec5a9d7f40f1f60037a2d52d1a9c3c65db034d73": 1, "be027af1ef5cb3bfe41eeb19b54dbb176ec7c23ae367d709059839f9851833d5": 1 }, - "packages/ptc-runtime/ptc-runtime-node/tests/launch.spec.ts": { - "57f598f462c77fae2b147b07c2e1228199c53dfd43652021af57712b4860732a": 1, - "9ddf7336f94d8ff4be8fe0ae7977c1846e6e92e7ea66180f8e2e6f8902b3c915": 1, - "e02136d8ab1f1fb84c6e772bbc863ceb3a0a3801f6eb158d5b9be074baa0885c": 1 - }, "packages/ptc-runtime/ptc-runtime-node/tests/output-json.spec.ts": { "8c4c486bbc27559714f4e0aaf376c72c49ac9157539b03c6c12853b8d3fc6e74": 1 }, diff --git a/scripts/prepare-linux-node-pty.sh b/scripts/prepare-linux-node-pty.sh new file mode 100644 index 0000000000..dce3f93bdd --- /dev/null +++ b/scripts/prepare-linux-node-pty.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Generate node-gyp's Makefile on the runner, then compile against glibc 2.28. +case "$(uname -m)" in + x86_64) image=quay.io/pypa/manylinux_2_28_x86_64 ;; + aarch64) image=quay.io/pypa/manylinux_2_28_aarch64 ;; + *) echo 'node-pty release preparation requires native Linux x64 or arm64' >&2; exit 1 ;; +esac +addon_dir="$(realpath packages/subprocess/subprocess-local/node_modules/node-pty)" +pnpm_setup_root="$(realpath "$(dirname "$(dirname "$PNPM_HOME")")")" +(cd "$addon_dir" && npm_config_build_from_source=true pnpm run install) +addon="$addon_dir/build/Release/pty.node" +test -f "$addon_dir/build/Makefile" +docker run --rm \ + --user "$(id -u):$(id -g)" \ + -v "$PWD:$PWD" \ + -v "$HOME/.cache/node-gyp:$HOME/.cache/node-gyp:ro" \ + -v "$pnpm_setup_root:$pnpm_setup_root:ro" \ + -w "$addon_dir" "$image" \ + bash -euxo pipefail -c 'rm -rf build/Release && make -C build -j2 BUILDTYPE=Release' +test -f "$addon" +readelf --version-info "$addon" diff --git a/scripts/ssh-helper/artifact.spec.ts b/scripts/ssh-helper/artifact.spec.ts new file mode 100644 index 0000000000..c39103566c --- /dev/null +++ b/scripts/ssh-helper/artifact.spec.ts @@ -0,0 +1,117 @@ +import { cp, lstat, mkdir, mkdtemp, readFile, rm, symlink, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { dirname, join } from 'node:path' +import { create as createTar } from 'tar' +import { expect, it, onTestFinished } from 'vitest' +import { artifactManifestSchema, fileDigest, payloadFiles, SSH_HELPER_TARGETS, verifyPayload } from './artifact.ts' +import { macosDeploymentVersions } from './native.ts' +import { extractHelper } from '../verify-ssh-helper-artifact.ts' +import { prepareSshRelease } from './release.ts' + +async function fixture() { + const root = await mkdtemp(join(tmpdir(), 'dsh-helper-archive-')) + onTestFinished(() => rm(root, { recursive: true, force: true })) + const payload = join(root, 'dsh-ssh-helper') + await mkdir(join(payload, 'native/system'), { recursive: true }) + await writeFile(join(payload, 'dsh-ssh-helper'), 'fixture executable') + await writeFile(join(payload, 'native/system/package.json'), '{}') + const metadata = { + format: 1, version: '1.0.0', commit: 'a'.repeat(40), dirty: false, + target: 'node24-linux-x64', protocol: 2, nodeVersion: 'v24.1.0', + files: await Promise.all((await payloadFiles(payload)).map(async path => ({ + path, sha256: await fileDigest(join(payload, path)), mode: (await lstat(join(payload, path))).mode & 0o777, + }))), + } + const save = async () => { await writeFile(join(payload, 'manifest.json'), JSON.stringify(metadata)) } + await save() + return { root, payload, metadata, save } +} + +it('validates the exact unpacked inventory and rejects altered bytes', async () => { + const test = await fixture() + expect(await verifyPayload(test.payload)).toEqual(test.metadata) + await writeFile(join(test.payload, 'dsh-ssh-helper'), 'changed executable') + await expect(verifyPayload(test.payload)).rejects.toThrow('digest differs') +}) + +it('rejects missing, undeclared and duplicate payload files', async () => { + const test = await fixture() + await writeFile(join(test.payload, 'undeclared'), '') + await expect(verifyPayload(test.payload)).rejects.toThrow('inventory') + await rm(join(test.payload, 'undeclared')) + test.metadata.files.push(test.metadata.files[0]!) + await test.save() + await expect(verifyPayload(test.payload)).rejects.toThrow('inventory') + test.metadata.files.pop() + await test.save() + await rm(join(test.payload, 'native/system/package.json')) + await expect(verifyPayload(test.payload)).rejects.toThrow('inventory') +}) + +it.each(['../outside', '/absolute', 'a/../b', 'a\\b', 'a//b'])('rejects unsafe manifest path %s', async (path) => { + const test = await fixture() + expect(() => artifactManifestSchema.parse({ ...test.metadata, files: [{ ...test.metadata.files[0], path }] })).toThrow('payload path') +}) + +it.skipIf(process.platform === 'win32')('rejects links before extracting an archive', async () => { + const test = await fixture() + await symlink('/etc/passwd', join(test.payload, 'outside')) + await expect(payloadFiles(test.payload)).rejects.toThrow('symbolic link') + const archive = join(test.root, 'linked.tar.gz') + await createTar({ cwd: test.root, file: archive, gzip: true }, ['dsh-ssh-helper']) + const extracted = join(test.root, 'unpack') + await mkdir(extracted) + await expect(extractHelper(archive, extracted)).rejects.toThrow('Invalid SSH helper archive entry') +}) + +it('extracts and verifies a portable archive in a new directory', async () => { + const test = await fixture() + const archive = join(test.root, 'helper.tar.gz') + await createTar({ cwd: test.root, file: archive, gzip: true, portable: true }, ['dsh-ssh-helper']) + const extracted = join(test.root, 'relocated') + await mkdir(extracted) + const directory = await extractHelper(archive, extracted) + expect(dirname(directory)).toBe(extracted) + expect(await verifyPayload(directory)).toEqual(test.metadata) + expect(await readFile(join(directory, 'dsh-ssh-helper'), 'utf8')).toBe('fixture executable') +}) + +it('reads minimum macOS versions without accepting a linked library version as the OS version', () => { + expect(macosDeploymentVersions('Load command 0\ncmd LC_VERSION_MIN_MACOSX\nversion 11.0\nLoad command 1\ncmd LC_LOAD_DYLIB\ncurrent version 1311.100.3\nLoad command 2\ncmd LC_BUILD_VERSION\nminos 14.0\nsdk 15.1\n')) + .toEqual(['11.0', '14.0']) + expect(macosDeploymentVersions('Load command 0\ncmd LC_LOAD_DYLIB\ncurrent version 14.0\n')).toEqual([]) +}) + +it('publishes only a complete clean-source matrix with native and no-Node evidence', async () => { + const test = await fixture() + const archives = join(test.root, 'release') + await mkdir(archives) + const checks = ['executable-handshake', 'guarded-files-and-streams', 'managed-process-output', 'process-cancellation', 'native-pty', 'native-flock', 'embedded-ptc-and-deadline', 'sandbox-enforcement'] + for (const target of SSH_HELPER_TARGETS) { + const parent = join(test.root, target) + await mkdir(parent) + const payload = join(parent, 'dsh-ssh-helper') + await cp(test.payload, payload, { recursive: true }) + const manifest = { ...test.metadata, target } + await writeFile(join(payload, 'manifest.json'), JSON.stringify(manifest)) + const archive = join(archives, `dsh-ssh-helper-1.0.0-${target.slice('node24-'.length)}.tar.gz`) + await createTar({ cwd: parent, file: archive, gzip: true, portable: true }, ['dsh-ssh-helper']) + await writeFile(`${archive}.sha256`, `${await fileDigest(archive)} archive\n`) + const runtime = { checks, nodeVersion: 'v24.1.0', platform: target.includes('linux') ? 'linux' : 'darwin', sandboxLane: 'required' } + await writeFile(join(archives, `${target}.json`), JSON.stringify({ manifest, runtime, restrictedWorker: true, readonlyInstall: true, concurrentColdStarts: 2 })) + if (target.includes('linux')) { + await writeFile(join(archives, `${target}.ssh.json`), JSON.stringify({ manifest, runtime: { ...runtime, checks: [...checks, 'target-has-no-node'], sandboxLane: 'portable' }, glibc: 'glibc 2.28' })) + await writeFile(join(archives, `${target}.landlock.json`), JSON.stringify({ manifest, runtime, expectedBackend: 'landlock-run' })) + } + } + expect(await prepareSshRelease(archives, '1.0.0', test.metadata.commit)).toHaveLength(5) + expect((await readFile(join(archives, 'SHA256SUMS'), 'utf8')).trim().split('\n')).toHaveLength(4) + await expect(prepareSshRelease(archives, '1.0.0', 'b'.repeat(40))).rejects.toThrow() + const report = join(archives, 'node24-linux-x64.ssh.json') + const evidence = JSON.parse(await readFile(report, 'utf8')) as { runtime: { checks: string[] } } + evidence.runtime.checks = evidence.runtime.checks.filter(check => check !== 'target-has-no-node') + await writeFile(report, JSON.stringify(evidence)) + await expect(prepareSshRelease(archives, '1.0.0', test.metadata.commit)).rejects.toThrow('lacks target-has-no-node') + await rm(report) + await expect(prepareSshRelease(archives, '1.0.0', test.metadata.commit)).rejects.toThrow('ENOENT') +}) diff --git a/scripts/ssh-helper/artifact.ts b/scripts/ssh-helper/artifact.ts new file mode 100644 index 0000000000..79528c28ca --- /dev/null +++ b/scripts/ssh-helper/artifact.ts @@ -0,0 +1,88 @@ +/** Versioned archive metadata and file integrity checks for SSH helper releases. */ +import { createHash } from 'node:crypto' +import { lstat, readFile, readdir } from 'node:fs/promises' +import { join, relative, sep } from 'node:path' +import { z } from 'zod' + +/** Native target identifiers accepted by the builder and release workflow. */ +export const SSH_HELPER_TARGETS = ['node24-linux-x64', 'node24-linux-arm64', 'node24-macos-x64', 'node24-macos-arm64'] as const +/** One qualified OS and architecture for a bundled Node 24 helper. */ +export type SshHelperTarget = typeof SSH_HELPER_TARGETS[number] + +const payloadPath = z.string().min(1).refine(value => + !value.startsWith('/') && !value.includes('\\') && !value.includes('\0') + && value.split('/').every(part => part !== '' && part !== '.' && part !== '..'), 'invalid payload path') + +/** Parser for metadata supplied beside an executable, including every runtime resource. */ +export const artifactManifestSchema = z.object({ + format: z.literal(1), + version: z.string().regex(/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?$/), + commit: z.string().regex(/^[a-f0-9]{40}$/), + dirty: z.boolean(), + target: z.enum(SSH_HELPER_TARGETS), + protocol: z.number().int().positive(), + nodeVersion: z.string().regex(/^v24\./), + files: z.array(z.object({ + path: payloadPath, sha256: z.string().regex(/^[a-f0-9]{64}$/), mode: z.number().int().min(0).max(0o777), + }).strict()).min(1), +}).strict() + +/** Results written by the isolated Loader consumer after its assertions succeed. */ +export const runtimeReportSchema = z.object({ + checks: z.array(z.string()), platform: z.enum(['linux', 'darwin']), nodeVersion: z.string(), + sandboxLane: z.enum(['required', 'unavailable', 'portable']), +}).strict() + +/** Parsed release metadata; files excludes manifest.json to avoid a self-referential digest. */ +export type ArtifactManifest = z.infer + +/** + * Enumerate an owned payload without following links outside its directory. + * @param root - unpacked payload directory. + * @returns sorted POSIX relative file paths, excluding manifest.json. + */ +export async function payloadFiles(root: string): Promise { + const paths: string[] = [] + const visit = async (directory: string): Promise => { + for (const name of await readdir(directory)) { + const path = join(directory, name) + const metadata = await lstat(path) + if (metadata.isSymbolicLink()) throw new Error(`SSH helper payload contains a symbolic link: ${path}`) + if (metadata.isDirectory()) await visit(path) + else if (metadata.isFile()) paths.push(relative(root, path).split(sep).join('/')) + else throw new Error(`SSH helper payload contains a non-regular file: ${path}`) + } + } + await visit(root) + return paths.filter(path => path !== 'manifest.json').sort() +} + +/** + * Hash the exact file bytes used for installation or publication. + * @param path - regular file path. + * @returns lowercase SHA-256. + */ +export async function fileDigest(path: string): Promise { + return createHash('sha256').update(await readFile(path)).digest('hex') +} + +/** + * Verify all payload bytes and permissions before running an unpacked release. + * @param directory - unpacked payload root. + * @returns the validated metadata; missing, duplicate, extra, or altered files reject. + */ +export async function verifyPayload(directory: string): Promise { + const manifest = artifactManifestSchema.parse(JSON.parse(await readFile(join(directory, 'manifest.json'), 'utf8'))) + const actual = await payloadFiles(directory) + const declared = manifest.files.map(file => file.path).sort() + if (new Set(declared).size !== declared.length || JSON.stringify(actual) !== JSON.stringify(declared)) { + throw new Error('SSH helper payload file inventory differs from manifest.json') + } + if (!declared.includes('dsh-ssh-helper') || !declared.includes('native/system/package.json')) throw new Error('SSH helper payload omits required runtime files') + for (const file of manifest.files) { + const path = join(directory, file.path) + if (await fileDigest(path) !== file.sha256) throw new Error(`SSH helper payload digest differs: ${file.path}`) + if (((await lstat(path)).mode & 0o777) !== file.mode) throw new Error(`SSH helper payload permissions differ: ${file.path}`) + } + return manifest +} diff --git a/scripts/ssh-helper/native.ts b/scripts/ssh-helper/native.ts new file mode 100644 index 0000000000..a6f4db14ac --- /dev/null +++ b/scripts/ssh-helper/native.ts @@ -0,0 +1,74 @@ +/** Inspect every native payload, including modules embedded in the executable. */ +import { execFileSync } from 'node:child_process' +import { open } from 'node:fs/promises' +import { join } from 'node:path' +import { payloadFiles, type SshHelperTarget } from './artifact.ts' + +function newer(version: string, ceiling: number[]): boolean { + const components = version.split('.').map(Number) + for (let index = 0; index < Math.max(components.length, ceiling.length); index += 1) { + const difference = (components[index] ?? 0) - (ceiling[index] ?? 0) + if (difference !== 0) return difference > 0 + } + return false +} + +/** + * Read deployment versions without confusing linked-library versions with OS requirements. + * @param output - otool load-command text, possibly containing multiple architecture slices. + * @returns every minimum macOS version declared by the binary. + */ +export function macosDeploymentVersions(output: string): string[] { + let command: string | undefined + const versions: string[] = [] + for (const line of output.split('\n')) { + const text = line.trim() + if (/^Load command \d+$/.test(text)) command = undefined + else if (text.startsWith('cmd ')) command = text.slice(4) + else { + const match = /^(minos|version)\s+(\d+(?:\.\d+)+)$/.exec(text) + if (match !== null && ((command === 'LC_BUILD_VERSION' && match[1] === 'minos') || (command === 'LC_VERSION_MIN_MACOSX' && match[1] === 'version'))) versions.push(match[2] as string) + } + } + return versions +} + +/** + * Inspect all ELF or Mach-O files for the requested architecture and deployment baseline. + * @param directory - symlink-free staging or payload directory. + * @param target - build target whose ABI must match every native file. + * @returns relative paths of inspected native files. + */ +export async function verifyNativePayload(directory: string, target: SshHelperTarget): Promise { + const inspected: string[] = [] + const linux = target.includes('-linux-') + const arch = target.endsWith('-arm64') ? 'arm64' : 'x64' + for (const path of await payloadFiles(directory)) { + const filename = join(directory, path) + const file = await open(filename, 'r') + const header = Buffer.alloc(4) + try { await file.read(header, 0, 4, 0) } finally { await file.close() } + const magic = header.readUInt32BE() + const elf = magic === 0x7f454c46 + const macho = [0xcffaedfe, 0xcefaedfe, 0xfeedfacf, 0xfeedface, 0xcafebabe, 0xbebafeca, 0xcafebabf].includes(magic) + if (!elf && !macho) continue + if (linux !== elf) throw new Error(`Native file does not belong to ${target}: ${path}`) + if (elf) { + const elfHeader = execFileSync('readelf', ['--file-header', filename], { encoding: 'utf8' }) + const expected = arch === 'arm64' ? /Machine:\s+AArch64/ : /Machine:\s+Advanced Micro Devices X86-64/ + if (!expected.test(elfHeader)) throw new Error(`ELF architecture differs from ${target}: ${path}`) + const versions = execFileSync('readelf', ['--version-info', filename], { encoding: 'utf8' }) + for (const match of versions.matchAll(/\bGLIBC_(\d+(?:\.\d+)+)/g)) { + if (newer(match[1] as string, [2, 28])) throw new Error(`${path} requires GLIBC_${match[1]}, exceeding 2.28`) + } + } else { + execFileSync('lipo', [filename, '-verify_arch', arch === 'arm64' ? 'arm64' : 'x86_64'], { stdio: 'pipe' }) + const loads = execFileSync('otool', ['-l', filename], { encoding: 'utf8' }) + const versions = macosDeploymentVersions(loads) + if (versions.length === 0) throw new Error(`Mach-O has no deployment version: ${path}`) + if (versions.some(version => newer(version, [14, 0]))) throw new Error(`${path} requires macOS newer than 14.0`) + } + inspected.push(path) + } + return inspected +} diff --git a/scripts/ssh-helper/probe.ts b/scripts/ssh-helper/probe.ts new file mode 100644 index 0000000000..48cb6ef5b9 --- /dev/null +++ b/scripts/ssh-helper/probe.ts @@ -0,0 +1,42 @@ +/** Short handshake against an actual executable, with bounded process ownership. */ +import { spawn } from 'node:child_process' +import { z } from 'zod' +import { SshRpcPeer, SSH_PROTOCOL_VERSION } from '../../packages/ssh/ssh/src/protocol.ts' +import { helloSchema } from '../../packages/ssh/ssh/src/schemas.ts' + +/** + * Run a packaged helper and read its runtime version through the private wire protocol. + * @param executable - physical executable under test. + * @param workspace - existing directory supplied for the handshake. + * @returns the validated handshake after the helper has exited. + */ +export async function probeHelper(executable: string, workspace: string): Promise> { + const child = spawn(executable, [], { cwd: workspace, env: { ...process.env, NODE_OPTIONS: '--disable-sigusr1' }, stdio: ['pipe', 'pipe', 'pipe'] }) + let diagnostic = '' + child.stderr.on('data', (chunk: Buffer) => { diagnostic = (diagnostic + chunk.toString()).slice(-8192) }) + const closed = new Promise((resolve, reject) => { + child.once('error', reject) + child.once('close', (code, signal) => { + if (code === 0 && signal === null) resolve() + else reject(new Error(`SSH helper probe exited (${code ?? signal}): ${diagnostic}`)) + }) + }) + void closed.catch(() => {}) + const rpc = new SshRpcPeer(child.stdout, child.stdin, 64 * 1024 * 1024, 128) + child.once('error', (error) => { rpc.close(error) }) + const force = setTimeout(() => { child.kill('SIGKILL') }, 30_000) + try { + const hello = await rpc.request('hello', { protocol: SSH_PROTOCOL_VERSION, workspace, leaseMs: 30_000 }, helloSchema, AbortSignal.timeout(20_000)) + await rpc.request('close', {}, z.null(), AbortSignal.timeout(5000)) + child.stdin.end() + await closed + return hello + } catch (error) { + child.kill('SIGTERM') + await closed.catch(() => {}) + throw new Error(`SSH helper handshake failed: ${diagnostic}`, { cause: error }) + } finally { + clearTimeout(force) + rpc.close() + } +} diff --git a/scripts/ssh-helper/release.ts b/scripts/ssh-helper/release.ts new file mode 100644 index 0000000000..31643ae45c --- /dev/null +++ b/scripts/ssh-helper/release.ts @@ -0,0 +1,76 @@ +/** Require four complete, same-commit executable reports before publishing release assets. */ +import assert from 'node:assert/strict' +import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { basename, join, resolve } from 'node:path' +import { parseArgs } from 'node:util' +import { z } from 'zod' +import { artifactManifestSchema, fileDigest, runtimeReportSchema, SSH_HELPER_TARGETS, verifyPayload, type ArtifactManifest } from './artifact.ts' +import { extractHelper } from '../verify-ssh-helper-artifact.ts' + +const reportSchema = z.object({ + manifest: artifactManifestSchema, + runtime: runtimeReportSchema, + restrictedWorker: z.boolean().optional(), expectedBackend: z.string().nullable().optional(), glibc: z.string().optional(), + readonlyInstall: z.boolean().optional(), concurrentColdStarts: z.number().optional(), +}).strict() +const coreChecks = ['executable-handshake', 'guarded-files-and-streams', 'managed-process-output', 'process-cancellation', 'native-pty', 'native-flock', 'embedded-ptc-and-deadline'] + +async function report(path: string, manifest: ArtifactManifest, checks: readonly string[]) { + const evidence = reportSchema.parse(JSON.parse(await readFile(path, 'utf8'))) + assert.deepEqual(evidence.manifest, manifest, `Report metadata differs: ${path}`) + assert.equal(evidence.runtime.nodeVersion, manifest.nodeVersion) + assert.equal(evidence.runtime.platform, manifest.target.includes('-linux-') ? 'linux' : 'darwin') + for (const check of [...coreChecks, ...checks]) assert(evidence.runtime.checks.includes(check), `Report ${path} lacks ${check}`) + return evidence +} + +/** + * Validate archives and their required native and SSH evidence, then write the release checksum list. + * @param directory - downloaded artifacts from one successful four-target workflow run. + * @param version - version selected by the release tag. + * @param commit - immutable source commit checked out by every build job. + * @returns the exact archive and checksum files permitted for upload. + */ +export async function prepareSshRelease(directory: string, version: string, commit: string): Promise { + const temporary = await mkdtemp(join(tmpdir(), 'dsh-helper-release-')) + const archives: string[] = [] + const sums: string[] = [] + try { + for (const target of SSH_HELPER_TARGETS) { + const archive = join(directory, `dsh-ssh-helper-${version}-${target.slice('node24-'.length)}.tar.gz`) + const digest = await fileDigest(archive) + assert.equal(digest, (await readFile(`${archive}.sha256`, 'utf8')).split(/\s/)[0]) + const destination = join(temporary, target) + await mkdir(destination) + const manifest = await verifyPayload(await extractHelper(archive, destination)) + assert.equal(manifest.target, target) + assert.equal(manifest.version, version) + assert.equal(manifest.commit, commit) + assert.equal(manifest.dirty, false, 'Release artifacts must come from a clean source checkout') + const native = await report(join(directory, `${target}.json`), manifest, ['sandbox-enforcement']) + assert.equal(native.runtime.sandboxLane, 'required') + assert.equal(native.readonlyInstall, true) + assert.equal(native.concurrentColdStarts, 2) + if (target.includes('-macos-')) assert.equal(native.restrictedWorker, true) + else { + const ssh = await report(join(directory, `${target}.ssh.json`), manifest, ['target-has-no-node']) + assert.equal(ssh.glibc, 'glibc 2.28') + const landlock = await report(join(directory, `${target}.landlock.json`), manifest, ['sandbox-enforcement']) + assert.equal(landlock.expectedBackend, 'landlock-run') + assert.equal(landlock.runtime.sandboxLane, 'required') + } + archives.push(archive) + sums.push(`${digest} ${basename(archive)}`) + } + const checksums = join(directory, 'SHA256SUMS') + await writeFile(checksums, `${sums.join('\n')}\n`) + return [...archives, checksums] + } finally { await rm(temporary, { recursive: true, force: true }) } +} + +if (import.meta.main) { + const { values } = parseArgs({ options: { directory: { type: 'string' }, version: { type: 'string' }, commit: { type: 'string' } } }) + if (values.directory === undefined || values.version === undefined || values.commit === undefined) throw new Error('Release verification requires --directory, --version and --commit') + console.log((await prepareSshRelease(resolve(values.directory), values.version, values.commit)).join('\n')) +} diff --git a/scripts/ssh-helper/worker-probe.ts b/scripts/ssh-helper/worker-probe.ts new file mode 100644 index 0000000000..f84d598258 --- /dev/null +++ b/scripts/ssh-helper/worker-probe.ts @@ -0,0 +1,67 @@ +/** Run the embedded worker while macOS denies access to the checkout and host Node. */ +import assert from 'node:assert/strict' +import { spawn } from 'node:child_process' +import { Duplex, type Readable, type Writable } from 'node:stream' +import { join } from 'node:path' +import { z } from 'zod' +import { JsonChannel } from '../../packages/ptc-runtime/ptc-runtime-node/src/channel.ts' +import { decodePtcJsonWire } from '../../packages/ptc-runtime/ptc-runtime-node/src/json-wire.ts' +import { SUBPROCESS_CONTROL_ENV, SUBPROCESS_CONTROL_FD } from '../../packages/subprocess/subprocess/src/control.ts' + +/** + * Execute a PTC program with the host runtime and source files inaccessible. + * @param executable - relocated helper executable. + * @param workspace - isolated program working directory. + * @param home - empty helper home and native-resource cache. + * @param checkout - real source checkout path denied by Seatbelt. + * @param hostNode - real host Node path denied by Seatbelt. + */ +export async function probeRestrictedWorker( + executable: string, workspace: string, home: string, checkout: string, hostNode: string, +): Promise { + const profile = `(version 1)(allow default)${[checkout, hostNode].map(path => `(deny file-read* (subpath ${JSON.stringify(path)}))(deny process-exec (subpath ${JSON.stringify(path)}))`).join('')}` + const child = spawn('/usr/bin/sandbox-exec', ['-p', profile, executable, '1048576'], { + cwd: workspace, env: { HOME: home, TMPDIR: home, PATH: '/usr/bin:/bin', DSH_PTC_RUNTIME_NODE: '1', [SUBPROCESS_CONTROL_ENV]: 'pipe', NODE_OPTIONS: '--disable-sigusr1' }, + stdio: ['ignore', 'pipe', 'pipe', 'ignore', 'ignore', 'ignore', 'ignore', 'pipe'], + }) + const completed = Promise.withResolvers() + let diagnostic = '' + assert(child.stderr !== null && child.stdout !== null) + child.stderr.on('data', (chunk: Buffer) => { diagnostic = (diagnostic + chunk.toString()).slice(-8192) }) + child.stdout.resume() + const exited = new Promise((resolve, reject) => { + child.once('error', reject) + child.once('close', (code, signal) => { + if (code === 0 && signal === null) resolve() + else reject(new Error(`Restricted PTC worker exited (${code ?? signal}): ${diagnostic}`)) + }) + }) + void exited.catch((error: unknown) => { completed.reject(error) }) + const streams: ReadonlyArray = child.stdio + const control = streams[SUBPROCESS_CONTROL_FD] + assert(control instanceof Duplex) + const channel = new JsonChannel(control, 1_048_576, (raw) => { + const message = z.object({ type: z.string(), value: z.unknown().optional(), error: z.unknown().optional() }).parse(raw) + if (message.type === 'ready') { + const code = `const fs=await import('node:fs/promises'); const denied=[]; for(const path of ${JSON.stringify([join(checkout, 'package.json'), hostNode])}) { try { await fs.readFile(path); denied.push('readable') } catch(error) { denied.push(error.code) } } return {executable:process.execPath,env:Object.keys(process.env),denied};` + void channel.send({ type: 'boot', data: { code, namespaces: [], maxOutputBytes: 65_536 } }) + .catch((error: unknown) => { completed.reject(error) }) + } else if (message.type === 'done') { + if (message.error !== undefined) completed.reject(new Error(JSON.stringify(message.error))) + else completed.resolve(decodePtcJsonWire(message.value)) + channel.close() + } else completed.reject(new Error(`Unexpected restricted-worker message: ${message.type}`)) + }, (error) => { completed.reject(error) }) + const force = setTimeout(() => { child.kill('SIGKILL') }, 20_000) + try { + const result = z.object({ executable: z.string(), env: z.array(z.string()), denied: z.array(z.enum(['EPERM', 'EACCES'])) }).parse(await completed.promise) + assert.equal(result.executable, executable) + assert.deepEqual(result.env, []) + assert.equal(result.denied.length, 2) + await exited + } finally { + channel.close() + child.kill('SIGTERM') + try { await exited } finally { clearTimeout(force) } + } +} diff --git a/scripts/type-equiv.manifest.json b/scripts/type-equiv.manifest.json index 13b995afc4..b92607aa0d 100644 --- a/scripts/type-equiv.manifest.json +++ b/scripts/type-equiv.manifest.json @@ -2176,6 +2176,11 @@ "symbol": "PtcRunSandbox", "source": "packages/ptc-runtime/ptc-runtime/src/types.ts" }, + { + "doc": "docs/subsystems/ssh.md", + "symbol": "HelperLaunch", + "source": "packages/ssh/ssh/src/index.ts" + }, { "doc": "docs/subsystems/ssh.md", "symbol": "Config", diff --git a/scripts/verify-package-readme-model-experience.ts b/scripts/verify-package-readme-model-experience.ts index d29c12317c..0b54e5d9c4 100644 --- a/scripts/verify-package-readme-model-experience.ts +++ b/scripts/verify-package-readme-model-experience.ts @@ -52,6 +52,7 @@ const SENTENCE_MODEL_EXPERIENCE: Readonly> = { 'packages/host/product-telemetry-otel': { kind: 'none', reason: 'The plugin exports explicit analytics records without contributing model context.' }, 'packages/api/terminal-controller': { kind: 'none', reason: 'User-owned terminal processes and screen streams never enter model requests or Session events.' }, 'packages/client/ui-sidebar-terminal': { kind: 'none', reason: 'The browser renders user terminal screens without exposing them to the model.' }, + 'packages/ssh/ssh-helper-runtime': { kind: 'none', reason: 'The private executable carrier registers no model-facing content; its providers and consumers own operation results.' }, 'packages/ssh/ssh': { kind: 'none', reason: 'The connection owner transports private provider operations; consumers own all model-facing content.' }, 'packages/ssh/fs-ssh': { kind: 'indirect', reason: 'The remote filesystem delegates model rendering to the existing filesystem consumers.' }, 'packages/ssh/subprocess-ssh': { kind: 'indirect', reason: 'The remote process provider delegates model rendering to Bash, terminal, LSP and ptc-runtime consumers.' }, diff --git a/scripts/verify-runtime-closure.spec.ts b/scripts/verify-runtime-closure.spec.ts index 942cb2dfeb..38a0c61cfd 100644 --- a/scripts/verify-runtime-closure.spec.ts +++ b/scripts/verify-runtime-closure.spec.ts @@ -39,6 +39,16 @@ afterEach(() => { }) describe('verifyRuntimeClosure', () => { + it('checks a private worker closure without requiring application presets', async () => { + const manifestPath = 'packages/ssh/ssh-helper-runtime/package.json' + const root = fixture({ [manifestPath]: { name: 'helper', dependencies: { '@scope/worker': 'workspace:^' } } }) + workspace(root, '@scope/worker', { peerDependencies: { '@scope/peer': 'workspace:^' } }) + workspace(root, '@scope/peer', {}) + expect((await verifyRuntimeClosure(root, manifestPath, false)).failures).toEqual(['helper -> @scope/worker -> @scope/peer']) + writeFileSync(join(root, manifestPath), JSON.stringify({ name: 'helper', dependencies: { '@scope/worker': 'workspace:^', '@scope/peer': 'workspace:^' } })) + expect(await verifyRuntimeClosure(root, manifestPath, false)).toMatchObject({ failures: [], presetCount: 0 }) + }) + it('requires only plugins active for each published target', async () => { const root = fixture({ 'python/sdk-runtime/package.json': { name: 'runtime', dependencies: { '@scope/shared': 'workspace:^' } }, diff --git a/scripts/verify-runtime-closure.ts b/scripts/verify-runtime-closure.ts index a9109584be..8694dcaa7d 100644 --- a/scripts/verify-runtime-closure.ts +++ b/scripts/verify-runtime-closure.ts @@ -42,18 +42,20 @@ export interface RuntimeClosureResult { * Check that the runtime manifest contains every shipped-preset plugin and workspace peer. * @param root repository root containing the runtime manifest and shipped presets. * @param manifestPath runtime manifest path relative to {@link root}. + * @param includePresets whether this carrier includes the shipped application presets. * @returns the discovered preset count, reachable workspace package count, and violations. */ export async function verifyRuntimeClosure( root: string, manifestPath = 'python/sdk-runtime/package.json', + includePresets = true, ): Promise { const runtimeManifest = await loadManifest(resolve(root, manifestPath)) const runtimeName = runtimeManifest.name ?? manifestPath const workspace = await loadWorkspacePackages(root) const runtimeDependencies = runtimeManifest.dependencies ?? {} - const platforms = await loadJson(resolve(root, 'python/sdk-runtime/platforms.json')) - const presetPaths = globSync(AGENT_PRESET_GLOB, { cwd: root }).sort() + const platforms = includePresets ? await loadJson(resolve(root, 'python/sdk-runtime/platforms.json')) : {} + const presetPaths = includePresets ? globSync(AGENT_PRESET_GLOB, { cwd: root }).sort() : [] const targets = Object.keys(platforms).sort() const parents = new Map() const queue: string[] = [] @@ -65,8 +67,8 @@ export async function verifyRuntimeClosure( } const failures: string[] = [] - if (presetPaths.length === 0) failures.push(`no agent presets matched ${AGENT_PRESET_GLOB}`) - if (targets.length === 0) failures.push('python/sdk-runtime/platforms.json defines no runtime targets') + if (includePresets && presetPaths.length === 0) failures.push(`no agent presets matched ${AGENT_PRESET_GLOB}`) + if (includePresets && targets.length === 0) failures.push('python/sdk-runtime/platforms.json defines no runtime targets') failures.push(...await missingPresetPlugins(root, runtimeDependencies, presetPaths, targets)) for (let index = 0; index < queue.length; index += 1) { const packageName = queue[index] diff --git a/scripts/verify-ssh-helper-artifact.ts b/scripts/verify-ssh-helper-artifact.ts new file mode 100644 index 0000000000..a0a4a3acaa --- /dev/null +++ b/scripts/verify-ssh-helper-artifact.ts @@ -0,0 +1,167 @@ +/** Unpack and run a release archive through the actual Loader-mounted SSH consumers. */ +import { spawn } from 'node:child_process' +import { chmod, mkdir, mkdtemp, readFile, readdir, realpath, rm, writeFile } from 'node:fs/promises' +import { homedir } from 'node:os' +import { dirname, join, resolve } from 'node:path' +import { parseArgs } from 'node:util' +import { extract, list } from 'tar' +import { fileDigest, runtimeReportSchema, verifyPayload, type ArtifactManifest } from './ssh-helper/artifact.ts' +import { probeRestrictedWorker } from './ssh-helper/worker-probe.ts' +import { verifyNativePayload } from './ssh-helper/native.ts' + +const root = resolve(import.meta.dirname, '..') +const fixtures = join(root, 'packages/ssh/ssh-helper-runtime/tests/fixtures') + +async function directoryPermissions(directory: string, mode: number): Promise { + await chmod(directory, mode) + for (const entry of await readdir(directory, { withFileTypes: true })) { + if (entry.isDirectory()) await directoryPermissions(join(directory, entry.name), mode) + } +} + +async function makeReadonly(directory: string, manifest: ArtifactManifest): Promise { + for (const file of manifest.files) await chmod(join(directory, file.path), file.mode & ~0o222) + await chmod(join(directory, 'manifest.json'), 0o444) + await directoryPermissions(directory, 0o555) +} + +/** + * Reject links and escaping paths before extracting a helper's release archive. + * @param archive - gzip tar file supplied by the build. + * @param directory - empty extraction directory owned by the caller. + * @returns the extracted payload root. + */ +export async function extractHelper(archive: string, directory: string): Promise { + const entries: { path: string; type: string }[] = [] + await list({ file: archive, onReadEntry: (entry) => { entries.push({ path: entry.path, type: entry.type }) } }) + const seen = new Set() + for (const entry of entries) { + const path = entry.path.replace(/\/$/, '') + if (!['File', 'Directory'].includes(entry.type) || path.split('/').some(part => part === '..' || part === '.' || part === '') + || path.includes('\\') || !path.startsWith('dsh-ssh-helper') || (path !== 'dsh-ssh-helper' && !path.startsWith('dsh-ssh-helper/')) || seen.has(path)) { + throw new Error(`Invalid SSH helper archive entry: ${entry.path} (${entry.type})`) + } + seen.add(path) + } + if (!seen.has('dsh-ssh-helper/manifest.json')) throw new Error('SSH helper archive has no manifest.json') + await extract({ file: archive, cwd: directory, strict: true }) + return join(directory, 'dsh-ssh-helper') +} + +/** + * Run the isolated consumer process and await all output and process teardown. + * @param config - generated Loader configuration. + * @param report - output report path. + * @param sandbox - expected confinement availability on this lane. + * @param environment - isolated client environment, including any test-owned SSH wrapper. + */ +export async function runArtifactDriver(config: string, report: string, sandbox: string, environment: NodeJS.ProcessEnv): Promise { + const child = spawn(process.execPath, ['--import', 'tsx/esm', join(fixtures, 'driver.ts'), config, report, sandbox], { + cwd: root, stdio: ['ignore', 'pipe', 'pipe'], env: environment, + }) + let output = '' + for (const stream of [child.stdout, child.stderr]) stream.on('data', (chunk: Buffer) => { + output = (output + chunk.toString()).slice(-32_768) + }) + const force = setTimeout(() => { child.kill('SIGKILL') }, 120_000) + try { + await new Promise((resolve, reject) => { + child.once('error', reject) + child.once('close', (code, signal) => { + if (code === 0 && signal === null) resolve() + else reject(new Error(`SSH artifact consumer exited (${code ?? signal}):\n${output}`)) + }) + }) + } finally { clearTimeout(force) } +} + +/** + * Serialize the shared provider composition around a selected helper transport. + * @param connection - concrete Loader connection row, direct fixture or OpenSSH. + * @param workspace - target-side workspace path. + * @returns YAML consumed by the normal application boot path. + */ +export function artifactComposition(connection: { id: string; name: string; config: object }, workspace: string): string { + const rows = [ + { id: 'projections', name: '@deepseek-ai/dsh-session-projection' }, + { id: 'policy', name: '@deepseek-ai/dsh-sandbox-policy', config: { mode: 'workspace-write', workspaceRoot: workspace } }, + connection, + { id: 'fs', name: '@deepseek-ai/dsh-fs-ssh' }, + { id: 'subprocess', name: '@deepseek-ai/dsh-subprocess-ssh' }, + { id: 'sandbox', name: '@deepseek-ai/dsh-sandbox-ssh' }, + ] + return rows.map(row => `- ${JSON.stringify(row)}`).join('\n') + + '\n- id: ptc\n name: "@deepseek-ai/dsh-ptc-runtime-node"\n inject: [ssh]\n config:\n launch: !!js ctx.ssh.ptcLaunch\n' +} + +/** + * Verify archive integrity and all core operations after relocation outside the checkout. + * @param argv - verifier flags. + */ +export async function verifySshHelper(argv: string[]): Promise { + const { values } = parseArgs({ args: argv, options: { + archive: { type: 'string' }, sandbox: { type: 'string', default: 'required' }, + report: { type: 'string' }, + backend: { type: 'string' }, + } }) + if (values.archive === undefined || !['required', 'unavailable'].includes(values.sandbox)) throw new Error('Use --archive= --sandbox=required|unavailable') + if (values.backend !== undefined && !['bwrap', 'landlock-run', 'sandbox-exec'].includes(values.backend)) throw new Error('Unknown expected sandbox backend') + if (values.backend === 'landlock-run' && process.platform !== 'linux') throw new Error('Landlock verification requires Linux') + const archive = resolve(values.archive) + const checksum = (await readFile(`${archive}.sha256`, 'utf8')).split(/\s/)[0] + if (await fileDigest(archive) !== checksum) throw new Error('SSH helper archive checksum mismatch') + const temporary = await realpath(await mkdtemp(join(homedir(), '.dsh-helper-check-'))) + try { + const installed = await extractHelper(archive, temporary) + const manifest = await verifyPayload(installed) + const host = `node24-${process.platform === 'darwin' ? 'macos' : process.platform}-${process.arch}` + if (manifest.target !== host) throw new Error(`Artifact ${manifest.target} cannot be validated on ${host}`) + await verifyNativePayload(installed, manifest.target) + await makeReadonly(installed, manifest) + const workspace = join(temporary, 'workspace') + const home = join(temporary, 'home') + await mkdir(workspace); await mkdir(home) + let path = '/usr/bin:/bin' + if (values.backend === 'landlock-run') { + const bin = join(temporary, 'bin') + await mkdir(bin) + await writeFile(join(bin, 'bwrap'), '#!/bin/sh\nexit 127\n') + await chmod(join(bin, 'bwrap'), 0o755) + path = `${bin}:${path}` + } + const executable = join(installed, 'dsh-ssh-helper') + const helperHash = await fileDigest(executable) + const environment = { + HOME: home, PATH: process.env.PATH, DSH_HOME: join(home, 'dsh'), + TSX_TSCONFIG_PATH: join(root, 'tsconfig.base.json'), DSH_TELEMETRY_DISABLED: '1', + ...(values.backend === undefined ? {} : { DSH_EXPECT_SANDBOX_RUNNER: values.backend }), + } + const runs = await Promise.allSettled([0, 1].map(async (index) => { + const cwd = join(workspace, String(index)) + await mkdir(cwd) + const config = join(temporary, `cordis-${index}.yml`) + const report = join(temporary, `report-${index}.json`) + await writeFile(config, artifactComposition({ id: 'ssh', name: join(fixtures, 'direct-helper.ts'), config: { + executable, helperHash, workspace: cwd, home, path, + } }, cwd)) + await runArtifactDriver(config, report, values.sandbox, environment) + })) + const failures = runs.filter(result => result.status === 'rejected').map((result): unknown => result.reason) + if (failures.length > 0) throw new AggregateError(failures, 'Concurrent SSH artifact consumers failed') + if (process.platform === 'darwin') await probeRestrictedWorker(executable, workspace, home, await realpath(root), await realpath(process.execPath)) + const evidence = { manifest, runtime: runtimeReportSchema.parse(JSON.parse(await readFile(join(temporary, 'report-0.json'), 'utf8'))), + restrictedWorker: process.platform === 'darwin', expectedBackend: values.backend ?? null, + readonlyInstall: true, concurrentColdStarts: 2 } + if (values.report !== undefined) { + const destination = resolve(values.report) + await mkdir(dirname(destination), { recursive: true }) + await writeFile(destination, `${JSON.stringify(evidence, null, 2)}\n`) + } + console.log(`SSH helper ${manifest.target}: ${JSON.stringify(evidence.runtime)}`) + } finally { + await directoryPermissions(temporary, 0o755) + await rm(temporary, { recursive: true, force: true }) + } +} + +if (import.meta.main) await verifySshHelper(process.argv.slice(2)) diff --git a/scripts/verify-ssh-helper-ssh.ts b/scripts/verify-ssh-helper-ssh.ts new file mode 100644 index 0000000000..bfd45d45be --- /dev/null +++ b/scripts/verify-ssh-helper-ssh.ts @@ -0,0 +1,108 @@ +/** Real OpenSSH acceptance against a glibc 2.28 container with no installed Node. */ +import assert from 'node:assert/strict' +import { execFile, spawn } from 'node:child_process' +import { chmod, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { dirname, join, resolve } from 'node:path' +import { parseArgs, promisify } from 'node:util' +import { randomUUID } from 'node:crypto' +import { fileDigest, runtimeReportSchema, verifyPayload } from './ssh-helper/artifact.ts' +import { artifactComposition, extractHelper, runArtifactDriver } from './verify-ssh-helper-artifact.ts' + +const run = promisify(execFile) +const root = resolve(import.meta.dirname, '..') + +async function docker(...args: string[]): Promise { + return (await run('docker', args, { timeout: 300_000, maxBuffer: 16 * 1024 * 1024 })).stdout.trim() +} + +async function sshdReady(container: string): Promise { + const logs = spawn('docker', ['logs', '--follow', container], { stdio: ['ignore', 'pipe', 'pipe'] }) + let text = '' + const ready = Promise.withResolvers() + const closed = new Promise((resolve) => { logs.once('close', () => { resolve(); ready.reject(new Error(`sshd exited before readiness: ${text}`)) }) }) + const read = (chunk: Buffer): void => { + text = (text + chunk.toString()).slice(-8192) + if (text.includes('Server listening on')) ready.resolve() + } + logs.stdout.on('data', read); logs.stderr.on('data', read) + logs.once('error', (error) => { ready.reject(error) }) + const deadline = setTimeout(() => { ready.reject(new Error(`sshd readiness timed out: ${text}`)) }, 30_000) + try { await ready.promise } + finally { clearTimeout(deadline); logs.kill('SIGTERM'); await closed } +} + +/** + * Install only a validated release into an isolated SSH server and exercise production providers. + * @param argv - archive and optional report flags. + */ +export async function verifySshTransport(argv: string[]): Promise { + const { values } = parseArgs({ args: argv, options: { archive: { type: 'string' }, report: { type: 'string' } } }) + if (values.archive === undefined) throw new Error('Use --archive=') + const archive = resolve(values.archive) + assert.equal(await fileDigest(archive), (await readFile(`${archive}.sha256`, 'utf8')).split(/\s/)[0], 'Archive checksum') + const temporary = await mkdtemp(join(tmpdir(), 'dsh-helper-ssh-')) + const image = `dsh-helper-test:${randomUUID()}` + let imageBuilt = false + let container: string | undefined + try { + const installed = await extractHelper(archive, temporary) + const manifest = await verifyPayload(installed) + if (!manifest.target.includes('-linux-')) throw new Error('OpenSSH container acceptance requires a Linux artifact') + const platform = manifest.target.endsWith('-arm64') ? 'linux/arm64' : 'linux/amd64' + await docker('build', '--platform', platform, '--tag', image, join(root, 'packages/ssh/ssh-helper-runtime/tests/fixtures/sshd')) + imageBuilt = true + const identity = join(temporary, 'identity') + await run('ssh-keygen', ['-q', '-t', 'ed25519', '-N', '', '-f', identity]) + container = await docker('run', '--detach', '--platform', platform, '--publish', '127.0.0.1::22', + '--mount', `type=bind,src=${installed},dst=/opt/dsh-helper,readonly`, + '--mount', `type=bind,src=${identity}.pub,dst=/fixture-key.pub,readonly`, image) + await sshdReady(container) + const published = await docker('port', container, '22/tcp') + const port = /^127\.0\.0\.1:(\d+)$/.exec(published)?.[1] + if (port === undefined) throw new Error(`Unexpected Docker port mapping: ${published}`) + const publicKey = await docker('exec', container, 'cat', '/etc/ssh/ssh_host_ed25519_key.pub') + const knownHosts = join(temporary, 'known_hosts') + await writeFile(knownHosts, `[127.0.0.1]:${port} ${publicKey}\n`, { mode: 0o600 }) + const sshConfig = join(temporary, 'ssh_config') + await writeFile(sshConfig, `Host artifact\n HostName 127.0.0.1\n Port ${port}\n User dsh\n IdentityFile "${identity}"\n IdentitiesOnly yes\n UserKnownHostsFile "${knownHosts}"\n GlobalKnownHostsFile /dev/null\n`, { mode: 0o600 }) + const bin = join(temporary, 'bin') + await mkdir(bin) + const quote = (value: string): string => `'${value.replaceAll("'", "'\\''")}'` + await writeFile(join(bin, 'ssh'), `#!/bin/sh\nexec /usr/bin/ssh -F ${quote(sshConfig)} "$@"\n`) + await chmod(join(bin, 'ssh'), 0o755) + const workspace = '/home/dsh/workspace' + const config = join(temporary, 'cordis.yml') + await writeFile(config, artifactComposition({ id: 'ssh', name: '@deepseek-ai/dsh-ssh', config: { + host: 'artifact', launch: { kind: 'executable' }, helper: '/opt/dsh-helper/dsh-ssh-helper', + helperHash: await fileDigest(join(installed, 'dsh-ssh-helper')), workspace, + } }, workspace)) + const home = join(temporary, 'client-home') + await mkdir(home) + const report = join(temporary, 'report.json') + await runArtifactDriver(config, report, 'portable', { + HOME: home, PATH: `${bin}:${process.env.PATH ?? '/usr/bin:/bin'}`, DSH_HOME: join(home, 'dsh'), + TSX_TSCONFIG_PATH: join(root, 'tsconfig.base.json'), DSH_TELEMETRY_DISABLED: '1', DSH_VERIFY_NO_NODE: '1', + }) + const evidence = { manifest, runtime: runtimeReportSchema.parse(JSON.parse(await readFile(report, 'utf8'))), glibc: await docker('exec', container, 'getconf', 'GNU_LIBC_VERSION') } + assert.equal(evidence.glibc, 'glibc 2.28') + if (values.report !== undefined) { + const destination = resolve(values.report) + await mkdir(dirname(destination), { recursive: true }) + await writeFile(destination, `${JSON.stringify(evidence, null, 2)}\n`) + } + console.log(`SSH helper real SSH ${manifest.target}: ${JSON.stringify(evidence.runtime)}`) + } catch (error) { + if (container === undefined) throw error + const logs = await run('docker', ['logs', container], { maxBuffer: 1024 * 1024 }) + throw new Error(`SSH container diagnostics:\n${logs.stdout}\n${logs.stderr}`, { cause: error }) + } finally { + try { if (container !== undefined) await docker('rm', '--force', container) } + finally { + try { if (imageBuilt) await docker('image', 'rm', image) } + finally { await rm(temporary, { recursive: true, force: true }) } + } + } +} + +if (import.meta.main) await verifySshTransport(process.argv.slice(2)) diff --git a/tsconfig.base.json b/tsconfig.base.json index 8b15b0bb7c..06cb23b637 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -468,6 +468,7 @@ "@deepseek-ai/dsh-spill-local": ["./packages/spill/spill-local/src"], "@deepseek-ai/dsh-spill-policy": ["./packages/spill/spill-policy/src"], "@deepseek-ai/dsh-ssh": ["./packages/ssh/ssh/src"], + "@deepseek-ai/dsh-ssh-helper-runtime": ["./packages/ssh/ssh-helper-runtime/src"], "@deepseek-ai/dsh-storage": ["./packages/storage/storage/src"], "@deepseek-ai/dsh-storage-domain": ["./packages/storage/storage-domain/src"], "@deepseek-ai/dsh-storage-domain/invariant": ["./packages/storage/storage-domain/src/invariant.ts"], diff --git a/tsconfig.host.json b/tsconfig.host.json index 27ecdc9c23..b5aab6f16b 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -326,6 +326,7 @@ { "path": "./packages/subprocess/subprocess" }, { "path": "./packages/subprocess/subprocess-local" }, { "path": "./packages/ssh/ssh" }, + { "path": "./packages/ssh/ssh-helper-runtime" }, { "path": "./packages/ssh/fs-ssh" }, { "path": "./packages/ssh/subprocess-ssh" }, { "path": "./packages/ssh/sandbox-ssh" }, From 11c58d11b98ba3db7cfb7c0736f3b93df154acf5 Mon Sep 17 00:00:00 2001 From: Yichen Jiang Date: Wed, 23 Sep 2026 19:52:50 +0800 Subject: [PATCH 002/155] fix(ssh): build helper executables only on manual requests --- .github/workflows/ci-master.yml | 4 +- .github/workflows/ci.yml | 9 +- .github/workflows/publish-ssh-helper.yml | 47 +++++++--- .../ssh/ssh-helper-runtime/README.i18n.yaml | 4 +- packages/ssh/ssh-helper-runtime/README.md | 2 +- packages/ssh/ssh-helper-runtime/README.zh.md | 2 +- scripts/ci-workflow.spec.ts | 88 +++++++++++++++---- 7 files changed, 115 insertions(+), 41 deletions(-) diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index 4c480a1b54..cde26caa1f 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -32,11 +32,11 @@ env: jobs: ssh-helper: - if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_dispatch' && inputs.suite == 'ssh-helper') + if: github.event_name == 'workflow_dispatch' && inputs.suite == 'ssh-helper' name: ssh helper / native artifacts uses: ./.github/workflows/build-exe-for-ssh-helper.yml with: - targets: ${{ github.event_name == 'workflow_dispatch' && 'node24-linux-x64,node24-linux-arm64,node24-macos-arm64,node24-macos-x64' || 'node24-linux-arm64,node24-macos-arm64,node24-macos-x64' }} + targets: node24-linux-x64,node24-linux-arm64,node24-macos-arm64,node24-macos-x64 # These native runtime carriers are post-merge checks; release keeps all targets. python-runtime: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54445af779..0c2077159b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -494,13 +494,6 @@ jobs: secrets: DEEPSEEK_API_KEY_EXTERNAL: ${{ secrets.DEEPSEEK_API_KEY_EXTERNAL }} - ssh-helper: - if: github.event_name == 'pull_request' - name: ssh helper / Linux x64 - uses: ./.github/workflows/build-exe-for-ssh-helper.yml - with: - targets: node24-linux-x64 - # Native builds and process tests block pull requests independently of coverage. # Observational checks reuse the successful build and remain non-blocking. # Dependabot PRs are excluded from the self-hosted pool and stay queued for @@ -721,7 +714,7 @@ jobs: && github.event.pull_request.user.login != 'dependabot[bot]' && fromJSON('["self-hosted", "linux", "x64", "vm-backup"]') || 'ubuntu-latest' }} - needs: [node-24, node-24-coverage, node-24-bench, node-24-consumers, node-compat, python-sdk, python-runtime, ssh-helper, windows-build, windows-native-tests] + needs: [node-24, node-24-coverage, node-24-bench, node-24-consumers, node-compat, python-sdk, python-runtime, windows-build, windows-native-tests] if: ${{ !cancelled() && github.event_name == 'pull_request' }} steps: - name: Fail if any needed job did not succeed diff --git a/.github/workflows/publish-ssh-helper.yml b/.github/workflows/publish-ssh-helper.yml index 766e8ed1bd..f6740f210c 100644 --- a/.github/workflows/publish-ssh-helper.yml +++ b/.github/workflows/publish-ssh-helper.yml @@ -1,8 +1,14 @@ -name: Publish SSH helper +name: Release (SSH helper) -# Select an existing dsh-v tag when dispatching. This never publishes npm packages. +# Validation accepts any ref; publication requires the matching dsh-v tag. on: workflow_dispatch: + inputs: + publish: + description: Publish verified archives to GitHub Release. Must run from the matching dsh-v tag. + type: boolean + required: true + default: false permissions: contents: read @@ -15,20 +21,22 @@ jobs: validate: runs-on: ubuntu-latest outputs: - version: ${{ steps.tag.outputs.version }} - commit: ${{ steps.tag.outputs.commit }} + version: ${{ steps.source.outputs.version }} + commit: ${{ steps.source.outputs.commit }} steps: - uses: actions/checkout@v6 with: persist-credentials: false - - name: Verify selected release tag - id: tag + - name: Resolve source and validate publication tag + id: source + env: + PUBLISH: ${{ inputs.publish }} run: | node --input-type=module <<'JS' import { readFileSync, appendFileSync } from 'node:fs'; import { execFileSync } from 'node:child_process'; const {version} = JSON.parse(readFileSync('package.json', 'utf8')); - if (process.env.GITHUB_REF_TYPE !== 'tag' || process.env.GITHUB_REF_NAME !== `dsh-v${version}`) throw new Error('Dispatch from the matching dsh-v tag'); + if (process.env.PUBLISH === 'true' && (process.env.GITHUB_REF_TYPE !== 'tag' || process.env.GITHUB_REF_NAME !== `dsh-v${version}`)) throw new Error('Publication requires the matching dsh-v tag'); const commit = execFileSync('git', ['rev-parse', 'HEAD'], {encoding:'utf8'}).trim(); appendFileSync(process.env.GITHUB_OUTPUT, `version=${version}\ncommit=${commit}\n`); JS @@ -37,11 +45,9 @@ jobs: uses: ./.github/workflows/build-exe-for-ssh-helper.yml with: release: true - publish: + verify: needs: [validate, build] runs-on: ubuntu-latest - permissions: - contents: write steps: - uses: actions/checkout@v6 with: @@ -56,7 +62,7 @@ jobs: - run: pnpm install --frozen-lockfile - uses: actions/download-artifact@v8 with: - pattern: ssh-helper-* + pattern: ssh-helper-node24-* path: dist-exe/ssh-helper merge-multiple: true - name: Require complete evidence from the selected source commit @@ -64,6 +70,25 @@ jobs: RELEASE_VERSION: ${{ needs.validate.outputs.version }} SOURCE_COMMIT: ${{ needs.validate.outputs.commit }} run: pnpm exec tsx scripts/ssh-helper/release.ts --directory=dist-exe/ssh-helper --version="$RELEASE_VERSION" --commit="$SOURCE_COMMIT" + - name: Upload verified release checksums + uses: actions/upload-artifact@v7 + with: + name: ssh-helper-release-checksums + path: dist-exe/ssh-helper/SHA256SUMS + if-no-files-found: error + + publish: + if: inputs.publish + needs: [validate, verify] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/download-artifact@v8 + with: + pattern: ssh-helper-* + path: dist-exe/ssh-helper + merge-multiple: true - name: Attach the verified archives to the GitHub release env: GH_TOKEN: ${{ github.token }} diff --git a/packages/ssh/ssh-helper-runtime/README.i18n.yaml b/packages/ssh/ssh-helper-runtime/README.i18n.yaml index 211e111b8d..c50363dd2f 100644 --- a/packages/ssh/ssh-helper-runtime/README.i18n.yaml +++ b/packages/ssh/ssh-helper-runtime/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/ssh/ssh-helper-runtime/README.md -README.md: 4039fd6bf4a8312459d282d06e2f25c2b8a49334 -README.zh.md: 13058ba86d8b227e0b78a9663fc12b12fae562d7 +README.md: d2ffb343b1f4789ca0ecfc8dfee5af17f0899b67 +README.zh.md: 017c4d4fc3dc4731fbbd69b2a92363286b8a567c diff --git a/packages/ssh/ssh-helper-runtime/README.md b/packages/ssh/ssh-helper-runtime/README.md index 4039fd6bf4..d2ffb343b1 100644 --- a/packages/ssh/ssh-helper-runtime/README.md +++ b/packages/ssh/ssh-helper-runtime/README.md @@ -52,7 +52,7 @@ The [artifact verifier](../../../scripts/verify-ssh-helper-artifact.ts) accepts The [OpenSSH verifier](../../../scripts/verify-ssh-helper-ssh.ts) accepts a Linux `--archive`. It creates a temporary glibc 2.28 SSH server with no Node installation, mounts only the release and a disposable public key, and exercises the production connection. Its portability lane makes no kernel-confinement claim; the native host lane owns that check. Test identities, host keys, ports and workspaces are private to the run. -PR CI requires Linux x64; master CI covers Linux arm64 and both macOS architectures. The manually dispatched native workflow defaults to all four targets. The [publication workflow](../../../.github/workflows/publish-ssh-helper.yml) accepts the matching `dsh-v` tag, requires complete same-commit evidence from clean builds, and attaches the tested archives and `SHA256SUMS` to that GitHub release. A missing release is created as a draft. GitHub Actions owns native platform and publication execution; deployment-target inspection alone does not establish execution on the oldest macOS version. +Ordinary PR and master CI run source and build-script checks without building SSH executables. For changes to helper startup, native dependencies or packaging, manually run the [native workflow](../../../.github/workflows/build-exe-for-ssh-helper.yml) before merging; it accepts selected targets and defaults to all four. `CI master` also exposes the manual `ssh-helper` suite. [Release (SSH helper)](../../../.github/workflows/publish-ssh-helper.yml) defaults to `publish=false`: it builds all four targets from the selected ref and validates complete same-commit evidence from clean builds. With `publish=true`, it requires the matching `dsh-v` tag and attaches the tested archives and `SHA256SUMS` to that GitHub release; a missing release is created as a draft. Native validation remains mandatory before publication. Deployment-target inspection alone does not establish execution on the oldest macOS version. ----- diff --git a/packages/ssh/ssh-helper-runtime/README.zh.md b/packages/ssh/ssh-helper-runtime/README.zh.md index 13058ba86d..017c4d4fc3 100644 --- a/packages/ssh/ssh-helper-runtime/README.zh.md +++ b/packages/ssh/ssh-helper-runtime/README.zh.md @@ -52,7 +52,7 @@ pnpm exec tsx scripts/build-exe-for-ssh-helper.ts [OpenSSH 验证器](../../../scripts/verify-ssh-helper-ssh.ts) 接受 Linux `--archive`。它创建未安装 Node 的临时 glibc 2.28 SSH 服务器,仅挂载发行包和一次性公钥,并验证生产连接。这个可移植性测试不声明内核隔离能力,该检查由原生主机测试负责。测试身份、主机密钥、端口和工作区均由本次运行独占。 -PR CI 要求 Linux x64 通过,master CI 覆盖 Linux arm64 和两种 macOS 架构。手动触发的原生工作流默认构建全部四个目标。[发布工作流](../../../.github/workflows/publish-ssh-helper.yml) 接受匹配的 `dsh-v` 标签,要求干净源码构建提供同一提交的完整验证证据,并将已测试的压缩包及 `SHA256SUMS` 附加到对应 GitHub Release。Release 不存在时创建草稿。原生平台与发布执行由 GitHub Actions 负责;仅检查部署目标不能证明已在最低 macOS 版本上运行。 +普通 PR 和 master CI 运行源码及构建脚本检查,不构建 SSH 可执行文件。修改 helper 启动、原生依赖或打包逻辑时,应在合并前手动运行[原生工作流](../../../.github/workflows/build-exe-for-ssh-helper.yml);它支持指定目标,默认构建全部四个平台。`CI master` 也提供手动 `ssh-helper` 测试入口。[Release (SSH helper)](../../../.github/workflows/publish-ssh-helper.yml) 默认为 `publish=false`:从选定 ref 构建四个平台,并校验干净源码构建提供的同一提交完整验证证据。设置 `publish=true` 时,必须选择匹配的 `dsh-v` 标签,工作流将已测试的压缩包及 `SHA256SUMS` 附加到对应 GitHub Release;Release 不存在时创建草稿。发布前仍须通过原生运行验证。仅检查部署目标不能证明已在最低 macOS 版本上运行。 ----- diff --git a/scripts/ci-workflow.spec.ts b/scripts/ci-workflow.spec.ts index f40bb72ab3..f2470186a6 100644 --- a/scripts/ci-workflow.spec.ts +++ b/scripts/ci-workflow.spec.ts @@ -522,6 +522,7 @@ describe('CI workflow', () => { const NOT_PUSH_REACHABLE = new Set([ "github.event_name == 'workflow_dispatch' && inputs.suite == 'larger-runner-benchmark'", "github.event_name == 'workflow_dispatch' && inputs.suite == 'consolidated-runner-benchmark'", + "github.event_name == 'workflow_dispatch' && inputs.suite == 'ssh-helper'", ]) const pushReachable = Object.entries(workflow.jobs) .filter(([, job]) => { @@ -533,7 +534,7 @@ describe('CI workflow', () => { }) .map(([name]) => name) .sort() - expect(pushReachable).toEqual(['python-runtime', 'serial-linux-selfhosted', 'serial-windows', 'ssh-helper', 'windows']) + expect(pushReachable).toEqual(['python-runtime', 'serial-linux-selfhosted', 'serial-windows', 'windows']) // Manual benchmarks retain their bounded fan-out. for (const name of ['larger-runner-benchmark', 'consolidated-runner-benchmark']) { @@ -607,17 +608,26 @@ describe('CI workflow', () => { expect(aggregate.needs).toContain('python-runtime') }) - it('requires SSH helper acceptance before publication and PR aggregation', () => { + it('builds SSH executables only for explicit manual or release requests', () => { const ci = loadWorkflow('.github/workflows/ci.yml') - expect(workflowJob(ci, 'ssh-helper')).toMatchObject({ - uses: './.github/workflows/build-exe-for-ssh-helper.yml', with: { targets: 'node24-linux-x64' }, - }) - expect(workflowJob(ci, 'all-checks-passed').needs).toContain('ssh-helper') + if (!isRecord(ci.jobs)) throw new Error('PR CI must define jobs') + expect(Object.values(ci.jobs)).not.toContainEqual(expect.objectContaining({ uses: './.github/workflows/build-exe-for-ssh-helper.yml' })) + expect(workflowJob(ci, 'all-checks-passed').needs).not.toContain('ssh-helper') const master = workflowJob(loadWorkflow('.github/workflows/ci-master.yml'), 'ssh-helper') - expect(master.if).toContain("inputs.suite == 'ssh-helper'") - if (!isRecord(master.with)) throw new Error('SSH master caller must select native targets') - expect(evaluateRunsOn(master.with.targets, { github: { event_name: 'push' } })).toBe('node24-linux-arm64,node24-macos-arm64,node24-macos-x64') - expect(evaluateRunsOn(master.with.targets, { github: { event_name: 'workflow_dispatch' } })).toBe('node24-linux-x64,node24-linux-arm64,node24-macos-arm64,node24-macos-x64') + if (typeof master.if !== 'string') throw new Error('SSH manual caller must define its trigger condition') + for (const [event, suite, expected] of [ + ['push', 'ssh-helper', false], ['pull_request', 'ssh-helper', false], + ['workflow_dispatch', 'larger-runner-benchmark', false], ['workflow_dispatch', 'ssh-helper', true], + ] as const) { + expect(runInNewContext(master.if, { github: { event_name: event, ref: 'refs/heads/master' }, inputs: { suite } }, { timeout: 1000 })).toBe(expected) + } + expect(master.with).toEqual({ targets: 'node24-linux-x64,node24-linux-arm64,node24-macos-arm64,node24-macos-x64' }) + const workflow = loadWorkflow('.github/workflows/build-exe-for-ssh-helper.yml') + if (!isRecord(workflow.on)) throw new Error('SSH builder must define triggers') + expect(Object.keys(workflow.on).sort()).toEqual(['workflow_call', 'workflow_dispatch']) + }) + + it('requires SSH helper acceptance before uploading artifacts or publishing', () => { const workflow = loadWorkflow('.github/workflows/build-exe-for-ssh-helper.yml') const build = workflowJob(workflow, 'build') if (!Array.isArray(build.steps)) throw new Error('SSH build must define its verification steps') @@ -634,16 +644,53 @@ describe('CI workflow', () => { const publish = loadWorkflow('.github/workflows/publish-ssh-helper.yml') expect(publish.permissions).toEqual({ contents: 'read' }) expect(workflowJob(publish, 'build')).toMatchObject({ needs: 'validate', with: { release: true } }) - expect(workflowJob(publish, 'publish')).toMatchObject({ needs: ['validate', 'build'], permissions: { contents: 'write' } }) + const verify = workflowJob(publish, 'verify') + expect(verify.needs).toEqual(['validate', 'build']) + expect(verify).not.toHaveProperty('if') + expect(verify).not.toHaveProperty('permissions') + if (!Array.isArray(verify.steps)) throw new Error('Release verification must define steps') + const verification = verify.steps.findIndex(step => isRecord(step) && String(step.run).includes('scripts/ssh-helper/release.ts')) + const checksums = verify.steps.findIndex(step => isRecord(step) && String(step.uses).startsWith('actions/upload-artifact@')) + expect(verification).toBeGreaterThan(-1) + expect(checksums).toBeGreaterThan(verification) + expect(verify.steps[verification]).not.toHaveProperty('continue-on-error', true) + const publication = workflowJob(publish, 'publish') + expect(publication).toMatchObject({ if: 'inputs.publish', needs: ['validate', 'verify'], permissions: { contents: 'write' } }) + for (const requested of [false, true]) { + expect(runInNewContext(String(publication.if), { inputs: { publish: requested } }, { timeout: 1000 })).toBe(requested) + } + }) + + it('validates any ref by default but refuses publication without the matching SSH release tag', () => { + const workflow = loadWorkflow('.github/workflows/publish-ssh-helper.yml') + if (!isRecord(workflow.on)) throw new Error('SSH release must define triggers') + expect(Object.keys(workflow.on)).toEqual(['workflow_dispatch']) + expect(workflowEvent(workflow, 'workflow_dispatch').inputs).toMatchObject({ publish: { type: 'boolean', default: false } }) + const validate = workflowJob(workflow, 'validate') + expect(validate.steps).toContainEqual(expect.objectContaining({ id: 'source', env: { PUBLISH: '${{ inputs.publish }}' } })) + const source = nodeStepSource(validate, 'source') + const evaluate = (publish: boolean, type: string, name: string): string => { + let output = '' + runInNewContext(source, { + process: { env: { PUBLISH: String(publish), GITHUB_REF_TYPE: type, GITHUB_REF_NAME: name, GITHUB_OUTPUT: 'output' } }, + readFileSync: () => JSON.stringify({ version: '1.2.3' }), + execFileSync: () => `${'a'.repeat(40)}\n`, + appendFileSync: (_path: string, text: string) => { output += text }, + }, { timeout: 1000 }) + return output + } + const expected = `version=1.2.3\ncommit=${'a'.repeat(40)}\n` + expect(evaluate(false, 'branch', 'worktree/helper')).toBe(expected) + expect(evaluate(false, 'tag', 'arbitrary-tag')).toBe(expected) + expect(evaluate(true, 'tag', 'dsh-v1.2.3')).toBe(expected) + for (const [type, name] of [['branch', 'dsh-v1.2.3'], ['tag', 'dsh-v1.2.2'], ['tag', 'python-v1.2.3']] as const) { + expect(() => evaluate(true, type, name)).toThrow('Publication requires the matching dsh-v tag') + } }) it('validates the SSH native matrix before allocating runners', () => { const plan = workflowJob(loadWorkflow('.github/workflows/build-exe-for-ssh-helper.yml'), 'plan') - if (!Array.isArray(plan.steps)) throw new Error('SSH matrix plan has no steps') - const step: unknown = plan.steps.find(value => isRecord(value) && value.id === 'targets') - if (!isRecord(step) || typeof step.run !== 'string') throw new Error('SSH matrix plan has no script') - const source = step.run.split("<<'JS'\n")[1]?.split('\nJS')[0]?.replace(/^import .*;\n/gm, '') - if (source === undefined) throw new Error('SSH matrix plan must be an executable Node script') + const source = nodeStepSource(plan, 'targets') const evaluate = (requested: string): unknown => { let output = '' runInNewContext(source, { @@ -1256,6 +1303,15 @@ function loadWorkflow(path: string): Record { return workflow } +function nodeStepSource(job: Record, id: string): string { + if (!Array.isArray(job.steps)) throw new Error('Node workflow job must define steps') + const step: unknown = job.steps.find(value => isRecord(value) && value.id === id) + if (!isRecord(step) || typeof step.run !== 'string') throw new Error(`Missing Node workflow step: ${id}`) + const source = step.run.split("<<'JS'\n")[1]?.split('\nJS')[0]?.replace(/^import .*;\n/gm, '') + if (source === undefined) throw new Error(`Workflow step ${id} must contain an executable Node script`) + return source +} + function workflowEvent(workflow: Record, event: string): Record { if (!isRecord(workflow.on) || !isRecord(workflow.on[event])) { throw new TypeError(`workflow must define the ${event} event`) From 06fa431947203d85f7cb019699bd7c356a99c29f Mon Sep 17 00:00:00 2001 From: gengruilin Date: Tue, 22 Sep 2026 16:11:55 +0800 Subject: [PATCH 003/155] =?UTF-8?q?fix(client):=20=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E7=95=99=E7=99=BD=E6=97=B6=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E5=85=89=E6=A0=87=E5=92=8C=E9=80=89=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/tests/composer-focus.e2e.ts | 118 ++++++++++++++++++ .../expected/composer-focus/focus.expected.md | 19 +++ apps/web/tsconfig.json | 1 + .../client/ui-conversation/README.i18n.yaml | 4 +- packages/client/ui-conversation/README.md | 2 + packages/client/ui-conversation/README.zh.md | 2 + .../src/client/skeleton/InputBar.tsx | 13 ++ .../tests/input-bar.client.spec.tsx | 59 +++++++++ tsconfig.host.json | 1 + 9 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 apps/web/tests/composer-focus.e2e.ts create mode 100644 apps/web/tests/expected/composer-focus/focus.expected.md diff --git a/apps/web/tests/composer-focus.e2e.ts b/apps/web/tests/composer-focus.e2e.ts new file mode 100644 index 0000000000..19e3306ca6 --- /dev/null +++ b/apps/web/tests/composer-focus.e2e.ts @@ -0,0 +1,118 @@ +/** Browser selection and focus after presses in the composer's unused space. */ +import { fileURLToPath } from 'node:url' +import { join } from 'node:path' +import { chromium, type Page } from 'playwright' +import { expect, it, onTestFinished } from 'vitest' +import { + assertFixtureInventory, compareOrRefreshGolden, launchWebScaffold, seedSession, watchConsole, webSnapshotMode, +} from './scaffold.ts' +import { createChatScrollFixture } from './chat-scroll-fixture.ts' +import { connectFreshWorkspace, newEnglishPage } from './support.ts' + +const SNAPSHOT_DIR = fileURLToPath(new URL('./expected/composer-focus', import.meta.url)) +const EXPECTED = join(SNAPSHOT_DIR, 'focus.expected.md') + +/** + * Observe focus and both ends of the browser selection, including its direction. + * @param page - Page containing the active composer. + * @returns The editor's focus, draft and DOM selection. + */ +async function selectionState(page: Page) { + return await page.locator('[data-composer-input]').evaluate((input) => { + const selection = window.getSelection() + return { + focused: document.activeElement === input, + draft: input.textContent, + text: selection?.toString(), + anchor: selection?.anchorOffset, + focus: selection?.focusOffset, + } + }) +} + +/** + * Exercise the card's top, inter-row gap, toolbar gap and bottom padding. + * @param page - Page containing an editable composer. + * @returns Stable behavior observations for the expected-output file. + */ +async function exerciseComposer(page: Page): Promise { + const input = page.locator('[data-composer-input][contenteditable="true"]') + await input.click() + await page.keyboard.insertText('alpha beta gamma') + await page.keyboard.press('Home') + for (let index = 0; index < 10; index++) await page.keyboard.press('ArrowRight') + for (let index = 0; index < 4; index++) await page.keyboard.press('Shift+ArrowLeft') + const selected = { focused: true, draft: 'alpha beta gamma', text: 'beta', anchor: 10, focus: 6 } + await expect.poll(() => selectionState(page)).toEqual(selected) + + const points = await page.locator('[data-composer-card]').evaluate((card) => { + const box = card.getBoundingClientRect() + const scroll = card.querySelector('[data-input-scroll]')!.getBoundingClientRect() + const row = card.querySelector('[data-input-scroll]')!.nextElementSibling!.getBoundingClientRect() + return [ + { name: 'top padding', x: box.x + box.width / 2, y: (box.top + scroll.top) / 2 }, + { name: 'row gap', x: box.x + box.width / 2, y: (scroll.bottom + row.top) / 2 }, + { name: 'toolbar gap', x: box.x + box.width / 2, y: row.top + row.height / 2 }, + { name: 'bottom padding', x: box.x + box.width / 2, y: box.bottom - 2 }, + ] + }) + const observations: string[] = [] + for (const point of points) { + await page.mouse.click(point.x, point.y) + await expect.poll(() => selectionState(page)).toEqual(selected) + observations.push(`- ${point.name}: focused; selection "beta" (10 → 6)`) + } + + const top = points[0]! + const cardBox = await page.locator('[data-composer-card]').boundingBox() + await page.mouse.click(cardBox!.x - 12, top.y) + await expect.poll(async () => (await selectionState(page)).focused).toBe(false) + await page.mouse.click(top.x, top.y) + await expect.poll(() => selectionState(page)).toEqual(selected) + observations.push('- return from outside: previous selection restored (10 → 6)') + + await page.keyboard.insertText('BETA') + await expect.poll(() => input.textContent()).toBe('alpha BETA gamma') + await page.keyboard.press('ArrowLeft') + const caret = { focused: true, draft: 'alpha BETA gamma', text: '', anchor: 9, focus: 9 } + await expect.poll(() => selectionState(page)).toEqual(caret) + await page.mouse.click(top.x, top.y) + await expect.poll(() => selectionState(page)).toEqual(caret) + await page.keyboard.insertText('!') + await expect.poll(() => input.textContent()).toBe('alpha BET!A gamma') + observations.push('- typing replaces the restored selection and resumes at the restored caret: alpha BET!A gamma') + return observations +} + +it('restores the previous caret or selection in fresh and existing sessions', async () => { + const scaffold = await launchWebScaffold({}) + const browserPromise = chromium.launch() + onTestFinished(async () => { + try { await (await browserPromise).close() } + finally { await scaffold.close() } + }) + const browser = await browserPromise + const fixture = createChatScrollFixture({ markerPrefix: 'COMPOSER_FOCUS', title: 'Composer focus', turns: 1 }) + await seedSession(scaffold, fixture.log, 'composer-focus-web-e2e') + const page = await newEnglishPage(browser) + const tripwire = watchConsole(page) + await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) + await connectFreshWorkspace(page, scaffold.workspaceCwd, 'composer-focus') + const hero = await exerciseComposer(page) + + await page.getByRole('button', { name: 'Search sessions' }).click() + await page.getByRole('textbox', { name: 'Search session names', exact: true }).fill(fixture.markers.user(1)) + const result = page.getByRole('tree', { name: 'Search results' }).getByRole('treeitem') + await expect.poll(() => result.count(), { timeout: 60_000 }).toBe(1) + await result.click() + await page.getByText(fixture.markers.assistant(1), { exact: false }).last().waitFor() + const docked = await exerciseComposer(page) + + await compareOrRefreshGolden(EXPECTED, [ + '# Composer whitespace focus', '', '## Fresh session', '', ...hero, + '', '## Existing session', '', ...docked, + ].join('\n'), webSnapshotMode()) + await assertFixtureInventory(SNAPSHOT_DIR, ['focus.expected.md']) + expect(tripwire.warnings).toEqual([]) + expect(tripwire.pageErrors).toEqual([]) +}, 180_000) diff --git a/apps/web/tests/expected/composer-focus/focus.expected.md b/apps/web/tests/expected/composer-focus/focus.expected.md new file mode 100644 index 0000000000..d5e869319c --- /dev/null +++ b/apps/web/tests/expected/composer-focus/focus.expected.md @@ -0,0 +1,19 @@ +# Composer whitespace focus + +## Fresh session + +- top padding: focused; selection "beta" (10 → 6) +- row gap: focused; selection "beta" (10 → 6) +- toolbar gap: focused; selection "beta" (10 → 6) +- bottom padding: focused; selection "beta" (10 → 6) +- return from outside: previous selection restored (10 → 6) +- typing replaces the restored selection and resumes at the restored caret: alpha BET!A gamma + +## Existing session + +- top padding: focused; selection "beta" (10 → 6) +- row gap: focused; selection "beta" (10 → 6) +- toolbar gap: focused; selection "beta" (10 → 6) +- bottom padding: focused; selection "beta" (10 → 6) +- return from outside: previous selection restored (10 → 6) +- typing replaces the restored selection and resumes at the restored caret: alpha BET!A gamma diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index c67d7d5001..3d68e8ab58 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -111,6 +111,7 @@ "tests/present.e2e.ts", "tests/present-svg.e2e.ts", "tests/composer-draft-scroll.e2e.ts", + "tests/composer-focus.e2e.ts", "tests/composer-placeholder.e2e.ts", "tests/context-meter.e2e.ts", "tests/cordis-tool-round.e2e.ts", diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index 8b219abf38..84240db8fc 100644 --- a/packages/client/ui-conversation/README.i18n.yaml +++ b/packages/client/ui-conversation/README.i18n.yaml @@ -18,8 +18,8 @@ en: 13ae68865fa315d7 zh: c152f020abf20f35 /deepseek-ai-dsh-client-ui-conversation/shell-and-standard-props: - en: 8de4fbd9df016e06 - zh: 06b15ab7855120cb + en: 0194b866c22bcadc + zh: 40ea2d41887e9db1 /deepseek-ai-dsh-client-ui-conversation/temporary-composer-entries: en: bb1244310f5c0382 zh: 824b84077432b559 diff --git a/packages/client/ui-conversation/README.md b/packages/client/ui-conversation/README.md index 7c7739fee9..822113c11a 100644 --- a/packages/client/ui-conversation/README.md +++ b/packages/client/ui-conversation/README.md @@ -74,6 +74,8 @@ The resident composer survives no-Session and Session transitions. Whitespace hi Plain Enter uses the configured delivery mode, exactly Ctrl+Enter or Cmd+Enter uses its complement, and Shift+Enter inserts a line break. Enter with Alt, AltGraph, both Ctrl and Cmd, or Shift plus Ctrl/Cmd leaves the draft and command menu unchanged and keeps the DOM event available to application shortcuts. The Conversation plugin registers the fixed send, newline, complementary-delivery, command-menu, and reference-menu rows and reserves their bindings until it unloads. +Clicking unused space inside an editable composer restores its previous caret or selection. Text selection, scrollbars, and individual controls keep their own pointer behavior. + Default sends commit optimistically: Enter clears the draft, occurrence table, and undo history in the same transaction, keeps the composer in `plain`, and runs the send as a detached attempt, so typing and further sends continue during the flight. `sendSession` registers a Session submission echo (`session.beginSubmission`) with the delivery mode before serializing, preserving selected image and file order in `pendingSubmissions`; Session derives the placement from that mode and its current running state, so idle sends use the transcript, busy Queue sends use QueueDock, and busy Steer sends use the pending-steering surface. It then yields one paint, encodes images through the browser's native `FileReader` data-URL path, and cites staged file receipts. Command submissions use the same receipts for generic files, so sending `/goal` or `/plan` never reads those browser files again. The prompt reuses the submission `requestId`; Session retires the echo once at its display handoff, correlated by that `rpcId`. Concurrent failures are restored together in submission order until the user edits the restored content; command submissions keep the frozen `submitting` phase. Detached attempts retain their attachment ids through admission and Session scope disposal. An observed retirement immediately exposes each image preview through the durable cache, replaces it with the canonical URL after fetching the admitted attachment, revokes each URL after its use ends, and releases file cards. Selected generic files enter one FIFO background-upload queue; `maxConcurrentFileUploads` defaults to two active Worker transports, the Conversation service retains queued and active operations plus byte progress across Session navigation, and removing a draft skips its queued transfer or aborts its active transport. Where the browser shell exposes `__DSH_HOST_PATHS__` (the Desktop application), dropped or pasted folders and dropped, picked, or pasted non-image files with a real path become `@path` chips; images keep uploading. Drag-and-drop and paste identify directories through the browser entry API; when that API is absent or returns no entry, pasted items retain ordinary file handling. The file picker cannot select directories. References require the `ui-reference` plugin and the original paths to remain readable by the model's file tools. Paths inside the workspace are relative; others remain absolute. The whole batch is validated before insertion, retains source order and selected text, and uses whitespace-separated, closed-quote mentions. A browser without the bridge refuses dropped or pasted folders; a Desktop folder without a reported path is rejected separately. Continuable subagents disable attachment intake and skip local echoes because their transport does not preserve the browser request id. Queued submission echoes show “Sending…” beside disabled edit, remove, and steer buttons; a collapsed dock keeps the sending status in its header. A matching Host queue row replaces the echo and enables each action according to its normal text-content and running-state requirements. Prompt acknowledgement alone does not enable queue actions. A failed submission removes its echo and displays an error; the composer restores the failed draft when it is empty or still contains the previous automatic restoration, preserving subsequently typed text. diff --git a/packages/client/ui-conversation/README.zh.md b/packages/client/ui-conversation/README.zh.md index 88ac5cb99f..99848f0860 100644 --- a/packages/client/ui-conversation/README.zh.md +++ b/packages/client/ui-conversation/README.zh.md @@ -74,6 +74,8 @@ Session 首次绑定或缓存的 Session 成为 current 时,shell 会在渲染 普通 Enter 使用已配置的投递模式,严格的 Ctrl+Enter 或 Cmd+Enter 使用互补模式,Shift+Enter 插入换行。带 Alt、AltGraph、同时带 Ctrl 与 Cmd,或 Shift 与 Ctrl/Cmd 的 Enter 保持草稿和指令菜单不变,并将 DOM 事件留给应用快捷键。Conversation 插件注册发送、换行、互补投递、命令菜单和引用菜单的固定条目,并在卸载前保留这些键位。 +点击可编辑输入框内的留白会恢复上次的光标或选区。文本选择、滚动条和各个控件保持各自的指针交互行为。 + 默认发送采用乐观提交:Enter 在同一事务里清空草稿、occurrence 表和撤销历史,composer 保持 `plain`,发送作为 detached attempt 运行,发送期间可以继续输入和提交。`sendSession` 在序列化之前用投递模式注册 Session 提交回显(`session.beginSubmission`),并在 `pendingSubmissions` 中保留图片与文件的选择顺序;Session 根据该模式与当前运行状态推导位置,因此空闲发送进入 transcript(文本记录),繁忙时 Queue 进入 QueueDock,繁忙时 Steer 进入 pending-steering 区域。随后让出一帧,图片经浏览器原生 `FileReader` data-URL 路径编码,文件则引用已暂存凭证。命令提交也用同一凭证表示通用文件,因此发送 `/goal` 或 `/plan` 时不会再次读取这些浏览器文件。提示词复用提交 `requestId`;Session 按同一 `rpcId` 关联展示接管,并仅退休回显一次。多个并发发送失败时,在用户编辑还原内容之前按提交顺序合并还原;命令提交保持冻结的 `submitting` 阶段。Detached attempt 持有附件 id,直到 admission 完成或 Session scope 销毁。回显以 observed 退休时,durable 图片缓存立即公开每个预览 URL,读取 admitted 附件后用规范化 URL 替换预览,并在各 URL 停止使用后撤销,同时释放文件卡。选中的通用文件进入同一个先进先出的后台上传队列;`maxConcurrentFileUploads` 默认允许两个 Worker transport 同时运行,Conversation 服务在切换 Session 时继续持有排队和运行中的传输操作及字节进度,移除草稿会跳过排队中的传输或中止正在运行的传输。浏览器 shell 暴露 `__DSH_HOST_PATHS__` 时(桌面应用),拖入或粘贴的文件夹以及拖入、选择或粘贴的带真实路径的非图片文件会成为 `@路径` chip;图片仍然上传。拖放和粘贴通过浏览器 entry API 识别目录;该 API 不可用或没有返回 entry 时,粘贴项沿用普通文件处理。文件选择器不能选择目录。引用需要启用 `ui-reference` 插件,原路径也必须仍可由模型的文件工具读取。工作区内的路径使用相对形式,其他路径保留绝对形式。整批文件先校验再插入,保留来源顺序和已选中的文字,引用之间有空白分隔,含空格的路径使用闭合引号。没有该桥的浏览器会拒绝拖入或粘贴的文件夹,桌面端无法获取文件夹路径时单独报错。continuable 子代理禁用附件入口,也不创建本地回显,因为其 transport 不保留浏览器 request id。 排队提交的本地回显在禁用的编辑、删除、插话按钮旁显示“发送中…”;折叠后的队列在标题栏保留发送状态。匹配的 Host 队列行替换回显后,各操作按原有的纯文本内容和运行状态要求启用。仅收到提示词确认不会启用队列操作。提交失败会移除回显并显示错误;输入框为空或仍保留上一次自动恢复的内容时,composer 恢复失败草稿,保留用户随后输入的文字。 diff --git a/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx b/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx index 9139aa9ac8..1adb4a16e4 100644 --- a/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx +++ b/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx @@ -271,6 +271,18 @@ export const InputBar = memo(function InputBar({ keepDraftFocus(e, editor) } + const onCardMouseDown = (e: MouseEvent): void => { + if (!editable || editor === null || e.button !== 0 || e.defaultPrevented) return + const target = e.target + if (!(target instanceof Element) || !e.currentTarget.contains(target)) return + if (scrollRef.current?.contains(target)) return + const control = target.closest('button, a, input, select, textarea, [role="button"], [contenteditable], [tabindex]') + if (control !== null && e.currentTarget.contains(control)) return + e.preventDefault() + // Native caret moves can precede Lexical's selectionchange listener. + if (document.activeElement !== editor.getRootElement()) focusDraftEditor(editor, revealSelection) + } + const onToggleCommandMenu = (): void => { if (keyboard === undefined) return // The menu is a combobox over the editor, so the keyboard has to be there @@ -379,6 +391,7 @@ export const InputBar = memo(function InputBar({ data-composer-card onClick={workspaceTrigger ? onRequestWorkspace : undefined} onPointerDown={workspaceTrigger ? (e) => { e.stopPropagation() } : undefined} + onMouseDown={onCardMouseDown} > {sessionId !== undefined && (
{renderSlot('conversation.input.overlay', {})}
diff --git a/packages/client/ui-conversation/tests/input-bar.client.spec.tsx b/packages/client/ui-conversation/tests/input-bar.client.spec.tsx index 37a0ede8f6..3484732787 100644 --- a/packages/client/ui-conversation/tests/input-bar.client.spec.tsx +++ b/packages/client/ui-conversation/tests/input-bar.client.spec.tsx @@ -13,6 +13,7 @@ import type { InboxState } from '@deepseek-ai/dsh-agent/types' import type { GlobalStandardProps } from '@deepseek-ai/dsh-client-ui-slots' import { afterEach, describe, expect, it, onTestFinished, vi } from 'vitest' import { act, cleanup, fireEvent, render } from '@testing-library/react' +import { createPortal } from 'react-dom' import { $getRoot, $isTextNode } from 'lexical' import { bindSnapshotSelector, conversationSnapshot as conversationFixture, makeTranslate, RemoteError, @@ -279,6 +280,64 @@ function writeDraft(shell: SessionInputShell, text: string): void { } describe('composer focus handoff', () => { + it.each(['hero', 'composer'] as const)('focuses the %s editor when its card background is pressed', (variant) => { + const { view, shell, textarea } = bench({ variant }) + writeDraft(shell, 'draft text') + textarea.blur() + const lexicalFocus = vi.spyOn(shell.editor, 'focus') + const card = view.container.querySelector('[data-composer-card]')! + + expect(fireEvent.mouseDown(card, { button: 0 })).toBe(false) + expect(document.activeElement).toBe(textarea) + expect(lexicalFocus).toHaveBeenCalled() + }) + + it('leaves editor selection, scrollport gestures, controls and canceled presses to their owners', () => { + const { view, shell, textarea } = bench({ + modelEntry: , + leftItems: { event.preventDefault() }}>Canceled, + }) + const lexicalFocus = vi.spyOn(shell.editor, 'focus') + const scrollport = view.container.querySelector('[data-input-scroll]')! + const card = view.container.querySelector('[data-composer-card]')! + + expect(fireEvent.mouseDown(textarea, { button: 0 })).toBe(true) + expect(fireEvent.mouseDown(scrollport, { button: 0 })).toBe(true) + expect(fireEvent.mouseDown(view.getByText('Model'), { button: 0 })).toBe(true) + expect(fireEvent.mouseDown(view.getByText('Canceled'), { button: 0 })).toBe(false) + expect(fireEvent.mouseDown(card, { button: 2 })).toBe(true) + expect(lexicalFocus).not.toHaveBeenCalled() + }) + + it('keeps a focused editor\'s native caret without restoring an older Lexical selection', () => { + const { view, shell, textarea } = bench() + act(() => { shell.focus() }) + expect(document.activeElement).toBe(textarea) + const lexicalFocus = vi.spyOn(shell.editor, 'focus') + + expect(fireEvent.mouseDown(view.container.querySelector('[data-composer-card]')!, { button: 0 })).toBe(false) + expect(document.activeElement).toBe(textarea) + expect(lexicalFocus).not.toHaveBeenCalled() + }) + + it('leaves portaled menu background presses outside the card alone', () => { + const { view, shell } = bench({ modelEntry: createPortal(
Menu background
, document.body) }) + const lexicalFocus = vi.spyOn(shell.editor, 'focus') + + expect(fireEvent.mouseDown(view.getByText('Menu background'), { button: 0 })).toBe(true) + expect(lexicalFocus).not.toHaveBeenCalled() + }) + + it.each([{ inert: true }, { disabled: true }, { blocked: { reason: 'unavailable' } }])( + 'does not focus an unavailable composer: %j', (options) => { + const { view, shell } = bench(options) + const lexicalFocus = vi.spyOn(shell.editor, 'focus') + + expect(fireEvent.mouseDown(view.container.querySelector('[data-composer-card]')!, { button: 0 })).toBe(true) + expect(lexicalFocus).not.toHaveBeenCalled() + }, + ) + it('focus() returns the keyboard to the editor through Lexical, not a bare DOM focus', () => { const { shell, textarea } = bench() writeDraft(shell, 'draft text') diff --git a/tsconfig.host.json b/tsconfig.host.json index 40b8c7ca38..fba92bbca6 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -102,6 +102,7 @@ "apps/web/tests/present.e2e.ts", "apps/web/tests/present-svg.e2e.ts", "apps/web/tests/composer-draft-scroll.e2e.ts", + "apps/web/tests/composer-focus.e2e.ts", "apps/web/tests/composer-placeholder.e2e.ts", "apps/web/tests/context-meter.e2e.ts", "apps/web/tests/cordis-tool-round.e2e.ts", From 218cf9dc20d989935e28cdb291e58002bc888a11 Mon Sep 17 00:00:00 2001 From: gengruilin Date: Tue, 22 Sep 2026 17:04:24 +0800 Subject: [PATCH 004/155] =?UTF-8?q?fix(client):=20=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E5=86=85=E5=B5=8C=E6=B5=AE=E5=B1=82?= =?UTF-8?q?=E7=9A=84=E7=84=A6=E7=82=B9=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/tests/composer-focus.e2e.ts | 30 ++++++++++++++----- .../expected/composer-focus/focus.expected.md | 4 +-- .../client/ui-conversation/README.i18n.yaml | 4 +-- packages/client/ui-conversation/README.md | 2 +- packages/client/ui-conversation/README.zh.md | 2 +- .../src/client/skeleton/InputBar.tsx | 6 ++-- .../tests/input-bar.client.spec.tsx | 22 ++++++++++++++ 7 files changed, 54 insertions(+), 16 deletions(-) diff --git a/apps/web/tests/composer-focus.e2e.ts b/apps/web/tests/composer-focus.e2e.ts index 19e3306ca6..85de7c7346 100644 --- a/apps/web/tests/composer-focus.e2e.ts +++ b/apps/web/tests/composer-focus.e2e.ts @@ -2,12 +2,12 @@ import { fileURLToPath } from 'node:url' import { join } from 'node:path' import { chromium, type Page } from 'playwright' -import { expect, it, onTestFinished } from 'vitest' +import { expect, it, onTestFailed, onTestFinished } from 'vitest' import { assertFixtureInventory, compareOrRefreshGolden, launchWebScaffold, seedSession, watchConsole, webSnapshotMode, } from './scaffold.ts' import { createChatScrollFixture } from './chat-scroll-fixture.ts' -import { connectFreshWorkspace, newEnglishPage } from './support.ts' +import { connectFreshWorkspace, newEnglishPage, saveFailureShot } from './support.ts' const SNAPSHOT_DIR = fileURLToPath(new URL('./expected/composer-focus', import.meta.url)) const EXPECTED = join(SNAPSHOT_DIR, 'focus.expected.md') @@ -30,6 +30,15 @@ async function selectionState(page: Page) { }) } +/** + * Format observed browser focus and selection for the golden file. + * @param state - Current browser selection. + * @returns Focus, selected text and directed offsets. + */ +function describeSelection(state: Awaited>): string { + return `${state.focused ? 'focused' : 'unfocused'}; selection ${JSON.stringify(state.text)} (${state.anchor} → ${state.focus})` +} + /** * Exercise the card's top, inter-row gap, toolbar gap and bottom padding. * @param page - Page containing an editable composer. @@ -48,11 +57,15 @@ async function exerciseComposer(page: Page): Promise { const points = await page.locator('[data-composer-card]').evaluate((card) => { const box = card.getBoundingClientRect() const scroll = card.querySelector('[data-input-scroll]')!.getBoundingClientRect() - const row = card.querySelector('[data-input-scroll]')!.nextElementSibling!.getBoundingClientRect() + const rowElement = card.querySelector('[data-input-scroll]')!.nextElementSibling! + const row = rowElement.getBoundingClientRect() + const tools = rowElement.firstElementChild!.getBoundingClientRect() + const trailing = rowElement.lastElementChild!.getBoundingClientRect() + if (trailing.left <= tools.right) throw new Error('Composer toolbar has no unused gap') return [ { name: 'top padding', x: box.x + box.width / 2, y: (box.top + scroll.top) / 2 }, { name: 'row gap', x: box.x + box.width / 2, y: (scroll.bottom + row.top) / 2 }, - { name: 'toolbar gap', x: box.x + box.width / 2, y: row.top + row.height / 2 }, + { name: 'toolbar gap', x: (tools.right + trailing.left) / 2, y: row.top + row.height / 2 }, { name: 'bottom padding', x: box.x + box.width / 2, y: box.bottom - 2 }, ] }) @@ -60,7 +73,7 @@ async function exerciseComposer(page: Page): Promise { for (const point of points) { await page.mouse.click(point.x, point.y) await expect.poll(() => selectionState(page)).toEqual(selected) - observations.push(`- ${point.name}: focused; selection "beta" (10 → 6)`) + observations.push(`- ${point.name}: ${describeSelection(await selectionState(page))}`) } const top = points[0]! @@ -69,7 +82,7 @@ async function exerciseComposer(page: Page): Promise { await expect.poll(async () => (await selectionState(page)).focused).toBe(false) await page.mouse.click(top.x, top.y) await expect.poll(() => selectionState(page)).toEqual(selected) - observations.push('- return from outside: previous selection restored (10 → 6)') + observations.push(`- return from outside: ${describeSelection(await selectionState(page))}`) await page.keyboard.insertText('BETA') await expect.poll(() => input.textContent()).toBe('alpha BETA gamma') @@ -80,7 +93,7 @@ async function exerciseComposer(page: Page): Promise { await expect.poll(() => selectionState(page)).toEqual(caret) await page.keyboard.insertText('!') await expect.poll(() => input.textContent()).toBe('alpha BET!A gamma') - observations.push('- typing replaces the restored selection and resumes at the restored caret: alpha BET!A gamma') + observations.push(`- typing replaces the restored selection and resumes at the restored caret: ${await input.textContent()}`) return observations } @@ -95,6 +108,7 @@ it('restores the previous caret or selection in fresh and existing sessions', as const fixture = createChatScrollFixture({ markerPrefix: 'COMPOSER_FOCUS', title: 'Composer focus', turns: 1 }) await seedSession(scaffold, fixture.log, 'composer-focus-web-e2e') const page = await newEnglishPage(browser) + onTestFailed(() => saveFailureShot(page, 'web-e2e-composer-focus')) const tripwire = watchConsole(page) await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) await connectFreshWorkspace(page, scaffold.workspaceCwd, 'composer-focus') @@ -113,6 +127,6 @@ it('restores the previous caret or selection in fresh and existing sessions', as '', '## Existing session', '', ...docked, ].join('\n'), webSnapshotMode()) await assertFixtureInventory(SNAPSHOT_DIR, ['focus.expected.md']) - expect(tripwire.warnings).toEqual([]) + if (webSnapshotMode() !== 'record') expect(tripwire.warnings).toEqual([]) expect(tripwire.pageErrors).toEqual([]) }, 180_000) diff --git a/apps/web/tests/expected/composer-focus/focus.expected.md b/apps/web/tests/expected/composer-focus/focus.expected.md index d5e869319c..03e7a8dbec 100644 --- a/apps/web/tests/expected/composer-focus/focus.expected.md +++ b/apps/web/tests/expected/composer-focus/focus.expected.md @@ -6,7 +6,7 @@ - row gap: focused; selection "beta" (10 → 6) - toolbar gap: focused; selection "beta" (10 → 6) - bottom padding: focused; selection "beta" (10 → 6) -- return from outside: previous selection restored (10 → 6) +- return from outside: focused; selection "beta" (10 → 6) - typing replaces the restored selection and resumes at the restored caret: alpha BET!A gamma ## Existing session @@ -15,5 +15,5 @@ - row gap: focused; selection "beta" (10 → 6) - toolbar gap: focused; selection "beta" (10 → 6) - bottom padding: focused; selection "beta" (10 → 6) -- return from outside: previous selection restored (10 → 6) +- return from outside: focused; selection "beta" (10 → 6) - typing replaces the restored selection and resumes at the restored caret: alpha BET!A gamma diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index 84240db8fc..2e4c3fda20 100644 --- a/packages/client/ui-conversation/README.i18n.yaml +++ b/packages/client/ui-conversation/README.i18n.yaml @@ -18,8 +18,8 @@ en: 13ae68865fa315d7 zh: c152f020abf20f35 /deepseek-ai-dsh-client-ui-conversation/shell-and-standard-props: - en: 0194b866c22bcadc - zh: 40ea2d41887e9db1 + en: 60799332888c241d + zh: 98ed200045794324 /deepseek-ai-dsh-client-ui-conversation/temporary-composer-entries: en: bb1244310f5c0382 zh: 824b84077432b559 diff --git a/packages/client/ui-conversation/README.md b/packages/client/ui-conversation/README.md index 822113c11a..b11d19854e 100644 --- a/packages/client/ui-conversation/README.md +++ b/packages/client/ui-conversation/README.md @@ -74,7 +74,7 @@ The resident composer survives no-Session and Session transitions. Whitespace hi Plain Enter uses the configured delivery mode, exactly Ctrl+Enter or Cmd+Enter uses its complement, and Shift+Enter inserts a line break. Enter with Alt, AltGraph, both Ctrl and Cmd, or Shift plus Ctrl/Cmd leaves the draft and command menu unchanged and keeps the DOM event available to application shortcuts. The Conversation plugin registers the fixed send, newline, complementary-delivery, command-menu, and reference-menu rows and reserves their bindings until it unloads. -Clicking unused space inside an editable composer restores its previous caret or selection. Text selection, scrollbars, and individual controls keep their own pointer behavior. +Clicking unused space inside an editable composer preserves its current caret or selection when focused, or restores its previous caret or selection when unfocused. Text selection, scrollbars, controls, and embedded overlays keep their own pointer behavior. Default sends commit optimistically: Enter clears the draft, occurrence table, and undo history in the same transaction, keeps the composer in `plain`, and runs the send as a detached attempt, so typing and further sends continue during the flight. `sendSession` registers a Session submission echo (`session.beginSubmission`) with the delivery mode before serializing, preserving selected image and file order in `pendingSubmissions`; Session derives the placement from that mode and its current running state, so idle sends use the transcript, busy Queue sends use QueueDock, and busy Steer sends use the pending-steering surface. It then yields one paint, encodes images through the browser's native `FileReader` data-URL path, and cites staged file receipts. Command submissions use the same receipts for generic files, so sending `/goal` or `/plan` never reads those browser files again. The prompt reuses the submission `requestId`; Session retires the echo once at its display handoff, correlated by that `rpcId`. Concurrent failures are restored together in submission order until the user edits the restored content; command submissions keep the frozen `submitting` phase. Detached attempts retain their attachment ids through admission and Session scope disposal. An observed retirement immediately exposes each image preview through the durable cache, replaces it with the canonical URL after fetching the admitted attachment, revokes each URL after its use ends, and releases file cards. Selected generic files enter one FIFO background-upload queue; `maxConcurrentFileUploads` defaults to two active Worker transports, the Conversation service retains queued and active operations plus byte progress across Session navigation, and removing a draft skips its queued transfer or aborts its active transport. Where the browser shell exposes `__DSH_HOST_PATHS__` (the Desktop application), dropped or pasted folders and dropped, picked, or pasted non-image files with a real path become `@path` chips; images keep uploading. Drag-and-drop and paste identify directories through the browser entry API; when that API is absent or returns no entry, pasted items retain ordinary file handling. The file picker cannot select directories. References require the `ui-reference` plugin and the original paths to remain readable by the model's file tools. Paths inside the workspace are relative; others remain absolute. The whole batch is validated before insertion, retains source order and selected text, and uses whitespace-separated, closed-quote mentions. A browser without the bridge refuses dropped or pasted folders; a Desktop folder without a reported path is rejected separately. Continuable subagents disable attachment intake and skip local echoes because their transport does not preserve the browser request id. diff --git a/packages/client/ui-conversation/README.zh.md b/packages/client/ui-conversation/README.zh.md index 99848f0860..871d4871e6 100644 --- a/packages/client/ui-conversation/README.zh.md +++ b/packages/client/ui-conversation/README.zh.md @@ -74,7 +74,7 @@ Session 首次绑定或缓存的 Session 成为 current 时,shell 会在渲染 普通 Enter 使用已配置的投递模式,严格的 Ctrl+Enter 或 Cmd+Enter 使用互补模式,Shift+Enter 插入换行。带 Alt、AltGraph、同时带 Ctrl 与 Cmd,或 Shift 与 Ctrl/Cmd 的 Enter 保持草稿和指令菜单不变,并将 DOM 事件留给应用快捷键。Conversation 插件注册发送、换行、互补投递、命令菜单和引用菜单的固定条目,并在卸载前保留这些键位。 -点击可编辑输入框内的留白会恢复上次的光标或选区。文本选择、滚动条和各个控件保持各自的指针交互行为。 +点击可编辑输入框内的留白时,已聚焦的输入框保留当前光标或选区,未聚焦的输入框恢复上次的光标或选区。文本选择、滚动条、控件和内嵌浮层保持各自的指针交互行为。 默认发送采用乐观提交:Enter 在同一事务里清空草稿、occurrence 表和撤销历史,composer 保持 `plain`,发送作为 detached attempt 运行,发送期间可以继续输入和提交。`sendSession` 在序列化之前用投递模式注册 Session 提交回显(`session.beginSubmission`),并在 `pendingSubmissions` 中保留图片与文件的选择顺序;Session 根据该模式与当前运行状态推导位置,因此空闲发送进入 transcript(文本记录),繁忙时 Queue 进入 QueueDock,繁忙时 Steer 进入 pending-steering 区域。随后让出一帧,图片经浏览器原生 `FileReader` data-URL 路径编码,文件则引用已暂存凭证。命令提交也用同一凭证表示通用文件,因此发送 `/goal` 或 `/plan` 时不会再次读取这些浏览器文件。提示词复用提交 `requestId`;Session 按同一 `rpcId` 关联展示接管,并仅退休回显一次。多个并发发送失败时,在用户编辑还原内容之前按提交顺序合并还原;命令提交保持冻结的 `submitting` 阶段。Detached attempt 持有附件 id,直到 admission 完成或 Session scope 销毁。回显以 observed 退休时,durable 图片缓存立即公开每个预览 URL,读取 admitted 附件后用规范化 URL 替换预览,并在各 URL 停止使用后撤销,同时释放文件卡。选中的通用文件进入同一个先进先出的后台上传队列;`maxConcurrentFileUploads` 默认允许两个 Worker transport 同时运行,Conversation 服务在切换 Session 时继续持有排队和运行中的传输操作及字节进度,移除草稿会跳过排队中的传输或中止正在运行的传输。浏览器 shell 暴露 `__DSH_HOST_PATHS__` 时(桌面应用),拖入或粘贴的文件夹以及拖入、选择或粘贴的带真实路径的非图片文件会成为 `@路径` chip;图片仍然上传。拖放和粘贴通过浏览器 entry API 识别目录;该 API 不可用或没有返回 entry 时,粘贴项沿用普通文件处理。文件选择器不能选择目录。引用需要启用 `ui-reference` 插件,原路径也必须仍可由模型的文件工具读取。工作区内的路径使用相对形式,其他路径保留绝对形式。整批文件先校验再插入,保留来源顺序和已选中的文字,引用之间有空白分隔,含空格的路径使用闭合引号。没有该桥的浏览器会拒绝拖入或粘贴的文件夹,桌面端无法获取文件夹路径时单独报错。continuable 子代理禁用附件入口,也不创建本地回显,因为其 transport 不保留浏览器 request id。 diff --git a/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx b/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx index 1adb4a16e4..5012dad909 100644 --- a/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx +++ b/packages/client/ui-conversation/src/client/skeleton/InputBar.tsx @@ -275,11 +275,13 @@ export const InputBar = memo(function InputBar({ if (!editable || editor === null || e.button !== 0 || e.defaultPrevented) return const target = e.target if (!(target instanceof Element) || !e.currentTarget.contains(target)) return + if (target.closest('[data-composer-overlay]') !== null) return if (scrollRef.current?.contains(target)) return const control = target.closest('button, a, input, select, textarea, [role="button"], [contenteditable], [tabindex]') if (control !== null && e.currentTarget.contains(control)) return e.preventDefault() - // Native caret moves can precede Lexical's selectionchange listener. + // Lexical's stored selection can lag behind native caret moves, so calling + // editor.focus() on a focused editor can restore an older caret. if (document.activeElement !== editor.getRootElement()) focusDraftEditor(editor, revealSelection) } @@ -394,7 +396,7 @@ export const InputBar = memo(function InputBar({ onMouseDown={onCardMouseDown} > {sessionId !== undefined && ( -
{renderSlot('conversation.input.overlay', {})}
+
{renderSlot('conversation.input.overlay', {})}
)} {accessory !== undefined &&
{accessory}
} {renderSlot('conversation.input.attachments', { diff --git a/packages/client/ui-conversation/tests/input-bar.client.spec.tsx b/packages/client/ui-conversation/tests/input-bar.client.spec.tsx index 3484732787..536a133e3f 100644 --- a/packages/client/ui-conversation/tests/input-bar.client.spec.tsx +++ b/packages/client/ui-conversation/tests/input-bar.client.spec.tsx @@ -309,6 +309,28 @@ describe('composer focus handoff', () => { expect(lexicalFocus).not.toHaveBeenCalled() }) + it('leaves embedded overlay options, status text and scrollbars with the focused search field', () => { + const { view, shell } = bench({ + overlay:
+ +
Model option
+
Loading models
+
, + }) + const search = view.getByRole('textbox', { name: 'Filter models' }) + act(() => { search.focus() }) + const lexicalFocus = vi.spyOn(shell.editor, 'focus') + + for (const target of [ + view.getByRole('option'), view.getByRole('listbox'), view.getByText('Loading models'), + view.container.querySelector('[data-composer-overlay]')!, + ]) { + expect(fireEvent.mouseDown(target, { button: 0 })).toBe(true) + expect(document.activeElement).toBe(search) + } + expect(lexicalFocus).not.toHaveBeenCalled() + }) + it('keeps a focused editor\'s native caret without restoring an older Lexical selection', () => { const { view, shell, textarea } = bench() act(() => { shell.focus() }) From c772c85c173d6727504195f7a3d8546a23de259f Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sat, 26 Sep 2026 16:52:54 +0800 Subject: [PATCH 005/155] refactor(agent-team): send directly through Agent inbox steering --- .../feature/2026-08-05-agent-teams.i18n.yaml | 16 +- .../feature/2026-08-05-agent-teams.md | 12 +- .../feature/2026-08-05-agent-teams.zh.md | 12 +- .../2026-09-26-team-direct-inbox.i18n.yaml | 19 + .../2026-09-26-team-direct-inbox.md | 27 + .../2026-09-26-team-direct-inbox.zh.md | 27 + apps/cli/tests/agent-team-headless.e2e.ts | 9 +- .../profiles/headless/team-snapshot.patch.yml | 1 - .../headless/tests/headless.expected.e2e.ts | 8 +- apps/web/tests/agent-team-panel.overlay.yml | 1 - docs/architecture.i18n.yaml | 4 +- docs/architecture.md | 2 +- docs/architecture.zh.md | 2 +- docs/config-catalog.md | 4 +- docs/config-catalog.zh.md | 4 +- docs/persistence-catalog.i18n.yaml | 60 +- docs/persistence-catalog.md | 30 +- docs/persistence-catalog.zh.md | 30 +- docs/persistence-schema.json | 26 +- docs/subsystems/agent-team.i18n.yaml | 14 +- docs/subsystems/agent-team.md | 16 +- docs/subsystems/agent-team.zh.md | 16 +- docs/subsystems/subagent.md | 2 +- docs/subsystems/subagent.zh.md | 2 +- docs/tool-catalog.i18n.yaml | 8 +- docs/tool-catalog.md | 4 +- docs/tool-catalog.zh.md | 4 +- packages/experimental/README.i18n.yaml | 4 +- packages/experimental/README.md | 2 +- packages/experimental/README.zh.md | 2 +- .../agent-team-profile/README.i18n.yaml | 4 +- .../experimental/agent-team-profile/README.md | 2 +- .../agent-team-profile/README.zh.md | 2 +- .../agent-team-profile/cordis.patch.yml | 1 - .../experimental/agent-team/README.i18n.yaml | 62 +- packages/experimental/agent-team/README.md | 35 +- packages/experimental/agent-team/README.zh.md | 35 +- packages/experimental/agent-team/package.json | 2 +- packages/experimental/agent-team/src/index.ts | 68 +- .../experimental/agent-team/src/journal.ts | 2 +- .../agent-team/src/legacy-delivery.ts | 168 ++++ .../experimental/agent-team/src/lifecycle.ts | 20 + .../experimental/agent-team/src/mailbox.ts | 332 -------- packages/experimental/agent-team/src/types.ts | 10 +- .../agent-team/tests/persistence.spec.ts | 62 +- .../agent-team/tests/team.spec.ts | 753 ++++++------------ .../tool-agent-team/README.i18n.yaml | 4 +- .../experimental/tool-agent-team/README.md | 2 +- .../experimental/tool-agent-team/README.zh.md | 2 +- .../experimental/tool-agent-team/src/index.ts | 7 +- .../tool-agent-team/tests/tool-team.spec.ts | 6 +- .../extensions/tool-cordis/src/api-catalog.ts | 12 +- .../references/packages.md | 2 +- .../subagent/src/continuation-messages.ts | 2 +- scripts/no-unknown-casts.baseline.json | 4 +- .../session/team-targets/session.v4.jsonl | 27 + .../team-targets/system-prompt.expected.md | 2 +- .../team-targets/tool-schemas.expected.json | 4 +- 58 files changed, 873 insertions(+), 1127 deletions(-) create mode 100644 .agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml create mode 100644 .agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md create mode 100644 .agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md create mode 100644 packages/experimental/agent-team/src/legacy-delivery.ts delete mode 100644 packages/experimental/agent-team/src/mailbox.ts create mode 100644 snapshots/session/team-targets/session.v4.jsonl diff --git a/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml b/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml index 1f9b21f587..d2426e9fbb 100644 --- a/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml @@ -21,8 +21,8 @@ en: 085846d0078c0898 zh: 40b2ca3ae6864451 /agent-note-durable-agent-teams-over-continuable-children/mailbox-and-task-transactions: - en: ab2ad55021eb34e0 - zh: 2d1996df7a69201d + en: 0e01d2a330537a26 + zh: 356d9b813bed01b1 /agent-note-durable-agent-teams-over-continuable-children/shared-checkout-boundary: en: 3969de3b44e412c8 zh: 12be5854816cb808 @@ -30,11 +30,11 @@ en: e6348054f024725b zh: 8740636e99940308 /agent-note-durable-agent-teams-over-continuable-children/alternatives-considered: - en: bb266fe7a97f0828 - zh: 7c86c2d6d11ba02a + en: 90e46f71daed62f5 + zh: d5b56ff1fd7922c4 /agent-note-durable-agent-teams-over-continuable-children/testing: - en: 151b462649212acf - zh: 983c4bee7b71c1e3 + en: a91a802a64d991aa + zh: 575796b6cb30cdb9 /agent-note-durable-agent-teams-over-continuable-children/consequences: - en: c3740ae56809e537 - zh: 76a1e77d14cb6f26 + en: 08d69eee4309e372 + zh: 81d8043b639a3cc5 diff --git a/.agents/notes/implemented/feature/2026-08-05-agent-teams.md b/.agents/notes/implemented/feature/2026-08-05-agent-teams.md index 6333e511ba..6a76f65bed 100644 --- a/.agents/notes/implemented/feature/2026-08-05-agent-teams.md +++ b/.agents/notes/implemented/feature/2026-08-05-agent-teams.md @@ -38,11 +38,11 @@ Fresh children have no inherited conversation. Fork children capture the Lead's ## Mailbox and task transactions -Peer communication is a Lead-log mailbox. `team/message/queued` is appended and flushed before delivery. The target message carries the stable message id and sender identity in both durable source metadata and a short model-visible prefix. A target receipt is acknowledged with `team/message/delivered` only after its pending inbox item or recorded user message is flushed. Immediate admission is serialized per target in queued-log order, recovery retries queued-minus-delivered in the same order, and delivery folds live or persisted target inbox/history state before cold resume. Every current-version Team payload is runtime-validated before entering replay state. The Team runtime tracks dispatch and asynchronous acknowledgement work from synchronous admission until settlement; disposal closes admission and awaits both before removing the service. Current waiters wake only after the owning Team event flush succeeds. +The historical Lead-log mailbox remains a compatibility format: queued records retain their stable identity and sender, and recovery acknowledges only flushed target inbox/history receipts. New sends follow the [direct inbox decision](../simplification/2026-09-26-team-direct-inbox.md). Team payload validation and legacy recovery remain necessary for accepted old records. Unknown mailbox content stays as decoded JSON during event projection and checkpoint admission. Validation inspects its type without rebuilding its fields, because generic object parsing can omit a valid own `__proto__` key. Locally declared content variants undergo structural validation; opaque plugin fields do not gain Team semantics. Cache invalidation is necessary because parser correction alone cannot recover keys omitted from cached state. The [Team documentation](../../../../packages/experimental/agent-team/README.md) owns the restore behavior. -`send_message` always attempts Steer delivery. A running target receives the message at the nearest step boundary; an inactive target starts a turn if loaded or cold-resumes otherwise. Success means the message is already durable even when temporary delivery failure leaves it queued. The mechanism provides process-local retry and target-Session de-duplication, not a cross-process exactly-once claim. The [Team Steer messaging decision](../../archived/simplification/2026-08-30-team-send-message-steer.md) owns the single-tool scheduling rationale. +`send_message` uses Steer for running, idle, and cold targets. New sends return inbox acceptance; historical mailbox recovery retains receipt checks and legacy acknowledgements. The [Team Steer messaging decision](../../archived/simplification/2026-08-30-team-send-message-steer.md) records the single-tool scheduling rationale. Shared tasks are complete snapshots with Team-local ids and monotonic revisions. Every mutation carries `expectedRevision`. Any member creates, reads, or claims a ready unowned task; the owner or Lead edits and transitions it, while only the Lead assigns another member. Numeric task ids remain within the safe-integer allocation range, and exhaustion fails without reusing an id. Dependencies must name non-deleted tasks and form a complete DAG. Deleted tasks are retained tombstones. `writeScopes` are normalized path prefixes that produce overlap diagnostics but never block claim or authorize a write. @@ -74,20 +74,20 @@ Publication requires `apply` to return a new state object per applied Team event **Enable Teams in the default catalog.** Rejected because scoped Team controls would shadow same-named legacy globals and unsolicited delegation would add latency and token cost to simple tasks. An opt-in profile bundle inserts Team and disables the legacy controls without adding Team packages to shipped dependency graphs. -**Use an in-memory board and mailbox.** Rejected because child settlement, HMR, and process interruption would lose accepted coordination state and make retries ambiguous. +**Use an in-memory board and mailbox.** Roster and task state must survive settlement, HMR, and interruption. Historical accepted mailbox intent retains compatibility recovery; new message ownership follows the target inbox. **Return Team tool results as untyped JSON.** Rejected because an undeclared result type lets `execute` drift from the value the model is promised without a compiler error, and it invites indentation that costs tokens on every roster, task, and receipt. Each Team tool therefore declares its complete result schema and one shared helper renders it compactly. ## Testing -Package tests cover identity, name and authority checks, provider selection, reserved-id persistence collisions, child-before-Lead flush ordering, durable provisioning failure and pending-inbox JSONL reconciliation, concurrent target-local ordering, pending/history de-duplication, mailbox limits, post-flush notification, bounded disposal with in-flight creation and dispatch cancellation, failed-member cleanup, task CAS and DAG validation, write-scope warnings, wait cancellation/timeout, inbox-preserving interruption, ordinary-fork isolation, legacy-control shadowing, compact declared-schema result rendering, and scoped registration HMR at per-file 100% coverage. A keyless product snapshot loads the Agent Teams profile bundle through `dsh --profile headless` and pins its complete model-visible tool list, Team policy, and durable workflow projection for two teammates, dependent tasks, peer delivery, waiting, completion, and aggregation. A CLI e2e reuses the same deterministic adapter and verifies normal process exit with persisted Team and child logs. +Package tests cover Team authority, provisioning durability, task transitions, direct inbox acceptance, sender attribution, lifecycle cancellation, and historical mailbox recovery. The keyless Team profile snapshot pins the policy, tools, and workflow; the CLI composition test checks persisted Team and child logs. Model-facing member identities and availability follow the [tool projection decision](../simplification/2026-09-15-model-agent-availability-and-team-targets.md); service residency and durable identity remain distinct. ## Consequences -The Lead Session grows with whole task/member snapshots and mailbox acknowledgements. This favors independently inspectable recovery over compact deltas; configured task and pending-mail bounds cap active state, while deleted and delivered history remains append-only until broader Session retention applies. +The Lead Session retains whole task/member snapshots and historical mailbox records. This favors inspectable recovery over compact deltas; deleted and delivered history remains append-only until broader Session retention applies. -An active roster member can be non-resident, so `inactive` is not failure and a send can incur cold-resume latency. Temporary inspection, resume, or inbox-admission failure can leave a durable message queued for recovery. A failed member permanently consumes its name and member slot, making provisioning failures visible instead of silently recycling identity. +An active roster member can be non-resident, so `inactive` is not failure and sends can incur cold-resume latency. Admission failures reject new sends. Failed historical deliveries remain pending for compatibility recovery. Failed provisioning permanently consumes its name and member slot. Coordination reduces likely checkout conflicts but cannot eliminate writes outside filesystem compare-and-set tools. The final diff and tests remain the Lead's integration boundary. diff --git a/.agents/notes/implemented/feature/2026-08-05-agent-teams.zh.md b/.agents/notes/implemented/feature/2026-08-05-agent-teams.zh.md index 3fed130214..e3adb7d597 100644 --- a/.agents/notes/implemented/feature/2026-08-05-agent-teams.zh.md +++ b/.agents/notes/implemented/feature/2026-08-05-agent-teams.zh.md @@ -38,11 +38,11 @@ fresh child 不继承对话。fork child 只捕获一次 Lead 已完成 turn 前 ## Mailbox and task transactions -Peer 通讯使用 Lead 日志 mailbox。投递前先追加并 flush `team/message/queued`。target message 会在持久 source metadata 与短模型可见前缀中同时携带稳定 message id 和 sender identity。只有 pending inbox 条目或已记录用户消息完成 flush,Lead 日志才写入 `team/message/delivered` acknowledgement。即时准入按 target 和 queued 日志顺序串行化,恢复按同一顺序重试 queued-minus-delivered,并在冷恢复前折叠 live 或 persisted target 的 inbox/历史状态。每个当前版本 Team payload 都会经过运行时验证后才进入 replay state。Team runtime 从同步准入到 settlement 全程跟踪 dispatch 与异步 acknowledgement 工作;dispose 会关闭准入,并在移除服务前等待两者。当前 waiter 只在所属 Team event flush 成功后被唤醒。 +历史 Lead-log mailbox 仍是兼容格式:queued 记录保留稳定身份与发送者,恢复仅确认已 flush 的目标 inbox/历史回执。新发送遵循[直接 inbox 决策](../simplification/2026-09-26-team-direct-inbox.zh.md)。已接受的旧记录仍需要 Team payload 校验和旧消息恢复。 事件投影和 checkpoint 准入期间,未知 mailbox 内容保持为已解码 JSON。校验只检查其 type,不重建字段,因为通用对象解析可能省略有效的自有 `__proto__` 键。本地声明的内容变体接受结构校验;不透明的插件字段不获得 Team 语义。缓存失效是必要的,因为只修正解析器无法恢复缓存状态中省略的键。[Team 文档](../../../../packages/experimental/agent-team/README.zh.md)拥有恢复行为的说明。 -`send_message` 始终尝试 Steer 投递。running target 在最近的步骤边界收到消息,inactive target 在已加载时启动一个轮次,否则冷恢复。即使临时投递失败让消息保持 queued,成功也表示消息已经持久化。该机制提供进程内重试与 target Session 去重,不宣称跨进程 exactly-once。[Team Steer 消息决策](../../archived/simplification/2026-08-30-team-send-message-steer.md)负责单工具调度的理由。 +`send_message` 对 running、idle 和 cold target 使用 Steer。新发送返回 inbox 接收结果;历史 mailbox 恢复保留回执检查与旧确认。[Team Steer 消息决策](../../archived/simplification/2026-08-30-team-send-message-steer.md)记录单一工具调度的理由。 共享 task 是带 Team-local id 与单调 revision 的完整快照。每次变更都携带 `expectedRevision`。任意 member 可以创建、读取或 claim ready 且无 owner 的任务;Owner 或 Lead 可以编辑和转换;只有 Lead 可以分配给另一个 member。数字 task id 保持在安全整数分配范围内;该范围耗尽时会失败,不会复用 id。依赖必须指向未删除任务,并形成完整 DAG。删除任务保留为 tombstone。`writeScopes` 是规范化路径前缀,只产生重叠诊断,绝不会阻止 claim 或授予写权限。 @@ -74,20 +74,20 @@ Web panel 读取 Lead Session 的 `agentTeam` 传输投影,因为现有投影 **在默认工具目录中启用 Team。** 拒绝,因为 scoped Team control 会覆盖同名旧全局工具,主动 delegation 也会给简单任务增加延迟和 token 成本。opt-in profile bundle 会插入 Team 并禁用旧 control,同时不向随附依赖图添加 Team 包。 -**使用内存 task board 与 mailbox。** 拒绝,因为 child settlement、HMR 与进程中断会丢失已接受协调状态,并让重试变得含糊。 +**使用内存 board 与 mailbox。** roster 与任务状态必须经受 settlement、HMR 与中断。历史已接受 mailbox 意图保留兼容恢复,新消息归属目标 inbox。 **让 Team 工具返回未类型化 JSON。** 拒绝,因为未声明的结果类型会让 `execute` 在没有编译错误的情况下偏离对模型的承诺,也会引入在每份 roster、task 与回执上都消耗 token 的缩进。因此每个 Team 工具都声明完整的结果 schema,并由一个共享 helper 紧凑渲染。 ## Testing -Package test 以逐文件 100% coverage 覆盖身份、名字与权限检查、provider 选择、预留 id 持久化冲突、child-before-Lead flush 顺序、持久 provisioning 失败与 pending-inbox JSONL 对账、target-local 并发顺序、pending/history 去重、mailbox 限额、flush 后 notification、取消在途创建与 dispatch 的有界 dispose、failed member cleanup、task CAS 与 DAG 校验、write-scope warning、wait cancel/timeout、保留 inbox 的 interrupt、普通 fork 隔离、旧 control shadowing、声明 schema 的紧凑结果渲染与 scoped registration HMR。一条 keyless 产品快照会通过 `dsh --profile headless` 加载 Agent Teams profile bundle,并为两个 teammate、依赖任务、peer 投递、等待、完成和汇总固定完整的面向模型工具列表、Team policy 与持久 workflow 投影。CLI e2e 会复用同一个确定性 adapter,并验证带持久 Team 与 child 日志的正常退出。 +包测试覆盖 Team 权限、provisioning 持久性、任务转换、直接 inbox 接收、发送者归属、生命周期取消和历史 mailbox 恢复。无密钥 Team profile 快照固定 policy、工具与工作流;CLI 组合测试检查持久 Team 和 child 日志。 模型可见的成员身份与可用状态遵循[工具投影决策](../simplification/2026-09-15-model-agent-availability-and-team-targets.zh.md);服务驻留状态和持久身份仍保持区分。 ## Consequences -Lead Session 会随着完整 task/member 快照与 mailbox acknowledgement 增长。该设计用可独立检查的恢复能力换取更紧凑的 delta;配置的 task 与 pending-mail 限额限制 active state,而 deleted 与 delivered 历史会保持 append-only,直到更广泛的 Session retention 生效。 +Lead Session 保留完整 task/member 快照和历史 mailbox 记录。这优先支持可检查的恢复,而不是紧凑增量;deleted 与 delivered 历史在更广泛的 Session 保留策略生效前仍只追加。 -active roster member 可以不驻留,因此 `inactive` 不表示失败,send 可能产生 cold-resume 延迟。临时 inspection、resume 或 inbox 准入失败可能留下持久 queued 消息等待恢复。failed member 会永久占用名字与 member slot,使 provisioning failure 保持可见而不是静默回收身份。 +active roster 成员可能不驻留,因此 `inactive` 不表示失败,发送可能产生冷恢复延迟。准入失败会拒绝新发送。失败的历史投递保留为 pending,以供兼容恢复。provisioning 失败永久占用其名称和成员槽位。 协调可以降低 checkout 冲突概率,但无法消除文件系统 CAS 工具之外的写入。最终 diff 与测试仍是 Lead 的集成边界。 diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml new file mode 100644 index 0000000000..a9a502ff18 --- /dev/null +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml @@ -0,0 +1,19 @@ +# Bilingual-pair consistency record for 2026-09-26-team-direct-inbox.md (docs/i18n/README.md): per heading +# section, a hash of its English and Chinese blocks outside code blocks and generated regions. +# After editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md +/agent-note-team-messages-use-the-target-inbox: + en: ae17b789652784b5 + zh: fa462ace95c8cdaa +/agent-note-team-messages-use-the-target-inbox/problem: + en: 83296699f94c77d3 + zh: e681a426bf0a703a +/agent-note-team-messages-use-the-target-inbox/decision: + en: 9d49529e7acc318a + zh: d6c6acc41eb6f07a +/agent-note-team-messages-use-the-target-inbox/alternatives-considered: + en: 35323ba83e6e577a + zh: 5ec0cf5f2fb04fae +/agent-note-team-messages-use-the-target-inbox/consequences: + en: 162f2a2a528fc7d0 + zh: b09e90e1b21cfc3a diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md new file mode 100644 index 0000000000..a6dc2d5e4a --- /dev/null +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md @@ -0,0 +1,27 @@ +# Agent Note: Team messages use the target inbox + +Status: implemented + +English | [中文](2026-09-26-team-direct-inbox.zh.md) + +## Problem + +A second Team outbox duplicates Agent inbox ownership with separate identities, acknowledgements, persistence checkpoints, and retry ordering. Callers need an explicit admission result while the continuation owner already provides target locking, lifecycle authorization, and cold recovery. + +## Decision + +New Team sends return the accepted inbox `MessageId` or throw. They use live Lead Steer or the host-only subagent Steer adapter, retaining the actual sender through the existing `agent-message` source and the member name in content. Acceptance follows ordinary Agent persistence; it neither confirms model processing nor adds a synchronous flush guarantee. Team does not retain unaccepted intent, retry it after restart, or deduplicate explicit resends. + +Historical pending messages retain compatibility recovery, receipt inspection, and legacy acknowledgements. Removing their decoder or abandoning pending data would violate accepted Session history. This partially supersedes the mailbox decision in [Agent Teams](../feature/2026-08-05-agent-teams.md); roster and task decisions remain there. The [package reference](../../../../packages/experimental/agent-team/README.md#understand-the-implementation) owns recovery triggers and limitations. + +## Alternatives considered + +**Keep the Team outbox for all sends.** This preserves a stronger retry promise but duplicates coordination and requires maintaining two acceptance states. Reintroduce it only for a concrete durable send-intent requirement that the Agent inbox cannot serve. + +**Expand public sibling messaging permissions.** Team membership is separate from subagent parent authority. The host adapter authorizes the exact Lead without misattributing the sender or broadening public child controls. + +**Discard historical pending items.** Stopping new writes does not discharge old accepted intent. The compatibility reader and drain remain until an explicit data-retirement policy exists. + +## Consequences + +New attempts have one identity and one inbox owner. A failed attempt is visible to its caller and has no Team retry promise. Historical logs still cost decoder, projection, and recovery code; new sends do not wait for or trigger that recovery. Tests cover direct Lead/peer acceptance, cold recovery, sender attribution, failures, cancellation, disposal, and historical receipt recovery. diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md new file mode 100644 index 0000000000..e75dacc73c --- /dev/null +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md @@ -0,0 +1,27 @@ +# Agent Note: Team 消息使用目标 inbox + +Status: implemented + +[English](2026-09-26-team-direct-inbox.md) | 中文 + +## 问题 + +第二套 Team outbox 通过独立身份、确认、持久化检查点和重试排序重复了 Agent inbox 的职责。调用方需要明确的准入结果,而 continuation owner 已提供目标锁、生命周期授权和冷恢复。 + +## 决策 + +新的 Team 发送返回获准 inbox 的 `MessageId` 或抛出错误。它们使用 live Lead Steer 或 host-only subagent Steer adapter,通过现有 `agent-message` source 保留真实发送者,并在正文中保留成员名称。接收遵循普通 Agent 的持久化策略,既不确认模型已处理,也不增加同步 flush 保证。Team 不保留尚未接收的发送意图,不在重启后重试,也不对显式重发去重。 + +历史 pending 消息保留兼容恢复、回执检查和旧确认。删除其 decoder 或放弃 pending 数据会违反已接受的 Session 历史。这部分取代了 [Agent Teams](../feature/2026-08-05-agent-teams.zh.md) 的 mailbox 决策;roster 和任务决策仍由原记录负责。[包参考](../../../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义恢复触发条件和限制。 + +## 考虑过的替代方案 + +**为所有发送保留 Team outbox。** 这保留了更强的重试承诺,但重复协调职责,并要求维护两个接收状态。只有具体的持久发送意图需求无法由 Agent inbox 满足时,才重新引入它。 + +**扩大公开的 sibling 消息权限。** Team 成员关系与 subagent parent 权限不同。host adapter 授权确切的 Lead,不会错误归属发送者,也不会扩大公开 child control 权限。 + +**丢弃历史 pending 项。** 停止新写入并不解除已经接收的旧意图。在有明确的数据退役策略之前,兼容读取与补送必须保留。 + +## 后果 + +新尝试只有一个身份和一个 inbox owner。失败尝试会向调用方报告,且没有 Team 重试承诺。历史日志仍需要 decoder、投影和恢复代码;新发送既不等待也不触发该恢复。测试覆盖直接 Lead/peer 接收、冷恢复、发送者归属、失败、取消、dispose(资源释放)和历史回执恢复。 diff --git a/apps/cli/tests/agent-team-headless.e2e.ts b/apps/cli/tests/agent-team-headless.e2e.ts index 481cfc7332..7fcd0d7d2d 100644 --- a/apps/cli/tests/agent-team-headless.e2e.ts +++ b/apps/cli/tests/agent-team-headless.e2e.ts @@ -17,7 +17,7 @@ function records(content: string): Record[] { } describe('dsh run with Agent Teams enabled', () => { - it('runs two teammates, durable peer mail, dependent tasks, waiting, and final aggregation', async () => { + it('runs two teammates, direct peer messages, dependent tasks, waiting, and final aggregation', async () => { const cwd = await mkdtemp(join(tmpdir(), 'dsh-agent-team-headless-')) try { const home = join(cwd, '.dsh') @@ -103,8 +103,11 @@ describe('dsh run with Agent Teams enabled', () => { expect(root).toBeDefined() const eventTypes = root!.map(record => record.type) expect(eventTypes.filter(type => type === 'team/member')).toHaveLength(4) - expect(eventTypes).toContain('team/message/queued') - expect(eventTypes).toContain('team/message/delivered') + expect(eventTypes).not.toContain('team/message/queued') + expect(eventTypes).not.toContain('team/message/delivered') + const peerMessages = parsed.flatMap(log => log.filter(record => record.type === 'user/message' + && (record.data as { source: { kind: string } }).source.kind === 'agent-message')) + expect(peerMessages).toHaveLength(2) const taskEvents = root!.filter(record => record.type === 'team/task') expect(taskEvents.filter((record) => { const data = record.data as { task?: { status?: string } } | undefined diff --git a/apps/cli/tests/profiles/headless/team-snapshot.patch.yml b/apps/cli/tests/profiles/headless/team-snapshot.patch.yml index c7048d2406..290714194e 100644 --- a/apps/cli/tests/profiles/headless/team-snapshot.patch.yml +++ b/apps/cli/tests/profiles/headless/team-snapshot.patch.yml @@ -42,7 +42,6 @@ config: maxMembers: 8 maxTasks: 256 - maxPendingMessagesPerMember: 64 maxMessageBytes: 65536 disposalTimeoutMs: 5000 diff --git a/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts b/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts index 33752b7812..97123c304d 100644 --- a/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts +++ b/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts @@ -788,14 +788,14 @@ describe('headless stream-json snapshots', () => { if (typeof message !== 'object' || message === null || Array.isArray(message)) return false const source = (message as JsonObject).source return typeof source === 'object' && source !== null && !Array.isArray(source) - && (source as JsonObject).kind === 'team-message' + && (source as JsonObject).kind === 'agent-message' }) }) const steeredMessageIndex = implementerRows.findIndex((row) => { if (row.type !== 'user/message') return false const source = (row.data as JsonObject).source return typeof source === 'object' && source !== null && !Array.isArray(source) - && (source as JsonObject).kind === 'team-message' + && (source as JsonObject).kind === 'agent-message' }) const openTurnStart = implementerRows.findLastIndex((row, index) => ( index < steeredMessageIndex && row.type === 'turn/start' @@ -858,7 +858,7 @@ describe('headless stream-json snapshots', () => { "researcher", ], "checkedRoster": true, - "deliveredMessages": 2, + "deliveredMessages": 0, "identityReminders": [ " You are teammate "implementer". @@ -876,7 +876,7 @@ describe('headless stream-json snapshots', () => { ", ], "memberEdges": 4, - "queuedMessages": 2, + "queuedMessages": 0, "sessions": 4, "steerEvidence": { "completedAfterMessage": true, diff --git a/apps/web/tests/agent-team-panel.overlay.yml b/apps/web/tests/agent-team-panel.overlay.yml index 20c49c23a1..ecca62985b 100644 --- a/apps/web/tests/agent-team-panel.overlay.yml +++ b/apps/web/tests/agent-team-panel.overlay.yml @@ -17,7 +17,6 @@ config: maxMembers: 8 maxTasks: 256 - maxPendingMessagesPerMember: 64 maxMessageBytes: 65536 disposalTimeoutMs: 5000 diff --git a/docs/architecture.i18n.yaml b/docs/architecture.i18n.yaml index efc66e50ef..9b37213097 100644 --- a/docs/architecture.i18n.yaml +++ b/docs/architecture.i18n.yaml @@ -30,8 +30,8 @@ en: e1e3a44140036f25 zh: 84c70c969e5ad216 /deepseek-harness-architecture/capability-seams: - en: 93d1dc2eeda4aec2 - zh: ee7a9da89151ea17 + en: c34e2531f90ac953 + zh: 5b8455374dea3ee0 /deepseek-harness-architecture/where-new-behavior-goes: en: 9b2eb0539a9cd0d6 zh: 4f575277b91d4e5c diff --git a/docs/architecture.md b/docs/architecture.md index 0919d65a30..e0fe11696c 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -132,7 +132,7 @@ A **seam** is a swappable capability with three roles: a **Service Definition** Seams are why one provider swap changes the whole product. Filesystem and subprocess providers share one execution world, so pointing them at a remote sandbox moves Bash, PTY, and LSP with them, with no provider forks. [Subagent providers](subsystems/subagent.md) vary just as widely behind one interface, from a fresh child agent to a delegated turn in another product. -[Experimental Agent Teams](subsystems/agent-team.md) is a published opt-in coordination seam on `ctx.agentTeams`, with a durable roster, task board, and mailbox layered over continuable subagents. +[Experimental Agent Teams](subsystems/agent-team.md) is a published opt-in coordination seam on `ctx.agentTeams`, with a durable roster and task board plus direct Agent inbox messaging layered over continuable subagents. ## Where new behavior goes diff --git a/docs/architecture.zh.md b/docs/architecture.zh.md index bf3fb3b649..662f0346a1 100644 --- a/docs/architecture.zh.md +++ b/docs/architecture.zh.md @@ -136,7 +136,7 @@ Session 消费方只了解当前逻辑格式。仅 header 的 `stat` 与 `list` seam 正是替换一个提供方就能改变整个产品的原因。文件系统与进程提供方共享同一个执行世界,因此把它们指向远程沙箱,也就把 Bash、PTY 和 LSP 一并搬了过去,无需提供方专用 fork。[subagent 提供方](subsystems/subagent.zh.md)在同一个接口之后同样千差万别,从新建一个子 agent,到把一个轮次委派给另一个产品。 -[实验性 Agent Teams](subsystems/agent-team.zh.md) 是 `ctx.agentTeams` 上公开发布、显式启用的协作 seam,在可继续 subagent 之上提供持久 roster、任务板和 mailbox。 +[实验性 Agent Teams](subsystems/agent-team.zh.md) 是 `ctx.agentTeams` 上公开发布、显式启用的协作 seam,在可继续 subagent 之上提供持久 roster、任务板和直接 Agent inbox 消息。 ## 新行为的归属位置 diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 2b8e67a545..e596385c67 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -807,7 +807,7 @@ export interface Config { ## `@deepseek-ai/dsh-experimental-agent-team` - `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` -- `source`: [`packages/experimental/agent-team/src/types.ts:152`](../packages/experimental/agent-team/src/types.ts) +- `source`: [`packages/experimental/agent-team/src/types.ts:153`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ @@ -816,8 +816,6 @@ export interface Config { readonly maxMembers?: number /** Maximum non-deleted tasks retained by one Team. */ readonly maxTasks?: number - /** Maximum queued-minus-delivered messages for one target member. */ - readonly maxPendingMessagesPerMember?: number /** Maximum UTF-8 bytes in one complete sender-framed delivery. */ readonly maxMessageBytes?: number /** Maximum milliseconds allowed for Team-owned runtime disposal. */ diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index a01fd92d86..548cc55289 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -809,7 +809,7 @@ export interface Config { ## `@deepseek-ai/dsh-experimental-agent-team` - `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` -- `source`: [`packages/experimental/agent-team/src/types.ts:152`](../packages/experimental/agent-team/src/types.ts) +- `source`: [`packages/experimental/agent-team/src/types.ts:153`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ @@ -818,8 +818,6 @@ export interface Config { readonly maxMembers?: number /** Maximum non-deleted tasks retained by one Team. */ readonly maxTasks?: number - /** Maximum queued-minus-delivered messages for one target member. */ - readonly maxPendingMessagesPerMember?: number /** Maximum UTF-8 bytes in one complete sender-framed delivery. */ readonly maxMessageBytes?: number /** Maximum milliseconds allowed for Team-owned runtime disposal. */ diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index 6e6a1802d1..8d98de3e35 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -216,17 +216,17 @@ en: a640800a38b3c874 zh: a640800a38b3c874 /session-persistence-event-catalog/events/team/team-member-log-only: - en: 7f6c8a45dc35091f - zh: 47060fd1344a5ea3 + en: a2fe5b8582ef5f46 + zh: 42bfffcde3f3d886 /session-persistence-event-catalog/events/team/team-message-delivered-log-only: - en: 951c0d2655ede111 - zh: 05d5c77fc656b918 + en: 4a716b14e33eab18 + zh: dcde26e4dc40b62e /session-persistence-event-catalog/events/team/team-message-queued-log-only: - en: 02ac91734cd032da - zh: 91fae1059caa59b4 + en: 05bf873244099da5 + zh: 8a0b62912087f4aa /session-persistence-event-catalog/events/team/team-task-log-only: - en: ee2efdbe3f7b8978 - zh: a3829e506d9e81d1 + en: 5ffeb64225feda2a + zh: d58129e189a726fb /session-persistence-event-catalog/events/todo: en: 308d4bb4b6b96e35 zh: 308d4bb4b6b96e35 @@ -1176,23 +1176,23 @@ en: a3eabd0e9fc565dd zh: fa763aefdbc1bdb8 /session-persistence-event-catalog/resolved-persistence-types/teammemberphase: - en: 5457d6872347310b - zh: e0d5946902c3e933 + en: 2bf8f06fe328ab33 + zh: ded602f18e0deadf /session-persistence-event-catalog/resolved-persistence-types/teammembersnapshot: - en: f6ee72fe168139ff - zh: d28586070ab7b118 + en: 8a37845006830548 + zh: b8e7caf6189b92df /session-persistence-event-catalog/resolved-persistence-types/teammessagesnapshot: - en: 31fb7e4f07b49012 - zh: 15fd933a217dadee + en: 9b94faac43ba068f + zh: a83582be6a6a3c1a /session-persistence-event-catalog/resolved-persistence-types/teammessagesource: - en: 11bec13073c76f30 - zh: e90deecb47471c74 + en: 269f0a4fcbea1c0c + zh: 5f2c50c03c951995 /session-persistence-event-catalog/resolved-persistence-types/teamtasksnapshot: - en: 336a17d99a56859f - zh: 51c252b4f4add812 + en: cfa8230ef5d661b2 + zh: cb40ce86d6778f09 /session-persistence-event-catalog/resolved-persistence-types/teamtaskstatus: - en: 498986242f41c79a - zh: 4d219bd7d9a3ac7c + en: 9bff57038f472770 + zh: 4eec0e793ae16d53 /session-persistence-event-catalog/resolved-persistence-types/textblock: en: c5fcd2cdd37ea387 zh: 9c678fbdea0bf25c @@ -1278,8 +1278,8 @@ en: 38211d71372021e4 zh: c0305af81a67e285 /session-persistence-event-catalog/resolved-persistence-types/string: - en: 052f9ce1988e44f2 - zh: 5adaad6c9bca43e2 + en: 5f12c42734a93045 + zh: 6c84fd50069d51b7 /session-persistence-event-catalog/resolved-persistence-types/string~2: en: 0089620bf4638263 zh: 1922bef1713094bb @@ -1785,17 +1785,17 @@ en: afedf4a31a67eb14 zh: 98d3bc882f2b61c3 /session-persistence-event-catalog/resolved-persistence-types/member-teamid-version: - en: a0a3339a63f2bc4f - zh: fd6512ef11c36bde + en: 82b0989dad6bbfc0 + zh: 0789b63f1d59b2ed /session-persistence-event-catalog/resolved-persistence-types/message-step-turn: en: 7cc30865737643f2 zh: 512c6c81ed10a9b6 /session-persistence-event-catalog/resolved-persistence-types/message-teamid-version: - en: 7960b689af537cf6 - zh: e5b044052e009a98 + en: f778769acb264dd5 + zh: eba9b81d04e9f57b /session-persistence-event-catalog/resolved-persistence-types/messageid-targetid-teamid-version: - en: 22665480d164fdc7 - zh: aa2c96be4a4fe468 + en: 91a948ede28ebcb5 + zh: 8a2b0ac6bb68a09e /session-persistence-event-catalog/resolved-persistence-types/mode-source: en: 3028b222670ce5ad zh: cae4c9437e560d61 @@ -1827,8 +1827,8 @@ en: 5360af614fe753e3 zh: 96427c489cc71de6 /session-persistence-event-catalog/resolved-persistence-types/task-teamid-version: - en: bc6a4d5b483d4845 - zh: 839703c23f628d6b + en: a2fcd46e54b14120 + zh: d9a6e0e50bbff9ad /session-persistence-event-catalog/resolved-persistence-types/todos: en: 06e6c1837e2b5d50 zh: 37cebfe3e41294ec diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index b9a4241eef..c7b095aa0b 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -975,7 +975,7 @@ Source: [`packages/core/session/src/types.ts:330`](../packages/core/session/src/ Types: [TeamId](subsystems/agent-team.md) · [TeamMemberSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) @@ -993,7 +993,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamMessageId](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:238`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) @@ -1006,7 +1006,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:238`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamMessageSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) @@ -1019,7 +1019,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamTaskSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) ### `todo/*` @@ -4676,7 +4676,7 @@ Sources: [`packages/llm/llm/src/message.ts:35`](../packages/llm/llm/src/message. SHA-256: `dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd` -Sources: [`packages/experimental/agent-team/src/types.ts:44`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:45`](../packages/experimental/agent-team/src/types.ts) One of: @@ -4694,7 +4694,7 @@ One of: SHA-256: `6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25` -Sources: [`packages/experimental/agent-team/src/types.ts:47`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:48`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -4716,7 +4716,7 @@ Sources: [`packages/experimental/agent-team/src/types.ts:47`](../packages/experi SHA-256: `2eafefdc6f79a4922d68a787a09eaf4dd2b2369c3777fba4c05e800b5678ac8e` -Sources: [`packages/experimental/agent-team/src/types.ts:128`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:129`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -4736,7 +4736,7 @@ Sources: [`packages/experimental/agent-team/src/types.ts:128`](../packages/exper SHA-256: `2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0` -Sources: [`packages/experimental/agent-team/src/types.ts:137`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:138`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -4756,7 +4756,7 @@ Sources: [`packages/experimental/agent-team/src/types.ts:137`](../packages/exper SHA-256: `51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357` -Sources: [`packages/experimental/agent-team/src/types.ts:74`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:75`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -4779,7 +4779,7 @@ Sources: [`packages/experimental/agent-team/src/types.ts:74`](../packages/experi SHA-256: `b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943` -Sources: [`packages/experimental/agent-team/src/types.ts:71`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:72`](../packages/experimental/agent-team/src/types.ts) One of: @@ -5318,7 +5318,7 @@ Array of `number`. SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b` -Sources: [`packages/api/session-controller/src/types.ts:398`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:14`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) +Sources: [`packages/api/session-controller/src/types.ts:398`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:21`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:33`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:9`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:14`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) `string` @@ -7376,7 +7376,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:61`](../packages/web SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1` -Sources: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7404,7 +7404,7 @@ Sources: [`packages/core/session/src/types.ts:330`](../packages/core/session/src SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` -Sources: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7418,7 +7418,7 @@ Sources: [`packages/experimental/agent-team/src/types.ts:236`](../packages/exper SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1` -Sources: [`packages/experimental/agent-team/src/types.ts:238`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7564,7 +7564,7 @@ Sources: [`packages/compaction/compaction-image-offload/src/projection.ts:25`](. SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c` -Sources: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index 139a1fb20b..62cf274074 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -977,7 +977,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMemberSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) @@ -995,7 +995,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageId](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:238`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) @@ -1008,7 +1008,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) @@ -1021,7 +1021,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamTaskSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) ### `todo/*` @@ -4678,7 +4678,7 @@ SHA-256: `65a8400e451e667e5b6e34df72ceb81fca8c12330330fa72083ad40279b189ad` SHA-256: `dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd` -来源:[`packages/experimental/agent-team/src/types.ts:44`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:45`](../packages/experimental/agent-team/src/types.ts) 以下类型之一: @@ -4696,7 +4696,7 @@ SHA-256: `dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd` SHA-256: `6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25` -来源:[`packages/experimental/agent-team/src/types.ts:47`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:48`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -4718,7 +4718,7 @@ SHA-256: `6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25` SHA-256: `2eafefdc6f79a4922d68a787a09eaf4dd2b2369c3777fba4c05e800b5678ac8e` -来源:[`packages/experimental/agent-team/src/types.ts:128`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:129`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -4738,7 +4738,7 @@ SHA-256: `2eafefdc6f79a4922d68a787a09eaf4dd2b2369c3777fba4c05e800b5678ac8e` SHA-256: `2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0` -来源:[`packages/experimental/agent-team/src/types.ts:137`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:138`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -4758,7 +4758,7 @@ SHA-256: `2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0` SHA-256: `51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357` -来源:[`packages/experimental/agent-team/src/types.ts:74`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:75`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -4781,7 +4781,7 @@ SHA-256: `51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357` SHA-256: `b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943` -来源:[`packages/experimental/agent-team/src/types.ts:71`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:72`](../packages/experimental/agent-team/src/types.ts) 以下类型之一: @@ -5320,7 +5320,7 @@ SHA-256: `5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78` SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b` -来源:[`packages/api/session-controller/src/types.ts:398`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:14`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) +来源:[`packages/api/session-controller/src/types.ts:398`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:21`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:33`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:9`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:14`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) `string` @@ -7378,7 +7378,7 @@ SHA-256: `930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731` SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1` -来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7406,7 +7406,7 @@ SHA-256: `6bc8e51124d0874bc89e1d0ceff381a9c3cd0fc240667d69f841ce4f60f65fe5` SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` -来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7420,7 +7420,7 @@ SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1` -来源:[`packages/experimental/agent-team/src/types.ts:238`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7566,7 +7566,7 @@ SHA-256: `477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028` SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c` -来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index cde6e5c422..3766e14c52 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -22590,7 +22590,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:238" + "packages/experimental/agent-team/src/types.ts:236" ] }, { @@ -31785,7 +31785,7 @@ "packages/experimental/agent-team/src/types.ts#TeamMessageSource" ], "sources": [ - "packages/experimental/agent-team/src/types.ts:137" + "packages/experimental/agent-team/src/types.ts:138" ] }, { @@ -33677,7 +33677,7 @@ "packages/experimental/agent-team/src/types.ts#TeamMessageSnapshot" ], "sources": [ - "packages/experimental/agent-team/src/types.ts:128" + "packages/experimental/agent-team/src/types.ts:129" ] }, { @@ -44757,9 +44757,9 @@ "packages/attachment/attachment/src/brand.ts:6", "packages/compaction/compaction/src/brand.ts:4", "packages/core/session/src/types.ts:20", - "packages/experimental/agent-team/src/types.ts:20", - "packages/experimental/agent-team/src/types.ts:32", - "packages/experimental/agent-team/src/types.ts:8", + "packages/experimental/agent-team/src/types.ts:21", + "packages/experimental/agent-team/src/types.ts:33", + "packages/experimental/agent-team/src/types.ts:9", "packages/feedback/message-feedback/src/types.ts:14", "packages/goal/goal/src/types.ts:17", "packages/interaction/commands/src/brand.ts:31", @@ -48123,7 +48123,7 @@ "packages/experimental/agent-team/src/types.ts#TeamTaskSnapshot" ], "sources": [ - "packages/experimental/agent-team/src/types.ts:74" + "packages/experimental/agent-team/src/types.ts:75" ] }, { @@ -54566,7 +54566,7 @@ "packages/experimental/agent-team/src/types.ts#TeamMemberSnapshot" ], "sources": [ - "packages/experimental/agent-team/src/types.ts:47" + "packages/experimental/agent-team/src/types.ts:48" ] }, { @@ -69515,7 +69515,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:234" + "packages/experimental/agent-team/src/types.ts:232" ] }, { @@ -71559,7 +71559,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:232" + "packages/experimental/agent-team/src/types.ts:230" ] }, { @@ -71748,7 +71748,7 @@ "packages/experimental/agent-team/src/types.ts#TeamTaskStatus" ], "sources": [ - "packages/experimental/agent-team/src/types.ts:71" + "packages/experimental/agent-team/src/types.ts:72" ] }, { @@ -81643,7 +81643,7 @@ "packages/experimental/agent-team/src/types.ts#TeamMemberPhase" ], "sources": [ - "packages/experimental/agent-team/src/types.ts:44" + "packages/experimental/agent-team/src/types.ts:45" ] }, { @@ -83509,7 +83509,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:236" + "packages/experimental/agent-team/src/types.ts:234" ] }, { diff --git a/docs/subsystems/agent-team.i18n.yaml b/docs/subsystems/agent-team.i18n.yaml index edb0d57235..f71b6d9e2e 100644 --- a/docs/subsystems/agent-team.i18n.yaml +++ b/docs/subsystems/agent-team.i18n.yaml @@ -6,11 +6,11 @@ en: f571e223220bb616 zh: dd7e37fdf359eeae /agent-teams/identity-and-roster: - en: c6e6d2add95df5e8 - zh: 36c0b25c3f4eb80b -/agent-teams/durable-mailbox: - en: 75fb392a6ccfbdf9 - zh: f80678b84bd1ea47 + en: df72d9409b89714d + zh: 982934dd18864ca2 +/agent-teams/messages-and-historical-mailbox: + en: 281959c512a3aded + zh: da8ae4aa725f56dd /agent-teams/shared-task-dag: en: 4515005d07e4d2a3 zh: 26811b31f69009d6 @@ -18,5 +18,5 @@ en: 6af99eff8036597a zh: f172f994e01f12c1 /agent-teams/replay: - en: 4adfd7bad5c0e302 - zh: 2d71ba065f44f2a1 + en: d391d07f2f2f72c9 + zh: 42917716a95d6daf diff --git a/docs/subsystems/agent-team.md b/docs/subsystems/agent-team.md index 6cb503d130..e8cf047591 100644 --- a/docs/subsystems/agent-team.md +++ b/docs/subsystems/agent-team.md @@ -6,7 +6,7 @@ Types shared by the experimental implicit-root Team domain, model tools, and hos ## Identity and roster -`TeamId` is the root `SessionId` under a distinct [brand](core.md#branded-ids). `TeamTaskId` is Team-local and monotonically allocated as `task-`; `TeamMessageId` is globally random. A teammate's Session id remains its persistent identity, while `name` is an immutable model/UI label. +`TeamId` is the root `SessionId` under a distinct [brand](core.md#branded-ids). `TeamTaskId` is allocated as `task-`. New sends return the target inbox `MessageId`; `TeamMessageId` is retained only for historical mailbox records. Teammate names are immutable labels. ```ts type-equiv /** Whole durable value written on every teammate lifecycle change. */ @@ -23,9 +23,9 @@ interface TeamMemberSnapshot { Every member starts in `provisioning` and reaches exactly one terminal roster phase, `active` or `failed`. Roster `running`/`inactive` status is derived separately and never rewrites this record. -## Durable mailbox +## Messages and historical mailbox -The Lead Session first stores the complete queued message. A target receipt is acknowledged only after its pending inbox item or recorded user message is durable, leaving queued-minus-delivered as the recovery mailbox. +New sends return inbox acceptance or reject. The target stores the existing `agent-message` source with the real sender Session id and a sender-name content prefix. Team has no new-message outbox or resend deduplication. The [package contract](../../packages/experimental/agent-team/README.md#understand-the-implementation) defines persistence and recovery. The following mailbox types remain readable for historical pending delivery. ```ts type-equiv /** One peer message retained until its target Session records it. */ @@ -40,7 +40,7 @@ interface TeamMessageSnapshot { Every message attempts Steer delivery. A running target receives it at the nearest step boundary; an inactive target starts a turn if loaded or cold-resumes otherwise. Scheduling is not stored in the durable record because callers cannot select another mode. -The target Session keeps message identity and sender attribution on both the pending inbox item and the eventual user message. Folding that source across inbox and history is the target-side de-duplication key; the model-visible framing repeats the id and sender. +Historical `team-message` sources retain the legacy message id and sender attribution. Compatibility recovery uses these fields to avoid duplicate delivery across target inbox and history. ```ts type-equiv /** Source retained by the target Session for durable mailbox de-duplication. */ @@ -122,7 +122,7 @@ interface TeamProjection { ## Replay -The `agentTeam` Session projection replays one root Session into the roster, task board, and queued-minus-delivered mailbox that every Team operation reads. It selects records by `TeamId`, so events inherited by an ordinary fork retain the ancestor id and never enter the new root's state. Session event `seq` and `time` remain the ordering and timing record; Team snapshots do not duplicate them. Roster and task reads reach callers as views; pending mail stays internal to delivery and recovery. The package [README](../../packages/experimental/agent-team/README.md) owns operation, authorization, recovery, and limit behavior. +The `agentTeam` Session projection replays one root Session into the roster, task board, and historical queued-minus-delivered mailbox. It selects records by `TeamId`, so events inherited by an ordinary fork retain the ancestor id and never enter the new root's state. Session event `seq` and `time` remain the ordering and timing record; Team snapshots do not duplicate them. Roster and task reads reach callers as views; pending mail stays internal to delivery and recovery. The package [README](../../packages/experimental/agent-team/README.md) owns operation, authorization, recovery, and limit behavior. @@ -162,10 +162,10 @@ listMembers(agent: Agent): TeamMemberView[] async spawnTeammate(caller: Agent, request: SpawnTeammateRequest): Promise /** - * Queue one durable peer message, then attempt immediate delivery. + * Steer one peer message into the target inbox or reject the attempt. * @param caller - exact live sending Team member. - * @param request - target name, content, and pre-queue cancellation. - * @returns durable message identity and immediate-delivery observation. + * @param request - target name, content, and cancellation before acceptance. + * @returns accepted inbox identity; acceptance follows normal Agent persistence and does not await model processing. */ async sendMessage(caller: Agent, request: SendTeamMessageRequest): Promise diff --git a/docs/subsystems/agent-team.zh.md b/docs/subsystems/agent-team.zh.md index 083b9fafb6..626309bc8f 100644 --- a/docs/subsystems/agent-team.zh.md +++ b/docs/subsystems/agent-team.zh.md @@ -6,7 +6,7 @@ ## 身份与 roster -`TeamId` 是具有独立[品牌](core.zh.md#branded-ids)的 Root `SessionId`。`TeamTaskId` 在 Team 内按 `task-` 单调分配;`TeamMessageId` 是全局随机值。teammate 的 Session id 始终是持久身份,而 `name` 是不可变的模型/UI 标签。 +`TeamId` 是使用独立[品牌类型](core.zh.md#branded-ids)的 root `SessionId`。`TeamTaskId` 按 `task-` 分配。新发送返回目标 inbox 的 `MessageId`;`TeamMessageId` 仅供历史 mailbox 记录保留。teammate 名称是不可变标签。 ```ts type-equiv /** Whole durable value written on every teammate lifecycle change. */ @@ -23,9 +23,9 @@ interface TeamMemberSnapshot { 每个 member 都从 `provisioning` 开始,并且只到达一个终态 roster phase:`active` 或 `failed`。roster 的 `running`/`inactive` 状态单独派生,绝不会重写该记录。 -## 持久 mailbox +## 消息与历史 mailbox -Lead Session 首先存储完整 queued message。只有 target 的 pending inbox 条目或已记录用户消息完成持久化,才会写入独立 acknowledgement event,queued-minus-delivered 因而构成恢复 mailbox。 +新发送返回 inbox 接收结果或拒绝。目标保存现有 `agent-message` source,包含真实发送者 Session id 和发送者名称正文前缀。Team 不为新消息提供 outbox 或重发去重。[包约定](../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义持久化与恢复。以下 mailbox 类型继续可读,以支持历史 pending 投递。 ```ts type-equiv /** One peer message retained until its target Session records it. */ @@ -40,7 +40,7 @@ interface TeamMessageSnapshot { 每条消息都会尝试 Steer 投递。running target 在最近的步骤边界收到消息,inactive target 在已加载时启动一个轮次,否则冷恢复。调用方不能选择其他模式,因此持久记录不存储调度方式。 -target Session 会在 pending inbox 条目和最终用户消息上保留消息身份与发送者归因。跨 inbox 与历史折叠该 source 构成 target 侧去重键;模型可见的 framing 会重复 id 和发送者。 +历史 `team-message` source 保留旧消息 id 与发送者归属。兼容恢复使用这些字段在目标 inbox 与历史之间避免重复投递。 ```ts type-equiv /** Source retained by the target Session for durable mailbox de-duplication. */ @@ -122,7 +122,7 @@ interface TeamProjection { ## 回放 -`agentTeam` Session 投影把一个 Root Session 回放成每个 Team 操作所读取的 roster、任务板与 queued-minus-delivered mailbox。它按 `TeamId` 选取记录,因此普通 fork 继承的 event 保留 ancestor id,绝不会进入新 Root 的状态。Session event 的 `seq` 与 `time` 继续负责顺序和时间记录,Team snapshot 不再重复保存它们。roster 与 task 读取以 view 形式到达调用方,而 pending 邮件仅供投递与恢复内部使用。包 [README](../../packages/experimental/agent-team/README.zh.md)负责 operation、authorization、recovery 和限制行为。 +`agentTeam` Session 投影把一个 Root Session 回放成roster、任务板与历史 queued-minus-delivered mailbox。它按 `TeamId` 选取记录,因此普通 fork 继承的 event 保留 ancestor id,绝不会进入新 Root 的状态。Session event 的 `seq` 与 `time` 继续负责顺序和时间记录,Team snapshot 不再重复保存它们。roster 与 task 读取以 view 形式到达调用方,而 pending 邮件仅供投递与恢复内部使用。包 [README](../../packages/experimental/agent-team/README.zh.md)负责 operation、authorization、recovery 和限制行为。 @@ -162,10 +162,10 @@ listMembers(agent: Agent): TeamMemberView[] async spawnTeammate(caller: Agent, request: SpawnTeammateRequest): Promise /** - * Queue one durable peer message, then attempt immediate delivery. + * Steer one peer message into the target inbox or reject the attempt. * @param caller - exact live sending Team member. - * @param request - target name, content, and pre-queue cancellation. - * @returns durable message identity and immediate-delivery observation. + * @param request - target name, content, and cancellation before acceptance. + * @returns accepted inbox identity; acceptance follows normal Agent persistence and does not await model processing. */ async sendMessage(caller: Agent, request: SendTeamMessageRequest): Promise diff --git a/docs/subsystems/subagent.md b/docs/subsystems/subagent.md index de96d75509..35266ab89b 100644 --- a/docs/subsystems/subagent.md +++ b/docs/subsystems/subagent.md @@ -171,7 +171,7 @@ Every Activation owns its `AgentHandle` and an `ownedChildren: Set`; Final settlement awaits `ctx.sessions.flush(session)` but ignores its participation boolean because an arbitrary listener cannot prove that a persistence backend stored the state. Rejection is logged without failing the Activation, and the manager still disposes the handle and releases ownership; the persisted child state may then be missing or stale on a later resume. Manager unload invokes an internal manager-wide drain that closes admission and disposes every live forest; `drainContinuableDescendants(parents)` closes admission only below exact live host-owned Agents and disposes their continuable descendants while unrelated forests remain live. Both await already-admitted materializations in their scope, propagate cancellation top-down, release handles child-first, and await every selected branch despite individual failures. Durable child Sessions survive that process-local teardown. ```ts type-equiv -/** Durable attribution for one model-authored message between adjacent Agents. */ +/** Durable attribution for one model-authored message between Agents. */ interface AgentMessageSource { readonly kind: 'agent-message' /** A message another agent addressed to this one (`relay` context form). */ diff --git a/docs/subsystems/subagent.zh.md b/docs/subsystems/subagent.zh.md index 843f0e0cd7..5348dfe848 100644 --- a/docs/subsystems/subagent.zh.md +++ b/docs/subsystems/subagent.zh.md @@ -171,7 +171,7 @@ type SubagentInterruptAuthority = 最终结算会等待 `ctx.sessions.flush(session)`,但会忽略其参与布尔值,因为任意 listener 都无法证明某个持久化后端已存储该状态。rejection 会被记录,但不会使 Activation 失败;管理器仍会 dispose 该 handle 并释放所有权,此后持久化的子 agent 状态在后续恢复时可能缺失或陈旧。管理器卸载会调用内部的管理器全局 drain,关闭准入并 dispose 每片在线森林;`drainContinuableDescendants(parents)` 只关闭由 host 确切拥有的在线 Agent 之下的准入,并 dispose 其可继续后代,而无关森林保持在线。两者都会等待各自作用域内已获准的物化过程,自顶向下传播取消,按 child-first 顺序释放 handle,并且即使个别分支失败也会等待所有选中分支。持久化子会话不受该进程内拆卸的影响。 ```ts type-equiv -/** Durable attribution for one model-authored message between adjacent Agents. */ +/** Durable attribution for one model-authored message between Agents. */ interface AgentMessageSource { readonly kind: 'agent-message' /** A message another agent addressed to this one (`relay` context form). */ diff --git a/docs/tool-catalog.i18n.yaml b/docs/tool-catalog.i18n.yaml index 094d83b58f..dca78d5b4b 100644 --- a/docs/tool-catalog.i18n.yaml +++ b/docs/tool-catalog.i18n.yaml @@ -264,8 +264,8 @@ en: f9457f033f75f00a zh: a2d60ec44118c34c /tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/send-message: - en: e99455aec4656ff2 - zh: a8f88ec35cfe38b8 + en: 0746bb11dae8db55 + zh: 8b634add76c4d88a /tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/spawn-teammate: en: 02d6cc746e234b99 zh: 49bc60ac098bca48 @@ -282,8 +282,8 @@ en: 2eac7360ba68b1bd zh: b5d676bf288c245e /tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/wait-agent: - en: fbc4d75a9bcf6816 - zh: 672131ac2705f411 + en: e70c77a45832bb28 + zh: 7d03bec294b65452 /tool-schema-catalog/deepseek-ai-dsh-tool-todo: en: dea62d26fb18ff68 zh: dea62d26fb18ff68 diff --git a/docs/tool-catalog.md b/docs/tool-catalog.md index d2c16e3006..92bc66c4f9 100644 --- a/docs/tool-catalog.md +++ b/docs/tool-catalog.md @@ -2255,7 +2255,7 @@ Source: [`packages/experimental/tool-agent-team/src/index.ts`](../packages/exper ### `send_message` -Send one durable message to another Team member. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn. +Send one message to another Team member and return its accepted message id. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn. ```json { @@ -2487,7 +2487,7 @@ Source: [`packages/experimental/tool-agent-team/src/index.ts`](../packages/exper ### `wait_agent` -Wait for the next teammate status, mailbox, or shared-task change after this call starts. This never wakes inactive members and returns noProgress immediately when no other member is running or provisioning. Re-list after wakeup or timeout instead of polling. +Wait for the next teammate status, message, or shared-task change after this call starts. This never wakes inactive members and returns noProgress immediately when no other member is running or provisioning. Re-list after wakeup or timeout instead of polling. ```json { diff --git a/docs/tool-catalog.zh.md b/docs/tool-catalog.zh.md index 1b3ad1897e..f4faf3b8a8 100644 --- a/docs/tool-catalog.zh.md +++ b/docs/tool-catalog.zh.md @@ -2265,7 +2265,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后, ### `send_message` -向另一名 Team member 发送一条持久消息。running target 会在最近的步骤边界收到消息;inactive target 会启动或恢复一个 turn。 +向另一名 Team member 发送一条消息,并返回获准消息 id。running target 会在最近的步骤边界收到消息;inactive target 会启动或恢复一个 turn。 ```json { @@ -2497,7 +2497,7 @@ lsp 工具将提供方选择和语言服务器子进程置于 ctx.lsp 之后, ### `wait_agent` -等待本次调用开始后下一次 teammate 状态、mailbox 或共享任务变更。它绝不会唤醒 inactive member;若没有其他 member 正在 running 或 provisioning,则立即返回 noProgress。唤醒或超时后应重新列出状态,而不是轮询。 +等待本次调用开始后下一次 teammate 状态、消息或共享任务变更。它绝不会唤醒 inactive member;若没有其他 member 正在 running 或 provisioning,则立即返回 noProgress。唤醒或超时后应重新列出状态,而不是轮询。 ```json { diff --git a/packages/experimental/README.i18n.yaml b/packages/experimental/README.i18n.yaml index a979c5d99b..f6c932163c 100644 --- a/packages/experimental/README.i18n.yaml +++ b/packages/experimental/README.i18n.yaml @@ -15,8 +15,8 @@ en: 1eb35b015a6c423f zh: a8a3dceee2c9e943 /packages-experimental/packages: - en: 74635f0629fe1e84 - zh: 6119c5bbc6b807ac + en: 5679829e691656d8 + zh: b56b1b90d74ab559 /packages-experimental/related-documentation: en: 31282a28dd828c81 zh: ebb1d3cacdc1bd6d diff --git a/packages/experimental/README.md b/packages/experimental/README.md index 32411baad8..7077f60e4d 100644 --- a/packages/experimental/README.md +++ b/packages/experimental/README.md @@ -30,7 +30,7 @@ The experimental group contains prototype capabilities whose contracts can chang | [`client-ui-voice-input`](client-ui-voice-input/README.md) | Microphone capture and guarded draft insertion | — | | [`voice-input-bundle`](voice-input-bundle/README.md) | Default-disabled optional voice input composition | — | | [`agent-team-profile`](agent-team-profile/README.md) | Agent Teams collaboration, tools, and Web UI bundle | — | -| [`agent-team`](agent-team/README.md) | Named teammates with durable messages and a shared task board | `ctx.agentTeams` | +| [`agent-team`](agent-team/README.md) | Named teammates with direct messages and a durable shared task board | `ctx.agentTeams` | | [`client-ui-agent-team`](client-ui-agent-team/README.md) | Team roster, task board, and teammate navigation for Web | — | | [`auto-review`](auto-review/README.md) | Explicit Web layer for same-model review before each native or PTC inner tool call | — | | [`schedule-bundle`](schedule-bundle/README.md) | Opt-in Schedule and time-context switch over the shipped Web composition | — | diff --git a/packages/experimental/README.zh.md b/packages/experimental/README.zh.md index 85c609b043..514ab7ea52 100644 --- a/packages/experimental/README.zh.md +++ b/packages/experimental/README.zh.md @@ -30,7 +30,7 @@ kind: "package-group" | [`client-ui-voice-input`](client-ui-voice-input/README.zh.md) | 麦克风录音与版本检查后的草稿插入 | — | | [`voice-input-bundle`](voice-input-bundle/README.zh.md) | 默认禁用的可选语音输入组合 | — | | [`agent-team-profile`](agent-team-profile/README.zh.md) | Agent Teams 协作、工具与 Web UI 组合包 | — | -| [`agent-team`](agent-team/README.zh.md) | 具名 teammate,成员之间持久消息与共享任务板 | `ctx.agentTeams` | +| [`agent-team`](agent-team/README.zh.md) | 具名 teammate,成员之间直接消息与持久共享任务板 | `ctx.agentTeams` | | [`client-ui-agent-team`](client-ui-agent-team/README.zh.md) | Web Team roster、任务板与 teammate 导航 | — | | [`auto-review`](auto-review/README.zh.md) | 显式 Web 层,在每个原生或 PTC inner 工具调用前使用同一模型审查 | — | | [`schedule-bundle`](schedule-bundle/README.zh.md) | 在出厂 Web 组合上按需开启定时与时间上下文的开关 | — | diff --git a/packages/experimental/agent-team-profile/README.i18n.yaml b/packages/experimental/agent-team-profile/README.i18n.yaml index 78761dfa6d..60450bf408 100644 --- a/packages/experimental/agent-team-profile/README.i18n.yaml +++ b/packages/experimental/agent-team-profile/README.i18n.yaml @@ -27,8 +27,8 @@ en: dbfca16ca57c0723 zh: 38ccf89793e21f68 /deepseek-ai-dsh-experimental-agent-team-profile/further-exploration: - en: 76e92afc23c0ec7c - zh: 7bd671bd557a91ee + en: 2513c5cb830db597 + zh: de3df83cb9fd2340 /deepseek-ai-dsh-experimental-agent-team-profile/model-experience: en: 215e7ba838619b7b zh: a311da3843709f90 diff --git a/packages/experimental/agent-team-profile/README.md b/packages/experimental/agent-team-profile/README.md index 053f44b673..c79b17a502 100644 --- a/packages/experimental/agent-team-profile/README.md +++ b/packages/experimental/agent-team-profile/README.md @@ -74,7 +74,7 @@ The package's runtime content is [`cordis.patch.yml`](cordis.patch.yml). Applied ## Further Exploration - [Experimental packages](../README.md) — incubation status and publication policy. -- [Agent Teams service](../agent-team/README.md) — durable roster, messaging, and task-board behavior. +- [Agent Teams service](../agent-team/README.md) — durable roster and task board, plus direct messaging. - [Agent Teams tools](../tool-agent-team/README.md) — the Team-scoped model tool surface. - [Agent Teams browser UI](../client-ui-agent-team/README.md) — roster, task board, and teammate session navigation. - [Base bundle](../../bundle/base/README.md) — the profile layer this patch extends. diff --git a/packages/experimental/agent-team-profile/README.zh.md b/packages/experimental/agent-team-profile/README.zh.md index bd68373392..840e2ae7d3 100644 --- a/packages/experimental/agent-team-profile/README.zh.md +++ b/packages/experimental/agent-team-profile/README.zh.md @@ -74,7 +74,7 @@ dsh plugin --profile web add @deepseek-ai/dsh-experimental-agent-team-profile ## 进一步探索 - [实验性包](../README.zh.md)——孵化状态与发布规则。 -- [Agent Teams service](../agent-team/README.zh.md)——持久 roster、消息与任务板行为。 +- [Agent Teams service](../agent-team/README.zh.md)——持久 roster 与任务板,以及直接消息行为。 - [Agent Teams 工具](../tool-agent-team/README.zh.md)——Team-scoped 模型工具表层。 - [Agent Teams 浏览器 UI](../client-ui-agent-team/README.zh.md)——成员列表、任务看板与成员会话导航。 - [Base bundle](../../bundle/base/README.zh.md)——本 patch 扩展的 profile 层。 diff --git a/packages/experimental/agent-team-profile/cordis.patch.yml b/packages/experimental/agent-team-profile/cordis.patch.yml index 5543297c91..e75aae058a 100644 --- a/packages/experimental/agent-team-profile/cordis.patch.yml +++ b/packages/experimental/agent-team-profile/cordis.patch.yml @@ -19,7 +19,6 @@ config: maxMembers: 8 maxTasks: 256 - maxPendingMessagesPerMember: 64 maxMessageBytes: 65536 disposalTimeoutMs: 5000 diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index 67ddc0b76f..c320067bd5 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -3,32 +3,32 @@ # After editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/experimental/agent-team/README.md /: - en: 6dbca19f6b32549f - zh: dae9c49eab8f6fee + en: 8b11ad84b831ec01 + zh: 01acc9f40e64b8d4 /deepseek-ai-dsh-experimental-agent-team: en: b28084855adcdabd zh: 59e3d49c3d63baf9 /deepseek-ai-dsh-experimental-agent-team/summary: - en: 5b981abe3a308e53 - zh: 7116e552a40dc79f + en: 3deae0f15c9acf3a + zh: 31bcf4cb0b1bb59b /deepseek-ai-dsh-experimental-agent-team/table-of-contents: en: d152484eb41ac6b4 zh: 09388d293f9be9cb /deepseek-ai-dsh-experimental-agent-team/use-this-package: - en: 4cafc368a3abea63 - zh: 396189cbdc47b1f5 + en: 3f28de40b688e5fd + zh: 16a13edf360a35eb /deepseek-ai-dsh-experimental-agent-team/use-this-package/when-to-choose-it: - en: 8da318ac2f4343d7 - zh: b31a399d6e3fd64e + en: fc789f82c1b86394 + zh: c6dff674d537dc26 /deepseek-ai-dsh-experimental-agent-team/use-this-package/smallest-working-setup: - en: 4fccad6758905210 - zh: 9037ddb1dc4b2666 + en: a820f021cfea5d87 + zh: 7cbaadaf808971d3 /deepseek-ai-dsh-experimental-agent-team/use-this-package/teammates: en: 5a314d1f80ecd31b zh: c34e6a93dd1e2045 /deepseek-ai-dsh-experimental-agent-team/use-this-package/messages-between-teammates: - en: 2c45b2c18c8317e7 - zh: d4ab2259f976b19d + en: 7d55ac289b8da711 + zh: 6a15f941bb44356f /deepseek-ai-dsh-experimental-agent-team/use-this-package/shared-task-board: en: 73682f0d2001b517 zh: 3744d82eb3b7fcb9 @@ -36,35 +36,35 @@ en: f8e38ccf6295b375 zh: 44f008e23613c0af /deepseek-ai-dsh-experimental-agent-team/use-this-package/what-success-and-failure-look-like: - en: 0d523eb8ffe0a928 - zh: 270b2502db285ed8 + en: a7255a6e1b5c0e96 + zh: 0551f949a8fa16ee /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation: en: 6a18034f1ccc247a zh: e08b0eb0ccb41ea8 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/design-philosophy: - en: c08e8eb5bbac71ae - zh: d6fb32f1243a28d6 + en: 4b154ca76747dd92 + zh: 8fcd239fcf1c460b /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/source-map: - en: 53e2dda7c2adb34c - zh: 562590e3d42c029e + en: 39fc445dd624b453 + zh: 26dbdcb0067fbb07 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/team-identity-and-roster: en: 85f97723e45e43de zh: def66721e21339cc -/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/durable-mailbox: - en: 26041ce90cc48a35 - zh: 677d85f22969f941 +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/direct-messages-and-historical-compatibility: + en: d48f93263041ba66 + zh: ff0fb3d96e019953 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/shared-task-board: en: 2dc37ba97a8a7178 zh: 96bd24033030e19d /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/waiting-and-interruption: - en: 3becd36b407aac95 - zh: c9e4895ee59696bb + en: 29eebf85f25d8d8b + zh: 6976a482f65b4989 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/durability-model: - en: 66dcbc543f2d3576 - zh: cd8de23c555696df + en: 0407607c0cd39bb6 + zh: 089ef28dad527f09 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/disposal: - en: 3ae69e3b7905cffe - zh: 0fb159101f6d646b + en: 2276823a7a1b65a7 + zh: 4f4970a93fabe0be /deepseek-ai-dsh-experimental-agent-team/further-exploration: en: 2bbfd4ffbaeedd00 zh: d1afb5d320b469a1 @@ -78,8 +78,8 @@ en: 7a72088145dd45ec zh: 6763071c604c2edd /deepseek-ai-dsh-experimental-agent-team/model-experience/peer-messages/what-the-model-sees: - en: 4f9110ba058f25cd - zh: cf820293929ea993 + en: 2fe9bc2d8c22e886 + zh: 79bb29e4dca59372 /deepseek-ai-dsh-experimental-agent-team/model-experience/peer-messages/token-effect: en: 37ec43beac34a6ad zh: 6cdcd89ccceea815 @@ -87,8 +87,8 @@ en: ff845d434b857afe zh: 04479bddf7650ede /deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work: - en: 777abba6e3b496eb - zh: 2b8cd95e73f5e369 + en: 189747f1457bbd4d + zh: ef086145080e8047 /deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work/dev-note: en: 498e4cf9fe5741a7 zh: 9d2bab630e655c99 diff --git a/packages/experimental/agent-team/README.md b/packages/experimental/agent-team/README.md index 6d2aa60410..aed84b018d 100644 --- a/packages/experimental/agent-team/README.md +++ b/packages/experimental/agent-team/README.md @@ -1,5 +1,5 @@ --- -description: "Run a small team of named agents in one session: durable messages between members and a shared task board, for deployments composing the experimental Team plugins." +description: "Run named teammates with direct inbox messages and a durable shared task board in experimental Team compositions." kind: "package-reference" --- @@ -9,7 +9,7 @@ English | [中文](README.zh.md) ## Summary -`dsh-experimental-agent-team` turns one coding session into a small working team: the session's agent becomes the Lead, creates named teammates for delegated work, exchanges durable messages with them, and tracks shared tasks on a common board. Messages and task state survive crashes, reloads, and interruptions, so a teammate that was offline receives its queued messages when it resumes. It provides no tools of its own — mount the sibling `dsh-experimental-tool-agent-team` so the model can create teammates, message them, and use the task board. It is published under its experimental name, carries no stability promise, and needs durable session storage to activate. +`dsh-experimental-agent-team` gives one session a Lead, named teammates, direct messages, and a durable shared task board. Sends use each target Agent’s inbox and can cold-resume stored teammates. Team retains roster and task state; message persistence follows the target Agent’s normal policy. Mount `dsh-experimental-tool-agent-team` for model tools. The package is experimental and requires durable session storage. ## Table of Contents @@ -25,11 +25,11 @@ English | [中文](README.zh.md) ## Use this package -Add this package to a composition when one agent should run a small team of named helpers in its own working directory, with messages and task state that survive crashes and restarts. It ships no tools of its own: mount it together with `@deepseek-ai/dsh-experimental-tool-agent-team` so the model can create teammates, message them, and use the task board. +Add this package when one agent needs named helpers in a shared working directory, direct peer messages, and durable roster and task state. Mount it with `@deepseek-ai/dsh-experimental-tool-agent-team` to expose the model tools. ### When to choose it -Choose it when several agents must cooperate on one shared workspace and their roster, messages, and task state must survive crashes and restarts. Avoid it when teammates need separate working directories, when several processes must coordinate over one team, or when a task owner should be released automatically — none of those are supported. The team features need durable session storage to activate. +Choose it for cooperation in one shared workspace with durable roster and task state. Separate working directories, coordination across processes, and automatic task-owner release are unsupported. Durable session storage is required. ### Smallest working setup @@ -50,7 +50,6 @@ With the tools installed, the model does the rest on request — for example, "c |---|---|---| | `maxMembers` | `16` | Maximum teammates a team may ever create, including failed ones | | `maxTasks` | `256` | Maximum active tasks on the board | -| `maxPendingMessagesPerMember` | `64` | Maximum queued messages for one member | | `maxMessageBytes` | `65,536` | Maximum size of one sent message | | `disposalTimeoutMs` | `5,000` | Time allowed for shutdown cleanup | @@ -66,9 +65,9 @@ Only the Lead can create teammates or interrupt them. ### Messages between teammates -Any member can send a message to any other member or to the Lead. A live member receives it immediately; an offline member's messages queue and arrive when it resumes. Messages are never lost and never delivered twice. +Any member can send to another member or the Lead. Each attempt either returns the target inbox `MessageId` or throws. Team does not retain unaccepted send intent, retry new messages after restart, or deduplicate explicit resends. -Every message uses Steer: a running target receives it at the nearest step boundary; an inactive target starts a turn if loaded or cold-resumes otherwise. The sender always sees the outcome — accepted by the target inbox, or retained as queued when delivery is temporarily unavailable. A queued message is already safely stored, so it must not be resent. +Steer gives a running target the message at its nearest step boundary and starts or cold-resumes an inactive target. Success means inbox acceptance, not model processing or a separate synchronous storage flush. Accepted messages follow ordinary Agent persistence and inbox recovery. ### Shared task board @@ -86,7 +85,7 @@ The Lead can stop a teammate's current turn without deleting its queued messages ### What success and failure look like -Success looks like a teammate appearing in the roster, a message reporting `accepted` or `queued`, and task revisions advancing with each change. Likely failures are reported as specific errors instead of silently corrupting state: sending to a name that is not a member, claiming a task that is not ready, editing with an outdated revision, or creating a teammate beyond the member limit. +Success returns a teammate roster row, an accepted inbox message id, or an updated task revision. Invalid member names, unready tasks, stale revisions, exhausted limits, and failed message admission report errors. ----- @@ -102,8 +101,8 @@ This section explains the design decisions behind the service and points at the The service is built on one separation and three commitments: -- **Durable log, derived state.** The Lead Session log is the single source of truth; roster, mailbox, and task state are replayed from it on every read. -- **Process-local ownership.** All coordination lives in one process; the guarantee is retry plus de-duplication, never cross-process consensus. +- **Durable log, derived state.** The Lead log owns roster and tasks; each target Agent owns its accepted messages. +- **Process-local ownership.** Continuation delivery owns target locking, cold recovery, and lifecycle authorization. - **Explicit authority.** Every service method takes the exact live calling `Agent`; only the Lead spawns, reassigns, or interrupts. - **Bounds that fail loud.** Every limit is a validated deployment value, and exhaustion reports a typed error instead of reusing an id or name. @@ -115,7 +114,7 @@ The [Agent Teams Agent Note](../../../.agents/notes/implemented/feature/2026-08- |---|---| | [`src/index.ts`](src/index.ts) | Plugin entry: `Config` schema, service registration, recovery scheduling | | [`src/roster.ts`](src/roster.ts) | Team identity, membership resolution, provisioning, and roster teardown | -| [`src/mailbox.ts`](src/mailbox.ts) | Durable queue, target-local dispatch, acknowledgement, and recovery | +| [`src/legacy-delivery.ts`](src/legacy-delivery.ts) | Compatibility drain for historical queued messages | | [`src/task-board.ts`](src/task-board.ts) | Task CAS commands, DAG validation, and derived views | | [`src/journal.ts`](src/journal.ts) | Serialized Lead-log transactions and commit notification | | [`src/projection.ts`](src/projection.ts) | Strict replay projection that decodes and validates Team events and publishes the `agentTeam` client view | @@ -128,9 +127,9 @@ The [Agent Teams Agent Note](../../../.agents/notes/implemented/feature/2026-08- Every ordinary runtime root is the implicit Lead of a Team whose `TeamId` equals its `SessionId`; there is no creation event, and durable state begins with the first member, message, or task record. `spawnTeammate()` first appends and flushes a `provisioning` member record, then asks the configured provider to create the reserved child; a provider failure appends a durable `failed` member. A fresh child starts with no Lead history; a fork child captures the Lead's completed-turn prefix once. Recovery reconciles an unterminated provisioning record against the child's independently persisted Session: a matching direct-parent and continuable descriptor plus a recorded initial user message produces `active`, and anything else produces `failed`. If recovery wins a same-process race, the creator accepts the terminal state or reports `TEAM_PROVISIONING_CONFLICT` and drains the child. Names are reserved by the first provisioning record and never reused. -### Durable mailbox +### Direct messages and historical compatibility -`sendMessage()` validates peer membership, appends `team/message/queued`, and flushes before attempting delivery. The target message begins with `Team message from :` and keeps the same id and sender in `TeamMessageSource`. A target receipt is acknowledged with `team/message/delivered` only after the target Session durably holds the message identity in its pending inbox or recorded history. Immediate admissions are serialized per target in durable queue order; recovery dispatches queued-minus-delivered records in the same order. Delivery folds both live and persisted target inbox/history state before retrying, so a crash between inbox acceptance and model claim does not duplicate the message. The guarantee is process-local retry plus target-Session de-duplication, not cross-process exactly-once delivery. +`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Lead delivery calls `Agent.steer()` directly. Teammate delivery uses the continuation owner's host-only Steer path, which preserves the Team sender source while authorizing the Lead-to-child edge and cold-resuming inactive targets. Sibling messages never impersonate the Lead through the public adjacent-Agent messaging operation. @@ -140,19 +139,19 @@ Tasks are complete versioned snapshots; every mutation carries `expectedRevision ### Waiting and interruption -`waitForChange()` waits for one roster, task, mailbox, or live-status edge that occurs after registration, from ten seconds through one hour, and reports only whether it timed out; runtime disposal releases current waits. Cancellation preserves an Error reason or reports a non-Error reason through `TEAM_WAIT_ABORTED`. `interrupt()` is Lead-only and delegates to the continuable-subagent interrupt path, which cancels only a live teammate's current turn with `keepInbox`; it neither releases task ownership nor deletes durable mail. +`waitForChange()` waits for one roster, task, message-acceptance, or live-status edge that occurs after registration, from ten seconds through one hour, and reports only whether it timed out; runtime disposal releases current waits. Cancellation preserves an Error reason or reports a non-Error reason through `TEAM_WAIT_ABORTED`. `interrupt()` is Lead-only and delegates to the continuable-subagent interrupt path, which cancels only a live teammate's current turn with `keepInbox`; it neither releases task ownership nor deletes durable mail. ### Durability model Team events are appended to the exact live Lead Session and flushed before the operation reports success or wakes waiters. `team/member`, `team/task`, `team/message/queued`, and `team/message/delivered` are log-only: they never enter the conversation surface, so derived model history is untouched by coordination records. Session event `seq` and `time` own ordering and timing; snapshots do not duplicate them. The `./invariant` companion replays each candidate Team event against its committed prefix and rejects invalid transitions before append. -Native V4 Team event and checkpoint admission reject retired `tool-result` content before it can enter mailbox state. Historical conversion belongs to the Session-format migration; the Team projection does not convert old wrappers. +Historical mailbox events and `team-message` sources remain readable. Plugin load and Agent creation drain old queued-minus-delivered records through Steer, checking target history and pending inbox before retrying and flushing target receipts before legacy acknowledgements. Failed inspection or delivery logs a warning and leaves the old item pending for a later recovery pass; new sends neither trigger nor wait for this drain. Recovery passes serialize per Team and participate in disposal. Mailbox projection and checkpoint admission preserve every decoded JSON field of accepted content outside the locally declared validators, including an own `__proto__` key. Local field checks cover `text`, `reasoning`, `image`, and `tool-call`; accepted unknown tags remain opaque. Team projection cache version 4 rebuilds checkpoints from earlier cache versions from the Session log; the Session format version is unchanged. ### Disposal -Disposal closes admission, aborts and awaits admitted creation and mailbox-dispatch transactions, then asks the continuation owner to release the roster's exact live direct children and their descendants; non-Team continuable children of the Lead remain untouched. Cleanup failures make disposal fail visibly, bounded by `disposalTimeoutMs`. +Disposal closes admission, aborts and awaits admitted sends, creations, and legacy recovery, then releases the roster’s live children and descendants. Non-Team children remain untouched. Cleanup failures are visible and bounded by `disposalTimeoutMs`. @@ -184,7 +183,7 @@ The [Web UI](../client-ui-agent-team/README.md) reads the shared Session project #### What the model sees -Each delivered peer message is a user-role message. A short first text block names its stable message id and sender; the sender's original content blocks follow unchanged. Roster, task, and mailbox records are log-only and never enter derived model history. +Each peer message is a user-role message prefixed with its sender name, followed by the original content blocks. Roster, task, and historical mailbox records remain log-only. #### Token effect @@ -207,7 +206,7 @@ These limits describe what a team cannot do yet or what needs special operationa - **Advisory write scopes** — Bash, formatters, code generators, and direct external writers can bypass filesystem version checks; Leads must coordinate ownership and review the final diff. - **Flat immutable roster** — only the Lead creates direct teammates; there is no nested Team, rename, deletion, or name reuse. - **No automatic ownership release** — inactivity, interruption, process exit, and failed work do not release a task owner. -- **Mailbox is not cross-process exactly-once** — concurrent harness processes over one Team are unsupported. +- **No send retry guarantee** — Team does not retain or deduplicate new attempts; concurrent processes over one Team are unsupported. Historical mailbox decoding and recovery remain necessary for accepted old data. ### Dev Note diff --git a/packages/experimental/agent-team/README.zh.md b/packages/experimental/agent-team/README.zh.md index 9ea2977a97..279e329f6f 100644 --- a/packages/experimental/agent-team/README.zh.md +++ b/packages/experimental/agent-team/README.zh.md @@ -1,5 +1,5 @@ --- -description: "在一个会话中运行一个小型具名 agent(智能体)团队:成员之间的持久消息与共享任务板,用于组合实验性 Team 插件的部署。" +description: "在实验性 Team 组合中运行具名 teammate,使用直接 inbox 消息和持久共享任务板。" kind: "package-reference" --- @@ -9,7 +9,7 @@ kind: "package-reference" ## 概述 -`dsh-experimental-agent-team` 把一个编码会话变成一个小型工作团队:会话中的 agent 成为 Lead,创建具名 teammate 处理委派的工作,与它们交换持久消息,并在公共任务板上跟踪共享任务。消息与任务状态能挺过崩溃、reload 与中断,因此离线的 teammate 会在恢复后收到排队的消息。它本身不提供任何工具——请挂载兄弟包 `dsh-experimental-tool-agent-team`,让模型能够创建 teammate、给它们发消息并使用任务板。它以实验性名称公开发布、不承诺稳定性,并且需要持久会话存储才能激活。 +`dsh-experimental-agent-team` 为一个会话提供 Lead、具名 teammate、直接消息和持久共享任务板。发送使用目标 agent(智能体)的 inbox,并可冷恢复已存储的 teammate。Team 保留 roster 与任务状态,消息持久化遵循目标 Agent 的常规策略。挂载 `dsh-experimental-tool-agent-team` 可提供模型工具。本包为实验性功能,需要持久会话存储。 ## 目录 @@ -25,11 +25,11 @@ kind: "package-reference" ## 使用本包 -当一个 agent 应该在自己的工作目录中运行一支小型具名助手团队、且消息与任务状态需要挺过崩溃与重启时,把本包加入组合。它本身不带工具:请与 `@deepseek-ai/dsh-experimental-tool-agent-team` 一起挂载,让模型能够创建 teammate、给它们发消息并使用任务板。 +当一个 agent 需要共享工作目录中的具名助手、直接 peer 消息以及持久 roster 与任务状态时,加入本包。与 `@deepseek-ai/dsh-experimental-tool-agent-team` 一起挂载可提供模型工具。 ### 何时选择 -当多个 agent 必须在同一个共享工作区协作、且 roster、消息与任务状态需要挺过崩溃与重启时,选择它。当 teammate 需要独立工作目录、多个进程需要协调同一支团队、或任务 owner 需要自动释放时,请不要选择——这些都不受支持。团队功能需要持久会话存储才能激活。 +适用于在同一共享工作区协作并保留持久 roster 和任务状态。不支持独立工作目录、跨进程协调和自动释放任务 owner。需要持久会话存储。 ### 最小工作配置 @@ -50,7 +50,6 @@ kind: "package-reference" |---|---|---| | `maxMembers` | `16` | 一支团队最多可创建的 teammate 数,包括失败的 | | `maxTasks` | `256` | 任务板上最多的活动任务数 | -| `maxPendingMessagesPerMember` | `64` | 单个成员最多可排队的消息数 | | `maxMessageBytes` | `65,536` | 单条发送消息的最大尺寸 | | `disposalTimeoutMs` | `5,000` | 关闭清理允许的时间 | @@ -66,9 +65,9 @@ roster 显示每个成员的职责(`lead` 或 `teammate`)与当前状态:` ### teammate 之间的消息 -任何成员都可以向任何其他成员或 Lead 发送消息。live 成员会立即收到;离线成员的消息会排队,并在其恢复后到达。消息不会丢失,也不会重复投递。 +任何成员都可向其他成员或 Lead 发送消息。每次尝试要么返回目标 inbox 的 `MessageId`,要么抛出错误。Team 不保留尚未接收的发送意图,不在重启后重试新消息,也不对显式重发去重。 -每条消息都使用 Steer:running target 在最近的步骤边界收到消息,inactive target 在已加载时启动一个轮次,否则冷恢复。发送方始终能看到结果——target inbox 已接受,或在投递暂时不可用时保留为 queued。排队的消息已经安全存储,因此绝不能重发。 +Steer 让 running target 在最近的步骤边界接收消息,并启动或冷恢复 inactive target。成功表示 inbox 接收,不表示模型已处理或已完成单独的同步存储 flush。获准消息遵循普通 Agent 的持久化和 inbox 恢复策略。 ### 共享任务板 @@ -86,7 +85,7 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 成功与失败的表现 -成功的表现是:teammate 出现在 roster 中、消息报告 `accepted` 或 `queued`、任务 revision 随每次变更递增。可能的失败会以具体错误报告,而不会悄悄破坏状态:发给不存在的成员名字、claim 尚未就绪的任务、用过期 revision 编辑、或超出成员上限创建 teammate。 +成功会返回 teammate roster 行、获准 inbox 消息 id 或更新后的任务 revision。无效成员名称、未就绪任务、过期 revision、上限耗尽和消息准入失败均报告错误。 ----- @@ -102,8 +101,8 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 本服务建立在一个分离与三项承诺之上: -- **持久日志,派生状态。** Lead 会话日志是唯一真源;roster、mailbox 与任务状态每次读取都从中回放。 -- **进程内归属。** 所有协作都位于单一进程;保证是重试加去重,绝不是跨进程共识。 +- **持久日志,派生状态。** Lead 日志拥有 roster 与任务,各目标 Agent 拥有其接收的消息。 +- **进程内归属。** Continuation 投递拥有目标锁、冷恢复和生命周期授权。 - **显式权限。** 每个服务方法都接收确切的实时调用方 `Agent`;只有 Lead 可以 spawn、reassign 或 interrupt。 - **超出上限时明确失败。** 每个限制都是经过校验的部署值,耗尽时报告类型化错误,而不是复用 id 或名字。 @@ -115,7 +114,7 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 |---|---| | [`src/index.ts`](src/index.ts) | 插件入口:`Config` schema、服务注册、恢复调度 | | [`src/roster.ts`](src/roster.ts) | Team 身份、成员关系解析、provisioning 与 roster 拆除 | -| [`src/mailbox.ts`](src/mailbox.ts) | 持久队列、目标本地投递、确认与恢复 | +| [`src/legacy-delivery.ts`](src/legacy-delivery.ts) | 历史排队消息的兼容补送 | | [`src/task-board.ts`](src/task-board.ts) | 任务 CAS 命令、DAG 校验与派生视图 | | [`src/journal.ts`](src/journal.ts) | 串行化的 Lead 日志事务与提交通知 | | [`src/projection.ts`](src/projection.ts) | 解码并校验 Team 事件、发布 `agentTeam` 客户端视图的严格回放投影 | @@ -128,9 +127,9 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 每个普通运行时 root 都是一个隐式 Team 的 Lead,其 `TeamId` 等于 `SessionId`;不存在创建事件,持久状态从第一条成员、消息或任务记录开始。`spawnTeammate()` 先追加并 flush 一条 `provisioning` 成员记录,再要求配置的提供方创建预留 child;提供方失败会追加一条持久的 `failed` 成员。fresh child 不携带 Lead 历史;fork child 只捕获一次 Lead 的已完成 turn 前缀。恢复把未终结的 provisioning 记录对照 child 独立持久化的会话进行对账:直接 parent 与 continuable descriptor 匹配、且初始用户消息已记录则产生 `active`,其他任何情况都产生 `failed`。如果恢复在同进程竞争中先完成,creator 会接受终态,或报告 `TEAM_PROVISIONING_CONFLICT` 并 drain 该 child。名字由第一条 provisioning 记录保留,且永不复用。 -### 持久 mailbox +### 直接消息与历史兼容 -`sendMessage()` 校验 peer 成员关系,追加 `team/message/queued` 并在尝试投递前 flush。目标消息以 `Team message from :` 开头,并在 `TeamMessageSource` 中保留同一 id 与发送者。只有目标会话在 pending inbox 或已记录历史中持久持有消息身份后,才会以 `team/message/delivered` 确认投递。即时准入按目标与持久队列顺序串行化;恢复按同一顺序重新投递 queued-minus-delivered 记录。重试前会同时折叠 live 与持久目标 inbox/历史状态,因此 inbox 已接受但模型尚未 claim 时发生崩溃不会复制消息。该保证是进程内重试加 target 会话去重,而不是跨进程 exactly-once 投递。 +`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。 投递给 Lead 时直接调用 `Agent.steer()`。投递给 teammate 时使用 continuation owner 的 host-only Steer 路径;该路径会保留 Team 发送者 source,同时授权 Lead-to-child edge 并冷恢复 inactive target。sibling 消息绝不会通过公开的相邻 Agent 消息操作伪装成 Lead。 @@ -140,19 +139,19 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 等待与中断 -`waitForChange()` 等待注册之后发生的下一条 roster、task、mailbox 或实时状态边,时长从 10 秒到 1 小时,并且只报告是否超时;运行时 dispose 会释放当前等待。取消会保留 Error reason;非 Error reason 则通过 `TEAM_WAIT_ABORTED` 报告。`interrupt()` 仅限 Lead,委托 continuable-subagent 的 interrupt 路径,以 `keepInbox` 只取消 live teammate 的当前 turn;它既不释放任务 owner,也不删除持久 mail。 +`waitForChange()` 等待注册之后发生的下一条 roster、task、消息接收或实时状态边,时长从 10 秒到 1 小时,并且只报告是否超时;运行时 dispose 会释放当前等待。取消会保留 Error reason;非 Error reason 则通过 `TEAM_WAIT_ABORTED` 报告。`interrupt()` 仅限 Lead,委托 continuable-subagent 的 interrupt 路径,以 `keepInbox` 只取消 live teammate 的当前 turn;它既不释放任务 owner,也不删除持久 mail。 ### 持久性模型 Team 事件追加到精确的 live Lead 会话,并在操作报告成功或唤醒等待者之前 flush。`team/member`、`team/task`、`team/message/queued` 与 `team/message/delivered` 仅存在于日志:它们从不进入会话表面,因此派生模型历史不受协作记录影响。顺序与时间由会话事件的 `seq` 与 `time` 负责,快照不重复保存。`./invariant` 伴生插件把每条候选 Team 事件对照已提交前缀回放,并在 append 前拒绝非法转换。 -原生 V4 的 Team 事件及检查点准入会拒绝退役的 `tool-result` 内容,防止它进入邮箱状态。历史转换由 Session 格式迁移负责,Team 投影不转换旧包装。 +历史 mailbox 事件与 `team-message` source 仍可读取。插件加载和 Agent 创建通过 Steer 补送旧 queued-minus-delivered 记录;重试前检查目标历史与 pending inbox,旧确认前 flush 目标回执。检查或投递失败会记录警告,并将旧项保留为 pending,等待后续恢复;新发送既不触发也不等待此补送。恢复按 Team 串行执行,并参与 dispose 等待。 Mailbox 投影与 checkpoint 准入保留本地声明的校验器之外获准内容中全部已解码 JSON 字段,包括自有 `__proto__` 键。本地字段检查覆盖 `text`、`reasoning`、`image` 和 `tool-call`;获准的未知标签保持不透明。Team 投影缓存版本 4 从 Session 日志重建较早缓存版本的 checkpoint;Session 格式版本保持不变。 ### Dispose -dispose 会关闭准入、中止并等待已获准的创建与 mailbox dispatch 事务,再让 continuation owner 释放 roster 中确切的 live direct child 及其后代;Lead 的非 Team continuable child 不受影响。cleanup 失败会让 dispose 明确失败,并以 `disposalTimeoutMs` 为上限。 +dispose 关闭准入,中止并等待已获准的发送、创建和旧消息恢复,然后释放 roster 中的 live child 及其后代。非 Team child 不受影响。清理失败会明确报告,并受 `disposalTimeoutMs` 限制。 @@ -184,7 +183,7 @@ dispose 会关闭准入、中止并等待已获准的创建与 mailbox dispatch #### 模型看到什么 -每条已投递 peer 消息都是用户角色消息。第一个短文本块包含稳定消息 id 与发送者,之后原样附加发送者的内容块。roster、task 与 mailbox 记录仅存在于日志,绝不进入派生模型历史。 +每条 peer 消息都是以发送者名称为前缀的用户角色消息,后接原始内容块。roster、task 和历史 mailbox 记录仍仅存在于日志。 #### Token 影响 @@ -207,7 +206,7 @@ Peer 消息追加在 target 可复用历史前缀之后。冷恢复会先复用 - **write scope 仅作提示**——Bash、formatter、代码生成器与直接外部写入可以绕过文件版本检查;Lead 必须协调 owner 并检查最终 diff。 - **扁平且不可变的 roster**——只有 Lead 可以创建直接 teammate;不支持嵌套 Team、重命名、删除或名字复用。 - **不会自动释放 owner**——成员不活动、interrupt、进程退出与工作失败都不会释放任务 owner。 -- **mailbox 不保证跨进程 exactly-once**——不支持多个 harness 进程并发操作同一 Team。 +- **无发送重试保证**——Team 不保留新尝试,也不对其去重;不支持多个进程同时操作一个 Team。已接受的旧数据仍需要历史 mailbox 解码与恢复。 ### 开发备注 diff --git a/packages/experimental/agent-team/package.json b/packages/experimental/agent-team/package.json index 19306fc98f..de84ddf062 100644 --- a/packages/experimental/agent-team/package.json +++ b/packages/experimental/agent-team/package.json @@ -1,6 +1,6 @@ { "name": "@deepseek-ai/dsh-experimental-agent-team", - "description": "Implicit-root Agent Teams roster, durable peer mailbox, and shared task DAG", + "description": "Implicit-root Agent Teams roster, direct peer messaging, and shared task DAG", "version": "0.1.7-rc.2", "publishConfig": { "access": "public" diff --git a/packages/experimental/agent-team/src/index.ts b/packages/experimental/agent-team/src/index.ts index 96a79bea16..d5456da33c 100644 --- a/packages/experimental/agent-team/src/index.ts +++ b/packages/experimental/agent-team/src/index.ts @@ -1,16 +1,18 @@ -/** Agent Teams service façade over roster, mailbox, task, and runtime lifecycle owners. */ +/** Agent Teams service façade over roster, messaging, task, and runtime lifecycle owners. */ import { Context, Service } from '@deepseek-ai/cordis' import z from '@deepseek-ai/schemastery' import type { Agent } from '@deepseek-ai/dsh-agent' import type {} from '@deepseek-ai/dsh-session-persistence' +import { createUserMessage } from '@deepseek-ai/dsh-llm' +import { steerHostSubagentPrompt } from '@deepseek-ai/dsh-subagent/internal' import { TeamActivity } from './activity.ts' import { errorMessage, TeamError } from './error.ts' import { TeamJournal } from './journal.ts' import { TeamRuntimeLifecycle } from './lifecycle.ts' -import { TeamMailbox } from './mailbox.ts' +import { LegacyTeamDelivery } from './legacy-delivery.ts' import { teamProjectionDefinition } from './projection.ts' -import { TeamRoster } from './roster.ts' +import { resolveActiveMember, TeamRoster } from './roster.ts' import type { TeamMembership } from './roster.ts' import { TeamTaskBoard } from './task-board.ts' import { TeamId, TeamTaskId } from './types.ts' @@ -40,7 +42,6 @@ declare module '@deepseek-ai/cordis' { const DEFAULT_MAX_MEMBERS = 16 const DEFAULT_MAX_TASKS = 256 -const DEFAULT_MAX_PENDING_MESSAGES = 64 const DEFAULT_MAX_MESSAGE_BYTES = 65_536 const DEFAULT_DISPOSAL_TIMEOUT_MS = 5_000 @@ -59,7 +60,6 @@ export class TeamService extends Service { static Config: z = z.object({ maxMembers: z.number().step(1).min(1).default(DEFAULT_MAX_MEMBERS), maxTasks: z.number().step(1).min(1).default(DEFAULT_MAX_TASKS), - maxPendingMessagesPerMember: z.number().step(1).min(1).default(DEFAULT_MAX_PENDING_MESSAGES), maxMessageBytes: z.number().step(1).min(1).default(DEFAULT_MAX_MESSAGE_BYTES), disposalTimeoutMs: z.number().step(1).min(1).default(DEFAULT_DISPOSAL_TIMEOUT_MS), }) @@ -71,7 +71,7 @@ export class TeamService extends Service { private readonly lifecycle: TeamRuntimeLifecycle private readonly journal: TeamJournal private readonly roster: TeamRoster - private readonly mailbox: TeamMailbox + private readonly legacyDelivery: LegacyTeamDelivery private readonly tasks: TeamTaskBoard constructor(ctx: Context, config: Config = {}) { @@ -79,10 +79,6 @@ export class TeamService extends Service { this.config = { maxMembers: positiveLimit('maxMembers', config.maxMembers ?? DEFAULT_MAX_MEMBERS), maxTasks: positiveLimit('maxTasks', config.maxTasks ?? DEFAULT_MAX_TASKS), - maxPendingMessagesPerMember: positiveLimit( - 'maxPendingMessagesPerMember', - config.maxPendingMessagesPerMember ?? DEFAULT_MAX_PENDING_MESSAGES, - ), maxMessageBytes: positiveLimit('maxMessageBytes', config.maxMessageBytes ?? DEFAULT_MAX_MESSAGE_BYTES), disposalTimeoutMs: positiveLimit( 'disposalTimeoutMs', @@ -94,17 +90,13 @@ export class TeamService extends Service { this.lifecycle = new TeamRuntimeLifecycle(this.config.disposalTimeoutMs) this.journal = new TeamJournal(ctx, (root) => { this.activity.notify(TeamId(root.id)) }) this.roster = new TeamRoster(ctx, this.journal, this.lifecycle, this.config.maxMembers) - this.mailbox = new TeamMailbox( + this.legacyDelivery = new LegacyTeamDelivery( ctx, this.journal, this.roster, - this.lifecycle, - this.config.maxPendingMessagesPerMember, - this.config.maxMessageBytes, ) this.tasks = new TeamTaskBoard(this.journal, this.config.maxTasks) - ctx.on('session/event', (session, event) => { this.mailbox.observeSessionEvent(session, event) }) ctx.on('agent/created', ({ agent }) => { this.scheduleRecovery(agent) }) ctx.on('agent/status', ({ agent }) => { const membership = this.roster.tryMembership(agent) @@ -152,13 +144,17 @@ export class TeamService extends Service { } /** - * Queue one durable peer message, then attempt immediate delivery. + * Steer one peer message into the target inbox or reject the attempt. * @param caller - exact live sending Team member. - * @param request - target name, content, and pre-queue cancellation. - * @returns durable message identity and immediate-delivery observation. + * @param request - target name, content, and cancellation before acceptance. + * @returns accepted inbox identity; acceptance follows normal Agent persistence and does not await model processing. */ async sendMessage(caller: Agent, request: SendTeamMessageRequest): Promise { - return await this.mailbox.send(caller, request) + if (this.lifecycle.disposed) throw new TeamError('Agent Teams service is disposing', 'TEAM_DISPOSED') + return await this.lifecycle.track(this.sendAdmitted(caller, { + ...request, + signal: AbortSignal.any([request.signal, this.lifecycle.signal]), + })) } /** @@ -231,6 +227,33 @@ export class TeamService extends Service { return this.roster.tryMembership(agent) } + /** Deliver an admitted send using the Lead's authority and the actual sender's identity. */ + private async sendAdmitted(caller: Agent, request: SendTeamMessageRequest): Promise { + const membership = this.roster.membership(caller) + request.signal.throwIfAborted() + const { root } = membership + const target = resolveActiveMember(root, this.journal.state(root), request.target) + if (target.id === caller.id) throw new TeamError('a Team member cannot message itself', 'TEAM_SELF_MESSAGE') + const content = [ + { type: 'text' as const, text: `Team message from ${membership.name}:` }, + ...structuredClone(request.content), + ] + if (Buffer.byteLength(JSON.stringify(content), 'utf8') > this.config.maxMessageBytes) { + throw new TeamError(`team message exceeds ${this.config.maxMessageBytes} bytes`, 'TEAM_MESSAGE_TOO_LARGE') + } + const source = { kind: 'agent-message' as const, form: 'relay' as const, senderSessionId: caller.id } + let messageId + if (target.id === root.id) { + const input = createUserMessage({ content, source }) + root.steer(input) + messageId = input.id + } else { + messageId = await steerHostSubagentPrompt(this.ctx.subagents, root, target.id, content, source, request.signal) + } + this.activity.notify(membership.id) + return { messageId } + } + /** Queue one contained recovery pass after publication has unwound. */ private scheduleRecovery(agent: Agent): void { queueMicrotask(() => { @@ -242,10 +265,10 @@ export class TeamService extends Service { }) } - /** Reconcile roster provisioning before retrying that member's pending mailbox. */ + /** Reconcile provisioning and drain only historical Team mailbox records. */ private async recoverFor(agent: Agent): Promise { await this.roster.recoverFor(agent, this.lifecycle.signal) - await this.mailbox.recoverFor(agent, this.lifecycle.signal) + await this.legacyDelivery.recoverFor(agent, this.lifecycle.signal) } /** Stop Team-owned live branches and release every waiter before service disposal completes. */ @@ -254,8 +277,9 @@ export class TeamService extends Service { this.activity.close() const failures: unknown[] = [] + await this.lifecycle.settle(this.lifecycle.pending(), failures) await this.lifecycle.settle(this.roster.pendingCreations(), failures) - await this.lifecycle.settle(this.mailbox.pendingDispatches(), failures) + await this.lifecycle.settle(this.legacyDelivery.pendingDispatches(), failures) for (const [root, childIds] of this.roster.liveChildrenByRoot()) { try { await this.roster.stopTeammates(root, childIds) diff --git a/packages/experimental/agent-team/src/journal.ts b/packages/experimental/agent-team/src/journal.ts index 25d8369d30..339b83e419 100644 --- a/packages/experimental/agent-team/src/journal.ts +++ b/packages/experimental/agent-team/src/journal.ts @@ -6,7 +6,7 @@ import type { SessionEventMap, SessionId } from '@deepseek-ai/dsh-session' import type { TeamEventType, TeamState } from './projection.ts' type AppendTeamEvent = (type: T, data: SessionEventMap[T]) => void -type MutableTeamEventType = 'team/member' | 'team/task' | 'team/message/queued' | 'team/message/delivered' +type MutableTeamEventType = 'team/member' | 'team/task' | 'team/message/delivered' /** Owns per-Lead transaction order and committed Team event publication. */ export class TeamJournal { diff --git a/packages/experimental/agent-team/src/legacy-delivery.ts b/packages/experimental/agent-team/src/legacy-delivery.ts new file mode 100644 index 0000000000..f4924e2134 --- /dev/null +++ b/packages/experimental/agent-team/src/legacy-delivery.ts @@ -0,0 +1,168 @@ +/** Compatibility delivery for pending messages written by the historical Team mailbox. */ + +import type { Context } from '@deepseek-ai/cordis' +import type { Agent } from '@deepseek-ai/dsh-agent' +import { createUserMessage } from '@deepseek-ai/dsh-llm' +import type { ContentBlock } from '@deepseek-ai/dsh-llm' +import type { Session, SessionId } from '@deepseek-ai/dsh-session' +import { steerHostSubagentPrompt } from '@deepseek-ai/dsh-subagent/internal' +import { errorMessage } from './error.ts' +import type { TeamJournal } from './journal.ts' +import { readPersistedSession } from './persisted.ts' +import type { TeamRoster } from './roster.ts' +import { messageAccepted } from './session-message.ts' +import { TeamId } from './types.ts' +import type { TeamMessageId, TeamMessageSnapshot } from './types.ts' + +/** Drains historical queued records without admitting new Team mailbox writes. */ +export class LegacyTeamDelivery { + private readonly recoveries = new Map>() + + /** + * @param ctx - Team service context with Agent, Session, persistence, and subagent services. + * @param journal - authoritative Lead-log transaction owner. + * @param roster - Team membership and member-name resolver. + */ + constructor( + private readonly ctx: Context, + private readonly journal: TeamJournal, + private readonly roster: TeamRoster, + ) {} + + /** + * Retry durable pending messages relevant to one started Team member. + * @param agent - newly started exact live Agent. + * @param signal - shared runtime cancellation. + */ + async recoverFor(agent: Agent, signal: AbortSignal): Promise { + signal.throwIfAborted() + const membership = this.roster.tryMembership(agent) + if (membership === undefined) return + const root = membership.root + const existing = this.recoveries.get(root.id) + if (existing !== undefined) { + await existing + return + } + const operation = Promise.resolve().then(async () => { + const state = this.journal.state(root) + const blockedTargets = new Set() + for (const message of state.messages) { + if (state.delivered.includes(message.id) || blockedTargets.has(message.targetId)) continue + signal.throwIfAborted() + if (!await this.dispatchOnce(root, message, signal)) blockedTargets.add(message.targetId) + } + }) + this.recoveries.set(root.id, operation) + try { + await operation + } finally { + this.recoveries.delete(root.id) + } + } + + /** + * Return admitted legacy recovery operations for runtime disposal. + * @returns a detached snapshot of ongoing recovery passes. + */ + pendingDispatches(): readonly Promise[] { + return [...this.recoveries.values()] + } + + /** Attempt one historical delivery, retaining its pending record on failure. */ + private async dispatchOnce(root: Agent, message: TeamMessageSnapshot, signal: AbortSignal): Promise { + try { + const target = message.targetId === root.id ? root : this.ctx.agents.get(message.targetId) + if (target !== undefined && this.targetRecorded(target.session, message.id)) { + return await this.checkpointDelivered(root, target.session, message.id) + } + const source = { + kind: 'team-message' as const, + teamId: TeamId(root.id), + messageId: message.id, + senderId: message.senderId, + senderName: message.senderName, + } + const content = this.deliveryContent(message) + if (message.targetId === root.id) { + const input = createUserMessage({ content, source }) + root.steer(input) + return await this.checkpointDelivered(root, root.session, message.id) + } + if (target === undefined) { + const recorded = await this.persistedTargetRecorded(message.targetId, message.id, signal) + if (recorded === undefined) return false + if (recorded) { + await this.markDelivered(root, message.id, message.targetId) + return true + } + } + await steerHostSubagentPrompt(this.ctx.subagents, root, message.targetId, content, source, signal) + const resumed = this.ctx.agents.get(message.targetId) + if (resumed !== undefined) return await this.checkpointDelivered(root, resumed.session, message.id) + if (!await this.persistedTargetRecorded(message.targetId, message.id, signal)) return false + await this.markDelivered(root, message.id, message.targetId) + return true + } catch (error: unknown) { + this.ctx.logger.warn(`team message "${message.id}" remains queued: ${errorMessage(error)}`) + return false + } + } + + /** Flush one live target receipt before the Lead records its delivered edge. */ + private async checkpointDelivered( + root: Agent, + target: Session, + messageId: TeamMessageId, + ): Promise { + await this.ctx.sessions.flush(target) + if (!this.targetRecorded(target, messageId)) return false + await this.markDelivered(root, messageId, target.id) + return true + } + + /** Record delivery unless the acknowledgement already exists. */ + private async markDelivered(root: Agent, messageId: TeamMessageId, targetId: SessionId): Promise { + await this.journal.transact(root.id, async () => { + await this.journal.appendAndFlush(root, 'team/message/delivered', { + version: 2, + teamId: TeamId(root.id), + messageId, + targetId, + }) + }) + } + + /** Whether a target Session already contains the durable message identity. */ + private targetRecorded(session: Session, messageId: TeamMessageId): boolean { + // oxlint-disable-next-line typescript/no-deprecated -- Existing Session history read; migration deferred. + const suffix = session.snapshotEvents(session.inheritedEventCount) + return messageAccepted(suffix, message => message.source.kind === 'team-message' + && message.source.messageId === messageId) + } + + /** Frame peer content with stable sender and message identity for the receiving model. */ + private deliveryContent(message: TeamMessageSnapshot): ContentBlock[] { + return [ + { type: 'text', text: `Team message ${message.id} from ${message.senderName}:` }, + ...structuredClone(message.content), + ] + } + + /** Read an inactive target's durable log before cold resume; uncertainty keeps the mailbox queued. */ + private async persistedTargetRecorded( + targetId: SessionId, + messageId: TeamMessageId, + signal: AbortSignal, + ): Promise { + try { + const stored = await readPersistedSession(this.ctx.sessionPersistence, targetId, signal) + const suffix = stored.events.slice(stored.inheritedEventCount) + return messageAccepted(suffix, message => message.source.kind === 'team-message' + && message.source.messageId === messageId) + } catch (error: unknown) { + this.ctx.logger.warn(`cannot read Team message target "${targetId}": ${errorMessage(error)}`) + return undefined + } + } +} diff --git a/packages/experimental/agent-team/src/lifecycle.ts b/packages/experimental/agent-team/src/lifecycle.ts index 55bdfadb9e..f427239182 100644 --- a/packages/experimental/agent-team/src/lifecycle.ts +++ b/packages/experimental/agent-team/src/lifecycle.ts @@ -4,6 +4,7 @@ import { TeamError } from './error.ts' /** Owns the single Team runtime cancellation fact and disposal timeout. */ export class TeamRuntimeLifecycle { + private readonly operations = new Set>() private readonly controller = new AbortController() /** @@ -46,6 +47,25 @@ export class TeamRuntimeLifecycle { this.controller.abort(new TeamError('Agent Teams service disposed', 'TEAM_DISPOSED')) } + /** + * Track an admitted operation until it settles. + * @param operation - asynchronous work owned by this runtime. + * @returns the same operation. + */ + track(operation: Promise): Promise { + this.operations.add(operation) + void operation.then(() => { this.operations.delete(operation) }, () => { this.operations.delete(operation) }) + return operation + } + + /** + * Capture outstanding operations after closing admission. + * @returns admitted work still awaiting settlement. + */ + pending(): readonly Promise[] { + return [...this.operations] + } + /** * Await admitted operations and retain failures other than runtime cancellation. * @param operations - admitted operations captured after the admission cutoff. diff --git a/packages/experimental/agent-team/src/mailbox.ts b/packages/experimental/agent-team/src/mailbox.ts deleted file mode 100644 index 6afc7f441b..0000000000 --- a/packages/experimental/agent-team/src/mailbox.ts +++ /dev/null @@ -1,332 +0,0 @@ -/** Durable Team mailbox admission, target-local dispatch, acknowledgement, and recovery. */ - -import { randomUUID } from 'node:crypto' -import type { Context } from '@deepseek-ai/cordis' -import { brandString } from '@deepseek-ai/dsh-brand' -import type { Agent } from '@deepseek-ai/dsh-agent' -import { createUserMessage } from '@deepseek-ai/dsh-llm' -import type { ContentBlock } from '@deepseek-ai/dsh-llm' -import { SessionId } from '@deepseek-ai/dsh-session' -import type { Session, SessionEvent } from '@deepseek-ai/dsh-session' -import { steerHostSubagentPrompt } from '@deepseek-ai/dsh-subagent/internal' -import { errorMessage, TeamError } from './error.ts' -import type { TeamJournal } from './journal.ts' -import type { TeamRuntimeLifecycle } from './lifecycle.ts' -import { readPersistedSession } from './persisted.ts' -import type { TeamRoster } from './roster.ts' -import { resolveActiveMember } from './roster.ts' -import { messageAccepted } from './session-message.ts' -import { TeamId, TeamMessageId } from './types.ts' -import type { - SendTeamMessageRequest, - SendTeamMessageResult, - TeamMessageSnapshot, -} from './types.ts' - -/** Owns every process-local state transition for the durable Team mailbox. */ -export class TeamMailbox { - private readonly dispatchTails = new Map>() - private readonly inFlightMessages = new Set() - private readonly inFlightDispatches = new Set>() - - /** - * @param ctx - Team service context with Agent, Session, persistence, and subagent services. - * @param journal - authoritative Lead-log transaction owner. - * @param roster - Team membership and member-name resolver. - * @param lifecycle - shared Team runtime admission cutoff. - * @param maxPendingMessagesPerMember - per-target queued-minus-delivered limit. - * @param maxMessageBytes - maximum complete sender-framed delivery size. - */ - constructor( - private readonly ctx: Context, - private readonly journal: TeamJournal, - private readonly roster: TeamRoster, - private readonly lifecycle: TeamRuntimeLifecycle, - private readonly maxPendingMessagesPerMember: number, - private readonly maxMessageBytes: number, - ) {} - - /** - * Queue one durable peer message, then attempt immediate delivery. - * @param caller - exact live sending Team member. - * @param request - target name, content, and pre-queue cancellation. - * @returns durable message identity and immediate-delivery observation. - */ - async send(caller: Agent, request: SendTeamMessageRequest): Promise { - if (this.lifecycle.disposed) throw new TeamError('Agent Teams service is disposing', 'TEAM_DISPOSED') - const operation = this.sendAdmitted(caller, { - ...request, - signal: AbortSignal.any([request.signal, this.lifecycle.signal]), - }) - return await this.trackDispatch(operation) - } - - /** - * Observe target-side durable receipts and checkpoint their Lead-log acknowledgement. - * @param session - exact target Session receiving the event. - * @param event - newly appended Session event. - */ - observeSessionEvent(session: Session, event: SessionEvent): void { - if (this.lifecycle.disposed || event.type !== 'user/message' || event.data.source.kind !== 'team-message') return - const source = event.data.source - const acknowledgement = Promise.resolve().then(async () => { - const root = this.ctx.agents.get(brandString(source.teamId)) - if (root !== undefined) await this.checkpointDelivered(root, session, source.messageId) - }).catch((error: unknown) => { - this.ctx.logger.warn(`Team message "${source.messageId}" acknowledgement failed: ${errorMessage(error)}`) - }) - void this.trackDispatch(acknowledgement) - } - - /** - * Retry durable pending messages relevant to one started Team member. - * @param agent - newly started exact live Agent. - * @param signal - shared runtime cancellation. - */ - async recoverFor(agent: Agent, signal: AbortSignal): Promise { - signal.throwIfAborted() - const membership = this.roster.tryMembership(agent) - if (membership === undefined) return - const state = this.journal.state(membership.root) - const messages = state.messages.filter(message => - !state.delivered.includes(message.id) - && (membership.role === 'lead' || message.targetId === agent.id)) - for (const message of messages) { - signal.throwIfAborted() - await this.tryDispatch(membership.root, message, signal) - } - } - - /** - * Return admitted dispatch and acknowledgement operations captured for disposal. - * @returns detached snapshot ordered only by Set insertion. - */ - pendingDispatches(): readonly Promise[] { - return [...this.inFlightDispatches] - } - - /** Queue and dispatch one mailbox item admitted before the disposal cutoff. */ - private async sendAdmitted( - caller: Agent, - request: SendTeamMessageRequest, - ): Promise { - const membership = this.roster.membership(caller) - request.signal.throwIfAborted() - const root = membership.root - const content = structuredClone(request.content) - const queued = await this.journal.transact(root.id, async () => { - request.signal.throwIfAborted() - const state = this.journal.state(root) - const target = resolveActiveMember(root, state, request.target) - if (target.id === caller.id) throw new TeamError('a Team member cannot message itself', 'TEAM_SELF_MESSAGE') - const pendingForTarget = state.messages.filter(candidate => - candidate.targetId === target.id && !state.delivered.includes(candidate.id)).length - if (pendingForTarget >= this.maxPendingMessagesPerMember) { - throw new TeamError( - `teammate "${target.name}" has ${pendingForTarget} pending messages`, - 'TEAM_MAILBOX_FULL', - ) - } - const queued: TeamMessageSnapshot = { - id: TeamMessageId(`team-message-${randomUUID()}`), - senderId: caller.id, - senderName: membership.name, - targetId: target.id, - content, - } - if (Buffer.byteLength(JSON.stringify(this.deliveryContent(queued)), 'utf8') > this.maxMessageBytes) { - throw new TeamError(`team message exceeds ${this.maxMessageBytes} bytes`, 'TEAM_MESSAGE_TOO_LARGE') - } - await this.journal.appendAndFlush(root, 'team/message/queued', { - version: 2, - teamId: TeamId(root.id), - message: queued, - }) - // Register dispatch before releasing the root transaction so concurrent - // senders enter the target-local queue in durable mailbox order. - return { message: queued, dispatch: this.tryDispatch(root, queued, request.signal) } - }) - const accepted = await queued.dispatch - return { messageId: queued.message.id, status: accepted ? 'accepted' : 'queued' } - } - - /** Attempt one queued message exactly once in this process at a time. */ - private tryDispatch(root: Agent, message: TeamMessageSnapshot, signal: AbortSignal): Promise { - if (this.lifecycle.disposed) return Promise.resolve(false) - if (this.inFlightMessages.has(message.id)) return Promise.resolve(false) - this.inFlightMessages.add(message.id) - const operation = this.trackDispatch( - this.tryDispatchAdmitted( - root, - message, - AbortSignal.any([signal, this.lifecycle.signal]), - ), - ) - const forget = (): void => { - this.inFlightMessages.delete(message.id) - } - void operation.then(forget, forget) - return operation - } - - /** Track one dispatch transaction through delivery admission or contained failure. */ - private trackDispatch(operation: Promise): Promise { - this.inFlightDispatches.add(operation) - void operation.then(() => { - this.inFlightDispatches.delete(operation) - }, () => { - this.inFlightDispatches.delete(operation) - }) - return operation - } - - /** Attempt one queued message admitted before the service lifecycle cutoff. */ - private async tryDispatchAdmitted( - root: Agent, - message: TeamMessageSnapshot, - signal: AbortSignal, - ): Promise { - return await this.serializeDispatch(message, () => this.dispatchThrough(root, message, signal)) - } - - /** Serialize delivery admission for one durable target in queued order. */ - private async serializeDispatch( - message: TeamMessageSnapshot, - operation: () => Promise, - ): Promise { - const targetId = message.targetId - const prior = this.dispatchTails.get(targetId) ?? Promise.resolve() - /* v8 ignore next -- dispatch tails absorb rejection, so the recovery callback is a fail-safe backstop. */ - const run = prior.then(operation, operation) - /* v8 ignore next -- dispatchOnce contains delivery failures and serializeDispatch itself does not throw. */ - const tail = run.then(() => undefined, () => undefined) - this.dispatchTails.set(targetId, tail) - try { - return await run - } finally { - if (this.dispatchTails.get(targetId) === tail) this.dispatchTails.delete(targetId) - } - } - - /** Deliver every pending target message through `message` in durable queue order. */ - private async dispatchThrough( - root: Agent, - message: TeamMessageSnapshot, - signal: AbortSignal, - ): Promise { - const state = this.journal.state(root) - const pending = state.messages.filter(candidate => - candidate.targetId === message.targetId && !state.delivered.includes(candidate.id)) - const requested = pending.findIndex(candidate => candidate.id === message.id) - if (requested < 0) return state.delivered.includes(message.id) - for (const candidate of pending.slice(0, requested + 1)) { - const ownsInFlight = !this.inFlightMessages.has(candidate.id) - if (ownsInFlight) this.inFlightMessages.add(candidate.id) - try { - if (!await this.dispatchOnce(root, candidate, signal)) return false - } finally { - if (ownsInFlight) this.inFlightMessages.delete(candidate.id) - } - } - return true - } - - /** Attempt one queued delivery after target-local ordering admits it. */ - private async dispatchOnce(root: Agent, message: TeamMessageSnapshot, signal: AbortSignal): Promise { - try { - const target = message.targetId === root.id ? root : this.ctx.agents.get(message.targetId) - if (target !== undefined && this.targetRecorded(target.session, message.id)) { - return await this.checkpointDelivered(root, target.session, message.id) - } - const source = { - kind: 'team-message' as const, - teamId: TeamId(root.id), - messageId: message.id, - senderId: message.senderId, - senderName: message.senderName, - } - const content = this.deliveryContent(message) - if (message.targetId === root.id) { - const input = createUserMessage({ content, source }) - root.steer(input) - return await this.checkpointDelivered(root, root.session, message.id) - } - if (target === undefined) { - const recorded = await this.persistedTargetRecorded(message.targetId, message.id, signal) - if (recorded === undefined) return false - if (recorded) { - await this.markDelivered(root, message.id, message.targetId) - return true - } - } - await steerHostSubagentPrompt(this.ctx.subagents, root, message.targetId, content, source, signal) - return target === undefined - ? true - : await this.checkpointDelivered(root, target.session, message.id) - } catch (error: unknown) { - this.ctx.logger.warn(`team message "${message.id}" remains queued: ${errorMessage(error)}`) - return false - } - } - - /** Flush one live target receipt before the Lead records its delivered edge. */ - private async checkpointDelivered( - root: Agent, - target: Session, - messageId: TeamMessageId, - ): Promise { - await this.ctx.sessions.flush(target) - if (!this.targetRecorded(target, messageId)) return false - await this.markDelivered(root, messageId, target.id) - return true - } - - /** Record delivery unless the acknowledgement already exists. */ - private async markDelivered(root: Agent, messageId: TeamMessageId, targetId: SessionId): Promise { - await this.journal.transact(root.id, async () => { - const state = this.journal.state(root) - if (state.delivered.includes(messageId)) return - const queued = state.messages.find(message => message.id === messageId) - if (queued === undefined || queued.targetId !== targetId) return - await this.journal.appendAndFlush(root, 'team/message/delivered', { - version: 2, - teamId: TeamId(root.id), - messageId, - targetId, - }) - }) - } - - /** Whether a target Session already contains the durable message identity. */ - private targetRecorded(session: Session, messageId: TeamMessageId): boolean { - // oxlint-disable-next-line typescript/no-deprecated -- Existing Session history read; migration deferred. - const suffix = session.snapshotEvents(session.inheritedEventCount) - return messageAccepted(suffix, message => message.source.kind === 'team-message' - && message.source.messageId === messageId) - } - - /** Frame peer content with stable sender and message identity for the receiving model. */ - private deliveryContent(message: TeamMessageSnapshot): ContentBlock[] { - return [ - { type: 'text', text: `Team message ${message.id} from ${message.senderName}:` }, - ...structuredClone(message.content), - ] - } - - /** Read an inactive target's durable log before cold resume; uncertainty keeps the mailbox queued. */ - private async persistedTargetRecorded( - targetId: SessionId, - messageId: TeamMessageId, - signal: AbortSignal, - ): Promise { - try { - const stored = await readPersistedSession(this.ctx.sessionPersistence, targetId, signal) - const suffix = stored.events.slice(stored.inheritedEventCount) - return messageAccepted(suffix, message => message.source.kind === 'team-message' - && message.source.messageId === messageId) - } catch (error: unknown) { - this.ctx.logger.warn(`cannot read Team message target "${targetId}": ${errorMessage(error)}`) - return undefined - } - } -} diff --git a/packages/experimental/agent-team/src/types.ts b/packages/experimental/agent-team/src/types.ts index 9921886f6f..197e73a3be 100644 --- a/packages/experimental/agent-team/src/types.ts +++ b/packages/experimental/agent-team/src/types.ts @@ -1,5 +1,6 @@ /** Public Agent Teams identities, durable records, and service request values. */ +import type { MessageId } from '@deepseek-ai/dsh-llm/brand' import type { Branded } from '@deepseek-ai/dsh-brand' import type { ContentBlock } from '@deepseek-ai/dsh-llm/types' import type { SessionId } from '@deepseek-ai/dsh-session/types' @@ -154,8 +155,6 @@ export interface Config { readonly maxMembers?: number /** Maximum non-deleted tasks retained by one Team. */ readonly maxTasks?: number - /** Maximum queued-minus-delivered messages for one target member. */ - readonly maxPendingMessagesPerMember?: number /** Maximum UTF-8 bytes in one complete sender-framed delivery. */ readonly maxMessageBytes?: number /** Maximum milliseconds allowed for Team-owned runtime disposal. */ @@ -177,17 +176,16 @@ export interface SpawnTeammateResult { readonly member: TeamMemberView } -/** Input for one durable peer message. */ +/** Input for one direct peer-message attempt. */ export interface SendTeamMessageRequest { readonly target: string readonly content: ContentBlock[] readonly signal: AbortSignal } -/** Result after a peer message enters the durable mailbox. */ +/** Target inbox acceptance under ordinary Agent persistence; no Team retry or deduplication. */ export interface SendTeamMessageResult { - readonly messageId: TeamMessageId - readonly status: 'accepted' | 'queued' + readonly messageId: MessageId } /** Input for creating one shared task. */ diff --git a/packages/experimental/agent-team/tests/persistence.spec.ts b/packages/experimental/agent-team/tests/persistence.spec.ts index f7ee5d41cb..46498ccfd2 100644 --- a/packages/experimental/agent-team/tests/persistence.spec.ts +++ b/packages/experimental/agent-team/tests/persistence.spec.ts @@ -14,7 +14,8 @@ import SubagentService, { snapshotSubagentDescriptor } from '@deepseek-ai/dsh-su import * as SubagentSpawn from '@deepseek-ai/dsh-subagent-spawn-in-process' import { MockAdapter, textResponse } from '../../../core/agent-loop/tests/mock-adapter.ts' import TeamService, { TeamId, TeamMessageId } from '../src/index.ts' -import type { TeamMailbox } from '../src/mailbox.ts' +import type { LegacyTeamDelivery } from '../src/legacy-delivery.ts' +import { readPersistedSession } from '../src/persisted.ts' import { teamProjectionDefinition } from '../src/projection.ts' import type { TeamMemberSnapshot, TeamMessageSnapshot, TeamTaskSnapshot } from '../src/index.ts' import { TestSessionQuery } from './test-session-query.ts' @@ -53,8 +54,8 @@ async function storedEvents(ctx: Context, id: SessionId): Promise { - const { mailbox } = ctx.agentTeams as unknown as { readonly mailbox: TeamMailbox } - await Promise.all(mailbox.pendingDispatches()) + const { legacyDelivery } = ctx.agentTeams as unknown as { readonly legacyDelivery: LegacyTeamDelivery } + await Promise.all(legacyDelivery.pendingDispatches()) } async function disposeContext(ctx: Context): Promise { @@ -165,6 +166,40 @@ async function persistedChild( for (const backend of backends) { describe(`${backend.name} Agent Teams recovery`, () => { + it('restores a directly accepted target inbox from its flushed crash prefix without Team intent', async () => { + const liveRoot = mkdtempSync(join(tmpdir(), 'dsh-team-live-')) + const crashRoot = mkdtempSync(join(tmpdir(), 'dsh-team-crash-')) + roots.push(liveRoot, crashRoot) + const first = await stack(backend, liveRoot, ['hang']) + const lead = await first.ctx.agentLoop.create(SessionId('direct-root'), { provider: 'mock', model: 'mock' }) + const target = await first.ctx.agentTeams.spawnTeammate(lead, { + name: 'worker', description: 'pending inbox recovery', prompt: [{ type: 'text', text: 'initial' }], + context: 'fresh', provider: 'spawn', signal: SIGNAL, + }) + const child = first.ctx.agents.get(target.member.id)! + const receipt = await first.ctx.agentTeams.sendMessage(lead, { + target: 'worker', content: [{ type: 'text', text: 'accepted before crash' }], signal: SIGNAL, + }) + await first.ctx.sessions.flush(child.session) + const prefix = await readPersistedSession(first.ctx.sessionPersistence, child.id, SIGNAL) + expect(prefix.events.some(event => event.type === 'agent/inbox/spliced' + && event.data.inserted.some(message => message.id === receipt.messageId))).toBe(true) + expect(lead.session.snapshotEvents().some(event => event.type.startsWith('team/message/'))).toBe(false) + await first.dispose() + const second = await stack(backend, crashRoot, [textResponse('recovered')]) + const writer = await second.ctx.sessionPersistence.create(prefix.header) + try { await writer.append(prefix.events) } finally { await writer.close() } + const resumed = await second.ctx.agents.resume({ + resumeSessionId: child.id, agentOptions: { provider: 'mock', model: 'mock' }, + }) + expect(resumed.agent.inbox.nextStep.find(message => message.id === receipt.messageId)).toMatchObject({ + source: { kind: 'agent-message', form: 'relay', senderSessionId: lead.id }, + content: [{ type: 'text', text: 'Team message from lead:' }, { type: 'text', text: 'accepted before crash' }], + }) + await resumed.dispose() + await second.dispose() + }) + it('reconciles a persisted child to active and a missing child to durable failed', { timeout: PERSISTENCE_TEST_TIMEOUT_MS, }, async () => { @@ -231,7 +266,7 @@ for (const backend of backends) { content: [{ type: 'text', text: 'resume after reconciliation' }], signal: SIGNAL, }) - expect(receipt.status).toBe('accepted') + expect(receipt.messageId).toEqual(expect.any(String)) await vi.waitFor(() => { expect(second.ctx.agents.get(childId)).toBeUndefined() }, { timeout: 5_000 }) await vi.waitFor(() => { expect(durable(activeHandle.agent).pendingMessages).toEqual([]) }) @@ -299,15 +334,14 @@ for (const backend of backends) { signal: SIGNAL, }) await vi.waitFor(() => { expect(first.ctx.agents.get(started.member.id)).toBeUndefined() }, { timeout: 5_000 }) - vi.spyOn(first.ctx.sessionPersistence, 'open') - .mockRejectedValueOnce(new Error('temporary target read failure')) - const queued = await first.ctx.agentTeams.sendMessage(firstLead, { - target: 'mail-worker', - content: [{ type: 'text', text: 'durable retry context' }], - signal: SIGNAL, + const queued = { messageId: TeamMessageId('legacy-pending') } + firstLead.session.append('team/message/queued', { + version: 2, teamId: TeamId(rootId), message: { + id: queued.messageId, senderId: rootId, senderName: 'lead', targetId: started.member.id, + content: [{ type: 'text', text: 'durable retry context' }], + }, }) - expect(queued.status).toBe('queued') - expect(durable(firstLead).pendingMessages.map(message => message.id)).toEqual([queued.messageId]) + await first.ctx.sessions.flush(firstLead.session) await first.dispose() const second = await stack(backend, storageRoot, [textResponse('resumed teammate answer')]) @@ -388,7 +422,7 @@ for (const backend of backends) { await first.dispose() const second = await stack(backend, storageRoot, []) - const { mailbox } = second.ctx.agentTeams as unknown as { readonly mailbox: TeamMailbox } + const { legacyDelivery } = second.ctx.agentTeams as unknown as { readonly legacyDelivery: LegacyTeamDelivery } const flush = second.ctx.sessions.flush.bind(second.ctx.sessions) const checkpointEntered = Promise.withResolvers() const releaseCheckpoint = Promise.withResolvers() @@ -408,7 +442,7 @@ for (const backend of backends) { }) await checkpointEntered.promise expect(durable(rootHandle.agent).pendingMessages).toEqual([]) - expect(mailbox.pendingDispatches().length).toBeGreaterThan(0) + expect(legacyDelivery.pendingDispatches().length).toBeGreaterThan(0) let settled = false const settlement = settleMailbox(second.ctx).then(() => { settled = true }) await Promise.resolve() diff --git a/packages/experimental/agent-team/tests/team.spec.ts b/packages/experimental/agent-team/tests/team.spec.ts index af939b0108..fc262f238f 100644 --- a/packages/experimental/agent-team/tests/team.spec.ts +++ b/packages/experimental/agent-team/tests/team.spec.ts @@ -15,6 +15,7 @@ import * as SubagentFork from '@deepseek-ai/dsh-subagent-fork-in-process' import * as SubagentSpawn from '@deepseek-ai/dsh-subagent-spawn-in-process' import { MockAdapter, textResponse } from '../../../core/agent-loop/tests/mock-adapter.ts' import TeamService, { TeamError, TeamId, TeamMessageId, TeamTaskId } from '../src/index.ts' +import type { LegacyTeamDelivery } from '../src/legacy-delivery.ts' import { TeamRuntimeLifecycle } from '../src/lifecycle.ts' import { teamProjectionDefinition } from '../src/projection.ts' import type { TeamMemberSnapshot, TeamMessageSnapshot, TeamTaskSnapshot } from '../src/index.ts' @@ -84,17 +85,13 @@ function content(text: string) { } interface TeamServiceInternals { + readonly legacyDelivery: LegacyTeamDelivery readonly roster: { readonly inFlightCreations: Set> checkpointInitialPrompt(childId: SessionId, messageId: string, signal: AbortSignal): Promise reconcileProvisioning(root: Agent, signal: AbortSignal): Promise liveChildrenByRoot(): Map } - readonly mailbox: { - tryDispatch(root: Agent, message: TeamMessageSnapshot, signal: AbortSignal): Promise - serializeDispatch(message: TeamMessageSnapshot, operation: () => Promise): Promise - markDelivered(root: Agent, messageId: ReturnType, targetId: SessionId): Promise - } readonly journal: { state(root: Agent): unknown } @@ -108,6 +105,11 @@ function teamInternals(ctx: Context): TeamServiceInternals { return ctx.agentTeams as unknown as TeamServiceInternals } +/** Access the existing host adapter for per-instance delivery barriers. */ +function hostDeliverer(ctx: Context): HostPromptDeliverer { + return ctx.subagents as unknown as HostPromptDeliverer +} + function spawn( ctx: Context, lead: Agent, @@ -157,7 +159,6 @@ describe('Team identity and provisioning', () => { const fields = [ 'maxMembers', 'maxTasks', - 'maxPendingMessagesPerMember', 'maxMessageBytes', 'disposalTimeoutMs', ] as const @@ -204,7 +205,7 @@ describe('Team identity and provisioning', () => { diagnostics: [], })) expect(service.listMembers(lead)[1]).not.toHaveProperty('model') - await Promise.resolve() + await Promise.resolve(undefined) }) it('creates fresh and fork teammates with immutable names and bounded roster size', async () => { @@ -261,7 +262,7 @@ describe('Team identity and provisioning', () => { if (liveSession === undefined) throw new Error('checkpoint fixture did not create its Session') const initial = createUserMessage({ content: content('checkpoint me'), source: { kind: 'user' } }) const checkpoint = internal.checkpointInitialPrompt(liveSession.id, initial.id, SIGNAL) - await Promise.resolve() + await Promise.resolve(undefined) lead.inject(createUserMessage({ content: content('unrelated progress'), source: { kind: 'user' } })) const unrelatedFiber = await ctx.plugin(Object.assign(function unrelatedCheckpointFixture(childCtx: Context) { childCtx.sessions.create(SessionId('unrelated-checkpoint-child')) @@ -290,7 +291,7 @@ describe('Team identity and provisioning', () => { if (disposedSession === undefined) throw new Error('disposed checkpoint fixture did not create its Session') const disposed = internal.checkpointInitialPrompt(disposedSession.id, missing.id, SIGNAL) const disposedResult = expect(disposed).rejects.toThrow('not found') - await Promise.resolve() + await Promise.resolve(undefined) await disposedFiber.dispose() await disposedResult @@ -301,14 +302,14 @@ describe('Team identity and provisioning', () => { if (abortedSession === undefined) throw new Error('aborted checkpoint fixture did not create its Session') const controller = new AbortController() const aborted = internal.checkpointInitialPrompt(abortedSession.id, missing.id, controller.signal) - await Promise.resolve() + await Promise.resolve(undefined) controller.abort({ kind: 'test' }) await expect(aborted).rejects.toMatchObject({ code: 'TEAM_DISPOSED' }) const errorController = new AbortController() const errorAborted = internal.checkpointInitialPrompt(abortedSession.id, missing.id, errorController.signal) const errorResult = expect(errorAborted).rejects.toThrow('checkpoint stopped') - await Promise.resolve() + await Promise.resolve(undefined) errorController.abort(new Error('checkpoint stopped')) await errorResult await abortedFiber.dispose() @@ -877,459 +878,265 @@ describe('Team shared task DAG', () => { }) }) -describe('Team mailbox and waiting', () => { - it('steers a message addressed to the Lead and checkpoints its receipt', async () => { - const { ctx, lead } = await setup(['hang']) - const message: TeamMessageSnapshot = { - id: TeamMessageId('steer-lead-message'), - senderId: SessionId('team-worker'), - senderName: 'worker', - targetId: lead.id, - content: content('progress report'), - } - lead.session.append('team/message/queued', { - version: 2, - teamId: TeamId(lead.id), - message, - }) +describe('Historical Team message compatibility', () => { + function enqueue(lead: Agent, id: string, targetId: SessionId): TeamMessageSnapshot { + const message = { id: TeamMessageId(id), senderId: lead.id, senderName: 'lead', targetId, content: content(id) } + lead.session.append('team/message/queued', { version: 2, teamId: TeamId(lead.id), message }) + return message + } - await expect(teamInternals(ctx).mailbox.tryDispatch(lead, message, SIGNAL)).resolves.toBe(true) - expect(lead.session.snapshotEvents().some(event => event.type === 'agent/inbox/spliced' - && event.data.inserted.some(input => input.source.kind === 'team-message' - && input.source.messageId === message.id))).toBe(true) + it('drains historical Lead and live-target messages once, including accepted pending receipts', async () => { + const { ctx, lead } = await setup(['hang', 'hang']) + const target = await waitRunning(ctx, (await spawn(ctx, lead, 'target')).member.id) + const recovery = teamInternals(ctx).legacyDelivery + await recovery.recoverFor(lead, SIGNAL) + const recorded = enqueue(lead, 'recorded', target.id) + target.steer(createUserMessage({ content: recorded.content, source: { + kind: 'team-message', teamId: TeamId(lead.id), messageId: recorded.id, senderId: lead.id, senderName: 'lead', + } })) + enqueue(lead, 'live', target.id) + enqueue(lead, 'report', lead.id) + await recovery.recoverFor(lead, SIGNAL) expect(durable(lead).pendingMessages).toEqual([]) + const count = target.inbox.nextStep.length + await recovery.recoverFor(lead, SIGNAL) + expect(target.inbox.nextStep).toHaveLength(count) lead.cancel({ kind: 'parent' }) await lead.whenIdle() }) - it('acknowledges steered messages persisted by a busy Lead before model claim', async () => { - const { ctx, lead, teamFiber } = await setup(['hang', 'hang'], { maxPendingMessagesPerMember: 1 }) - const started = await spawn(ctx, lead, 'lead-reporter') - const reporter = await waitRunning(ctx, started.member.id) - lead.followup(createUserMessage({ content: content('keep the Lead busy'), source: { kind: 'user' } })) + it('retains old pending data and reports inspection and delivery failures', async () => { + const { ctx, lead } = await setup([textResponse('done')]) + const target = await spawn(ctx, lead, 'target') + await waitNoAgent(ctx, target.member.id) + const warnings: string[] = [] + vi.spyOn(ctx.logger, 'warn').mockImplementation((value) => { warnings.push(String(value)) }) + const message = enqueue(lead, 'retry-old', target.member.id) + const later = enqueue(lead, 'later-old', target.member.id) + const recovery = teamInternals(ctx).legacyDelivery + const open = vi.spyOn(ctx.sessionPersistence, 'open').mockRejectedValueOnce(new Error('read unavailable')) + await recovery.recoverFor(lead, SIGNAL) + open.mockRestore() + const delivery = vi.spyOn(hostDeliverer(ctx), deliverSubagentPrompt) + .mockRejectedValueOnce(new Error('delivery unavailable')) + await recovery.recoverFor(lead, SIGNAL) + delivery.mockRestore() + expect(durable(lead).pendingMessages.map(item => item.id)).toEqual([message.id, later.id]) + expect(warnings.join(' ')).toContain('read unavailable') + expect(warnings.join(' ')).toContain('delivery unavailable') + }) + + it('checks persisted acceptance when a recovered target settles before dispatch returns', async () => { + const { ctx, lead } = await setup([textResponse('initial'), textResponse('resumed')]) + const target = await spawn(ctx, lead, 'target') + await waitNoAgent(ctx, target.member.id) + const recovery = teamInternals(ctx).legacyDelivery + enqueue(lead, 'cold-old', target.member.id) + const runtime = hostDeliverer(ctx) + const deliver = runtime[deliverSubagentPrompt].bind(runtime) + const delivery = vi.spyOn(runtime, deliverSubagentPrompt).mockImplementation(async (...args) => { + const id = await deliver(...args) + await waitNoAgent(ctx, target.member.id) + return id + }) + await recovery.recoverFor(lead, SIGNAL) + expect(durable(lead).pendingMessages).toEqual([]) + delivery.mockImplementation(async () => createUserMessage({ content: content('cancelled acceptance'), source: { kind: 'user' } }).id) + enqueue(lead, 'not-retained', target.member.id) + await recovery.recoverFor(lead, SIGNAL) + expect(durable(lead).pendingMessages.map(item => item.id)).toEqual(['not-retained']) + }) + + it('waits for recovery receipt checkpoints during disposal and retains a removed receipt', async () => { + const { ctx, lead } = await setup(['hang']) + const recovery = teamInternals(ctx).legacyDelivery + await recovery.recoverFor(lead, SIGNAL) + enqueue(lead, 'removed', lead.id) + const entered = Promise.withResolvers() + const release = Promise.withResolvers() + const flush = ctx.sessions.flush.bind(ctx.sessions) + const flushSpy = vi.spyOn(ctx.sessions, 'flush').mockImplementationOnce(async (session) => { + entered.resolve(undefined) + await release.promise + lead.cancel({ kind: 'parent' }) + await lead.whenIdle() + return await flush(session) + }) + const recovering = recovery.recoverFor(lead, SIGNAL) + try { + await entered.promise + let disposed = false + const disposal = teamInternals(ctx).disposeRuntime().then(() => { disposed = true }) + await Promise.resolve(undefined) + expect(disposed).toBe(false) + release.resolve(undefined) + await recovering + await disposal + expect(durable(lead).pendingMessages.map(item => item.id)).toEqual(['removed']) + } finally { + release.resolve(undefined) + await recovering + flushSpy.mockRestore() + } + }) +}) + +describe('Team direct messages and waiting', () => { + it('accepts peer and Lead messages with actual sender identity and wakes Team waits', async () => { + const { ctx, lead, teamFiber } = await setup(['hang', 'hang', 'hang']) + const alpha = await waitRunning(ctx, (await spawn(ctx, lead, 'alpha')).member.id) + const beta = await waitRunning(ctx, (await spawn(ctx, lead, 'beta')).member.id) + lead.followup(createUserMessage({ content: content('busy lead'), source: { kind: 'user' } })) await waitRunning(ctx, lead.id) - - const first = await ctx.agentTeams.sendMessage(reporter, { - target: 'lead', content: content('first progress report'), signal: SIGNAL, - }) - const second = await ctx.agentTeams.sendMessage(reporter, { - target: 'lead', content: content('second progress report'), signal: SIGNAL, - }) - expect([first.status, second.status]).toEqual(['accepted', 'accepted']) - expect(lead.status).toBe('running') - expect(durable(lead).pendingMessages).toEqual([]) - - const messageIds = new Set([first.messageId, second.messageId]) - const persisted = await storedEvents(ctx, lead.id) - const receiptOrder = persisted.flatMap((event) => { - if (event.type === 'agent/inbox/spliced' && event.data.inserted.some(message => - message.source.kind === 'team-message' && messageIds.has(message.source.messageId))) { - return ['agent/inbox/spliced'] - } - if (event.type === 'team/message/delivered' && messageIds.has(event.data.messageId)) { - return ['team/message/delivered'] - } - return [] - }) - expect(receiptOrder).toEqual([ - 'agent/inbox/spliced', - 'team/message/delivered', - 'agent/inbox/spliced', - 'team/message/delivered', - ]) - - const receiptCount = lead.session.snapshotEvents().filter(event => event.type === 'agent/inbox/spliced' - && event.data.inserted.some(message => message.source.kind === 'team-message' - && messageIds.has(message.source.messageId))).length + for (const [target, agent] of [['beta', beta], ['lead', lead]] as const) { + const waiting = ctx.agentTeams.waitForChange(alpha, 10_000, SIGNAL) + const result = await ctx.agentTeams.sendMessage(alpha, { target, content: content('update'), signal: SIGNAL }) + await expect(waiting).resolves.toEqual({ timedOut: false }) + expect(Object.keys(result)).toEqual(['messageId']) + expect(result.messageId).toBeTypeOf('string') + expect(agent.inbox.nextStep.find(message => message.id === result.messageId)).toMatchObject({ + source: { kind: 'agent-message', form: 'relay', senderSessionId: alpha.id }, + content: [{ type: 'text', text: 'Team message from alpha:' }, { type: 'text', text: 'update' }], + }) + } + expect(lead.session.snapshotEvents().filter(event => event.type.startsWith('team/message/'))).toEqual([]) await teamFiber.dispose() - await ctx.plugin(TeamService, { maxPendingMessagesPerMember: 1 }) - await vi.waitFor(() => { expect(durable(lead).pendingMessages).toEqual([]) }) - expect(lead.session.snapshotEvents().filter(event => event.type === 'agent/inbox/spliced' - && event.data.inserted.some(message => message.source.kind === 'team-message' - && messageIds.has(message.source.messageId)))).toHaveLength(receiptCount) - lead.cancel({ kind: 'parent' }) await lead.whenIdle() }) - it('flushes a live pending receipt before acknowledgement without inserting a duplicate', async () => { - const { ctx, lead } = await setup(['hang']) - const started = await spawn(ctx, lead, 'pending-target') - const target = await waitRunning(ctx, started.member.id) - const immediate = await ctx.agentTeams.sendMessage(lead, { - target: 'pending-target', - content: content('live steer receipt'), - signal: SIGNAL, - }) - expect(immediate.status).toBe('accepted') - expect(durable(lead).pendingMessages).toEqual([]) - expect(target.inbox.nextStep.some(item => item.source.kind === 'team-message' - && item.source.messageId === immediate.messageId)).toBe(true) - - const message: TeamMessageSnapshot = { - id: TeamMessageId('live-pending-message'), - senderId: lead.id, - senderName: 'lead', - targetId: target.id, - content: content('durable pending receipt'), - } - lead.session.append('team/message/queued', { - version: 2, - teamId: TeamId(lead.id), - message, - }) + it('steers an idle Lead and cold-resumes a sibling with actual sender attribution', async () => { + const { ctx, lead } = await setup(['hang', textResponse('initial'), textResponse('lead'), textResponse('peer')]) + const alpha = await waitRunning(ctx, (await spawn(ctx, lead, 'alpha')).member.id) + const beta = await spawn(ctx, lead, 'beta') + await waitNoAgent(ctx, beta.member.id) + const leadResult = await ctx.agentTeams.sendMessage(alpha, { target: 'lead', content: content('report'), signal: SIGNAL }) + await lead.whenIdle() + const peerResult = await ctx.agentTeams.sendMessage(alpha, { target: 'beta', content: content('report'), signal: SIGNAL }) + await waitNoAgent(ctx, beta.member.id) await ctx.sessions.flush(lead.session) - target.inject(createUserMessage({ - content: content('durable pending receipt'), - source: { - kind: 'team-message', - teamId: TeamId(lead.id), - messageId: message.id, - senderId: lead.id, - senderName: 'lead', - }, - })) - - const flush = ctx.sessions.flush.bind(ctx.sessions) - const flushed: SessionId[] = [] - const flushSpy = vi.spyOn(ctx.sessions, 'flush').mockImplementation(async (session) => { - flushed.push(session.id) - return flush(session) - }) - const delivered = await teamInternals(ctx).mailbox.tryDispatch(lead, message, SIGNAL) - - expect(delivered).toBe(true) - expect(flushed.slice(0, 2)).toEqual([target.id, lead.id]) - expect(target.inbox.nextStep.filter(item => item.source.kind === 'team-message' - && item.source.messageId === message.id)).toHaveLength(1) - expect(durable(lead).pendingMessages).toEqual([]) - - const disappearing: TeamMessageSnapshot = { - ...message, - id: TeamMessageId('disappearing-pending-message'), - content: content('canceled before checkpoint'), + for (const [id, receipt] of [[lead.id, leadResult], [beta.member.id, peerResult]] as const) { + const messages = (await storedEvents(ctx, id)).flatMap(event => event.type === 'user/message' ? [event.data] : []) + expect(messages.find(message => message.id === receipt.messageId)).toMatchObject({ + source: { kind: 'agent-message', senderSessionId: alpha.id }, + }) } - lead.session.append('team/message/queued', { - version: 2, - teamId: TeamId(lead.id), - message: disappearing, - }) - await flush(lead.session) - const disappearingInput = createUserMessage({ - content: content('canceled before checkpoint'), - source: { - kind: 'team-message', - teamId: TeamId(lead.id), - messageId: disappearing.id, - senderId: lead.id, - senderName: 'lead', - }, - }) - target.inject(disappearingInput) - flushSpy.mockImplementationOnce(async (session) => { - target.inbox.remove(disappearingInput.id) - return flush(session) - }) - await expect(teamInternals(ctx).mailbox.tryDispatch(lead, disappearing, SIGNAL)).resolves.toBe(false) - expect(durable(lead).pendingMessages.map(pending => pending.id)).toEqual([disappearing.id]) - - ctx.agentTeams.interrupt(lead, 'pending-target') - target.cancel({ kind: 'parent' }) - await waitNoAgent(ctx, target.id) }) - it('acknowledges steered messages accepted by a busy target inbox', async () => { - const { ctx, lead } = await setup(['hang'], { maxPendingMessagesPerMember: 1 }) - const started = await spawn(ctx, lead, 'busy-target') - const target = await waitRunning(ctx, started.member.id) - const flush = ctx.sessions.flush.bind(ctx.sessions) - const flushed: SessionId[] = [] - vi.spyOn(ctx.sessions, 'flush').mockImplementation(async (session) => { - flushed.push(session.id) - return flush(session) - }) - - const first = await ctx.agentTeams.sendMessage(lead, { - target: 'busy-target', content: content('first steered message'), signal: SIGNAL, - }) - - expect(first.status).toBe('accepted') - expect(flushed).toEqual([lead.id, target.id, lead.id]) - expect(durable(lead).pendingMessages).toEqual([]) - expect(target.inbox.nextStep.some(message => message.source.kind === 'team-message' - && message.source.messageId === first.messageId)).toBe(true) - - flushed.length = 0 - const second = await ctx.agentTeams.sendMessage(lead, { - target: 'busy-target', content: content('second steered message'), signal: SIGNAL, - }) - - expect(second.status).toBe('accepted') - expect(flushed).toEqual([lead.id, target.id, lead.id]) - expect(durable(lead).pendingMessages).toEqual([]) - expect(target.inbox.nextStep.filter(message => message.source.kind === 'team-message' - && (message.source.messageId === first.messageId || message.source.messageId === second.messageId))) - .toHaveLength(2) - - ctx.agentTeams.interrupt(lead, 'busy-target') - target.cancel({ kind: 'parent' }) - await waitNoAgent(ctx, target.id) - }) - - it('serializes concurrent Steer delivery admission for one target', async () => { + it('passes concurrent attempts to the lower delivery owner without a Team queue', async () => { const { ctx, lead } = await setup(['hang']) - const started = await spawn(ctx, lead, 'ordered-target') - const target = await waitRunning(ctx, started.member.id) + const target = await waitRunning(ctx, (await spawn(ctx, lead, 'target')).member.id) const entered = Promise.withResolvers() const release = Promise.withResolvers() const admitted: string[] = [] - vi.spyOn(ctx.subagents as unknown as HostPromptDeliverer, deliverSubagentPrompt) - .mockImplementation(async (_parent, _childId, blocks, source) => { + vi.spyOn(hostDeliverer(ctx), deliverSubagentPrompt) + .mockImplementation(async (_parent, _child, blocks, source) => { const last = blocks.at(-1) const text = last?.type === 'text' ? last.text : '' admitted.push(text) - if (text === 'first steer') { - entered.resolve(undefined) - await release.promise - } + if (text === 'first') { entered.resolve(undefined); await release.promise } const input = createUserMessage({ content: blocks, source }) - target.inject(input) + target.steer(input) return input.id }) - - const first = ctx.agentTeams.sendMessage(lead, { - target: 'ordered-target', content: content('first steer'), signal: SIGNAL, - }) - await entered.promise - let secondSettled = false - const second = ctx.agentTeams.sendMessage(lead, { - target: 'ordered-target', content: content('second steer'), signal: SIGNAL, - }).finally(() => { secondSettled = true }) - await vi.waitFor(() => { expect(durable(lead).pendingMessages).toHaveLength(2) }) - expect(admitted).toEqual(['first steer']) - expect(secondSettled).toBe(false) - - release.resolve(undefined) - await expect(Promise.all([first, second])).resolves.toMatchObject([ - { status: 'accepted' }, - { status: 'accepted' }, - ]) - expect(admitted).toEqual(['first steer', 'second steer']) - - ctx.agentTeams.interrupt(lead, 'ordered-target') - target.cancel({ kind: 'parent' }) - await waitNoAgent(ctx, target.id) - }) - - it('delivers persisted mail before the later message that cold-resumes its target', async () => { - const { ctx, lead } = await setup([textResponse('target initial'), 'hang', 'hang']) - const started = await spawn(ctx, lead, 'reordered-target') - await waitNoAgent(ctx, started.member.id) - const earlier: TeamMessageSnapshot = { - id: TeamMessageId('earlier-message'), - senderId: lead.id, - senderName: 'lead', - targetId: started.member.id, - content: content('earlier steer'), + const first = ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('first'), signal: SIGNAL }) + try { + await entered.promise + const second = await ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('second'), signal: SIGNAL }) + expect(admitted).toEqual(['first', 'second']) + expect(target.inbox.nextStep.some(message => message.id === second.messageId)).toBe(true) + expect(durable(lead).pendingMessages).toEqual([]) + } finally { + release.resolve(undefined) + await first } - lead.session.append('team/message/queued', { - version: 2, - teamId: TeamId(lead.id), - message: earlier, - }) - await ctx.sessions.flush(lead.session) - - const later = await ctx.agentTeams.sendMessage(lead, { - target: 'reordered-target', content: content('later steer'), signal: SIGNAL, - }) - expect(later.status).toBe('accepted') - const target = await waitRunning(ctx, started.member.id) - await vi.waitFor(() => { - const accepted = target.session.snapshotEvents().flatMap(event => event.type === 'agent/inbox/spliced' - ? event.data.inserted.flatMap(message => message.source.kind === 'team-message' - ? [message.source.messageId] - : []) - : []) - expect(accepted).toEqual([earlier.id, later.messageId]) - }) - - ctx.agentTeams.interrupt(lead, 'reordered-target') - target.cancel({ kind: 'parent' }) - await waitNoAgent(ctx, target.id) }) - it('deduplicates live target history and contains inspection and delivery failures', async () => { - const { ctx, lead } = await setup(['hang', textResponse('inactive target initial')]) - const liveStarted = await spawn(ctx, lead, 'live-target') - const live = await waitRunning(ctx, liveStarted.member.id) - const internal = teamInternals(ctx).mailbox - const message: TeamMessageSnapshot = { - id: TeamMessageId('live-recorded-message'), - senderId: lead.id, - senderName: 'lead', - targetId: live.id, - content: content('already in live history'), - } - lead.session.append('team/message/queued', { - version: 2, teamId: TeamId(lead.id), message, - }) - await ctx.sessions.flush(lead.session) - live.session.append('user/message', createUserMessage({ - content: content('different Team message first'), - source: { - kind: 'team-message', - teamId: TeamId(lead.id), - messageId: TeamMessageId('other-message'), - senderId: lead.id, - senderName: 'lead', - }, - }), { surfaceOp: 'append' }) - live.session.append('user/message', createUserMessage({ - content: content('already in live history'), - source: { - kind: 'team-message', - teamId: TeamId(lead.id), - messageId: message.id, - senderId: lead.id, - senderName: 'lead', - }, - }), { surfaceOp: 'append' }) - await expect(internal.tryDispatch(lead, message, SIGNAL)).resolves.toBe(true) - await internal.markDelivered(lead, message.id, live.id) - await expect(internal.tryDispatch(lead, message, SIGNAL)).resolves.toBe(true) - - const wrongTarget: TeamMessageSnapshot = { - ...message, - id: TeamMessageId('wrong-target-message'), - } - lead.session.append('team/message/queued', { - version: 2, teamId: TeamId(lead.id), message: wrongTarget, - }) - await ctx.sessions.flush(lead.session) - await internal.markDelivered(lead, wrongTarget.id, SessionId('wrong-target')) - await expect(internal.serializeDispatch(wrongTarget, async () => true)).resolves.toBe(true) - const serialEntered = Promise.withResolvers() - const releaseSerial = Promise.withResolvers() - const serialFirst = internal.serializeDispatch(wrongTarget, async () => { - serialEntered.resolve(undefined) - await releaseSerial.promise - return true - }) - await serialEntered.promise - const serialSecond = internal.serializeDispatch({ - ...wrongTarget, id: TeamMessageId('second-serialized-message'), - }, async () => true) - releaseSerial.resolve(undefined) - await expect(Promise.all([serialFirst, serialSecond])).resolves.toEqual([true, true]) - - const warnings: string[] = [] - ctx.logger.warn = ((value: unknown) => { warnings.push(String(value)) }) as typeof ctx.logger.warn - const failedAck = vi.spyOn(ctx.sessions, 'flush').mockRejectedValueOnce(new Error('acknowledgement flush failed')) - live.session.append('user/message', createUserMessage({ - content: content('acknowledgement failure'), - source: { - kind: 'team-message', - teamId: TeamId(lead.id), - messageId: wrongTarget.id, - senderId: lead.id, - senderName: 'lead', - }, - }), { surfaceOp: 'append' }) - await vi.waitFor(() => { - expect(warnings.some(warning => warning.includes('acknowledgement flush failed'))).toBe(true) - }) - failedAck.mockRestore() - - const inactiveStarted = await spawn(ctx, lead, 'inactive-target') - await waitNoAgent(ctx, inactiveStarted.member.id) - const openRead = vi.spyOn(ctx.sessionPersistence, 'open').mockRejectedValueOnce(new Error('read unavailable')) - const uncertain = await ctx.agentTeams.sendMessage(lead, { - target: 'inactive-target', content: content('inspection failure'), signal: SIGNAL, - }) - expect(uncertain.status).toBe('queued') - openRead.mockRestore() - - vi.spyOn(ctx.subagents as unknown as HostPromptDeliverer, deliverSubagentPrompt) - .mockRejectedValueOnce(new Error('delivery unavailable')) - const failed = await ctx.agentTeams.sendMessage(lead, { - target: 'inactive-target', content: content('delivery failure'), signal: SIGNAL, - }) - expect(failed.status).toBe('queued') - expect(warnings.some(warning => warning.includes('read unavailable'))).toBe(true) - expect(warnings.some(warning => warning.includes('delivery unavailable'))).toBe(true) - - ctx.agentTeams.interrupt(lead, 'live-target') - await waitNoAgent(ctx, live.id) + it('rejects failed attempts without retained intent or activity and supports a later explicit attempt', async () => { + const { ctx, lead } = await setup(['hang']) + const target = await waitRunning(ctx, (await spawn(ctx, lead, 'target')).member.id) + const failure = new Error('delivery unavailable') + const delivery = vi.spyOn(hostDeliverer(ctx), deliverSubagentPrompt).mockRejectedValueOnce(failure) + const waiting = ctx.agentTeams.waitForChange(lead, 10_000, SIGNAL) + let changed = false + void waiting.then(() => { changed = true }) + await expect(ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('first'), signal: SIGNAL })).rejects.toBe(failure) + expect(changed).toBe(false) + expect(durable(lead).pendingMessages).toEqual([]) + delivery.mockRestore() + const receipt = await ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('second'), signal: SIGNAL }) + await expect(waiting).resolves.toEqual({ timedOut: false }) + expect(target.inbox.nextStep.map(message => message.id)).toContain(receipt.messageId) + expect(target.inbox.nextStep.flatMap(message => message.content)).not.toContainEqual({ type: 'text', text: 'first' }) }) - it('cold-resumes an inactive sibling with sender attribution', async () => { - const { ctx, lead } = await setup(['hang', 'hang']) - const alphaStarted = await spawn(ctx, lead, 'alpha') - const alpha = await waitRunning(ctx, alphaStarted.member.id) - const betaStarted = await spawn(ctx, lead, 'beta') - const beta = await waitRunning(ctx, betaStarted.member.id) - ctx.agentTeams.interrupt(lead, 'beta') - await waitNoAgent(ctx, beta.id) - - const first = await ctx.agentTeams.sendMessage(alpha, { - target: 'beta', content: content('first update'), signal: SIGNAL, - }) - expect(first.status).toBe('accepted') - await waitNoAgent(ctx, betaStarted.member.id) - await vi.waitFor(() => { expect(durable(lead).pendingMessages).toEqual([]) }) - - const stored = await storedEvents(ctx, betaStarted.member.id) - const peerMessages = stored.filter(event => event.type === 'user/message' - && event.data.source.kind === 'team-message') - expect(peerMessages.map((event) => { - if (event.type !== 'user/message') return undefined - const block = event.data.content.at(-1) - return block?.type === 'text' ? block.text : undefined - })).toEqual(['first update']) - expect(peerMessages.map(event => event.type === 'user/message' - ? event.data.content[0]?.type === 'text' && event.data.content[0].text - : undefined)).toEqual([ - expect.stringMatching(/^Team message .* from alpha:$/u), - ]) - expect(peerMessages.map(event => event.type === 'user/message' && event.data.source.kind === 'team-message' - ? [event.data.source.messageId, event.data.source.senderName] - : undefined)).toEqual([ - [first.messageId, 'alpha'], - ]) - - ctx.agentTeams.interrupt(lead, 'alpha') - await waitNoAgent(ctx, alpha.id) - }) - - it('enforces message byte and pending-count limits without encouraging retry after enqueue', async () => { - const { ctx, lead } = await setup([textResponse('idle')], { - maxMessageBytes: 256, - maxPendingMessagesPerMember: 1, - }) + it('cancels an ongoing send without retaining intent and leaves the service usable', async () => { + const { ctx, lead } = await setup([textResponse('done')]) const target = await spawn(ctx, lead, 'target') await waitNoAgent(ctx, target.member.id) - await expect(ctx.agentTeams.sendMessage(lead, { - target: 'target', content: content('x'.repeat(300)), signal: SIGNAL, - })).rejects.toMatchObject({ code: 'TEAM_MESSAGE_TOO_LARGE' }) - vi.spyOn(ctx.sessionPersistence, 'open').mockRejectedValueOnce(new Error('temporary read failure')) - const queued = await ctx.agentTeams.sendMessage(lead, { - target: 'target', content: content('one'), signal: SIGNAL, - }) - expect(queued.status).toBe('queued') - await expect(ctx.agentTeams.sendMessage(lead, { - target: 'target', content: content('two'), signal: SIGNAL, - })).rejects.toMatchObject({ code: 'TEAM_MAILBOX_FULL' }) - await expect(ctx.agentTeams.sendMessage(lead, { - target: 'lead', content: content('self'), signal: SIGNAL, - })).rejects.toMatchObject({ code: 'TEAM_SELF_MESSAGE' }) - await expect(ctx.agentTeams.sendMessage(lead, { - target: 'missing', content: content('unknown target'), signal: SIGNAL, - })).rejects.toMatchObject({ code: 'TEAM_MEMBER_NOT_FOUND' }) + const entered = Promise.withResolvers() + const cancellation = new Error('caller cancelled') + const delivery = vi.spyOn(hostDeliverer(ctx), deliverSubagentPrompt) + .mockImplementation(async (_parent, _id, _content, _source, signal) => { + entered.resolve(undefined) + return await new Promise((_resolve, reject) => { + signal.addEventListener('abort', () => { + const reason: unknown = signal.reason + reject(reason instanceof Error ? reason : new Error(String(reason))) + }, { once: true }) + }) + }) const controller = new AbortController() - controller.abort(new TeamError('cancelled before queue', 'TEST_CANCELLED')) - await expect(ctx.agentTeams.sendMessage(lead, { - target: 'target', content: content('cancelled'), signal: controller.signal, - })).rejects.toMatchObject({ code: 'TEST_CANCELLED' }) + const sending = ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('cancelled'), signal: controller.signal }) + const rejected = expect(sending).rejects.toBe(cancellation) + await entered.promise + controller.abort(cancellation) + await rejected + delivery.mockRestore() + expect(durable(lead).pendingMessages).toEqual([]) + await ctx.agentTeams.createTask(lead, { subject: 'still usable', description: 'after send cancellation' }) + }) + + it('serializes task commits while direct sends use the independent inbox owner', async () => { + const { ctx, lead } = await setup(['hang']) + const target = await waitRunning(ctx, (await spawn(ctx, lead, 'target')).member.id) + const entered = Promise.withResolvers() + const release = Promise.withResolvers() + const flush = ctx.sessions.flush.bind(ctx.sessions) + vi.spyOn(ctx.sessions, 'flush').mockImplementationOnce(async (session) => { + entered.resolve(undefined) + await release.promise + return await flush(session) + }) + const first = ctx.agentTeams.createTask(lead, { subject: 'first', description: 'first' }) + await entered.promise + const second = ctx.agentTeams.createTask(lead, { subject: 'second', description: 'second' }) + try { + const receipt = await ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('independent'), signal: SIGNAL }) + expect(target.inbox.nextStep.some(message => message.id === receipt.messageId)).toBe(true) + } finally { + release.resolve(undefined) + await Promise.all([first, second]) + } + expect(ctx.agentTeams.listTasks(lead).map(task => task.subject)).toEqual(['first', 'second']) + }) + + it('enforces complete UTF-8 byte limits, exact caller authority, target membership and pre-acceptance cancellation', async () => { + const blocks = [{ type: 'text', text: 'Team message from lead:' }, ...content('中文')] + const { ctx, lead } = await setup(['hang'], { maxMessageBytes: Buffer.byteLength(JSON.stringify(blocks)) }) + const target = await waitRunning(ctx, (await spawn(ctx, lead, 'target')).member.id) + await ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('中文'), signal: SIGNAL }) + await expect(ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('中文x'), signal: SIGNAL })) + .rejects.toMatchObject({ code: 'TEAM_MESSAGE_TOO_LARGE' }) + await expect(ctx.agentTeams.sendMessage({ ...lead }, { target: 'target', content: content('x'), signal: SIGNAL })) + .rejects.toMatchObject({ code: 'TEAM_NOT_MEMBER' }) + await expect(ctx.agentTeams.sendMessage(target, { target: 'target', content: content('x'), signal: SIGNAL })) + .rejects.toMatchObject({ code: 'TEAM_SELF_MESSAGE' }) + await expect(ctx.agentTeams.sendMessage(lead, { target: 'missing', content: content('x'), signal: SIGNAL })) + .rejects.toMatchObject({ code: 'TEAM_MEMBER_NOT_FOUND' }) + const cancellation = new Error('cancel before acceptance') + await expect(ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('x'), signal: AbortSignal.abort(cancellation) })) + .rejects.toBe(cancellation) }) it('interrupts only the current turn and retains an already accepted follow-up', async () => { @@ -1339,11 +1146,9 @@ describe('Team mailbox and waiting', () => { const followup = await ctx.agentTeams.sendMessage(lead, { target: 'worker', content: content('retained follow-up'), signal: SIGNAL, }) - expect(followup.status).toBe('accepted') expect(ctx.agentTeams.interrupt(lead, 'worker')).toEqual({ previousStatus: 'running' }) await vi.waitFor(() => { expect(worker.status).toBe('idle') }) - expect(worker.inbox.nextStep.some(message => message.source.kind === 'team-message' - && message.source.messageId === followup.messageId)).toBe(true) + expect(worker.inbox.nextStep.some(message => message.id === followup.messageId)).toBe(true) worker.cancel({ kind: 'parent' }) await waitNoAgent(ctx, worker.id) }) @@ -1454,7 +1259,7 @@ describe('Team mailbox and waiting', () => { await entered.promise const disposal = teamFiber.dispose() - await Promise.resolve() + await Promise.resolve(undefined) await expect(service.waitForChange(lead, 3_600_000, SIGNAL)).resolves.toEqual({ timedOut: false }) await expect(service.spawnTeammate(lead, { name: 'late-worker', @@ -1553,7 +1358,7 @@ describe('Team mailbox and waiting', () => { const entered = Promise.withResolvers() const aborted = Promise.withResolvers() const release = Promise.withResolvers() - vi.spyOn(ctx.subagents as unknown as HostPromptDeliverer, deliverSubagentPrompt) + vi.spyOn(hostDeliverer(ctx), deliverSubagentPrompt) .mockImplementation(async (_parent, _childId, _content, _source, signal) => { entered.resolve(undefined) return await new Promise((_resolve, reject) => { @@ -1577,70 +1382,16 @@ describe('Team mailbox and waiting', () => { let disposed = false const disposal = internal.disposeRuntime().then(() => { disposed = true }) await aborted.promise - await Promise.resolve() + await Promise.resolve(undefined) expect(disposed).toBe(false) release.resolve(undefined) - await expect(sending).resolves.toMatchObject({ status: 'queued' }) + await expect(sending).rejects.toMatchObject({ code: 'TEAM_DISPOSED' }) await disposal expect(disposed).toBe(true) expect(ctx.agents.get(started.member.id)).toBeUndefined() }) - it('awaits an admitted asynchronous acknowledgement before disposal completes', async () => { - const { ctx, lead } = await setup([]) - const message: TeamMessageSnapshot = { - id: TeamMessageId('dispose-ack-message'), - senderId: SessionId('sender'), - senderName: 'sender', - targetId: lead.id, - content: content('acknowledge before disposal'), - } - lead.session.append('team/message/queued', { - version: 2, - teamId: TeamId(lead.id), - message, - }) - await ctx.sessions.flush(lead.session) - - const entered = Promise.withResolvers() - const release = Promise.withResolvers() - const flush = ctx.sessions.flush.bind(ctx.sessions) - let blockReceipt = true - const flushSpy = vi.spyOn(ctx.sessions, 'flush').mockImplementation(async (session) => { - if (blockReceipt && session === lead.session) { - blockReceipt = false - entered.resolve(undefined) - await release.promise - } - return flush(session) - }) - lead.session.append('user/message', createUserMessage({ - content: content('acknowledge before disposal'), - source: { - kind: 'team-message', - teamId: TeamId(lead.id), - messageId: message.id, - senderId: message.senderId, - senderName: message.senderName, - }, - }), { surfaceOp: 'append' }) - - const internal = ctx.agentTeams as unknown as { disposeRuntime(): Promise } - let disposed = false - const disposal = internal.disposeRuntime().then(() => { disposed = true }) - await entered.promise - await Promise.resolve() - const disposedBeforeRelease = disposed - release.resolve(undefined) - await disposal - - expect(disposedBeforeRelease).toBe(false) - expect(disposed).toBe(true) - expect(durable(lead).pendingMessages).toEqual([]) - flushSpy.mockRestore() - }) - it('bounds Team runtime disposal when a continuation drain never settles', { timeout: 30_000 }, async () => { const { ctx, lead, teamFiber } = await setup(['hang'], { disposalTimeoutMs: 25 }) const started = await spawn(ctx, lead, 'stuck-worker') @@ -1674,13 +1425,7 @@ describe('Team mailbox and waiting', () => { await expect(ctx.agentTeams.sendMessage(lead, { target: 'nobody', content: content('must reject'), signal: SIGNAL, })).rejects.toMatchObject({ code: 'TEAM_DISPOSED' }) - await expect(internal.mailbox.tryDispatch(lead, { - id: TeamMessageId('post-disposal-message'), - senderId: lead.id, - senderName: 'lead', - targetId: lead.id, - content: content('must not dispatch'), - }, SIGNAL)).resolves.toBe(false) + }) it('contains recovery callback failures and ignores work scheduled after disposal', async () => { @@ -1690,8 +1435,8 @@ describe('Team mailbox and waiting', () => { const internal = teamInternals(ctx) internal.recoverFor = async () => { throw new Error('forced recovery failure') } internal.scheduleRecovery(lead) - await Promise.resolve() - await Promise.resolve() + await Promise.resolve(undefined) + await Promise.resolve(undefined) expect(warnings.some(warning => warning.includes('forced recovery failure'))).toBe(true) lead.session.append('user/message', createUserMessage({ @@ -1704,7 +1449,7 @@ describe('Team mailbox and waiting', () => { senderName: 'absent', }, }), { surfaceOp: 'append' }) - await Promise.resolve() + await Promise.resolve(undefined) const entered = Promise.withResolvers() const release = Promise.withResolvers() @@ -1717,10 +1462,10 @@ describe('Team mailbox and waiting', () => { await entered.promise await teamFiber.dispose() release.resolve(undefined) - await Promise.resolve() - await Promise.resolve() + await Promise.resolve(undefined) + await Promise.resolve(undefined) internal.scheduleRecovery(lead) - await Promise.resolve() + await Promise.resolve(undefined) }) it('reports contained teardown failures without retaining the Team service', async () => { diff --git a/packages/experimental/tool-agent-team/README.i18n.yaml b/packages/experimental/tool-agent-team/README.i18n.yaml index 1eaa7bd4c0..42e5dca531 100644 --- a/packages/experimental/tool-agent-team/README.i18n.yaml +++ b/packages/experimental/tool-agent-team/README.i18n.yaml @@ -54,8 +54,8 @@ en: 8e1e365ff3b0dfb2 zh: c6c91fbf1e1df934 /deepseek-ai-dsh-experimental-tool-agent-team/model-experience/team-policy-and-tools/what-the-model-sees: - en: 17ed13a2c408baa9 - zh: 4bc24f3de8155eb3 + en: 601ef7bfff117b60 + zh: 50435d70524c12e2 /deepseek-ai-dsh-experimental-tool-agent-team/model-experience/team-policy-and-tools/token-effect: en: fe314af98a2130b8 zh: ea89cb40dd11d57c diff --git a/packages/experimental/tool-agent-team/README.md b/packages/experimental/tool-agent-team/README.md index 0918686d28..9f706fa6a5 100644 --- a/packages/experimental/tool-agent-team/README.md +++ b/packages/experimental/tool-agent-team/README.md @@ -125,7 +125,7 @@ Read these pages when the package-level contract is not enough. They move from t #### What the model sees -One shared system policy states the explicit-delegation requirement, shared-cwd behavior, filesystem stale-version recovery, Bash/formatter/codegen risk, task and write-scope coordination, Steer delivery, the no-retry mailbox rule, and the Lead's duty to wait before answering. All nine Team schemas are identical for Leads and teammates; execution enforces Lead-only operations. `spawn_teammate` prefixes its initial user message with `\nYou are teammate "".\nYour Team Lead is named "lead".\nUse list_agents({}) to find your teammates and their names.\nTo message your Team Lead, use send_message({ target: "lead", message: "..." }).\nTo message another teammate, use send_message({ target: "", message: "..." }).\n`, followed by a blank line and the task. The prefix contains no Team id and works when runtime context is disabled. Forks inherit history without an additional Lead identity message. +One shared system policy covers explicit delegation, shared-cwd safety, task coordination, Steer delivery, inbox acceptance, and the Lead’s duty to wait. All nine schemas are identical for Leads and teammates; execution enforces Lead-only operations. `spawn_teammate` prefixes the initial task with a user-role reminder of the teammate name, Lead name, and messaging tools. The reminder follows ordinary history through recovery and compaction. #### Token effect diff --git a/packages/experimental/tool-agent-team/README.zh.md b/packages/experimental/tool-agent-team/README.zh.md index 8243f8471a..819d69d357 100644 --- a/packages/experimental/tool-agent-team/README.zh.md +++ b/packages/experimental/tool-agent-team/README.zh.md @@ -125,7 +125,7 @@ member scope 上的一个 `team:policy` 段落说明共享的协作规则;固 #### 模型看到什么 -一段共享 system 策略会说明显式 delegation 要求、共享 cwd 行为、文件陈旧版本恢复、Bash/formatter/codegen 风险、task/write-scope 协调、Steer 投递、mailbox 不重试规则,以及 Lead 必须在回答前等待。Lead 与 teammate 的全部九个 Team schema 相同;执行时检查仅限 Lead 的操作权限。`spawn_teammate` 在初始 user 消息前加上 `\nYou are teammate "".\nYour Team Lead is named "lead".\nUse list_agents({}) to find your teammates and their names.\nTo message your Team Lead, use send_message({ target: "lead", message: "..." }).\nTo message another teammate, use send_message({ target: "", message: "..." }).\n`,接着是一个空行和任务。该前缀不含 Team id,禁用运行时上下文时也能生效。fork 继承历史,不额外添加 Lead 身份消息。 +共享系统 policy 覆盖显式委派、共享 cwd 安全、任务协调、Steer 投递、inbox 接收和 Lead 等待责任。Lead 与 teammate 使用相同的九个 schema;执行时落实 Lead-only 操作。`spawn_teammate` 在初始任务前加入用户角色提醒,说明 teammate 名称、Lead 名称与消息工具。提醒随普通历史经历恢复与压缩。 #### Token 影响 diff --git a/packages/experimental/tool-agent-team/src/index.ts b/packages/experimental/tool-agent-team/src/index.ts index 75dee88c70..598c6d45d2 100644 --- a/packages/experimental/tool-agent-team/src/index.ts +++ b/packages/experimental/tool-agent-team/src/index.ts @@ -34,7 +34,7 @@ The Team Lead and all teammates share the same working directory and filesystem. Prefer read/edit/write for file changes. If a file operation returns FS_STALE_VERSION, read the current file, rebase your intended change onto the new content, and retry. Bash, formatters, code generators, and scripts are not fully protected by the filesystem version guard; coordinate them explicitly and have the Lead review the final diff and run tests. -Use the target returned by spawn_teammate or list_agents for send_message and interrupt_agent, or as owner when assigning or filtering shared tasks. send_message steers a running target at its nearest step boundary and starts or resumes an inactive target. inactive means no turn is executing; it does not describe task completion, success, failure, or waiting for other agents. provisioning means member creation is in progress; failed means member creation failed. A delivered peer item starts with its stable message id and sender name. A successful send is already durable even when its result says queued; do not resend it. Shared-task workflow is list, get, claim with the current revision, perform the work, then complete. Task readiness never starts an owner. Before wait_agent, use list_agents and make sure another required member is running or provisioning; use send_message first when the required member is inactive. wait_agent observes only changes after that call starts, never wakes a member, and returns noProgress immediately when no other member can produce a change. Re-list after wakeup or timeout. The Lead must wait for required teammates before giving the final answer.` +Use the target returned by spawn_teammate or list_agents for send_message and interrupt_agent, or as owner when assigning or filtering shared tasks. send_message steers a running target at its nearest step boundary and starts or resumes an inactive target. inactive means no turn is executing; it does not describe task completion, success, failure, or waiting for other agents. provisioning means member creation is in progress; failed means member creation failed. A peer message starts with its sender name. A successful send returns the accepted message id; it does not mean the recipient has processed it. Shared-task workflow is list, get, claim with the current revision, perform the work, then complete. Task readiness never starts an owner. Before wait_agent, use list_agents and make sure another required member is running or provisioning; use send_message first when the required member is inactive. wait_agent observes only changes after that call starts, never wakes a member, and returns noProgress immediately when no other member can produce a change. Re-list after wakeup or timeout. The Lead must wait for required teammates before giving the final answer.` const ACTIVE_WAIT_STATUSES: ReadonlySet = new Set(['running', 'provisioning']) const NO_ACTIVE_PEER_MESSAGE = 'No other Team member is running or provisioning. wait_agent cannot make progress or wake inactive teammates. Re-list with list_agents and team_task_list, then use send_message to wake each required inactive teammate before waiting again.' @@ -98,7 +98,6 @@ const SEND_VALUE_SCHEMA = { additionalProperties: false, properties: { messageId: { type: 'string', required: true }, - status: { type: 'string', required: true, enum: ['accepted', 'queued'] }, }, } as const @@ -214,7 +213,7 @@ To message another teammate, use send_message({ target: "", messa register(scoped.tools.register(defineTool({ name: 'send_message', - description: 'Send one durable message to another Team member. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn.', + description: 'Send one message to another Team member and return its accepted message id. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn.', parameters: { target: { type: 'string', required: true, description: 'Member target returned by spawn_teammate or list_agents, including lead.' }, message: { type: 'string', required: true, description: 'Self-contained message for the target.' }, @@ -241,7 +240,7 @@ To message another teammate, use send_message({ target: "", messa register(scoped.tools.register(defineTool({ name: 'wait_agent', - description: 'Wait for the next teammate status, mailbox, or shared-task change after this call starts. This never wakes inactive members and returns noProgress immediately when no other member is running or provisioning. Re-list after wakeup or timeout instead of polling.', + description: 'Wait for the next teammate status, message, or shared-task change after this call starts. This never wakes inactive members and returns noProgress immediately when no other member is running or provisioning. Re-list after wakeup or timeout instead of polling.', parameters: { timeout_ms: { type: 'integer', diff --git a/packages/experimental/tool-agent-team/tests/tool-team.spec.ts b/packages/experimental/tool-agent-team/tests/tool-team.spec.ts index c1c98c19e2..b0a24d2c95 100644 --- a/packages/experimental/tool-agent-team/tests/tool-team.spec.ts +++ b/packages/experimental/tool-agent-team/tests/tool-team.spec.ts @@ -481,10 +481,10 @@ describe('dsh-tool-team', () => { expect(text(roster)).toBe(JSON.stringify(JSON.parse(text(roster)))) const peer = await execute(ctx, child, 'send_message', { target: 'lead', message: 'progress report' }) expect(peer.isError).toBe(false) - expect(JSON.parse(text(peer))).toMatchObject({ status: 'accepted' }) + expect(JSON.parse(text(peer))).toHaveProperty('messageId') const followup = await execute(ctx, child, 'send_message', { target: 'lead', message: 'review the report' }) expect(followup.isError).toBe(false) - expect(JSON.parse(text(followup))).toMatchObject({ status: 'accepted' }) + expect(JSON.parse(text(followup))).toHaveProperty('messageId') await lead.whenIdle() const created = await execute(ctx, lead, 'team_task_create', { @@ -693,7 +693,7 @@ describe('dsh-tool-team', () => { content: [{ type: 'text', text: 'resume with Team scope' }], signal: SIGNAL, }) - expect(receipt.status).toBe('accepted') + expect(receipt.messageId).toEqual(expect.any(String)) const resumed = await waitRunning(ctx, childId) expect((await assembly(ctx, resumed)).tools.map(schema => schema.name) .filter(name => TOOL_NAMES.includes(name)).sort()).toEqual(TOOL_NAMES) diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index c1cf57a74f..04ea8d1140 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -336,9 +336,9 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ }, { signature: 'async sendMessage(caller: Agent, request: SendTeamMessageRequest): Promise', - description: 'Queue one durable peer message, then attempt immediate delivery.', - parameters: [{ name: 'caller', description: 'exact live sending Team member.' }, { name: 'request', description: 'target name, content, and pre-queue cancellation.' }], - returns: 'durable message identity and immediate-delivery observation.', + description: 'Steer one peer message into the target inbox or reject the attempt.', + parameters: [{ name: 'caller', description: 'exact live sending Team member.' }, { name: 'request', description: 'target name, content, and cancellation before acceptance.' }], + returns: 'accepted inbox identity; acceptance follows normal Agent persistence and does not await model processing.', }, { signature: 'async createTask(caller: Agent, request: CreateTeamTaskRequest): Promise', @@ -6346,7 +6346,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SendTeamMessageResult', - declaration: 'export interface SendTeamMessageResult {\n readonly messageId: TeamMessageId;\n readonly status: \'accepted\' | \'queued\';\n}', + declaration: 'export interface SendTeamMessageResult {\n readonly messageId: MessageId;\n}', }, { name: 'ServerResponse', @@ -7356,10 +7356,6 @@ export const TYPE_API: readonly TypeApiEntry[] = [ name: 'TeamMemberView', declaration: 'export interface TeamMemberView {\n readonly id: SessionId;\n readonly name: string;\n readonly role: \'lead\' | \'teammate\';\n readonly status: \'running\' | \'inactive\' | \'provisioning\' | \'failed\';\n readonly description?: string;\n readonly provider?: string;\n readonly context?: \'fresh\' | \'fork\';\n readonly model?: string;\n readonly diagnostics: string[];\n}', }, - { - name: 'TeamMessageId', - declaration: 'export type TeamMessageId = Branded<\'TeamMessageId\'>;', - }, { name: 'TeamTaskAction', declaration: 'export type TeamTaskAction = \'claim\' | \'release\' | \'edit\' | \'set_dependencies\' | \'complete\' | \'reopen\' | \'reassign\' | \'delete\';', diff --git a/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md b/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md index 5fbb7dfa56..3b85740c8a 100644 --- a/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md +++ b/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md @@ -176,7 +176,7 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo | Package | Config | Description | |---|---|---| -| `@deepseek-ai/dsh-experimental-agent-team` | yes | Implicit-root Agent Teams roster, durable peer mailbox, and shared task DAG | +| `@deepseek-ai/dsh-experimental-agent-team` | yes | Implicit-root Agent Teams roster, direct peer messaging, and shared task DAG | | `@deepseek-ai/dsh-experimental-api-speech-to-text` | yes | Authenticated experimental speech transcription for browser clients | | `@deepseek-ai/dsh-experimental-auto-review` | no | Per-tool LLM authorization review for the DeepSeek Harness Auto permission preset | | `@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp` | yes | Experimental per-Session Chromium browser tools through chrome-devtools-mcp | diff --git a/packages/subagent/subagent/src/continuation-messages.ts b/packages/subagent/subagent/src/continuation-messages.ts index bea8ed439b..d8c02519ee 100644 --- a/packages/subagent/subagent/src/continuation-messages.ts +++ b/packages/subagent/subagent/src/continuation-messages.ts @@ -11,7 +11,7 @@ import type { SessionId } from '@deepseek-ai/dsh-session' import type { ActivationTerminal } from './lifecycle.ts' import type { SubagentResult } from './types.ts' -/** Durable attribution for one model-authored message between adjacent Agents. */ +/** Durable attribution for one model-authored message between Agents. */ export interface AgentMessageSource { readonly kind: 'agent-message' /** A message another agent addressed to this one (`relay` context form). */ diff --git a/scripts/no-unknown-casts.baseline.json b/scripts/no-unknown-casts.baseline.json index 761358a17e..922decc786 100644 --- a/scripts/no-unknown-casts.baseline.json +++ b/scripts/no-unknown-casts.baseline.json @@ -1089,8 +1089,8 @@ "d8076a64f8d940fb0a5c3df15e9e1c8fb7ac05e84762a6198dbbfcffcf379821": 1 }, "packages/experimental/agent-team/tests/team.spec.ts": { - "3ae979a4364fe22772c89133e79ea216cdb4f3163c7cb02c47eb1a5d4788e661": 4, - "ae5776af8c1e9965a4eca94bcbc07b65da8d2e9e24e4570d2141b34d60b4f90f": 3 + "3ae979a4364fe22772c89133e79ea216cdb4f3163c7cb02c47eb1a5d4788e661": 3, + "ae5776af8c1e9965a4eca94bcbc07b65da8d2e9e24e4570d2141b34d60b4f90f": 1 }, "packages/experimental/auto-review/tests/auto-review.spec.ts": { "5bb6193769cfbb9fc09abd705fed714917784de269546fde14ac1171fb00644b": 1 diff --git a/snapshots/session/team-targets/session.v4.jsonl b/snapshots/session/team-targets/session.v4.jsonl new file mode 100644 index 0000000000..0d0087d95a --- /dev/null +++ b/snapshots/session/team-targets/session.v4.jsonl @@ -0,0 +1,27 @@ +{"type":"session","version":4,"id":"{{session:1}}","createdAt":1783951000000,"cwd":"{{cwd}}","isSeeded":false,"delegationDepth":0} +{"type":"permission/preset","data":{"preset":"danger-full-access"}} +{"type":"sandbox/mode","data":{"mode":"danger-full-access"}} +{"type":"approval/policy","data":{"policy":"never"}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Use Agent Teams list_agents to inspect the roster, attempt to send yourself a message and observe its rejection, then reply TEAM_TARGETS_OK."}],"source":{"kind":"user"},"role":"user","id":"{{message:1}}"}]}} +{"type":"turn/start","data":{"turn":1}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} +{"type":"step/start","data":{"turn":1,"step":1}} +{"type":"system/message","data":{"turn":1,"step":1,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"system-prompt"},"id":"{{message:2}}"}},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"Use Agent Teams list_agents to inspect the roster, attempt to send yourself a message and observe its rejection, then reply TEAM_TARGETS_OK."}],"source":{"kind":"user"},"role":"user","id":"{{message:1}}"},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations.\n\nApproval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)."}],"source":{"kind":"runtime-context","form":"snapshot","sections":[{"name":"sandbox:policy","text":"Current DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations."},{"name":"approval:policy","text":"Approval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)."}]},"role":"user","id":"{{message:3}}"},"surfaceOp":"append"} +{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} +{"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} +{"type":"session/title","data":{"title":"Use Agent Teams list_agents to","messageSeqs":[8],"source":{"kind":"fallback"}}} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"team-list-1","name":"list_agents","arguments":"{}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1788778145981,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1788778145981,"index":0,"dt":[],"id":"team-list-1","name":"list_agents","args":["{}"]},{"type":"chunk","time":1788778145981,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"team-list-1","name":"list_agents","arguments":"{}"}}},{"type":"chunk","time":1788778145981,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1788778145981,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"tool/call","data":{"turn":1,"step":1,"callId":"team-list-1","name":"list_agents","arguments":"{}"}} +{"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"team-list-1"},"toolCallId":"team-list-1","content":[{"type":"text","text":"[{\"target\":\"lead\",\"role\":\"lead\",\"status\":\"running\",\"model\":\"deepseek-v4-flash\",\"diagnostics\":[]}]"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":1}} +{"type":"step/start","data":{"turn":1,"step":2}} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"team-list-2","name":"send_message","arguments":"{\"target\":\"lead\",\"message\":\"self delivery must fail\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1788778146017,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1788778146017,"index":0,"dt":[],"id":"team-list-2","name":"send_message","args":["{\"target\":\"lead\",\"message\":\"self delivery must fail\"}"]},{"type":"chunk","time":1788778146017,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"team-list-2","name":"send_message","arguments":"{\"target\":\"lead\",\"message\":\"self delivery must fail\"}"}}},{"type":"chunk","time":1788778146017,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1788778146017,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"tool/call","data":{"turn":1,"step":2,"callId":"team-list-2","name":"send_message","arguments":"{\"target\":\"lead\",\"message\":\"self delivery must fail\"}"}} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"team-list-2"},"toolCallId":"team-list-2","content":[{"type":"text","text":"Error: a Team member cannot message itself"}],"isError":true,"id":"{{message:7}}"},"error":{"name":"TeamError","code":"TEAM_SELF_MESSAGE"}},"sourceEventSeqs":[19],"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":2}} +{"type":"step/start","data":{"turn":1,"step":3}} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"text","text":"TEAM_TARGETS_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1788778146037,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1788778146037,"index":0,"dt":[],"texts":["TEAM_TARGETS_OK"]},{"type":"chunk","time":1788778146037,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"TEAM_TARGETS_OK"}}},{"type":"chunk","time":1788778146037,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1788778146037,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":3}} +{"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/team-targets/system-prompt.expected.md b/snapshots/session/team-targets/system-prompt.expected.md index 2bfafa38fe..9e7434c817 100644 --- a/snapshots/session/team-targets/system-prompt.expected.md +++ b/snapshots/session/team-targets/system-prompt.expected.md @@ -11,7 +11,7 @@ The Team Lead and all teammates share the same working directory and filesystem. Prefer read/edit/write for file changes. If a file operation returns FS_STALE_VERSION, read the current file, rebase your intended change onto the new content, and retry. Bash, formatters, code generators, and scripts are not fully protected by the filesystem version guard; coordinate them explicitly and have the Lead review the final diff and run tests. -Use the target returned by spawn_teammate or list_agents for send_message and interrupt_agent, or as owner when assigning or filtering shared tasks. send_message steers a running target at its nearest step boundary and starts or resumes an inactive target. inactive means no turn is executing; it does not describe task completion, success, failure, or waiting for other agents. provisioning means member creation is in progress; failed means member creation failed. A delivered peer item starts with its stable message id and sender name. A successful send is already durable even when its result says queued; do not resend it. Shared-task workflow is list, get, claim with the current revision, perform the work, then complete. Task readiness never starts an owner. Before wait_agent, use list_agents and make sure another required member is running or provisioning; use send_message first when the required member is inactive. wait_agent observes only changes after that call starts, never wakes a member, and returns noProgress immediately when no other member can produce a change. Re-list after wakeup or timeout. The Lead must wait for required teammates before giving the final answer. +Use the target returned by spawn_teammate or list_agents for send_message and interrupt_agent, or as owner when assigning or filtering shared tasks. send_message steers a running target at its nearest step boundary and starts or resumes an inactive target. inactive means no turn is executing; it does not describe task completion, success, failure, or waiting for other agents. provisioning means member creation is in progress; failed means member creation failed. A peer message starts with its sender name. A successful send returns the accepted message id; it does not mean the recipient has processed it. Shared-task workflow is list, get, claim with the current revision, perform the work, then complete. Task readiness never starts an owner. Before wait_agent, use list_agents and make sure another required member is running or provisioning; use send_message first when the required member is inactive. wait_agent observes only changes after that call starts, never wakes a member, and returns noProgress immediately when no other member can produce a change. Re-list after wakeup or timeout. The Lead must wait for required teammates before giving the final answer. Check the [exit code: N] marker on every bash result; investigate failures before moving on. diff --git a/snapshots/session/team-targets/tool-schemas.expected.json b/snapshots/session/team-targets/tool-schemas.expected.json index b4f888809d..8219c91fb3 100644 --- a/snapshots/session/team-targets/tool-schemas.expected.json +++ b/snapshots/session/team-targets/tool-schemas.expected.json @@ -293,7 +293,7 @@ }, { "name": "send_message", - "description": "Send one durable message to another Team member. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn.", + "description": "Send one message to another Team member and return its accepted message id. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn.", "parameters": { "type": "object", "properties": { @@ -595,7 +595,7 @@ }, { "name": "wait_agent", - "description": "Wait for the next teammate status, mailbox, or shared-task change after this call starts. This never wakes inactive members and returns noProgress immediately when no other member is running or provisioning. Re-list after wakeup or timeout instead of polling.", + "description": "Wait for the next teammate status, message, or shared-task change after this call starts. This never wakes inactive members and returns noProgress immediately when no other member is running or provisioning. Re-list after wakeup or timeout instead of polling.", "parameters": { "type": "object", "properties": { From 8cae58aea82a8f48fdb9b302cbc8852f14a6dfd0 Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sat, 26 Sep 2026 22:35:08 +0800 Subject: [PATCH 006/155] fix(agent-team): close direct delivery review gaps --- .../2026-09-26-team-direct-inbox.i18n.yaml | 4 +- .../2026-09-26-team-direct-inbox.md | 2 +- .../2026-09-26-team-direct-inbox.zh.md | 2 +- docs/capability-seams.i18n.yaml | 4 +- docs/capability-seams.md | 2 +- docs/capability-seams.zh.md | 2 +- docs/config-catalog.md | 2 +- docs/config-catalog.zh.md | 2 +- docs/persistence-catalog.md | 4 +- docs/persistence-catalog.zh.md | 4 +- docs/subsystems/README.i18n.yaml | 4 +- docs/subsystems/README.md | 2 +- docs/subsystems/README.zh.md | 2 +- docs/tool-catalog.i18n.yaml | 4 +- docs/tool-catalog.md | 2 +- docs/tool-catalog.zh.md | 2 +- packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 2 +- packages/client/ui-chat/README.zh.md | 2 +- .../ui-chat/src/client/chat/turn-trigger.ts | 10 ++- .../tests/turn-trigger.client.spec.tsx | 26 ++++++- .../experimental/agent-team/README.i18n.yaml | 16 ++-- packages/experimental/agent-team/README.md | 10 +-- packages/experimental/agent-team/README.zh.md | 10 +-- packages/experimental/agent-team/src/index.ts | 8 +- .../agent-team/src/legacy-delivery.ts | 5 +- packages/experimental/agent-team/src/types.ts | 6 +- .../agent-team/tests/team.spec.ts | 76 +++++++++++++++++++ scripts/gen-doc-graphs.ts | 2 +- scripts/gen-tool-catalog.ts | 2 +- .../team-direct-inbox/session.1.v4.jsonl | 22 ++++++ .../team-direct-inbox/session.v4.jsonl | 40 ++++++++++ .../session/team-direct-inbox/snapshot.yml | 11 +++ .../workspace.expected/team-ready | 0 34 files changed, 239 insertions(+), 57 deletions(-) create mode 100644 snapshots/session/team-direct-inbox/session.1.v4.jsonl create mode 100644 snapshots/session/team-direct-inbox/session.v4.jsonl create mode 100644 snapshots/session/team-direct-inbox/snapshot.yml create mode 100644 snapshots/session/team-direct-inbox/workspace.expected/team-ready diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml index a9a502ff18..e9974a024b 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml @@ -15,5 +15,5 @@ en: 35323ba83e6e577a zh: 5ec0cf5f2fb04fae /agent-note-team-messages-use-the-target-inbox/consequences: - en: 162f2a2a528fc7d0 - zh: b09e90e1b21cfc3a + en: c734e4546b1d99c8 + zh: 51cb58038a5afabc diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md index a6dc2d5e4a..930f3f55e3 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md @@ -24,4 +24,4 @@ Historical pending messages retain compatibility recovery, receipt inspection, a ## Consequences -New attempts have one identity and one inbox owner. A failed attempt is visible to its caller and has no Team retry promise. Historical logs still cost decoder, projection, and recovery code; new sends do not wait for or trigger that recovery. Tests cover direct Lead/peer acceptance, cold recovery, sender attribution, failures, cancellation, disposal, and historical receipt recovery. +New attempts have one identity and one inbox owner. A failed attempt is visible to its caller and has no Team retry promise. Historical logs still cost decoder, projection, and recovery code; new sends do not directly invoke or await recovery, although cold resume triggers the target’s Agent-creation recovery hook. Tests cover direct Lead/peer acceptance, cold recovery, sender attribution, failures, cancellation, disposal, and historical receipt recovery. diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md index e75dacc73c..01f917e40d 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md @@ -24,4 +24,4 @@ Status: implemented ## 后果 -新尝试只有一个身份和一个 inbox owner。失败尝试会向调用方报告,且没有 Team 重试承诺。历史日志仍需要 decoder、投影和恢复代码;新发送既不等待也不触发该恢复。测试覆盖直接 Lead/peer 接收、冷恢复、发送者归属、失败、取消、dispose(资源释放)和历史回执恢复。 +新尝试只有一个身份和一个 inbox owner。失败尝试会向调用方报告,且没有 Team 重试承诺。历史日志仍需要 decoder、投影和恢复代码;新发送不直接调用或等待恢复,但冷恢复会触发目标的 Agent 创建恢复钩子。测试覆盖直接 Lead/peer 接收、冷恢复、发送者归属、失败、取消、dispose(资源释放)和历史回执恢复。 diff --git a/docs/capability-seams.i18n.yaml b/docs/capability-seams.i18n.yaml index 9982152e55..84cb0ff6b9 100644 --- a/docs/capability-seams.i18n.yaml +++ b/docs/capability-seams.i18n.yaml @@ -6,5 +6,5 @@ en: 41d772192075e133 zh: 5ef3da69b4de1d8a /capability-seams-and-core-services: - en: 8d7ae3eb1265031d - zh: 970ce559f5f95a65 + en: 9fc7d396f78e95c7 + zh: d06b4797d3016efc diff --git a/docs/capability-seams.md b/docs/capability-seams.md index 093c5852e5..03d74df234 100644 --- a/docs/capability-seams.md +++ b/docs/capability-seams.md @@ -650,7 +650,7 @@ flowchart LR | `ctx.compaction` | `seam` | [`compaction`](../packages/compaction/compaction) | [`compaction-basic`](../packages/compaction/compaction-basic) | [`compaction-basic`](../packages/compaction/compaction-basic) | - | The basic backend consumes post-step pressure and request-error recovery events; there is no model-facing compact tool. | | `ctx.subagents` | `seam` | [`subagent`](../packages/subagent/subagent) | [`subagent-spawn-in-process`](../packages/subagent/subagent-spawn-in-process), [`subagent-fork-in-process`](../packages/subagent/subagent-fork-in-process), [`subagent-acp`](../packages/subagent/subagent-acp), [`subagent-codex`](../packages/subagent/subagent-codex), [`subagent-claude-code`](../packages/subagent/subagent-claude-code), [`subagent-dsh-sdk`](../packages/subagent/subagent-dsh-sdk) | [`tool-subagent`](../packages/subagent/tool-subagent), [`tool-subagent-control`](../packages/subagent/tool-subagent-control), [`tool-ralph`](../packages/workflow/tool-ralph) | - | Providers implement transports; the service also owns optional Activation-based continuation orchestration, tool-subagent selects one-shot or continuable delegation, tool-subagent-control delivers follow-ups, and tool-ralph requires one fresh structured-output route. | | `ctx.speechToText` | `seam` | [`experimental-speech-to-text`](../packages/experimental/speech-to-text) | [`experimental-speech-to-text-sensevoice`](../packages/experimental/speech-to-text-sensevoice) | [`experimental-api-speech-to-text`](../packages/experimental/api-speech-to-text) | - | Routes explicit recognizers; the browser uses the authenticated Remote and keeps transcripts in the draft until submission. | -| `ctx.agentTeams` | `core` | [`experimental-agent-team`](../packages/experimental/agent-team) | - | [`experimental-tool-agent-team`](../packages/experimental/tool-agent-team) | - | Owns the implicit-root roster, durable peer mailbox, shared task DAG, and continuable-child lifecycle; tool-agent-team contributes model controls. | +| `ctx.agentTeams` | `core` | [`experimental-agent-team`](../packages/experimental/agent-team) | - | [`experimental-tool-agent-team`](../packages/experimental/tool-agent-team) | - | Owns the implicit-root roster, direct peer inbox delivery, shared task DAG, and continuable-child lifecycle; tool-agent-team contributes model controls. | | `ctx.inspector` | `core` | `inspector` | - | - | - | Owns the Worker-hosted CDP target and the transport-independent Host and Client observation and Cordis-tree query API. | | `ctx.jobs` | `seam` | [`jobs`](../packages/jobs/jobs) | [`jobs-local`](../packages/jobs/jobs-local) | [`tool-bash`](../packages/shell/tool-bash), [`tool-pwsh`](../packages/shell/tool-pwsh), [`tool-terminal`](../packages/terminal/tool-terminal), [`tool-subagent`](../packages/subagent/tool-subagent), [`tool-jobs`](../packages/jobs/tool-jobs), [`api-job-controller`](../packages/api/job-controller) | - | Producers (background bash/pwsh, PTY sends, and subagent delegations) register running work; record-declaring jobs additionally stream raw output for non-consuming observers; tool-jobs is the model-facing controller that reads, lists, and kills it; jobs-local is the process-local registry. | | `ctx.web` | `seam` | [`web`](../packages/web/web) | [`web-search-exa`](../packages/web/web-search-exa), [`web-search-perplexity`](../packages/web/web-search-perplexity), [`web-search-deepseek`](../packages/web/web-search-deepseek), [`web-fetch-http`](../packages/web/web-fetch-http) | [`tool-web`](../packages/web/tool-web) | - | Search and fetch providers register into one ctx.web seam; tool-web owns the stable model-facing names. | diff --git a/docs/capability-seams.zh.md b/docs/capability-seams.zh.md index 4e41705687..0b82198975 100644 --- a/docs/capability-seams.zh.md +++ b/docs/capability-seams.zh.md @@ -652,7 +652,7 @@ flowchart LR | `ctx.compaction` | `seam` | [`compaction`](../packages/compaction/compaction) | [`compaction-basic`](../packages/compaction/compaction-basic) | [`compaction-basic`](../packages/compaction/compaction-basic) | - | 基础后端消费步骤后的压力事件和请求错误恢复事件;不存在面向模型的压缩工具。 | | `ctx.subagents` | `seam` | [`subagent`](../packages/subagent/subagent) | [`subagent-spawn-in-process`](../packages/subagent/subagent-spawn-in-process), [`subagent-fork-in-process`](../packages/subagent/subagent-fork-in-process), [`subagent-acp`](../packages/subagent/subagent-acp), [`subagent-codex`](../packages/subagent/subagent-codex), [`subagent-claude-code`](../packages/subagent/subagent-claude-code), [`subagent-dsh-sdk`](../packages/subagent/subagent-dsh-sdk) | [`tool-subagent`](../packages/subagent/tool-subagent), [`tool-subagent-control`](../packages/subagent/tool-subagent-control), [`tool-ralph`](../packages/workflow/tool-ralph) | - | 提供方实现传输;该服务还负责可选的、基于 Activation 的延续编排,tool-subagent 选择一次性或可延续委派,tool-subagent-control 传递后续消息,而 tool-ralph 要求一条全新的结构化输出路由。 | | `ctx.speechToText` | `seam` | [`experimental-speech-to-text`](../packages/experimental/speech-to-text) | [`experimental-speech-to-text-sensevoice`](../packages/experimental/speech-to-text-sensevoice) | [`experimental-api-speech-to-text`](../packages/experimental/api-speech-to-text) | - | 路由显式选择的识别器;浏览器使用带认证的 Remote,并在提交前将转写保留在草稿中。 | -| `ctx.agentTeams` | `core` | [`experimental-agent-team`](../packages/experimental/agent-team) | - | [`experimental-tool-agent-team`](../packages/experimental/tool-agent-team) | - | 负责隐式 Root roster、持久 peer mailbox、共享任务 DAG 与 continuable child 生命周期;tool-agent-team 提供模型控制工具。 | +| `ctx.agentTeams` | `core` | [`experimental-agent-team`](../packages/experimental/agent-team) | - | [`experimental-tool-agent-team`](../packages/experimental/tool-agent-team) | - | 负责隐式 Root roster、直接 peer inbox 投递、共享任务 DAG 与 continuable child 生命周期;tool-agent-team 提供模型控制工具。 | | `ctx.inspector` | `core` | `inspector` | - | - | - | 负责 Worker 托管的 CDP target,以及独立于传输的 Host 和 Client observation 与 Cordis tree query API。 | | `ctx.jobs` | `seam` | [`jobs`](../packages/jobs/jobs) | [`jobs-local`](../packages/jobs/jobs-local) | [`tool-bash`](../packages/shell/tool-bash), [`tool-pwsh`](../packages/shell/tool-pwsh), [`tool-terminal`](../packages/terminal/tool-terminal), [`tool-subagent`](../packages/subagent/tool-subagent), [`tool-jobs`](../packages/jobs/tool-jobs), [`api-job-controller`](../packages/api/job-controller) | - | 生产方(后台 bash/pwsh、PTY 发送和 subagent 委派)登记正在运行的工作;声明 record 的 job 还为非消费观察者流式提供原始输出;tool-jobs 是面向模型的控制器,用于读取、列出和终止这些工作;jobs-local 是进程本地注册表。 | | `ctx.web` | `seam` | [`web`](../packages/web/web) | [`web-search-exa`](../packages/web/web-search-exa), [`web-search-perplexity`](../packages/web/web-search-perplexity), [`web-search-deepseek`](../packages/web/web-search-deepseek), [`web-fetch-http`](../packages/web/web-fetch-http) | [`tool-web`](../packages/web/tool-web) | - | 搜索和抓取提供方注册到同一个 ctx.web seam;tool-web 负责稳定的面向模型名称。 | diff --git a/docs/config-catalog.md b/docs/config-catalog.md index e596385c67..461ca9d39e 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -818,7 +818,7 @@ export interface Config { readonly maxTasks?: number /** Maximum UTF-8 bytes in one complete sender-framed delivery. */ readonly maxMessageBytes?: number - /** Maximum milliseconds allowed for Team-owned runtime disposal. */ + /** Maximum milliseconds for shared operation settlement and for each Team child drain. */ readonly disposalTimeoutMs?: number } ``` diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index 548cc55289..b3ead74141 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -820,7 +820,7 @@ export interface Config { readonly maxTasks?: number /** Maximum UTF-8 bytes in one complete sender-framed delivery. */ readonly maxMessageBytes?: number - /** Maximum milliseconds allowed for Team-owned runtime disposal. */ + /** Maximum milliseconds for shared operation settlement and for each Team child drain. */ readonly disposalTimeoutMs?: number } ``` diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index c7b095aa0b..ad7452d86d 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -982,7 +982,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experi #### `team/message/delivered` — log-only ```ts persistence-catalog -/** Durable acknowledgement that the target Session recorded the message. */ +/** Compatibility acknowledgement that the target Session recorded a historical message. */ 'team/message/delivered': { version: 2 teamId: TeamId @@ -1000,7 +1000,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experi #### `team/message/queued` — log-only ```ts persistence-catalog -/** Durable mailbox enqueue, stored before delivery is attempted. */ +/** Historical mailbox enqueue; new sends use the target Agent inbox. */ 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot } ``` diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index 62cf274074..8a0ea0641d 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -984,7 +984,7 @@ export type SessionEvent = { #### `team/message/delivered` — log-only ```ts persistence-catalog -/** Durable acknowledgement that the target Session recorded the message. */ +/** Compatibility acknowledgement that the target Session recorded a historical message. */ 'team/message/delivered': { version: 2 teamId: TeamId @@ -1002,7 +1002,7 @@ export type SessionEvent = { #### `team/message/queued` — log-only ```ts persistence-catalog -/** Durable mailbox enqueue, stored before delivery is attempted. */ +/** Historical mailbox enqueue; new sends use the target Agent inbox. */ 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot } ``` diff --git a/docs/subsystems/README.i18n.yaml b/docs/subsystems/README.i18n.yaml index 7051478b51..2e9baf3603 100644 --- a/docs/subsystems/README.i18n.yaml +++ b/docs/subsystems/README.i18n.yaml @@ -3,5 +3,5 @@ # After editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/subsystems/README.md /subsystems: - en: ab6cd11804f6b644 - zh: 7a82dc5b22c40703 + en: 448d009bdb9533ff + zh: f7806ef67ee4001c diff --git a/docs/subsystems/README.md b/docs/subsystems/README.md index e2f8dc51e2..96b0640ee8 100644 --- a/docs/subsystems/README.md +++ b/docs/subsystems/README.md @@ -47,7 +47,7 @@ One page per subsystem of the DeepSeek Harness: what it is, the data structures | [compaction.md](compaction.md) | the compaction seam: the `compaction/*` session events, `CompactionResult`, the `CompactionEngine` interface | | [subagent.md](subagent.md) | the subagent seam: the named-provider registry, `SubagentStartRequest`/`Result`/`Run`, the start-time-vs-runtime capability split | | [voice-input.md](voice-input.md) | experimental named recognizers, transient audio and revision-guarded draft insertion | -| [agent-team.md](agent-team.md) | Agent Teams: implicit Lead identity, named continuable teammates, durable peer mailbox, and shared task DAG | +| [agent-team.md](agent-team.md) | Agent Teams: implicit Lead identity, named continuable teammates, direct peer inbox delivery, and shared task DAG | | [web.md](web.md) | the web access seam: `WebSearchRequest`/`Result`, `WebFetchRequest`/`Result`, `WebFetchBody`, provider availability, `WebError` | | [spill.md](spill.md) | the spill storage seam: `SaveTextSpill`, `SpillOwner`/`SpillSource`, `SpillRef`, the branded `SpillLocator` | | [workflow.md](workflow.md) | the workflow seam: `WorkflowStartRequest`, `WorkflowMeta`, `WorkflowRun`/`Result`, the `workflow/*` event payloads, `WorkflowError` fatality | diff --git a/docs/subsystems/README.zh.md b/docs/subsystems/README.zh.md index 31f4489d43..77349af142 100644 --- a/docs/subsystems/README.zh.md +++ b/docs/subsystems/README.zh.md @@ -47,7 +47,7 @@ | [compaction.md](compaction.zh.md) | 压缩(compaction)seam:`compaction/*` 会话事件、`CompactionResult`、`CompactionEngine` 接口 | | [subagent.md](subagent.zh.md) | subagent seam:命名提供方注册表、`SubagentStartRequest`/`Result`/`Run`、启动时与运行时能力拆分 | | [voice-input.md](voice-input.zh.md) | 实验性具名语音识别、临时音频和受版本保护的草稿插入 | -| [agent-team.md](agent-team.zh.md) | Agent Teams:隐式 Lead 身份、具名 continuable teammate、持久 peer mailbox 与共享任务 DAG | +| [agent-team.md](agent-team.zh.md) | Agent Teams:隐式 Lead 身份、具名 continuable teammate、直接 peer inbox 投递 与共享任务 DAG | | [web.md](web.zh.md) | Web 访问 seam:`WebSearchRequest`/`Result`、`WebFetchRequest`/`Result`、`WebFetchBody`、提供方可用性、`WebError` | | [spill.md](spill.zh.md) | spill 存储 seam:`SaveTextSpill`、`SpillOwner`/`SpillSource`、`SpillRef`、品牌类型 `SpillLocator` | | [workflow.md](workflow.zh.md) | 工作流 seam:`WorkflowStartRequest`、`WorkflowMeta`、`WorkflowRun`/`Result`、`workflow/*` 事件载荷、`WorkflowError` 致命性 | diff --git a/docs/tool-catalog.i18n.yaml b/docs/tool-catalog.i18n.yaml index dca78d5b4b..06fb6e43a5 100644 --- a/docs/tool-catalog.i18n.yaml +++ b/docs/tool-catalog.i18n.yaml @@ -9,8 +9,8 @@ en: 6cc2cd9ced70bb09 zh: 1c0e6cb4ba2ed637 /tool-schema-catalog/tool-package-map: - en: 72e2a375567f5850 - zh: b51b8ea5b52814fd + en: 0616f479d8bfd8e2 + zh: 3625cb279093d6a5 /tool-schema-catalog/deepseek-ai-dsh-plugin-manager: en: e0143916bb634762 zh: e0143916bb634762 diff --git a/docs/tool-catalog.md b/docs/tool-catalog.md index 92bc66c4f9..1781e688cb 100644 --- a/docs/tool-catalog.md +++ b/docs/tool-catalog.md @@ -40,7 +40,7 @@ This table connects model-visible tool names to the plugin package and service s | `@deepseek-ai/dsh-tool-subagent` | `list_subagent_models`, `subagent` | `ctx.tools`, `ctx.subagents`, `ctx.systemPrompt`, `ctx.llm for model discovery and selected-route validation` | `tool/call`, `tool/result`, `child session events through the chosen provider` | `subagent`, `subagent_fork` | The registered delegation name is the load-time `toolName` config (default `subagent`); the default schema above has model selection off, while the discovery schema is shown as the fixed companion available in an enabled Session. Web presets sample the Plugins preference for each new top-level Session and preserve that decision for its child Sessions; `subagent_fork` remains fixed-route. Each instance independently controls whether it reads model-selection settings and its background behavior through `modelSelectionSettings`, `backgroundMode`, and `enableRunInBackground`. | | `@deepseek-ai/dsh-tool-subagent-control` | `interrupt_agent`, `list_agents`, `send_message` | `ctx.tools`, `ctx.subagents`, `ctx.agents and ctx.sessionProjections (list_agents only)` | `tool/call`, `tool/result`, `child session events through ctx.subagents` | - | The globally named control tools over continuable background subagents: provider-bound `tool-subagent` instances register distinct delegation tools, while this package registers `send_message` and `interrupt_agent` once, plus `list_agents` from its separately loaded `/list-agents` plugin (whose catalog rows use the sessionProjections and live Agent registries). | | `@deepseek-ai/dsh-tool-jobs` | `job_kill`, `job_list`, `job_output` | `ctx.tools`, `ctx.jobs`, `ctx.systemPrompt` | `tool/call`, `tool/result`, `user/message via agent.inject() for background completion notices` | - | The kind-agnostic background-job controller: background bash commands, PTY sends, and subagents are read, listed, and killed through the same three tools. Loading the plugin attaches the controller that arms producers' `ctx.jobs.start()`. | -| `@deepseek-ai/dsh-experimental-tool-agent-team` | `interrupt_agent`, `list_agents`, `send_message`, `spawn_teammate`, `team_task_create`, `team_task_get`, `team_task_list`, `team_task_update`, `wait_agent` | `ctx.tools`, `ctx.systemPrompt`, `ctx.agentTeams`, `an exact live Team member Agent` | `tool/call`, `team/member`, `team/message/queued`, `team/message/delivered`, `team/task`, `tool/result` | - | All nine tools are scoped to implicit Team Leads and durable teammates. The shipped dsh-base bundle keeps the package disabled; the documented Agent Teams profile patch enables it while disabling the legacy continuable-child control names. | +| `@deepseek-ai/dsh-experimental-tool-agent-team` | `interrupt_agent`, `list_agents`, `send_message`, `spawn_teammate`, `team_task_create`, `team_task_get`, `team_task_list`, `team_task_update`, `wait_agent` | `ctx.tools`, `ctx.systemPrompt`, `ctx.agentTeams`, `an exact live Team member Agent` | `tool/call`, `team/member`, `team/task`, `agent/inbox/spliced`, `user/message on inbox claim`, `tool/result` | - | All nine tools are scoped to implicit Team Leads and durable teammates. The shipped dsh-base bundle keeps the package disabled; the documented Agent Teams profile patch enables it while disabling the legacy continuable-child control names. | | `@deepseek-ai/dsh-tool-todo` | `todo_write` | `ctx.tools`, `owning Agent session` | `tool/call`, `todo/write`, `tool/result` | - | todo_write is session-owned state; UIs render the latest todo/write event as a checklist. `allowParallelInProgress` is required with no default, so the catalog states its choice: `true`, whose description invites several `in_progress` items. A deployment choosing `false` receives the same tool with a description asking for exactly one active task. | | `@deepseek-ai/dsh-tool-workflow` | `workflow` | `ctx.tools`, `ctx.workflowEngine`, `ctx.systemPrompt`, `a calling Agent (exec.agent parents the script children)` | `tool/call`, `tool/result` | - | - | | `@deepseek-ai/dsh-tool-workspace-dependencies` | `load_workspace_dependencies` | `ctx.tools` | `tool/call`, `tool/result` | - | - | diff --git a/docs/tool-catalog.zh.md b/docs/tool-catalog.zh.md index f4faf3b8a8..970538449c 100644 --- a/docs/tool-catalog.zh.md +++ b/docs/tool-catalog.zh.md @@ -44,7 +44,7 @@ | `@deepseek-ai/dsh-tool-subagent` | `list_subagent_models`、`subagent` | `ctx.tools`、`ctx.subagents`、`ctx.systemPrompt`、`用于模型发现和所选路由校验的 ctx.llm` | `tool/call`、`tool/result`、`child session events through the chosen provider` | `subagent`、`subagent_fork` | 注册的委派工具名称取决于加载时 `toolName` 配置(默认为 `subagent`);上述默认 schema 关闭模型选择,而发现 schema 则展示为已启用 Session 中可用的固定配套工具。Web preset 会在每个新顶层 Session 创建时读取插件页偏好,并为其子 Session 保留该决定;`subagent_fork` 始终使用固定路由。每个实例通过 `modelSelectionSettings`、`backgroundMode` 与 `enableRunInBackground` 独立控制是否读取模型选择设置及其后台行为。 | | `@deepseek-ai/dsh-tool-subagent-control` | `interrupt_agent`、`list_agents`、`send_message` | `ctx.tools`、`ctx.subagents`、`ctx.agents and ctx.sessionProjections (list_agents only)` | `tool/call`、`tool/result`、`child session events through ctx.subagents` | - | 这些是控制可继续后台 subagent 的全局命名工具:绑定提供方的 `tool-subagent` 实例注册不同的委派工具;本包注册一次 `send_message` 和 `interrupt_agent`,另由 `list_agents` 通过单独加载的 `/list-agents` 插件提供,其目录行使用 sessionProjections 和实时 Agent 注册表。 | | `@deepseek-ai/dsh-tool-jobs` | `job_kill`、`job_list`、`job_output` | `ctx.tools`、`ctx.jobs`、`ctx.systemPrompt` | `tool/call`、`tool/result`、`user/message via agent.inject() for background completion notices` | - | 与任务种类无关的后台任务控制器:后台 bash 命令、PTY 发送和 subagent 都通过相同的 3 个工具读取、列出和终止。加载该插件会挂接控制器,从而启用生产方的 `ctx.jobs.start()`。 | -| `@deepseek-ai/dsh-experimental-tool-agent-team` | `interrupt_agent`、`list_agents`、`send_message`、`spawn_teammate`、`team_task_create`、`team_task_get`、`team_task_list`、`team_task_update`、`wait_agent` | `ctx.tools`、`ctx.systemPrompt`、`ctx.agentTeams`、`an exact live Team member Agent` | `tool/call`、`team/member`、`team/message/queued`、`team/message/delivered`、`team/task`、`tool/result` | - | 这 9 个工具限定于隐式 Team Lead 与持久 teammate 作用域。随产品发布的 dsh-base bundle 默认禁用该包;文档中的 Agent Teams profile patch 会启用它,并禁用旧 continuable child 的同名控制工具。 | +| `@deepseek-ai/dsh-experimental-tool-agent-team` | `interrupt_agent`、`list_agents`、`send_message`、`spawn_teammate`、`team_task_create`、`team_task_get`、`team_task_list`、`team_task_update`、`wait_agent` | `ctx.tools`、`ctx.systemPrompt`、`ctx.agentTeams`、`an exact live Team member Agent` | `tool/call`、`team/member`、`team/task`、`agent/inbox/spliced`、`user/message on inbox claim`、`tool/result` | - | 这 9 个工具限定于隐式 Team Lead 与持久 teammate 作用域。随产品发布的 dsh-base bundle 默认禁用该包;文档中的 Agent Teams profile patch 会启用它,并禁用旧 continuable child 的同名控制工具。 | | `@deepseek-ai/dsh-tool-todo` | `todo_write` | `ctx.tools`、`owning Agent session` | `tool/call`、`todo/write`、`tool/result` | - | todo_write 是会话所有的状态;UI 将最新的 todo/write 事件渲染为检查清单。`allowParallelInProgress` 是没有默认值的必填项,因此本目录明确选择 `true`,对应描述允许同时存在多个 `in_progress` 项。选择 `false` 的部署会获得同一工具,但描述会要求只能有 1 个活动任务。 | | `@deepseek-ai/dsh-tool-workflow` | `workflow` | `ctx.tools`、`ctx.workflowEngine`、`ctx.systemPrompt`、`a calling Agent (exec.agent parents the script children)` | `tool/call`、`tool/result` | - | - | | `@deepseek-ai/dsh-tool-workspace-dependencies` | `load_workspace_dependencies` | `ctx.tools` | `tool/call`, `tool/result` | - | - | diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 43fe0e4ac9..f84b4c7633 100644 --- a/packages/client/ui-chat/README.i18n.yaml +++ b/packages/client/ui-chat/README.i18n.yaml @@ -18,8 +18,8 @@ en: 3fda3d75483ce7c1 zh: 4d96ba654f70c021 /deepseek-ai-dsh-client-ui-chat/hidden-chat-rows: - en: 5706ae03ceacf251 - zh: 2e59d0815351349f + en: b502d2a006a36be5 + zh: 1a191a628129ca8c /deepseek-ai-dsh-client-ui-chat/command-and-failure-rows: en: 2157fcd6b0d100b5 zh: 9e865ac3953ebe30 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index b3343fd9c3..050ff3417c 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -40,7 +40,7 @@ Settings → General → Open chat links in selects the destination for ordinary ## Hidden Chat rows -Chat omits system-prompt, ordinary Context injection, and `permission` command rows in every work-details mode. Context containing tool additions or removals remains visible. The filter changes neither recorded Session events nor Trajectory inspection. Non-human Turn triggers remain independent notices; other command rows remain in Chat. +Chat omits system-prompt, ordinary Context injection, and `permission` command rows in every work-details mode. Context containing tool additions or removals remains visible. The filter changes neither recorded Session events nor Trajectory inspection. Non-human Turn triggers remain independent notices; Agent relays whose first text block is the exact `Team message from :` framing retain the Team title and icon; other command rows remain in Chat. When an Assistant attempt retires without a visible message, Chat hides its already-published Node instead of removing its key. A retry in the same Step reuses that key when visible content returns. This also applies when the loaded window lacks the Step start. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index b524f85580..22ecda6d8c 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -40,7 +40,7 @@ Chat 在节点列表外通过一个 `MarkdownDelegateProvider` 提供文件及 H ## Chat 隐藏的行 -Chat 在所有工作步骤展示模式下都不显示系统提示词行、普通上下文注入和 `permission` 命令行。包含工具添加或移除记录的上下文仍然可见。该过滤不改变已记录的 Session 事件或 Trajectory 查看能力。非人工轮次触发仍作为独立通知显示,其他命令行仍保留在 Chat 中。 +Chat 在所有工作步骤展示模式下都不显示系统提示词行、普通上下文注入和 `permission` 命令行。包含工具添加或移除记录的上下文仍然可见。该过滤不改变已记录的 Session 事件或 Trajectory 查看能力。非人工轮次触发仍作为独立通知显示;首个文本块完全匹配 `Team message from :` 前缀的 Agent relay 保留 Team 标题和图标;其他命令行仍保留在 Chat 中。 Assistant 尝试结束且没有可见消息时,Chat 隐藏已发布的 Node,不移除其 key。同一 Step 的重试再次产生可见内容时,复用该 key。已加载窗口缺少 Step 起点时也遵循此规则。 diff --git a/packages/client/ui-chat/src/client/chat/turn-trigger.ts b/packages/client/ui-chat/src/client/chat/turn-trigger.ts index 0e560572e2..8cf5106a48 100644 --- a/packages/client/ui-chat/src/client/chat/turn-trigger.ts +++ b/packages/client/ui-chat/src/client/chat/turn-trigger.ts @@ -32,10 +32,14 @@ export function turnTriggerDetails(node: ContextMessageNode): { icon = 'goal' break } - case 'agent-message': - title = 'message.trigger.agent' - icon = 'agent' + case 'agent-message': { + const first = node.content[0] + const team = field(source, 'form') === 'relay' && first?.type === 'text' + && /^Team message from [a-z0-9]+(?:-[a-z0-9]+)*:$/u.test(first.text) + title = team ? 'message.trigger.team' : 'message.trigger.agent' + icon = team ? 'team' : 'agent' break + } case 'team-message': title = 'message.trigger.team' icon = 'team' diff --git a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx index 851111fd14..965058db0f 100644 --- a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx +++ b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx @@ -6,7 +6,7 @@ import type { ChatNode } from '../src/client/contract/chat-nodes.ts' import { TurnTriggerNodeView } from '../src/client/chat/TurnTriggerNodeView.tsx' import { turnTriggerDetails } from '../src/client/chat/turn-trigger.ts' import { contextForm, contextProducer } from '../src/client/conversation-nodes/event-projection.ts' -import { en } from '../src/client/locale.ts' +import { en, zh } from '../src/client/locale.ts' afterEach(cleanup) @@ -45,6 +45,30 @@ describe('Turn trigger notices', () => { expect(view.container.querySelector('time')?.dateTime).toBe('2023-11-14T22:13:20.000Z') }) + it.each([ + [en, 'Team message received'], + [zh, '收到团队消息'], + ])('preserves the Team title and icon for a direct inbox relay', (locale, title) => { + const node = trigger({ kind: 'agent-message', form: 'relay', senderSessionId: 'sender' }) + node.data.content = [{ type: 'text', text: 'Team message from reviewer-2:' }, { type: 'text', text: 'Ready.' }] + expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.team', icon: 'team' }) + const view = render() + expect(view.getByRole('button').textContent).toContain(title) + fireEvent.click(view.getByRole('button')) + expect(view.container.querySelector('[data-context-text]')?.textContent).toContain('Team message from reviewer-2:') + }) + + it.each([ + [{ kind: 'agent-message', form: 'notice' }, ['Team message from reviewer:']], + [{ kind: 'agent-message', form: 'relay' }, ['Ordinary message', 'Team message from reviewer:']], + [{ kind: 'agent-message', form: 'relay' }, ['Team message from reviewer: extra text']], + [{ kind: 'agent-message', form: 'relay' }, []], + ])('keeps other Agent messages in the generic presentation', (source, texts) => { + const node = trigger(source) + node.data.content = texts.map(text => ({ type: 'text', text })) + expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.agent', icon: 'agent' }) + }) + it('opens the recorded notice body and closes it independently of the Turn', () => { const view = render() const button = view.getByRole('button') diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index c320067bd5..b5137164e4 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -48,11 +48,11 @@ en: 39fc445dd624b453 zh: 26dbdcb0067fbb07 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/team-identity-and-roster: - en: 85f97723e45e43de - zh: def66721e21339cc + en: 2389048c1a494ed3 + zh: 7e72acd6b83ea248 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/direct-messages-and-historical-compatibility: - en: d48f93263041ba66 - zh: ff0fb3d96e019953 + en: 43d69c3e5f597a88 + zh: c776f66aae7c0950 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/shared-task-board: en: 2dc37ba97a8a7178 zh: 96bd24033030e19d @@ -60,11 +60,11 @@ en: 29eebf85f25d8d8b zh: 6976a482f65b4989 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/durability-model: - en: 0407607c0cd39bb6 - zh: 089ef28dad527f09 + en: f5161fff909de4db + zh: a463315d58f05c75 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/disposal: - en: 2276823a7a1b65a7 - zh: 4f4970a93fabe0be + en: daefac636194f387 + zh: 59420c5c2fbd5d52 /deepseek-ai-dsh-experimental-agent-team/further-exploration: en: 2bbfd4ffbaeedd00 zh: d1afb5d320b469a1 diff --git a/packages/experimental/agent-team/README.md b/packages/experimental/agent-team/README.md index aed84b018d..cf20ef071a 100644 --- a/packages/experimental/agent-team/README.md +++ b/packages/experimental/agent-team/README.md @@ -125,11 +125,11 @@ The [Agent Teams Agent Note](../../../.agents/notes/implemented/feature/2026-08- ### Team identity and roster -Every ordinary runtime root is the implicit Lead of a Team whose `TeamId` equals its `SessionId`; there is no creation event, and durable state begins with the first member, message, or task record. `spawnTeammate()` first appends and flushes a `provisioning` member record, then asks the configured provider to create the reserved child; a provider failure appends a durable `failed` member. A fresh child starts with no Lead history; a fork child captures the Lead's completed-turn prefix once. Recovery reconciles an unterminated provisioning record against the child's independently persisted Session: a matching direct-parent and continuable descriptor plus a recorded initial user message produces `active`, and anything else produces `failed`. If recovery wins a same-process race, the creator accepts the terminal state or reports `TEAM_PROVISIONING_CONFLICT` and drains the child. Names are reserved by the first provisioning record and never reused. +Every ordinary runtime root is the implicit Lead of a Team whose `TeamId` equals its `SessionId`; there is no creation event, and durable Team state begins with the first member or task record. `spawnTeammate()` first appends and flushes a `provisioning` member record, then asks the configured provider to create the reserved child; a provider failure appends a durable `failed` member. A fresh child starts with no Lead history; a fork child captures the Lead's completed-turn prefix once. Recovery reconciles an unterminated provisioning record against the child's independently persisted Session: a matching direct-parent and continuable descriptor plus a recorded initial user message produces `active`, and anything else produces `failed`. If recovery wins a same-process race, the creator accepts the terminal state or reports `TEAM_PROVISIONING_CONFLICT` and drains the child. Names are reserved by the first provisioning record and never reused. ### Direct messages and historical compatibility -`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. +`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering or historical catch-up barrier; delivery order belongs to the target inbox. The client recognizes the recorded Team framing for its message title and icon. Lead delivery calls `Agent.steer()` directly. Teammate delivery uses the continuation owner's host-only Steer path, which preserves the Team sender source while authorizing the Lead-to-child edge and cold-resuming inactive targets. Sibling messages never impersonate the Lead through the public adjacent-Agent messaging operation. @@ -143,15 +143,15 @@ Tasks are complete versioned snapshots; every mutation carries `expectedRevision ### Durability model -Team events are appended to the exact live Lead Session and flushed before the operation reports success or wakes waiters. `team/member`, `team/task`, `team/message/queued`, and `team/message/delivered` are log-only: they never enter the conversation surface, so derived model history is untouched by coordination records. Session event `seq` and `time` own ordering and timing; snapshots do not duplicate them. The `./invariant` companion replays each candidate Team event against its committed prefix and rejects invalid transitions before append. +Roster and task mutations append `team/member` and `team/task` to the exact live Lead Session and flush before reporting success or waking waiters. Historical `team/message/queued` records remain readable; compatibility recovery writes `team/message/delivered` only after confirming a persisted target receipt. All four event types are log-only: they never enter the conversation surface, so derived model history is untouched by coordination records. Session event `seq` and `time` own ordering and timing; snapshots do not duplicate them. The `./invariant` companion replays each candidate Team event against its committed prefix and rejects invalid transitions before append. -Historical mailbox events and `team-message` sources remain readable. Plugin load and Agent creation drain old queued-minus-delivered records through Steer, checking target history and pending inbox before retrying and flushing target receipts before legacy acknowledgements. Failed inspection or delivery logs a warning and leaves the old item pending for a later recovery pass; new sends neither trigger nor wait for this drain. Recovery passes serialize per Team and participate in disposal. +Historical mailbox events and `team-message` sources remain readable. Plugin load schedules recovery for loaded members. Lead creation drains all old queued-minus-delivered records; teammate creation drains only records addressed to that teammate. Recovery checks target history and pending inbox before retrying and flushes target receipts before legacy acknowledgements. A failed item blocks later old items for the same target in that pass. Failures warn and retain pending data until a later load or Agent creation; there is no receipt listener or periodic retry. New sends do not directly invoke or await recovery; cold resume still triggers the target’s Agent-creation hook. Recovery passes serialize per Team and participate in disposal. Mailbox projection and checkpoint admission preserve every decoded JSON field of accepted content outside the locally declared validators, including an own `__proto__` key. Local field checks cover `text`, `reasoning`, `image`, and `tool-call`; accepted unknown tags remain opaque. Team projection cache version 4 rebuilds checkpoints from earlier cache versions from the Session log; the Session format version is unchanged. ### Disposal -Disposal closes admission, aborts and awaits admitted sends, creations, and legacy recovery, then releases the roster’s live children and descendants. Non-Team children remain untouched. Cleanup failures are visible and bounded by `disposalTimeoutMs`. +Disposal closes admission, aborts and awaits admitted sends, creations, and legacy recovery, then releases the roster’s live children and descendants. Non-Team children remain untouched. Admitted operations share one `disposalTimeoutMs` settlement deadline; each subsequent Team child drain has its own deadline. This value is not a whole-service shutdown bound. Cleanup failures are reported. diff --git a/packages/experimental/agent-team/README.zh.md b/packages/experimental/agent-team/README.zh.md index 279e329f6f..5e1a69cf8b 100644 --- a/packages/experimental/agent-team/README.zh.md +++ b/packages/experimental/agent-team/README.zh.md @@ -125,11 +125,11 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### Team 身份与 roster -每个普通运行时 root 都是一个隐式 Team 的 Lead,其 `TeamId` 等于 `SessionId`;不存在创建事件,持久状态从第一条成员、消息或任务记录开始。`spawnTeammate()` 先追加并 flush 一条 `provisioning` 成员记录,再要求配置的提供方创建预留 child;提供方失败会追加一条持久的 `failed` 成员。fresh child 不携带 Lead 历史;fork child 只捕获一次 Lead 的已完成 turn 前缀。恢复把未终结的 provisioning 记录对照 child 独立持久化的会话进行对账:直接 parent 与 continuable descriptor 匹配、且初始用户消息已记录则产生 `active`,其他任何情况都产生 `failed`。如果恢复在同进程竞争中先完成,creator 会接受终态,或报告 `TEAM_PROVISIONING_CONFLICT` 并 drain 该 child。名字由第一条 provisioning 记录保留,且永不复用。 +每个普通运行时 root 都是一个隐式 Team 的 Lead,其 `TeamId` 等于 `SessionId`;不存在创建事件,持久 Team 状态从第一条成员或任务记录开始。`spawnTeammate()` 先追加并 flush 一条 `provisioning` 成员记录,再要求配置的提供方创建预留 child;提供方失败会追加一条持久的 `failed` 成员。fresh child 不携带 Lead 历史;fork child 只捕获一次 Lead 的已完成 turn 前缀。恢复把未终结的 provisioning 记录对照 child 独立持久化的会话进行对账:直接 parent 与 continuable descriptor 匹配、且初始用户消息已记录则产生 `active`,其他任何情况都产生 `failed`。如果恢复在同进程竞争中先完成,creator 会接受终态,或报告 `TEAM_PROVISIONING_CONFLICT` 并 drain 该 child。名字由第一条 provisioning 记录保留,且永不复用。 ### 直接消息与历史兼容 -`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。 +`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序,也不等待历史消息补送;投递顺序由目标 inbox 管理。客户端识别已记录的 Team 前缀,以展示对应消息标题和图标。 投递给 Lead 时直接调用 `Agent.steer()`。投递给 teammate 时使用 continuation owner 的 host-only Steer 路径;该路径会保留 Team 发送者 source,同时授权 Lead-to-child edge 并冷恢复 inactive target。sibling 消息绝不会通过公开的相邻 Agent 消息操作伪装成 Lead。 @@ -143,15 +143,15 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 持久性模型 -Team 事件追加到精确的 live Lead 会话,并在操作报告成功或唤醒等待者之前 flush。`team/member`、`team/task`、`team/message/queued` 与 `team/message/delivered` 仅存在于日志:它们从不进入会话表面,因此派生模型历史不受协作记录影响。顺序与时间由会话事件的 `seq` 与 `time` 负责,快照不重复保存。`./invariant` 伴生插件把每条候选 Team 事件对照已提交前缀回放,并在 append 前拒绝非法转换。 +roster 与任务变更将 `team/member` 和 `team/task` 追加到精确的 live Lead 会话,并在报告成功或唤醒等待者之前 flush。历史 `team/message/queued` 记录仍可读取;兼容恢复仅在确认目标回执已持久化后写入 `team/message/delivered`。这四种事件仅存在于日志:它们从不进入会话表面,因此派生模型历史不受协作记录影响。顺序与时间由会话事件的 `seq` 与 `time` 负责,快照不重复保存。`./invariant` 伴生插件把每条候选 Team 事件对照已提交前缀回放,并在 append 前拒绝非法转换。 -历史 mailbox 事件与 `team-message` source 仍可读取。插件加载和 Agent 创建通过 Steer 补送旧 queued-minus-delivered 记录;重试前检查目标历史与 pending inbox,旧确认前 flush 目标回执。检查或投递失败会记录警告,并将旧项保留为 pending,等待后续恢复;新发送既不触发也不等待此补送。恢复按 Team 串行执行,并参与 dispose 等待。 +历史 mailbox 事件与 `team-message` source 仍可读取。插件加载为已加载的成员安排恢复。Lead 创建补送全部旧 queued-minus-delivered 记录;teammate 创建仅补送发给该 teammate 的记录。恢复在重试前检查目标历史与 pending inbox,并在旧确认前 flush 目标回执。一项失败会阻止本轮中发给同一目标的后续旧项。失败会记录警告,并保留 pending 数据,直到后续加载或 Agent 创建;没有收据监听器或定时重试。新发送不直接调用或等待恢复;冷恢复仍会触发目标的 Agent 创建钩子。恢复按 Team 串行执行,并参与 dispose 等待。 Mailbox 投影与 checkpoint 准入保留本地声明的校验器之外获准内容中全部已解码 JSON 字段,包括自有 `__proto__` 键。本地字段检查覆盖 `text`、`reasoning`、`image` 和 `tool-call`;获准的未知标签保持不透明。Team 投影缓存版本 4 从 Session 日志重建较早缓存版本的 checkpoint;Session 格式版本保持不变。 ### Dispose -dispose 关闭准入,中止并等待已获准的发送、创建和旧消息恢复,然后释放 roster 中的 live child 及其后代。非 Team child 不受影响。清理失败会明确报告,并受 `disposalTimeoutMs` 限制。 +dispose 关闭准入,中止并等待已获准的发送、创建和旧消息恢复,然后释放 roster 中的 live child 及其后代。非 Team child 不受影响。已获准操作共享一个 `disposalTimeoutMs` 等待期限;随后每个 Team 的 child drain 各有独立期限。此值不是整个服务关闭的总时限。清理失败会明确报告。 diff --git a/packages/experimental/agent-team/src/index.ts b/packages/experimental/agent-team/src/index.ts index d5456da33c..9c8c41e93e 100644 --- a/packages/experimental/agent-team/src/index.ts +++ b/packages/experimental/agent-team/src/index.ts @@ -277,9 +277,11 @@ export class TeamService extends Service { this.activity.close() const failures: unknown[] = [] - await this.lifecycle.settle(this.lifecycle.pending(), failures) - await this.lifecycle.settle(this.roster.pendingCreations(), failures) - await this.lifecycle.settle(this.legacyDelivery.pendingDispatches(), failures) + await this.lifecycle.settle([ + ...this.lifecycle.pending(), + ...this.roster.pendingCreations(), + ...this.legacyDelivery.pendingDispatches(), + ], failures) for (const [root, childIds] of this.roster.liveChildrenByRoot()) { try { await this.roster.stopTeammates(root, childIds) diff --git a/packages/experimental/agent-team/src/legacy-delivery.ts b/packages/experimental/agent-team/src/legacy-delivery.ts index f4924e2134..e4e29015df 100644 --- a/packages/experimental/agent-team/src/legacy-delivery.ts +++ b/packages/experimental/agent-team/src/legacy-delivery.ts @@ -42,12 +42,15 @@ export class LegacyTeamDelivery { const existing = this.recoveries.get(root.id) if (existing !== undefined) { await existing + await this.recoverFor(agent, signal) return } const operation = Promise.resolve().then(async () => { const state = this.journal.state(root) + // A failed old message must not be overtaken by later messages to its target. const blockedTargets = new Set() for (const message of state.messages) { + if (membership.role !== 'lead' && message.targetId !== agent.id) continue if (state.delivered.includes(message.id) || blockedTargets.has(message.targetId)) continue signal.throwIfAborted() if (!await this.dispatchOnce(root, message, signal)) blockedTargets.add(message.targetId) @@ -121,7 +124,7 @@ export class LegacyTeamDelivery { return true } - /** Record delivery unless the acknowledgement already exists. */ + /** Record the receipt selected by the serialized recovery pass. */ private async markDelivered(root: Agent, messageId: TeamMessageId, targetId: SessionId): Promise { await this.journal.transact(root.id, async () => { await this.journal.appendAndFlush(root, 'team/message/delivered', { diff --git a/packages/experimental/agent-team/src/types.ts b/packages/experimental/agent-team/src/types.ts index 197e73a3be..e41faab2d2 100644 --- a/packages/experimental/agent-team/src/types.ts +++ b/packages/experimental/agent-team/src/types.ts @@ -157,7 +157,7 @@ export interface Config { readonly maxTasks?: number /** Maximum UTF-8 bytes in one complete sender-framed delivery. */ readonly maxMessageBytes?: number - /** Maximum milliseconds allowed for Team-owned runtime disposal. */ + /** Maximum milliseconds for shared operation settlement and for each Team child drain. */ readonly disposalTimeoutMs?: number } @@ -230,9 +230,9 @@ declare module '@deepseek-ai/dsh-session/types' { 'team/member': { version: 2; teamId: TeamId; member: TeamMemberSnapshot } /** Whole shared-task value, stored only in the Team Lead Session. */ 'team/task': { version: 2; teamId: TeamId; task: TeamTaskSnapshot } - /** Durable mailbox enqueue, stored before delivery is attempted. */ + /** Historical mailbox enqueue; new sends use the target Agent inbox. */ 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot } - /** Durable acknowledgement that the target Session recorded the message. */ + /** Compatibility acknowledgement that the target Session recorded a historical message. */ 'team/message/delivered': { version: 2 teamId: TeamId diff --git a/packages/experimental/agent-team/tests/team.spec.ts b/packages/experimental/agent-team/tests/team.spec.ts index fc262f238f..1c7ab55335 100644 --- a/packages/experimental/agent-team/tests/team.spec.ts +++ b/packages/experimental/agent-team/tests/team.spec.ts @@ -86,6 +86,7 @@ function content(text: string) { interface TeamServiceInternals { readonly legacyDelivery: LegacyTeamDelivery + readonly lifecycle: TeamRuntimeLifecycle readonly roster: { readonly inFlightCreations: Set> checkpointInitialPrompt(childId: SessionId, messageId: string, signal: AbortSignal): Promise @@ -905,6 +906,58 @@ describe('Historical Team message compatibility', () => { await lead.whenIdle() }) + it('recovers only the newly created teammate target through the Agent lifecycle', async () => { + const { ctx, lead } = await setup(['hang', textResponse('initial'), textResponse('other initial'), 'hang']) + lead.followup(createUserMessage({ content: content('busy lead'), source: { kind: 'user' } })) + await waitRunning(ctx, lead.id) + const target = await spawn(ctx, lead, 'target') + await waitNoAgent(ctx, target.member.id) + const other = await spawn(ctx, lead, 'other') + await waitNoAgent(ctx, other.member.id) + const message = enqueue(lead, 'target-old', target.member.id) + const untouched = enqueue(lead, 'other-old', other.member.id) + const accepted = await ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('resume'), signal: SIGNAL }) + await vi.waitFor(() => { expect(durable(lead).pendingMessages.map(item => item.id)).toEqual([untouched.id]) }) + const live = await waitRunning(ctx, target.member.id) + const recorded = [...live.inbox.nextStep, ...live.session.snapshotEvents().flatMap(event => event.type === 'user/message' ? [event.data] : [])] + expect(recorded.some(item => item.id === accepted.messageId)).toBe(true) + expect(recorded.filter(item => item.source.kind === 'team-message' && item.source.messageId === message.id)).toHaveLength(1) + expect(ctx.agents.get(other.member.id)).toBeUndefined() + }) + + it('retains a second teammate recovery trigger while another target is checkpointing', async () => { + const { ctx, lead } = await setup(['hang', textResponse('first'), textResponse('second'), 'hang', 'hang']) + lead.followup(createUserMessage({ content: content('busy lead'), source: { kind: 'user' } })) + await waitRunning(ctx, lead.id) + const first = await spawn(ctx, lead, 'first') + await waitNoAgent(ctx, first.member.id) + const second = await spawn(ctx, lead, 'second') + await waitNoAgent(ctx, second.member.id) + enqueue(lead, 'first-old', first.member.id) + enqueue(lead, 'second-old', second.member.id) + const entered = Promise.withResolvers() + const release = Promise.withResolvers() + const flush = ctx.sessions.flush.bind(ctx.sessions) + const checkpoint = vi.spyOn(ctx.sessions, 'flush').mockImplementation(async (session) => { + if (session.id === first.member.id && session.snapshotEvents().some(event => event.type === 'agent/inbox/spliced' + && event.data.inserted.some(message => message.source.kind === 'team-message'))) { + entered.resolve(undefined) + await release.promise + } + return await flush(session) + }) + try { + await ctx.agentTeams.sendMessage(lead, { target: 'first', content: content('resume first'), signal: SIGNAL }) + await entered.promise + await ctx.agentTeams.sendMessage(lead, { target: 'second', content: content('resume second'), signal: SIGNAL }) + release.resolve(undefined) + await vi.waitFor(() => { expect(durable(lead).pendingMessages).toEqual([]) }) + } finally { + release.resolve(undefined) + checkpoint.mockRestore() + } + }) + it('retains old pending data and reports inspection and delivery failures', async () => { const { ctx, lead } = await setup([textResponse('done')]) const target = await spawn(ctx, lead, 'target') @@ -1408,6 +1461,29 @@ describe('Team direct messages and waiting', () => { expect(ctx.get('agentTeams')).toBeUndefined() }) + it('shares one settlement deadline across sends, creations, and legacy recovery', async () => { + const { ctx } = await setup([], { disposalTimeoutMs: 25 }) + const internal = teamInternals(ctx) + const release = Promise.withResolvers() + void internal.lifecycle.track(release.promise) + internal.roster.inFlightCreations.add(release.promise) + const pending = vi.spyOn(internal.legacyDelivery, 'pendingDispatches').mockReturnValue([release.promise]) + vi.useFakeTimers() + let failure: unknown + const disposal = internal.disposeRuntime().catch((error: unknown) => { failure = error }) + try { + await vi.advanceTimersByTimeAsync(25) + expect(failure).toBeInstanceOf(AggregateError) + await disposal + } finally { + release.resolve(undefined) + internal.roster.inFlightCreations.delete(release.promise) + pending.mockRestore() + vi.useRealTimers() + await disposal + } + }) + it('bounds disposal while an admitted creation ignores cancellation', async () => { const { ctx, lead } = await setup([], { disposalTimeoutMs: 25 }) const internal = teamInternals(ctx) diff --git a/scripts/gen-doc-graphs.ts b/scripts/gen-doc-graphs.ts index 2d02cb8398..fe644b7a10 100644 --- a/scripts/gen-doc-graphs.ts +++ b/scripts/gen-doc-graphs.ts @@ -740,7 +740,7 @@ const SERVICE_ROLES: ServiceRole[] = [ title: 'Agent Teams coordination domain', mode: 'core', consumers: ['experimental-tool-agent-team'], - note: 'Owns the implicit-root roster, durable peer mailbox, shared task DAG, and continuable-child lifecycle; tool-agent-team contributes model controls.', + note: 'Owns the implicit-root roster, direct peer inbox delivery, shared task DAG, and continuable-child lifecycle; tool-agent-team contributes model controls.', }, { key: 'inspector', diff --git a/scripts/gen-tool-catalog.ts b/scripts/gen-tool-catalog.ts index 59aaf94af0..6a8723e8cd 100644 --- a/scripts/gen-tool-catalog.ts +++ b/scripts/gen-tool-catalog.ts @@ -585,7 +585,7 @@ const TOOL_PACKAGES: ToolPackage[] = [ dir: 'tool-agent-team', source: 'packages/experimental/tool-agent-team/src/index.ts', requires: ['ctx.tools', 'ctx.systemPrompt', 'ctx.agentTeams', 'an exact live Team member Agent'], - writes: ['tool/call', 'team/member', 'team/message/queued', 'team/message/delivered', 'team/task', 'tool/result'], + writes: ['tool/call', 'team/member', 'team/task', 'agent/inbox/spliced', 'user/message on inbox claim', 'tool/result'], async mount(ctx) { await ctx.plugin(AgentRegistry) await ctx.plugin(SessionStore) diff --git a/snapshots/session/team-direct-inbox/session.1.v4.jsonl b/snapshots/session/team-direct-inbox/session.1.v4.jsonl new file mode 100644 index 0000000000..7316d89461 --- /dev/null +++ b/snapshots/session/team-direct-inbox/session.1.v4.jsonl @@ -0,0 +1,22 @@ +{"type":"session","version":4,"id":"{{session:2}}","createdAt":1783951000000,"cwd":"{{cwd}}","parentSession":"{{session:1}}","isSeeded":false,"origin":"subagent","delegationDepth":1} +{"type":"subagent/descriptor","data":{"version":3,"mode":"continuable","provider":"spawn","label":"Check direct inbox delivery","agentProvider":"deepseek-official","agentModel":"deepseek-v4-flash"}} +{"type":"sandbox/mode","data":{"mode":"danger-full-access","source":"delegation"}} +{"type":"approval/policy","data":{"policy":"never","source":"delegation"}} +{"type":"permission/preset","data":{"preset":"danger-full-access"}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"\nYou are teammate \"reviewer\".\nYour Team Lead is named \"lead\".\nUse list_agents({}) to find your teammates and their names.\nTo message your Team Lead, use send_message({ target: \"lead\", message: \"...\" }).\nTo message another teammate, use send_message({ target: \"\", message: \"...\" }).\n\n\n"},{"type":"text","text":"Create the empty file team-ready, then wait in Bash until interrupted."}],"source":{"kind":"user"},"role":"user","id":"{{message:13}}"}]}} +{"type":"turn/start","data":{"turn":1}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} +{"type":"step/start","data":{"turn":1,"step":1}} +{"type":"system/message","data":{"turn":1,"step":1,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"system-prompt"},"id":"{{message:14}}"}},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"\nYou are teammate \"reviewer\".\nYour Team Lead is named \"lead\".\nUse list_agents({}) to find your teammates and their names.\nTo message your Team Lead, use send_message({ target: \"lead\", message: \"...\" }).\nTo message another teammate, use send_message({ target: \"\", message: \"...\" }).\n\n\n"},{"type":"text","text":"Create the empty file team-ready, then wait in Bash until interrupted."}],"source":{"kind":"user"},"role":"user","id":"{{message:13}}"},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations.\n\nApproval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`).\n\nYou are a delegated subagent: your permission scope was fixed when you were started and cannot be widened from inside this session — operations that require approval are rejected automatically. When the task needs access beyond that scope, do not retry the denied operation; state the limitation in your reply so the delegating agent can handle it."}],"source":{"kind":"runtime-context","form":"snapshot","sections":[{"name":"sandbox:policy","text":"Current DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations."},{"name":"approval:policy","text":"Approval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)."},{"name":"subagent:delegation","text":"You are a delegated subagent: your permission scope was fixed when you were started and cannot be widened from inside this session — operations that require approval are rejected automatically. When the task needs access beyond that scope, do not retry the denied operation; state the limitation in your reply so the delegating agent can handle it."}]},"role":"user","id":"{{message:15}}"},"surfaceOp":"append"} +{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} +{"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} +{"type":"session/title","data":{"title":" You are teammate \"revi","messageSeqs":[9],"source":{"kind":"fallback"}}} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:16}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429365968,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790429365968,"index":0,"dt":[],"id":"direct-1","name":"bash","args":["{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"]},{"type":"chunk","time":1790429365968,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}}},{"type":"chunk","time":1790429365968,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429365969,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"tool/call","data":{"turn":1,"step":1,"callId":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}} +{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Team message from lead:"},{"type":"text","text":"Review the direct inbox delivery."}],"source":{"kind":"agent-message","form":"relay","senderSessionId":"{{session:1}}"},"role":"user","id":"{{message:17}}"}]}} +{"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-1"},"toolCallId":"direct-1","content":[{"type":"text","text":"Error: tool call aborted"}],"isError":true,"id":"{{message:18}}"},"error":{"name":"AbortError","code":"ABORTED"}},"sourceEventSeqs":[15],"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":1}} +{"type":"turn/end","data":{"turn":1,"reason":{"kind":"aborted","reason":{"kind":"parent"}}}} +{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"removedCount":1,"inserted":[],"outcome":"canceled"}} diff --git a/snapshots/session/team-direct-inbox/session.v4.jsonl b/snapshots/session/team-direct-inbox/session.v4.jsonl new file mode 100644 index 0000000000..9c6b1532d1 --- /dev/null +++ b/snapshots/session/team-direct-inbox/session.v4.jsonl @@ -0,0 +1,40 @@ +{"type":"session","version":4,"id":"{{session:1}}","createdAt":1783951000000,"cwd":"{{cwd}}","isSeeded":false,"delegationDepth":0} +{"type":"permission/preset","data":{"preset":"danger-full-access"}} +{"type":"sandbox/mode","data":{"mode":"danger-full-access"}} +{"type":"approval/policy","data":{"policy":"never"}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Spawn teammate reviewer, wait for its team-ready file, send it the message Review the direct inbox delivery., interrupt its waiting turn, then reply TEAM_DIRECT_INBOX_OK."}],"source":{"kind":"user"},"role":"user","id":"{{message:1}}"}]}} +{"type":"turn/start","data":{"turn":1}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} +{"type":"step/start","data":{"turn":1,"step":1}} +{"type":"system/message","data":{"turn":1,"step":1,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"system-prompt"},"id":"{{message:2}}"}},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"Spawn teammate reviewer, wait for its team-ready file, send it the message Review the direct inbox delivery., interrupt its waiting turn, then reply TEAM_DIRECT_INBOX_OK."}],"source":{"kind":"user"},"role":"user","id":"{{message:1}}"},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations.\n\nApproval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)."}],"source":{"kind":"runtime-context","form":"snapshot","sections":[{"name":"sandbox:policy","text":"Current DSH file policy: danger-full-access. The DSH file sandbox does not restrict file modifications by available operations."},{"name":"approval:policy","text":"Approval prompts are disabled in this session: actions that require approval are rejected automatically — do not request sandbox escalation (do not set `sandbox_permissions`)."}]},"role":"user","id":"{{message:3}}"},"surfaceOp":"append"} +{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-official","model":"deepseek-v4-flash"},"tools":"{{tools}}"},"reason":"initial"}} +{"type":"request/context","data":{"provider":"deepseek-official","model":"deepseek-v4-flash"}} +{"type":"session/title","data":{"title":"Spawn teammate reviewer, wait for","messageSeqs":[8],"source":{"kind":"fallback"}}} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-1","name":"spawn_teammate","arguments":"{\"name\":\"reviewer\",\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"context\":\"fresh\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429365916,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790429365916,"index":0,"dt":[],"id":"direct-1","name":"spawn_teammate","args":["{\"name\":\"reviewer\",\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"context\":\"fresh\"}"]},{"type":"chunk","time":1790429365916,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-1","name":"spawn_teammate","arguments":"{\"name\":\"reviewer\",\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"context\":\"fresh\"}"}}},{"type":"chunk","time":1790429365916,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429365916,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"tool/call","data":{"turn":1,"step":1,"callId":"direct-1","name":"spawn_teammate","arguments":"{\"name\":\"reviewer\",\"description\":\"Check direct inbox delivery\",\"prompt\":\"Create the empty file team-ready, then wait in Bash until interrupted.\",\"context\":\"fresh\"}"}} +{"type":"team/member","data":{"version":2,"teamId":"{{session:1}}","member":{"id":"{{session:2}}","name":"reviewer","description":"Check direct inbox delivery","provider":"spawn","context":"fresh","phase":"provisioning"}}} +{"type":"subagent/catalog","data":{"version":0,"childId":"{{session:2}}","childCreatedAt":1790429365929,"mode":"continuable","label":"Check direct inbox delivery"}} +{"type":"team/member","data":{"version":2,"teamId":"{{session:1}}","member":{"id":"{{session:2}}","name":"reviewer","description":"Check direct inbox delivery","provider":"spawn","context":"fresh","phase":"active"}}} +{"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-1"},"toolCallId":"direct-1","content":[{"type":"text","text":"{\"member\":{\"target\":\"reviewer\",\"role\":\"teammate\",\"status\":\"running\",\"description\":\"Check direct inbox delivery\",\"provider\":\"spawn\",\"context\":\"fresh\",\"model\":\"deepseek-v4-flash\",\"diagnostics\":[]}}"}],"isError":false,"id":"{{message:5}}"}},"sourceEventSeqs":[14],"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":1}} +{"type":"step/start","data":{"turn":1,"step":2}} +{"type":"assistant/message","data":{"turn":1,"step":2,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:6}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429365995,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790429365995,"index":0,"dt":[],"id":"direct-2","name":"bash","args":["{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"]},{"type":"chunk","time":1790429365995,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}}},{"type":"chunk","time":1790429365995,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429365995,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"tool/call","data":{"turn":1,"step":2,"callId":"direct-2","name":"bash","arguments":"{\"command\":\"while [ ! -f team-ready ]; do sleep 0.01; done\",\"description\":\"Wait for the teammate to start\",\"timeoutMs\":60000}"}} +{"type":"tool/result","data":{"turn":1,"step":2,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-2"},"toolCallId":"direct-2","content":[{"type":"text","text":"(no output)"}],"isError":false,"id":"{{message:7}}"}},"sourceEventSeqs":[22],"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":2}} +{"type":"step/start","data":{"turn":1,"step":3}} +{"type":"assistant/message","data":{"turn":1,"step":3,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-3","name":"send_message","arguments":"{\"target\":\"reviewer\",\"message\":\"Review the direct inbox delivery.\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:8}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429366017,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790429366017,"index":0,"dt":[],"id":"direct-3","name":"send_message","args":["{\"target\":\"reviewer\",\"message\":\"Review the direct inbox delivery.\"}"]},{"type":"chunk","time":1790429366017,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-3","name":"send_message","arguments":"{\"target\":\"reviewer\",\"message\":\"Review the direct inbox delivery.\"}"}}},{"type":"chunk","time":1790429366017,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429366017,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"tool/call","data":{"turn":1,"step":3,"callId":"direct-3","name":"send_message","arguments":"{\"target\":\"reviewer\",\"message\":\"Review the direct inbox delivery.\"}"}} +{"type":"tool/result","data":{"turn":1,"step":3,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-3"},"toolCallId":"direct-3","content":[{"type":"text","text":"{\"messageId\":\"{{message:17}}\"}"}],"isError":false,"id":"{{message:9}}"}},"sourceEventSeqs":[27],"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":3}} +{"type":"step/start","data":{"turn":1,"step":4}} +{"type":"assistant/message","data":{"turn":1,"step":4,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-4","name":"interrupt_agent","arguments":"{\"target\":\"reviewer\"}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:10}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429366033,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790429366033,"index":0,"dt":[],"id":"direct-4","name":"interrupt_agent","args":["{\"target\":\"reviewer\"}"]},{"type":"chunk","time":1790429366033,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-4","name":"interrupt_agent","arguments":"{\"target\":\"reviewer\"}"}}},{"type":"chunk","time":1790429366033,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429366033,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} +{"type":"tool/call","data":{"turn":1,"step":4,"callId":"direct-4","name":"interrupt_agent","arguments":"{\"target\":\"reviewer\"}"}} +{"type":"tool/result","data":{"turn":1,"step":4,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-4"},"toolCallId":"direct-4","content":[{"type":"text","text":"{\"previousStatus\":\"running\"}"}],"isError":false,"id":"{{message:11}}"}},"sourceEventSeqs":[32],"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":4}} +{"type":"step/start","data":{"turn":1,"step":5}} +{"type":"assistant/message","data":{"turn":1,"step":5,"message":{"role":"assistant","content":[{"type":"text","text":"TEAM_DIRECT_INBOX_OK"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:12}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429366052,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1790429366052,"index":0,"dt":[],"texts":["TEAM_DIRECT_INBOX_OK"]},{"type":"chunk","time":1790429366052,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"TEAM_DIRECT_INBOX_OK"}}},{"type":"chunk","time":1790429366052,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429366052,"chunk":{"type":"finish","reason":{"kind":"stop"}}}]},"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":5}} +{"type":"turn/end","data":{"turn":1,"reason":{"kind":"completed"}}} diff --git a/snapshots/session/team-direct-inbox/snapshot.yml b/snapshots/session/team-direct-inbox/snapshot.yml new file mode 100644 index 0000000000..94e0d3d3c8 --- /dev/null +++ b/snapshots/session/team-direct-inbox/snapshot.yml @@ -0,0 +1,11 @@ +version: 1 +scenario: team-direct-inbox +profile: headless +composition: team-targets +recording: authored +header: + class: team-targets + systemPromptSource: team-targets + toolSchemasSource: team-targets +workspace: + final: true diff --git a/snapshots/session/team-direct-inbox/workspace.expected/team-ready b/snapshots/session/team-direct-inbox/workspace.expected/team-ready new file mode 100644 index 0000000000..e69de29bb2 From d190996167c2081c35527f04bd7a0bfe7283cd65 Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sat, 26 Sep 2026 22:39:30 +0800 Subject: [PATCH 007/155] docs(agent-team): keep merged architecture summary within budget --- docs/architecture.i18n.yaml | 4 ++-- docs/architecture.md | 2 +- docs/architecture.zh.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/architecture.i18n.yaml b/docs/architecture.i18n.yaml index 6b1f73c89a..49c987bcb0 100644 --- a/docs/architecture.i18n.yaml +++ b/docs/architecture.i18n.yaml @@ -30,8 +30,8 @@ en: e1e3a44140036f25 zh: 84c70c969e5ad216 /deepseek-harness-architecture/capability-seams: - en: c34e2531f90ac953 - zh: 5b8455374dea3ee0 + en: a5bc20c3f2a1b370 + zh: 91773a281410b2f4 /deepseek-harness-architecture/where-new-behavior-goes: en: 9b2eb0539a9cd0d6 zh: 4f575277b91d4e5c diff --git a/docs/architecture.md b/docs/architecture.md index 49d3bd747a..3d9fd3d41f 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -134,7 +134,7 @@ A **seam** is a swappable capability with three roles: a **Service Definition** Seams are why one provider swap changes the whole product. Filesystem and subprocess providers share one execution world, so pointing them at a remote sandbox moves Bash, PTY, and LSP with them, with no provider forks. [Subagent providers](subsystems/subagent.md) vary just as widely behind one interface, from a fresh child agent to a delegated turn in another product. -[Experimental Agent Teams](subsystems/agent-team.md) is a published opt-in coordination seam on `ctx.agentTeams`, with a durable roster and task board plus direct Agent inbox messaging layered over continuable subagents. +[Experimental Agent Teams](subsystems/agent-team.md) exposes opt-in `ctx.agentTeams` coordination with durable roster and task state plus direct inbox messaging over continuable subagents. ## Where new behavior goes diff --git a/docs/architecture.zh.md b/docs/architecture.zh.md index 5fdd122706..2a3557d78a 100644 --- a/docs/architecture.zh.md +++ b/docs/architecture.zh.md @@ -138,7 +138,7 @@ Session 消费方只了解当前逻辑格式。仅 header 的 `stat` 与 `list` seam 正是替换一个提供方就能改变整个产品的原因。文件系统与进程提供方共享同一个执行世界,因此把它们指向远程沙箱,也就把 Bash、PTY 和 LSP 一并搬了过去,无需提供方专用 fork。[subagent 提供方](subsystems/subagent.zh.md)在同一个接口之后同样千差万别,从新建一个子 agent,到把一个轮次委派给另一个产品。 -[实验性 Agent Teams](subsystems/agent-team.zh.md) 是 `ctx.agentTeams` 上公开发布、显式启用的协作 seam,在可继续 subagent 之上提供持久 roster、任务板和直接 Agent inbox 消息。 +[实验性 Agent Teams](subsystems/agent-team.zh.md) 通过显式启用的 `ctx.agentTeams`,在可继续 subagent 之上提供持久 roster、任务状态和直接 inbox 消息协作。 ## 新行为的归属位置 From a5098110cff77f81a700cc65918dd405e073b939 Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sun, 27 Sep 2026 15:01:00 +0800 Subject: [PATCH 008/155] refactor(agent-team): stop delivering historical mailbox records Historical team/message/queued and team/message/delivered records remain decodable and projected, but Team no longer drains or acknowledges them after restart. Remove the compatibility dispatcher, its disposal wait, and its tests, and document that historical pending mail stays undelivered. --- .../feature/2026-08-05-agent-teams.i18n.yaml | 20 +- .../feature/2026-08-05-agent-teams.md | 12 +- .../feature/2026-08-05-agent-teams.zh.md | 12 +- .../2026-09-26-team-direct-inbox.i18n.yaml | 12 +- .../2026-09-26-team-direct-inbox.md | 6 +- .../2026-09-26-team-direct-inbox.zh.md | 6 +- docs/persistence-catalog.md | 2 +- docs/persistence-catalog.zh.md | 2 +- docs/subsystems/agent-team.i18n.yaml | 8 +- docs/subsystems/agent-team.md | 10 +- docs/subsystems/agent-team.zh.md | 10 +- .../experimental/agent-team/README.i18n.yaml | 24 +- packages/experimental/agent-team/README.md | 13 +- packages/experimental/agent-team/README.zh.md | 13 +- packages/experimental/agent-team/src/index.ts | 18 +- .../experimental/agent-team/src/journal.ts | 2 +- .../agent-team/src/legacy-delivery.ts | 171 -------------- .../agent-team/src/session-message.ts | 2 +- packages/experimental/agent-team/src/types.ts | 6 +- .../agent-team/tests/persistence.spec.ts | 218 +----------------- .../agent-team/tests/team.spec.ts | 167 +------------- scripts/no-unknown-casts.baseline.json | 4 - 22 files changed, 97 insertions(+), 641 deletions(-) delete mode 100644 packages/experimental/agent-team/src/legacy-delivery.ts diff --git a/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml b/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml index d2426e9fbb..a27ff775d4 100644 --- a/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml @@ -18,11 +18,11 @@ en: 83e446c928a20c47 zh: b0a2bd24419dd815 /agent-note-durable-agent-teams-over-continuable-children/provisioning-and-recovery: - en: 085846d0078c0898 - zh: 40b2ca3ae6864451 + en: 4345ac9a6ac7ad04 + zh: 1d19ecbb128a75a3 /agent-note-durable-agent-teams-over-continuable-children/mailbox-and-task-transactions: - en: 0e01d2a330537a26 - zh: 356d9b813bed01b1 + en: bfc3063536837c0e + zh: 6b8e69ba85cc2bb1 /agent-note-durable-agent-teams-over-continuable-children/shared-checkout-boundary: en: 3969de3b44e412c8 zh: 12be5854816cb808 @@ -30,11 +30,11 @@ en: e6348054f024725b zh: 8740636e99940308 /agent-note-durable-agent-teams-over-continuable-children/alternatives-considered: - en: 90e46f71daed62f5 - zh: d5b56ff1fd7922c4 + en: 8cb2fd8839f5f8b7 + zh: e302ca03e569de65 /agent-note-durable-agent-teams-over-continuable-children/testing: - en: a91a802a64d991aa - zh: 575796b6cb30cdb9 + en: f129a73a5540f92a + zh: 83379711a2399411 /agent-note-durable-agent-teams-over-continuable-children/consequences: - en: 08d69eee4309e372 - zh: 81d8043b639a3cc5 + en: da9cd22b1185a793 + zh: e20d7ef9226f237f diff --git a/.agents/notes/implemented/feature/2026-08-05-agent-teams.md b/.agents/notes/implemented/feature/2026-08-05-agent-teams.md index 6a76f65bed..834d7c43f8 100644 --- a/.agents/notes/implemented/feature/2026-08-05-agent-teams.md +++ b/.agents/notes/implemented/feature/2026-08-05-agent-teams.md @@ -30,7 +30,7 @@ The `spawn_teammate` tool prefixes the initial task with a user-role ` = { #### `team/message/delivered` — log-only ```ts persistence-catalog -/** Compatibility acknowledgement that the target Session recorded a historical message. */ +/** Historical acknowledgement that the target Session recorded a queued message. */ 'team/message/delivered': { version: 2 teamId: TeamId diff --git a/docs/subsystems/agent-team.i18n.yaml b/docs/subsystems/agent-team.i18n.yaml index f71b6d9e2e..a4c599562f 100644 --- a/docs/subsystems/agent-team.i18n.yaml +++ b/docs/subsystems/agent-team.i18n.yaml @@ -9,8 +9,8 @@ en: df72d9409b89714d zh: 982934dd18864ca2 /agent-teams/messages-and-historical-mailbox: - en: 281959c512a3aded - zh: da8ae4aa725f56dd + en: 2aed7dd369f47747 + zh: 4f080e50c584ad37 /agent-teams/shared-task-dag: en: 4515005d07e4d2a3 zh: 26811b31f69009d6 @@ -18,5 +18,5 @@ en: 6af99eff8036597a zh: f172f994e01f12c1 /agent-teams/replay: - en: d391d07f2f2f72c9 - zh: 42917716a95d6daf + en: fe32f71c6d799ebc + zh: aa2b6ccddba8cfd5 diff --git a/docs/subsystems/agent-team.md b/docs/subsystems/agent-team.md index e8cf047591..c5c6a0f775 100644 --- a/docs/subsystems/agent-team.md +++ b/docs/subsystems/agent-team.md @@ -25,10 +25,10 @@ Every member starts in `provisioning` and reaches exactly one terminal roster ph ## Messages and historical mailbox -New sends return inbox acceptance or reject. The target stores the existing `agent-message` source with the real sender Session id and a sender-name content prefix. Team has no new-message outbox or resend deduplication. The [package contract](../../packages/experimental/agent-team/README.md#understand-the-implementation) defines persistence and recovery. The following mailbox types remain readable for historical pending delivery. +New sends return inbox acceptance or reject. The target stores the existing `agent-message` source with the real sender Session id and a sender-name content prefix. Team has no new-message outbox or resend deduplication. The [package contract](../../packages/experimental/agent-team/README.md#understand-the-implementation) defines persistence. The following mailbox types remain readable so historical Lead logs still replay; Team does not deliver their pending records. ```ts type-equiv -/** One peer message retained until its target Session records it. */ +/** One peer message recorded by the historical Team mailbox. */ interface TeamMessageSnapshot { readonly id: TeamMessageId readonly senderId: SessionId @@ -40,10 +40,10 @@ interface TeamMessageSnapshot { Every message attempts Steer delivery. A running target receives it at the nearest step boundary; an inactive target starts a turn if loaded or cold-resumes otherwise. Scheduling is not stored in the durable record because callers cannot select another mode. -Historical `team-message` sources retain the legacy message id and sender attribution. Compatibility recovery uses these fields to avoid duplicate delivery across target inbox and history. +Historical `team-message` sources retain the old message id and sender attribution; the client uses them for the message title and icon. ```ts type-equiv -/** Source retained by the target Session for durable mailbox de-duplication. */ +/** Source recorded by a target Session for one historical Team mailbox delivery. */ interface TeamMessageSource { readonly kind: 'team-message' readonly teamId: TeamId @@ -122,7 +122,7 @@ interface TeamProjection { ## Replay -The `agentTeam` Session projection replays one root Session into the roster, task board, and historical queued-minus-delivered mailbox. It selects records by `TeamId`, so events inherited by an ordinary fork retain the ancestor id and never enter the new root's state. Session event `seq` and `time` remain the ordering and timing record; Team snapshots do not duplicate them. Roster and task reads reach callers as views; pending mail stays internal to delivery and recovery. The package [README](../../packages/experimental/agent-team/README.md) owns operation, authorization, recovery, and limit behavior. +The `agentTeam` Session projection replays one root Session into the roster, task board, and historical queued-minus-delivered mailbox. It selects records by `TeamId`, so events inherited by an ordinary fork retain the ancestor id and never enter the new root's state. Session event `seq` and `time` remain the ordering and timing record; Team snapshots do not duplicate them. Roster and task reads reach callers as views; pending mail is not exposed to callers. The package [README](../../packages/experimental/agent-team/README.md) owns operation, authorization, recovery, and limit behavior. diff --git a/docs/subsystems/agent-team.zh.md b/docs/subsystems/agent-team.zh.md index 626309bc8f..2e3c0b040e 100644 --- a/docs/subsystems/agent-team.zh.md +++ b/docs/subsystems/agent-team.zh.md @@ -25,10 +25,10 @@ interface TeamMemberSnapshot { ## 消息与历史 mailbox -新发送返回 inbox 接收结果或拒绝。目标保存现有 `agent-message` source,包含真实发送者 Session id 和发送者名称正文前缀。Team 不为新消息提供 outbox 或重发去重。[包约定](../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义持久化与恢复。以下 mailbox 类型继续可读,以支持历史 pending 投递。 +新发送返回 inbox 接收结果或拒绝。目标保存现有 `agent-message` source,包含真实发送者 Session id 和发送者名称正文前缀。Team 不为新消息提供 outbox 或重发去重。[包约定](../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义持久化。以下 mailbox 类型继续可读,以便历史 Lead 日志仍能回放;Team 不投递其中的 pending 记录。 ```ts type-equiv -/** One peer message retained until its target Session records it. */ +/** One peer message recorded by the historical Team mailbox. */ interface TeamMessageSnapshot { readonly id: TeamMessageId readonly senderId: SessionId @@ -40,10 +40,10 @@ interface TeamMessageSnapshot { 每条消息都会尝试 Steer 投递。running target 在最近的步骤边界收到消息,inactive target 在已加载时启动一个轮次,否则冷恢复。调用方不能选择其他模式,因此持久记录不存储调度方式。 -历史 `team-message` source 保留旧消息 id 与发送者归属。兼容恢复使用这些字段在目标 inbox 与历史之间避免重复投递。 +历史 `team-message` source 保留旧消息 id 与发送者归属;客户端用它们展示消息标题和图标。 ```ts type-equiv -/** Source retained by the target Session for durable mailbox de-duplication. */ +/** Source recorded by a target Session for one historical Team mailbox delivery. */ interface TeamMessageSource { readonly kind: 'team-message' readonly teamId: TeamId @@ -122,7 +122,7 @@ interface TeamProjection { ## 回放 -`agentTeam` Session 投影把一个 Root Session 回放成roster、任务板与历史 queued-minus-delivered mailbox。它按 `TeamId` 选取记录,因此普通 fork 继承的 event 保留 ancestor id,绝不会进入新 Root 的状态。Session event 的 `seq` 与 `time` 继续负责顺序和时间记录,Team snapshot 不再重复保存它们。roster 与 task 读取以 view 形式到达调用方,而 pending 邮件仅供投递与恢复内部使用。包 [README](../../packages/experimental/agent-team/README.zh.md)负责 operation、authorization、recovery 和限制行为。 +`agentTeam` Session 投影把一个 Root Session 回放成roster、任务板与历史 queued-minus-delivered mailbox。它按 `TeamId` 选取记录,因此普通 fork 继承的 event 保留 ancestor id,绝不会进入新 Root 的状态。Session event 的 `seq` 与 `time` 继续负责顺序和时间记录,Team snapshot 不再重复保存它们。roster 与 task 读取以 view 形式到达调用方,而 pending 邮件不对调用方公开。包 [README](../../packages/experimental/agent-team/README.zh.md)负责 operation、authorization、recovery 和限制行为。 diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index b5137164e4..a4e6d5ae57 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -45,14 +45,14 @@ en: 4b154ca76747dd92 zh: 8fcd239fcf1c460b /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/source-map: - en: 39fc445dd624b453 - zh: 26dbdcb0067fbb07 + en: 494a387483075242 + zh: 4efee1e7e2070c6d /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/team-identity-and-roster: en: 2389048c1a494ed3 zh: 7e72acd6b83ea248 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/direct-messages-and-historical-compatibility: - en: 43d69c3e5f597a88 - zh: c776f66aae7c0950 + en: d11d01496b0ce7bf + zh: b9290a1ecff446a5 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/shared-task-board: en: 2dc37ba97a8a7178 zh: 96bd24033030e19d @@ -60,11 +60,11 @@ en: 29eebf85f25d8d8b zh: 6976a482f65b4989 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/durability-model: - en: f5161fff909de4db - zh: a463315d58f05c75 + en: 4c3aa6fa99b3bf40 + zh: ff5c6d5ac64fc05c /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/disposal: - en: daefac636194f387 - zh: 59420c5c2fbd5d52 + en: fd2f9feef559be51 + zh: 595f766907b810c2 /deepseek-ai-dsh-experimental-agent-team/further-exploration: en: 2bbfd4ffbaeedd00 zh: d1afb5d320b469a1 @@ -84,11 +84,11 @@ en: 37ec43beac34a6ad zh: 6cdcd89ccceea815 /deepseek-ai-dsh-experimental-agent-team/model-experience/peer-messages/kv-cache-effect: - en: ff845d434b857afe - zh: 04479bddf7650ede + en: af2993419835b838 + zh: b2a4fea055d5cdf4 /deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work: - en: 189747f1457bbd4d - zh: ef086145080e8047 + en: 2b6bbe3e4242d932 + zh: c1b33474c62f9674 /deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work/dev-note: en: 498e4cf9fe5741a7 zh: 9d2bab630e655c99 diff --git a/packages/experimental/agent-team/README.md b/packages/experimental/agent-team/README.md index cf20ef071a..ad8b144b3d 100644 --- a/packages/experimental/agent-team/README.md +++ b/packages/experimental/agent-team/README.md @@ -114,7 +114,6 @@ The [Agent Teams Agent Note](../../../.agents/notes/implemented/feature/2026-08- |---|---| | [`src/index.ts`](src/index.ts) | Plugin entry: `Config` schema, service registration, recovery scheduling | | [`src/roster.ts`](src/roster.ts) | Team identity, membership resolution, provisioning, and roster teardown | -| [`src/legacy-delivery.ts`](src/legacy-delivery.ts) | Compatibility drain for historical queued messages | | [`src/task-board.ts`](src/task-board.ts) | Task CAS commands, DAG validation, and derived views | | [`src/journal.ts`](src/journal.ts) | Serialized Lead-log transactions and commit notification | | [`src/projection.ts`](src/projection.ts) | Strict replay projection that decodes and validates Team events and publishes the `agentTeam` client view | @@ -129,7 +128,7 @@ Every ordinary runtime root is the implicit Lead of a Team whose `TeamId` equals ### Direct messages and historical compatibility -`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering or historical catch-up barrier; delivery order belongs to the target inbox. The client recognizes the recorded Team framing for its message title and icon. +`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering; delivery order belongs to the target inbox. The client recognizes the recorded Team framing for its message title and icon. Lead delivery calls `Agent.steer()` directly. Teammate delivery uses the continuation owner's host-only Steer path, which preserves the Team sender source while authorizing the Lead-to-child edge and cold-resuming inactive targets. Sibling messages never impersonate the Lead through the public adjacent-Agent messaging operation. @@ -143,15 +142,15 @@ Tasks are complete versioned snapshots; every mutation carries `expectedRevision ### Durability model -Roster and task mutations append `team/member` and `team/task` to the exact live Lead Session and flush before reporting success or waking waiters. Historical `team/message/queued` records remain readable; compatibility recovery writes `team/message/delivered` only after confirming a persisted target receipt. All four event types are log-only: they never enter the conversation surface, so derived model history is untouched by coordination records. Session event `seq` and `time` own ordering and timing; snapshots do not duplicate them. The `./invariant` companion replays each candidate Team event against its committed prefix and rejects invalid transitions before append. +Roster and task mutations append `team/member` and `team/task` to the exact live Lead Session and flush before reporting success or waking waiters. Historical `team/message/queued` and `team/message/delivered` records remain readable; Team writes neither. All four event types are log-only: they never enter the conversation surface, so derived model history is untouched by coordination records. Session event `seq` and `time` own ordering and timing; snapshots do not duplicate them. The `./invariant` companion replays each candidate Team event against its committed prefix and rejects invalid transitions before append. -Historical mailbox events and `team-message` sources remain readable. Plugin load schedules recovery for loaded members. Lead creation drains all old queued-minus-delivered records; teammate creation drains only records addressed to that teammate. Recovery checks target history and pending inbox before retrying and flushes target receipts before legacy acknowledgements. A failed item blocks later old items for the same target in that pass. Failures warn and retain pending data until a later load or Agent creation; there is no receipt listener or periodic retry. New sends do not directly invoke or await recovery; cold resume still triggers the target’s Agent-creation hook. Recovery passes serialize per Team and participate in disposal. +Historical mailbox events and `team-message` sources remain readable, and the projection still reports queued-minus-delivered records. Team never delivers or acknowledges them: a historical message that its target had not recorded stays undelivered. Mailbox projection and checkpoint admission preserve every decoded JSON field of accepted content outside the locally declared validators, including an own `__proto__` key. Local field checks cover `text`, `reasoning`, `image`, and `tool-call`; accepted unknown tags remain opaque. Team projection cache version 4 rebuilds checkpoints from earlier cache versions from the Session log; the Session format version is unchanged. ### Disposal -Disposal closes admission, aborts and awaits admitted sends, creations, and legacy recovery, then releases the roster’s live children and descendants. Non-Team children remain untouched. Admitted operations share one `disposalTimeoutMs` settlement deadline; each subsequent Team child drain has its own deadline. This value is not a whole-service shutdown bound. Cleanup failures are reported. +Disposal closes admission, aborts and awaits admitted sends and creations, then releases the roster’s live children and descendants. Non-Team children remain untouched. Admitted operations share one `disposalTimeoutMs` settlement deadline; each subsequent Team child drain has its own deadline. This value is not a whole-service shutdown bound. Cleanup failures are reported. @@ -191,7 +190,7 @@ Each peer delivery adds the sender prefix plus message content to the target his #### KV Cache effect -Peer messages append after the target's reusable history prefix. Cold resume reuses the persisted conversation before appending a previously undelivered item. +Peer messages append after the target's reusable history prefix. Cold resume reuses the persisted conversation before appending the new message. ## Known Limitations and Deferred Work @@ -206,7 +205,7 @@ These limits describe what a team cannot do yet or what needs special operationa - **Advisory write scopes** — Bash, formatters, code generators, and direct external writers can bypass filesystem version checks; Leads must coordinate ownership and review the final diff. - **Flat immutable roster** — only the Lead creates direct teammates; there is no nested Team, rename, deletion, or name reuse. - **No automatic ownership release** — inactivity, interruption, process exit, and failed work do not release a task owner. -- **No send retry guarantee** — Team does not retain or deduplicate new attempts; concurrent processes over one Team are unsupported. Historical mailbox decoding and recovery remain necessary for accepted old data. +- **No send retry guarantee** — Team does not retain or deduplicate new attempts; concurrent processes over one Team are unsupported. Historical queued messages that never reached their target are not delivered. ### Dev Note diff --git a/packages/experimental/agent-team/README.zh.md b/packages/experimental/agent-team/README.zh.md index 5e1a69cf8b..0a33bde69a 100644 --- a/packages/experimental/agent-team/README.zh.md +++ b/packages/experimental/agent-team/README.zh.md @@ -114,7 +114,6 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 |---|---| | [`src/index.ts`](src/index.ts) | 插件入口:`Config` schema、服务注册、恢复调度 | | [`src/roster.ts`](src/roster.ts) | Team 身份、成员关系解析、provisioning 与 roster 拆除 | -| [`src/legacy-delivery.ts`](src/legacy-delivery.ts) | 历史排队消息的兼容补送 | | [`src/task-board.ts`](src/task-board.ts) | 任务 CAS 命令、DAG 校验与派生视图 | | [`src/journal.ts`](src/journal.ts) | 串行化的 Lead 日志事务与提交通知 | | [`src/projection.ts`](src/projection.ts) | 解码并校验 Team 事件、发布 `agentTeam` 客户端视图的严格回放投影 | @@ -129,7 +128,7 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 直接消息与历史兼容 -`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序,也不等待历史消息补送;投递顺序由目标 inbox 管理。客户端识别已记录的 Team 前缀,以展示对应消息标题和图标。 +`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序;投递顺序由目标 inbox 管理。客户端识别已记录的 Team 前缀,以展示对应消息标题和图标。 投递给 Lead 时直接调用 `Agent.steer()`。投递给 teammate 时使用 continuation owner 的 host-only Steer 路径;该路径会保留 Team 发送者 source,同时授权 Lead-to-child edge 并冷恢复 inactive target。sibling 消息绝不会通过公开的相邻 Agent 消息操作伪装成 Lead。 @@ -143,15 +142,15 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 持久性模型 -roster 与任务变更将 `team/member` 和 `team/task` 追加到精确的 live Lead 会话,并在报告成功或唤醒等待者之前 flush。历史 `team/message/queued` 记录仍可读取;兼容恢复仅在确认目标回执已持久化后写入 `team/message/delivered`。这四种事件仅存在于日志:它们从不进入会话表面,因此派生模型历史不受协作记录影响。顺序与时间由会话事件的 `seq` 与 `time` 负责,快照不重复保存。`./invariant` 伴生插件把每条候选 Team 事件对照已提交前缀回放,并在 append 前拒绝非法转换。 +roster 与任务变更将 `team/member` 和 `team/task` 追加到精确的 live Lead 会话,并在报告成功或唤醒等待者之前 flush。历史 `team/message/queued` 与 `team/message/delivered` 记录仍可读取;Team 不再写入这两种记录。这四种事件仅存在于日志:它们从不进入会话表面,因此派生模型历史不受协作记录影响。顺序与时间由会话事件的 `seq` 与 `time` 负责,快照不重复保存。`./invariant` 伴生插件把每条候选 Team 事件对照已提交前缀回放,并在 append 前拒绝非法转换。 -历史 mailbox 事件与 `team-message` source 仍可读取。插件加载为已加载的成员安排恢复。Lead 创建补送全部旧 queued-minus-delivered 记录;teammate 创建仅补送发给该 teammate 的记录。恢复在重试前检查目标历史与 pending inbox,并在旧确认前 flush 目标回执。一项失败会阻止本轮中发给同一目标的后续旧项。失败会记录警告,并保留 pending 数据,直到后续加载或 Agent 创建;没有收据监听器或定时重试。新发送不直接调用或等待恢复;冷恢复仍会触发目标的 Agent 创建钩子。恢复按 Team 串行执行,并参与 dispose 等待。 +历史 mailbox 事件与 `team-message` source 仍可读取,投影仍报告 queued-minus-delivered 记录。Team 不会投递或确认这些记录:目标尚未记录的历史消息保持未投递。 Mailbox 投影与 checkpoint 准入保留本地声明的校验器之外获准内容中全部已解码 JSON 字段,包括自有 `__proto__` 键。本地字段检查覆盖 `text`、`reasoning`、`image` 和 `tool-call`;获准的未知标签保持不透明。Team 投影缓存版本 4 从 Session 日志重建较早缓存版本的 checkpoint;Session 格式版本保持不变。 ### Dispose -dispose 关闭准入,中止并等待已获准的发送、创建和旧消息恢复,然后释放 roster 中的 live child 及其后代。非 Team child 不受影响。已获准操作共享一个 `disposalTimeoutMs` 等待期限;随后每个 Team 的 child drain 各有独立期限。此值不是整个服务关闭的总时限。清理失败会明确报告。 +dispose 关闭准入,中止并等待已获准的发送和创建,然后释放 roster 中的 live child 及其后代。非 Team child 不受影响。已获准操作共享一个 `disposalTimeoutMs` 等待期限;随后每个 Team 的 child drain 各有独立期限。此值不是整个服务关闭的总时限。清理失败会明确报告。 @@ -191,7 +190,7 @@ dispose 关闭准入,中止并等待已获准的发送、创建和旧消息恢 #### KV Cache 影响 -Peer 消息追加在 target 可复用历史前缀之后。冷恢复会先复用持久对话,再追加尚未投递的消息。 +Peer 消息追加在 target 可复用历史前缀之后。冷恢复会先复用持久对话,再追加新消息。 ## 已知限制与延期工作 @@ -206,7 +205,7 @@ Peer 消息追加在 target 可复用历史前缀之后。冷恢复会先复用 - **write scope 仅作提示**——Bash、formatter、代码生成器与直接外部写入可以绕过文件版本检查;Lead 必须协调 owner 并检查最终 diff。 - **扁平且不可变的 roster**——只有 Lead 可以创建直接 teammate;不支持嵌套 Team、重命名、删除或名字复用。 - **不会自动释放 owner**——成员不活动、interrupt、进程退出与工作失败都不会释放任务 owner。 -- **无发送重试保证**——Team 不保留新尝试,也不对其去重;不支持多个进程同时操作一个 Team。已接受的旧数据仍需要历史 mailbox 解码与恢复。 +- **无发送重试保证**——Team 不保留新尝试,也不对其去重;不支持多个进程同时操作一个 Team。从未到达目标的历史排队消息不会被投递。 ### 开发备注 diff --git a/packages/experimental/agent-team/src/index.ts b/packages/experimental/agent-team/src/index.ts index 9c8c41e93e..b7abc1d1f5 100644 --- a/packages/experimental/agent-team/src/index.ts +++ b/packages/experimental/agent-team/src/index.ts @@ -10,7 +10,6 @@ import { TeamActivity } from './activity.ts' import { errorMessage, TeamError } from './error.ts' import { TeamJournal } from './journal.ts' import { TeamRuntimeLifecycle } from './lifecycle.ts' -import { LegacyTeamDelivery } from './legacy-delivery.ts' import { teamProjectionDefinition } from './projection.ts' import { resolveActiveMember, TeamRoster } from './roster.ts' import type { TeamMembership } from './roster.ts' @@ -71,7 +70,6 @@ export class TeamService extends Service { private readonly lifecycle: TeamRuntimeLifecycle private readonly journal: TeamJournal private readonly roster: TeamRoster - private readonly legacyDelivery: LegacyTeamDelivery private readonly tasks: TeamTaskBoard constructor(ctx: Context, config: Config = {}) { @@ -90,11 +88,6 @@ export class TeamService extends Service { this.lifecycle = new TeamRuntimeLifecycle(this.config.disposalTimeoutMs) this.journal = new TeamJournal(ctx, (root) => { this.activity.notify(TeamId(root.id)) }) this.roster = new TeamRoster(ctx, this.journal, this.lifecycle, this.config.maxMembers) - this.legacyDelivery = new LegacyTeamDelivery( - ctx, - this.journal, - this.roster, - ) this.tasks = new TeamTaskBoard(this.journal, this.config.maxTasks) ctx.on('agent/created', ({ agent }) => { this.scheduleRecovery(agent) }) @@ -254,23 +247,17 @@ export class TeamService extends Service { return { messageId } } - /** Queue one contained recovery pass after publication has unwound. */ + /** Queue one contained provisioning reconciliation after publication has unwound. */ private scheduleRecovery(agent: Agent): void { queueMicrotask(() => { if (this.lifecycle.disposed) return - void this.recoverFor(agent).catch((error: unknown) => { + void this.roster.recoverFor(agent, this.lifecycle.signal).catch((error: unknown) => { if (this.lifecycle.disposed) return this.ctx.logger.warn(`Agent Teams recovery for "${agent.id}" failed: ${errorMessage(error)}`) }) }) } - /** Reconcile provisioning and drain only historical Team mailbox records. */ - private async recoverFor(agent: Agent): Promise { - await this.roster.recoverFor(agent, this.lifecycle.signal) - await this.legacyDelivery.recoverFor(agent, this.lifecycle.signal) - } - /** Stop Team-owned live branches and release every waiter before service disposal completes. */ private async disposeRuntime(): Promise { this.lifecycle.close() @@ -280,7 +267,6 @@ export class TeamService extends Service { await this.lifecycle.settle([ ...this.lifecycle.pending(), ...this.roster.pendingCreations(), - ...this.legacyDelivery.pendingDispatches(), ], failures) for (const [root, childIds] of this.roster.liveChildrenByRoot()) { try { diff --git a/packages/experimental/agent-team/src/journal.ts b/packages/experimental/agent-team/src/journal.ts index 339b83e419..f69ac376b8 100644 --- a/packages/experimental/agent-team/src/journal.ts +++ b/packages/experimental/agent-team/src/journal.ts @@ -6,7 +6,7 @@ import type { SessionEventMap, SessionId } from '@deepseek-ai/dsh-session' import type { TeamEventType, TeamState } from './projection.ts' type AppendTeamEvent = (type: T, data: SessionEventMap[T]) => void -type MutableTeamEventType = 'team/member' | 'team/task' | 'team/message/delivered' +type MutableTeamEventType = 'team/member' | 'team/task' /** Owns per-Lead transaction order and committed Team event publication. */ export class TeamJournal { diff --git a/packages/experimental/agent-team/src/legacy-delivery.ts b/packages/experimental/agent-team/src/legacy-delivery.ts deleted file mode 100644 index e4e29015df..0000000000 --- a/packages/experimental/agent-team/src/legacy-delivery.ts +++ /dev/null @@ -1,171 +0,0 @@ -/** Compatibility delivery for pending messages written by the historical Team mailbox. */ - -import type { Context } from '@deepseek-ai/cordis' -import type { Agent } from '@deepseek-ai/dsh-agent' -import { createUserMessage } from '@deepseek-ai/dsh-llm' -import type { ContentBlock } from '@deepseek-ai/dsh-llm' -import type { Session, SessionId } from '@deepseek-ai/dsh-session' -import { steerHostSubagentPrompt } from '@deepseek-ai/dsh-subagent/internal' -import { errorMessage } from './error.ts' -import type { TeamJournal } from './journal.ts' -import { readPersistedSession } from './persisted.ts' -import type { TeamRoster } from './roster.ts' -import { messageAccepted } from './session-message.ts' -import { TeamId } from './types.ts' -import type { TeamMessageId, TeamMessageSnapshot } from './types.ts' - -/** Drains historical queued records without admitting new Team mailbox writes. */ -export class LegacyTeamDelivery { - private readonly recoveries = new Map>() - - /** - * @param ctx - Team service context with Agent, Session, persistence, and subagent services. - * @param journal - authoritative Lead-log transaction owner. - * @param roster - Team membership and member-name resolver. - */ - constructor( - private readonly ctx: Context, - private readonly journal: TeamJournal, - private readonly roster: TeamRoster, - ) {} - - /** - * Retry durable pending messages relevant to one started Team member. - * @param agent - newly started exact live Agent. - * @param signal - shared runtime cancellation. - */ - async recoverFor(agent: Agent, signal: AbortSignal): Promise { - signal.throwIfAborted() - const membership = this.roster.tryMembership(agent) - if (membership === undefined) return - const root = membership.root - const existing = this.recoveries.get(root.id) - if (existing !== undefined) { - await existing - await this.recoverFor(agent, signal) - return - } - const operation = Promise.resolve().then(async () => { - const state = this.journal.state(root) - // A failed old message must not be overtaken by later messages to its target. - const blockedTargets = new Set() - for (const message of state.messages) { - if (membership.role !== 'lead' && message.targetId !== agent.id) continue - if (state.delivered.includes(message.id) || blockedTargets.has(message.targetId)) continue - signal.throwIfAborted() - if (!await this.dispatchOnce(root, message, signal)) blockedTargets.add(message.targetId) - } - }) - this.recoveries.set(root.id, operation) - try { - await operation - } finally { - this.recoveries.delete(root.id) - } - } - - /** - * Return admitted legacy recovery operations for runtime disposal. - * @returns a detached snapshot of ongoing recovery passes. - */ - pendingDispatches(): readonly Promise[] { - return [...this.recoveries.values()] - } - - /** Attempt one historical delivery, retaining its pending record on failure. */ - private async dispatchOnce(root: Agent, message: TeamMessageSnapshot, signal: AbortSignal): Promise { - try { - const target = message.targetId === root.id ? root : this.ctx.agents.get(message.targetId) - if (target !== undefined && this.targetRecorded(target.session, message.id)) { - return await this.checkpointDelivered(root, target.session, message.id) - } - const source = { - kind: 'team-message' as const, - teamId: TeamId(root.id), - messageId: message.id, - senderId: message.senderId, - senderName: message.senderName, - } - const content = this.deliveryContent(message) - if (message.targetId === root.id) { - const input = createUserMessage({ content, source }) - root.steer(input) - return await this.checkpointDelivered(root, root.session, message.id) - } - if (target === undefined) { - const recorded = await this.persistedTargetRecorded(message.targetId, message.id, signal) - if (recorded === undefined) return false - if (recorded) { - await this.markDelivered(root, message.id, message.targetId) - return true - } - } - await steerHostSubagentPrompt(this.ctx.subagents, root, message.targetId, content, source, signal) - const resumed = this.ctx.agents.get(message.targetId) - if (resumed !== undefined) return await this.checkpointDelivered(root, resumed.session, message.id) - if (!await this.persistedTargetRecorded(message.targetId, message.id, signal)) return false - await this.markDelivered(root, message.id, message.targetId) - return true - } catch (error: unknown) { - this.ctx.logger.warn(`team message "${message.id}" remains queued: ${errorMessage(error)}`) - return false - } - } - - /** Flush one live target receipt before the Lead records its delivered edge. */ - private async checkpointDelivered( - root: Agent, - target: Session, - messageId: TeamMessageId, - ): Promise { - await this.ctx.sessions.flush(target) - if (!this.targetRecorded(target, messageId)) return false - await this.markDelivered(root, messageId, target.id) - return true - } - - /** Record the receipt selected by the serialized recovery pass. */ - private async markDelivered(root: Agent, messageId: TeamMessageId, targetId: SessionId): Promise { - await this.journal.transact(root.id, async () => { - await this.journal.appendAndFlush(root, 'team/message/delivered', { - version: 2, - teamId: TeamId(root.id), - messageId, - targetId, - }) - }) - } - - /** Whether a target Session already contains the durable message identity. */ - private targetRecorded(session: Session, messageId: TeamMessageId): boolean { - // oxlint-disable-next-line typescript/no-deprecated -- Existing Session history read; migration deferred. - const suffix = session.snapshotEvents(session.inheritedEventCount) - return messageAccepted(suffix, message => message.source.kind === 'team-message' - && message.source.messageId === messageId) - } - - /** Frame peer content with stable sender and message identity for the receiving model. */ - private deliveryContent(message: TeamMessageSnapshot): ContentBlock[] { - return [ - { type: 'text', text: `Team message ${message.id} from ${message.senderName}:` }, - ...structuredClone(message.content), - ] - } - - /** Read an inactive target's durable log before cold resume; uncertainty keeps the mailbox queued. */ - private async persistedTargetRecorded( - targetId: SessionId, - messageId: TeamMessageId, - signal: AbortSignal, - ): Promise { - try { - const stored = await readPersistedSession(this.ctx.sessionPersistence, targetId, signal) - const suffix = stored.events.slice(stored.inheritedEventCount) - return messageAccepted(suffix, message => message.source.kind === 'team-message' - && message.source.messageId === messageId) - } catch (error: unknown) { - this.ctx.logger.warn(`cannot read Team message target "${targetId}": ${errorMessage(error)}`) - return undefined - } - } -} diff --git a/packages/experimental/agent-team/src/session-message.ts b/packages/experimental/agent-team/src/session-message.ts index 1942c37352..8ac5245967 100644 --- a/packages/experimental/agent-team/src/session-message.ts +++ b/packages/experimental/agent-team/src/session-message.ts @@ -1,4 +1,4 @@ -/** Durable Session-message acceptance checks shared by provisioning and mailbox recovery. */ +/** Durable Session-message acceptance checks for teammate provisioning. */ import type { UserMessage } from '@deepseek-ai/dsh-llm' import type { SessionEvent } from '@deepseek-ai/dsh-session' diff --git a/packages/experimental/agent-team/src/types.ts b/packages/experimental/agent-team/src/types.ts index e41faab2d2..465f6bbf12 100644 --- a/packages/experimental/agent-team/src/types.ts +++ b/packages/experimental/agent-team/src/types.ts @@ -125,7 +125,7 @@ declare module '@deepseek-ai/dsh-session-projection/types' { } } -/** One peer message retained until its target Session records it. */ +/** One peer message recorded by the historical Team mailbox. */ export interface TeamMessageSnapshot { readonly id: TeamMessageId readonly senderId: SessionId @@ -134,7 +134,7 @@ export interface TeamMessageSnapshot { readonly content: ContentBlock[] } -/** Source retained by the target Session for durable mailbox de-duplication. */ +/** Source recorded by a target Session for one historical Team mailbox delivery. */ export interface TeamMessageSource { readonly kind: 'team-message' readonly teamId: TeamId @@ -232,7 +232,7 @@ declare module '@deepseek-ai/dsh-session/types' { 'team/task': { version: 2; teamId: TeamId; task: TeamTaskSnapshot } /** Historical mailbox enqueue; new sends use the target Agent inbox. */ 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot } - /** Compatibility acknowledgement that the target Session recorded a historical message. */ + /** Historical acknowledgement that the target Session recorded a queued message. */ 'team/message/delivered': { version: 2 teamId: TeamId diff --git a/packages/experimental/agent-team/tests/persistence.spec.ts b/packages/experimental/agent-team/tests/persistence.spec.ts index 46498ccfd2..c72ff4c437 100644 --- a/packages/experimental/agent-team/tests/persistence.spec.ts +++ b/packages/experimental/agent-team/tests/persistence.spec.ts @@ -4,7 +4,7 @@ import { rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { Context } from '@deepseek-ai/cordis' -import type { Agent, AgentHandle } from '@deepseek-ai/dsh-agent' +import type { Agent } from '@deepseek-ai/dsh-agent' import AgentLoop from '@deepseek-ai/dsh-agent-loop' import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-testkit' import { createUserMessage } from '@deepseek-ai/dsh-llm' @@ -14,7 +14,6 @@ import SubagentService, { snapshotSubagentDescriptor } from '@deepseek-ai/dsh-su import * as SubagentSpawn from '@deepseek-ai/dsh-subagent-spawn-in-process' import { MockAdapter, textResponse } from '../../../core/agent-loop/tests/mock-adapter.ts' import TeamService, { TeamId, TeamMessageId } from '../src/index.ts' -import type { LegacyTeamDelivery } from '../src/legacy-delivery.ts' import { readPersistedSession } from '../src/persisted.ts' import { teamProjectionDefinition } from '../src/projection.ts' import type { TeamMemberSnapshot, TeamMessageSnapshot, TeamTaskSnapshot } from '../src/index.ts' @@ -52,12 +51,6 @@ async function storedEvents(ctx: Context, id: SessionId): Promise { - const { legacyDelivery } = ctx.agentTeams as unknown as { readonly legacyDelivery: LegacyTeamDelivery } - await Promise.all(legacyDelivery.pendingDispatches()) -} - async function disposeContext(ctx: Context): Promise { try { await ctx.fiber.dispose() @@ -316,7 +309,7 @@ for (const backend of backends) { await second.dispose() }) - it('retries queued mail through cold-resume Steer after restart', { + it('keeps historical queued mail readable without delivering it after restart', { timeout: PERSISTENCE_TEST_TIMEOUT_MS, }, async () => { const storageRoot = mkdtempSync(join(tmpdir(), `dsh-team-mail-${backend.name.toLowerCase()}-`)) @@ -327,219 +320,32 @@ for (const backend of backends) { const firstLead = await first.ctx.agentLoop.create(rootId, { provider: 'mock', model: 'mock' }) const started = await first.ctx.agentTeams.spawnTeammate(firstLead, { name: 'mail-worker', - description: 'mail recovery worker', + description: 'historical mailbox target', prompt: [{ type: 'text', text: 'finish before restart' }], context: 'fresh', provider: 'spawn', signal: SIGNAL, }) await vi.waitFor(() => { expect(first.ctx.agents.get(started.member.id)).toBeUndefined() }, { timeout: 5_000 }) - const queued = { messageId: TeamMessageId('legacy-pending') } - firstLead.session.append('team/message/queued', { - version: 2, teamId: TeamId(rootId), message: { - id: queued.messageId, senderId: rootId, senderName: 'lead', targetId: started.member.id, - content: [{ type: 'text', text: 'durable retry context' }], - }, - }) + const message = { + id: TeamMessageId('legacy-pending'), senderId: rootId, senderName: 'lead', targetId: started.member.id, + content: [{ type: 'text' as const, text: 'historical pending context' }], + } + firstLead.session.append('team/message/queued', { version: 2, teamId: TeamId(rootId), message }) await first.ctx.sessions.flush(firstLead.session) await first.dispose() - const second = await stack(backend, storageRoot, [textResponse('resumed teammate answer')]) + const second = await stack(backend, storageRoot, []) const rootHandle = await second.ctx.agents.resume({ resumeSessionId: rootId, agentOptions: { provider: 'mock', model: 'mock' }, }) - await vi.waitFor(() => { expect(second.ctx.agents.get(started.member.id)).toBeUndefined() }, { timeout: 5_000 }) - await vi.waitFor(() => { expect(durable(rootHandle.agent).pendingMessages).toEqual([]) }) - - const child = await storedEvents(second.ctx, started.member.id) - const peerIds = child.flatMap(event => event.type === 'user/message' - && event.data.source.kind === 'team-message' - ? [event.data.source.messageId] - : []) - expect(peerIds).toEqual([queued.messageId]) - - await rootHandle.dispose() - await second.dispose() - }) - - it('acknowledges target-recorded mail after restart without delivering it twice', { - timeout: PERSISTENCE_TEST_TIMEOUT_MS, - }, async () => { - const storageRoot = mkdtempSync(join(tmpdir(), `dsh-team-dedup-${backend.name.toLowerCase()}-`)) - roots.push(storageRoot) - const rootId = SessionId(`${backend.name.toLowerCase()}-dedup-root`) - const messageId = TeamMessageId(`${backend.name.toLowerCase()}-recorded-message`) - - const first = await stack(backend, storageRoot, [textResponse('initial teammate answer')]) - const firstLead = await first.ctx.agentLoop.create(rootId, { provider: 'mock', model: 'mock' }) - const started = await first.ctx.agentTeams.spawnTeammate(firstLead, { - name: 'dedup-worker', - description: 'mail deduplication worker', - prompt: [{ type: 'text', text: 'finish before the crash window' }], - context: 'fresh', - provider: 'spawn', - signal: SIGNAL, - }) - await vi.waitFor(() => { expect(first.ctx.agents.get(started.member.id)).toBeUndefined() }, { timeout: 5_000 }) - - const targetHandle = await first.ctx.agents.resume({ - resumeSessionId: started.member.id, - agentOptions: { provider: 'mock', model: 'mock' }, - }) - targetHandle.agent.session.append('user/message', createUserMessage({ - content: [ - { type: 'text', text: `Team message ${messageId} from lead:` }, - { type: 'text', text: 'already recorded before acknowledgement' }, - ], - source: { - kind: 'team-message', - teamId: TeamId(rootId), - messageId, - senderId: rootId, - senderName: 'lead', - }, - }), { surfaceOp: 'append' }) - await first.ctx.sessions.flush(targetHandle.agent.session) - // Finish the target observer before writing the crash-only queued prefix. - await settleMailbox(first.ctx) - await targetHandle.dispose() - - const queued: TeamMessageSnapshot = { - id: messageId, - senderId: rootId, - senderName: 'lead', - targetId: started.member.id, - content: [{ type: 'text', text: 'already recorded before acknowledgement' }], - } - firstLead.session.append('team/message/queued', { - version: 2, - teamId: TeamId(rootId), - message: queued, - }) - await first.ctx.sessions.flush(firstLead.session) - expect(durable(firstLead).pendingMessages.map(message => message.id)).toEqual([messageId]) - await first.dispose() - - const second = await stack(backend, storageRoot, []) - const { legacyDelivery } = second.ctx.agentTeams as unknown as { readonly legacyDelivery: LegacyTeamDelivery } - const flush = second.ctx.sessions.flush.bind(second.ctx.sessions) - const checkpointEntered = Promise.withResolvers() - const releaseCheckpoint = Promise.withResolvers() - const delayedCheckpoint = vi.spyOn(second.ctx.sessions, 'flush').mockImplementation(async (session) => { - if (session.id === rootId && session.snapshotEvents().some(event => - event.type === 'team/message/delivered' && event.data.messageId === messageId)) { - checkpointEntered.resolve(undefined) - await releaseCheckpoint.promise - } - return await flush(session) - }) - let rootHandle: AgentHandle - try { - rootHandle = await second.ctx.agents.resume({ - resumeSessionId: rootId, - agentOptions: { provider: 'mock', model: 'mock' }, - }) - await checkpointEntered.promise - expect(durable(rootHandle.agent).pendingMessages).toEqual([]) - expect(legacyDelivery.pendingDispatches().length).toBeGreaterThan(0) - let settled = false - const settlement = settleMailbox(second.ctx).then(() => { settled = true }) - await Promise.resolve() - expect(settled).toBe(false) - releaseCheckpoint.resolve(undefined) - await settlement - } finally { - releaseCheckpoint.resolve(undefined) - try { - await settleMailbox(second.ctx) - } finally { - delayedCheckpoint.mockRestore() - } - } + expect(durable(rootHandle.agent).pendingMessages).toEqual([message]) expect(second.ctx.agents.get(started.member.id)).toBeUndefined() - expect(second.adapter.requests).toEqual([]) - const child = await storedEvents(second.ctx, started.member.id) - const occurrences = child.filter(event => event.type === 'user/message' - && event.data.source.kind === 'team-message' - && event.data.source.messageId === messageId) - expect(occurrences).toHaveLength(1) - - await rootHandle.dispose() - await second.dispose() - }) - - it('acknowledges durably pending target mail without cold-resume duplication', { - timeout: PERSISTENCE_TEST_TIMEOUT_MS, - }, async () => { - const storageRoot = mkdtempSync(join(tmpdir(), `dsh-team-inbox-${backend.name.toLowerCase()}-`)) - roots.push(storageRoot) - const rootId = SessionId(`${backend.name.toLowerCase()}-inbox-root`) - const childId = SessionId(`${backend.name.toLowerCase()}-inbox-child`) - const messageId = TeamMessageId(`${backend.name.toLowerCase()}-pending-team-message`) - const first = await stack(backend, storageRoot, []) - const root = await first.ctx.agentLoop.create(rootId, { provider: 'mock', model: 'mock' }) - await Promise.resolve() - await Promise.resolve() - const provisioned = provisioning(childId, 'pending-mail-worker') - const active: TeamMemberSnapshot = { - ...provisioned, - phase: 'active', - } - const queued: TeamMessageSnapshot = { - id: messageId, - senderId: rootId, - senderName: 'lead', - targetId: childId, - content: [{ type: 'text', text: 'already durable in target inbox' }], - } - root.session.append('team/member', { - version: 2, - teamId: TeamId(root.id), - member: provisioned, - }) - root.session.append('team/member', { - version: 2, - teamId: TeamId(root.id), - member: active, - }) - root.session.append('team/message/queued', { - version: 2, - teamId: TeamId(root.id), - message: queued, - }) - const pending = createUserMessage({ - content: [{ type: 'text', text: 'already durable in target inbox' }], - source: { - kind: 'team-message', - teamId: TeamId(rootId), - messageId, - senderId: rootId, - senderName: 'lead', - }, - }) - await persistedChild(first.ctx, rootId, childId, pending) - await first.ctx.sessions.flush(root.session) - await first.dispose() - - const second = await stack(backend, storageRoot, []) - const rootHandle = await second.ctx.agents.resume({ - resumeSessionId: rootId, - agentOptions: { provider: 'mock', model: 'mock' }, - }) - await vi.waitFor(() => { - expect(durable(rootHandle.agent).pendingMessages).toEqual([]) - }) - await settleMailbox(second.ctx) + expect(child.some(event => event.type === 'user/message' + && event.data.source.kind === 'team-message')).toBe(false) expect(second.adapter.requests).toEqual([]) - expect(second.ctx.agents.get(childId)).toBeUndefined() - const stored = await storedEvents(second.ctx, childId) - const pendingCopies = stored.flatMap(event => event.type === 'agent/inbox/spliced' - ? event.data.inserted.filter(message => message.source.kind === 'team-message' - && message.source.messageId === messageId) - : []) - expect(pendingCopies).toHaveLength(1) await rootHandle.dispose() await second.dispose() diff --git a/packages/experimental/agent-team/tests/team.spec.ts b/packages/experimental/agent-team/tests/team.spec.ts index 1c7ab55335..e20f52c096 100644 --- a/packages/experimental/agent-team/tests/team.spec.ts +++ b/packages/experimental/agent-team/tests/team.spec.ts @@ -15,7 +15,6 @@ import * as SubagentFork from '@deepseek-ai/dsh-subagent-fork-in-process' import * as SubagentSpawn from '@deepseek-ai/dsh-subagent-spawn-in-process' import { MockAdapter, textResponse } from '../../../core/agent-loop/tests/mock-adapter.ts' import TeamService, { TeamError, TeamId, TeamMessageId, TeamTaskId } from '../src/index.ts' -import type { LegacyTeamDelivery } from '../src/legacy-delivery.ts' import { TeamRuntimeLifecycle } from '../src/lifecycle.ts' import { teamProjectionDefinition } from '../src/projection.ts' import type { TeamMemberSnapshot, TeamMessageSnapshot, TeamTaskSnapshot } from '../src/index.ts' @@ -85,19 +84,18 @@ function content(text: string) { } interface TeamServiceInternals { - readonly legacyDelivery: LegacyTeamDelivery readonly lifecycle: TeamRuntimeLifecycle readonly roster: { readonly inFlightCreations: Set> checkpointInitialPrompt(childId: SessionId, messageId: string, signal: AbortSignal): Promise reconcileProvisioning(root: Agent, signal: AbortSignal): Promise + recoverFor(agent: Agent, signal: AbortSignal): Promise liveChildrenByRoot(): Map } readonly journal: { state(root: Agent): unknown } disposeRuntime(): Promise - recoverFor(agent: Agent): Promise scheduleRecovery(agent: Agent): void } @@ -879,161 +877,6 @@ describe('Team shared task DAG', () => { }) }) -describe('Historical Team message compatibility', () => { - function enqueue(lead: Agent, id: string, targetId: SessionId): TeamMessageSnapshot { - const message = { id: TeamMessageId(id), senderId: lead.id, senderName: 'lead', targetId, content: content(id) } - lead.session.append('team/message/queued', { version: 2, teamId: TeamId(lead.id), message }) - return message - } - - it('drains historical Lead and live-target messages once, including accepted pending receipts', async () => { - const { ctx, lead } = await setup(['hang', 'hang']) - const target = await waitRunning(ctx, (await spawn(ctx, lead, 'target')).member.id) - const recovery = teamInternals(ctx).legacyDelivery - await recovery.recoverFor(lead, SIGNAL) - const recorded = enqueue(lead, 'recorded', target.id) - target.steer(createUserMessage({ content: recorded.content, source: { - kind: 'team-message', teamId: TeamId(lead.id), messageId: recorded.id, senderId: lead.id, senderName: 'lead', - } })) - enqueue(lead, 'live', target.id) - enqueue(lead, 'report', lead.id) - await recovery.recoverFor(lead, SIGNAL) - expect(durable(lead).pendingMessages).toEqual([]) - const count = target.inbox.nextStep.length - await recovery.recoverFor(lead, SIGNAL) - expect(target.inbox.nextStep).toHaveLength(count) - lead.cancel({ kind: 'parent' }) - await lead.whenIdle() - }) - - it('recovers only the newly created teammate target through the Agent lifecycle', async () => { - const { ctx, lead } = await setup(['hang', textResponse('initial'), textResponse('other initial'), 'hang']) - lead.followup(createUserMessage({ content: content('busy lead'), source: { kind: 'user' } })) - await waitRunning(ctx, lead.id) - const target = await spawn(ctx, lead, 'target') - await waitNoAgent(ctx, target.member.id) - const other = await spawn(ctx, lead, 'other') - await waitNoAgent(ctx, other.member.id) - const message = enqueue(lead, 'target-old', target.member.id) - const untouched = enqueue(lead, 'other-old', other.member.id) - const accepted = await ctx.agentTeams.sendMessage(lead, { target: 'target', content: content('resume'), signal: SIGNAL }) - await vi.waitFor(() => { expect(durable(lead).pendingMessages.map(item => item.id)).toEqual([untouched.id]) }) - const live = await waitRunning(ctx, target.member.id) - const recorded = [...live.inbox.nextStep, ...live.session.snapshotEvents().flatMap(event => event.type === 'user/message' ? [event.data] : [])] - expect(recorded.some(item => item.id === accepted.messageId)).toBe(true) - expect(recorded.filter(item => item.source.kind === 'team-message' && item.source.messageId === message.id)).toHaveLength(1) - expect(ctx.agents.get(other.member.id)).toBeUndefined() - }) - - it('retains a second teammate recovery trigger while another target is checkpointing', async () => { - const { ctx, lead } = await setup(['hang', textResponse('first'), textResponse('second'), 'hang', 'hang']) - lead.followup(createUserMessage({ content: content('busy lead'), source: { kind: 'user' } })) - await waitRunning(ctx, lead.id) - const first = await spawn(ctx, lead, 'first') - await waitNoAgent(ctx, first.member.id) - const second = await spawn(ctx, lead, 'second') - await waitNoAgent(ctx, second.member.id) - enqueue(lead, 'first-old', first.member.id) - enqueue(lead, 'second-old', second.member.id) - const entered = Promise.withResolvers() - const release = Promise.withResolvers() - const flush = ctx.sessions.flush.bind(ctx.sessions) - const checkpoint = vi.spyOn(ctx.sessions, 'flush').mockImplementation(async (session) => { - if (session.id === first.member.id && session.snapshotEvents().some(event => event.type === 'agent/inbox/spliced' - && event.data.inserted.some(message => message.source.kind === 'team-message'))) { - entered.resolve(undefined) - await release.promise - } - return await flush(session) - }) - try { - await ctx.agentTeams.sendMessage(lead, { target: 'first', content: content('resume first'), signal: SIGNAL }) - await entered.promise - await ctx.agentTeams.sendMessage(lead, { target: 'second', content: content('resume second'), signal: SIGNAL }) - release.resolve(undefined) - await vi.waitFor(() => { expect(durable(lead).pendingMessages).toEqual([]) }) - } finally { - release.resolve(undefined) - checkpoint.mockRestore() - } - }) - - it('retains old pending data and reports inspection and delivery failures', async () => { - const { ctx, lead } = await setup([textResponse('done')]) - const target = await spawn(ctx, lead, 'target') - await waitNoAgent(ctx, target.member.id) - const warnings: string[] = [] - vi.spyOn(ctx.logger, 'warn').mockImplementation((value) => { warnings.push(String(value)) }) - const message = enqueue(lead, 'retry-old', target.member.id) - const later = enqueue(lead, 'later-old', target.member.id) - const recovery = teamInternals(ctx).legacyDelivery - const open = vi.spyOn(ctx.sessionPersistence, 'open').mockRejectedValueOnce(new Error('read unavailable')) - await recovery.recoverFor(lead, SIGNAL) - open.mockRestore() - const delivery = vi.spyOn(hostDeliverer(ctx), deliverSubagentPrompt) - .mockRejectedValueOnce(new Error('delivery unavailable')) - await recovery.recoverFor(lead, SIGNAL) - delivery.mockRestore() - expect(durable(lead).pendingMessages.map(item => item.id)).toEqual([message.id, later.id]) - expect(warnings.join(' ')).toContain('read unavailable') - expect(warnings.join(' ')).toContain('delivery unavailable') - }) - - it('checks persisted acceptance when a recovered target settles before dispatch returns', async () => { - const { ctx, lead } = await setup([textResponse('initial'), textResponse('resumed')]) - const target = await spawn(ctx, lead, 'target') - await waitNoAgent(ctx, target.member.id) - const recovery = teamInternals(ctx).legacyDelivery - enqueue(lead, 'cold-old', target.member.id) - const runtime = hostDeliverer(ctx) - const deliver = runtime[deliverSubagentPrompt].bind(runtime) - const delivery = vi.spyOn(runtime, deliverSubagentPrompt).mockImplementation(async (...args) => { - const id = await deliver(...args) - await waitNoAgent(ctx, target.member.id) - return id - }) - await recovery.recoverFor(lead, SIGNAL) - expect(durable(lead).pendingMessages).toEqual([]) - delivery.mockImplementation(async () => createUserMessage({ content: content('cancelled acceptance'), source: { kind: 'user' } }).id) - enqueue(lead, 'not-retained', target.member.id) - await recovery.recoverFor(lead, SIGNAL) - expect(durable(lead).pendingMessages.map(item => item.id)).toEqual(['not-retained']) - }) - - it('waits for recovery receipt checkpoints during disposal and retains a removed receipt', async () => { - const { ctx, lead } = await setup(['hang']) - const recovery = teamInternals(ctx).legacyDelivery - await recovery.recoverFor(lead, SIGNAL) - enqueue(lead, 'removed', lead.id) - const entered = Promise.withResolvers() - const release = Promise.withResolvers() - const flush = ctx.sessions.flush.bind(ctx.sessions) - const flushSpy = vi.spyOn(ctx.sessions, 'flush').mockImplementationOnce(async (session) => { - entered.resolve(undefined) - await release.promise - lead.cancel({ kind: 'parent' }) - await lead.whenIdle() - return await flush(session) - }) - const recovering = recovery.recoverFor(lead, SIGNAL) - try { - await entered.promise - let disposed = false - const disposal = teamInternals(ctx).disposeRuntime().then(() => { disposed = true }) - await Promise.resolve(undefined) - expect(disposed).toBe(false) - release.resolve(undefined) - await recovering - await disposal - expect(durable(lead).pendingMessages.map(item => item.id)).toEqual(['removed']) - } finally { - release.resolve(undefined) - await recovering - flushSpy.mockRestore() - } - }) -}) - describe('Team direct messages and waiting', () => { it('accepts peer and Lead messages with actual sender identity and wakes Team waits', async () => { const { ctx, lead, teamFiber } = await setup(['hang', 'hang', 'hang']) @@ -1461,13 +1304,12 @@ describe('Team direct messages and waiting', () => { expect(ctx.get('agentTeams')).toBeUndefined() }) - it('shares one settlement deadline across sends, creations, and legacy recovery', async () => { + it('shares one settlement deadline across sends and creations', async () => { const { ctx } = await setup([], { disposalTimeoutMs: 25 }) const internal = teamInternals(ctx) const release = Promise.withResolvers() void internal.lifecycle.track(release.promise) internal.roster.inFlightCreations.add(release.promise) - const pending = vi.spyOn(internal.legacyDelivery, 'pendingDispatches').mockReturnValue([release.promise]) vi.useFakeTimers() let failure: unknown const disposal = internal.disposeRuntime().catch((error: unknown) => { failure = error }) @@ -1478,7 +1320,6 @@ describe('Team direct messages and waiting', () => { } finally { release.resolve(undefined) internal.roster.inFlightCreations.delete(release.promise) - pending.mockRestore() vi.useRealTimers() await disposal } @@ -1509,7 +1350,7 @@ describe('Team direct messages and waiting', () => { const warnings: string[] = [] ctx.logger.warn = ((value: unknown) => { warnings.push(String(value)) }) as typeof ctx.logger.warn const internal = teamInternals(ctx) - internal.recoverFor = async () => { throw new Error('forced recovery failure') } + internal.roster.recoverFor = async () => { throw new Error('forced recovery failure') } internal.scheduleRecovery(lead) await Promise.resolve(undefined) await Promise.resolve(undefined) @@ -1529,7 +1370,7 @@ describe('Team direct messages and waiting', () => { const entered = Promise.withResolvers() const release = Promise.withResolvers() - internal.recoverFor = async () => { + internal.roster.recoverFor = async () => { entered.resolve(undefined) await release.promise throw new Error('failure after disposal') diff --git a/scripts/no-unknown-casts.baseline.json b/scripts/no-unknown-casts.baseline.json index 922decc786..3d87d38942 100644 --- a/scripts/no-unknown-casts.baseline.json +++ b/scripts/no-unknown-casts.baseline.json @@ -1078,10 +1078,6 @@ "packages/experimental/agent-team/src/journal.ts": { "364930a7ddcc79316a9ffc126602f45ae56a3cecdb80484c5c8a79686f8f1057": 1 }, - "packages/experimental/agent-team/tests/persistence.spec.ts": { - "3ae979a4364fe22772c89133e79ea216cdb4f3163c7cb02c47eb1a5d4788e661": 1, - "a90b2e60ce1efd280f1956999454dd0b57ea788864c0162cc6e201ba0c7a90a8": 1 - }, "packages/experimental/agent-team/tests/projection-events.spec.ts": { "71ffbcca0bb71d3b595143632491d4c5d580aaf6ac384c22116e038995b2f2b5": 1, "a66c8967969859328890e6049a0bd9e90403861eb19ed5d6937da5505aa79c05": 1, From 1a1b3c1896bba40b218116d025d5c35d0bb6acfa Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sun, 27 Sep 2026 16:00:49 +0800 Subject: [PATCH 009/155] refactor(agent-team): unify admitted operation tracking --- .../experimental/agent-team/README.i18n.yaml | 4 +-- packages/experimental/agent-team/README.md | 2 +- packages/experimental/agent-team/README.zh.md | 2 +- packages/experimental/agent-team/src/index.ts | 5 +--- .../experimental/agent-team/src/lifecycle.ts | 2 +- .../experimental/agent-team/src/roster.ts | 18 +------------ .../agent-team/tests/team.spec.ts | 26 +++++++++---------- 7 files changed, 19 insertions(+), 40 deletions(-) diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index a4e6d5ae57..334e80cbd6 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -63,8 +63,8 @@ en: 4c3aa6fa99b3bf40 zh: ff5c6d5ac64fc05c /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/disposal: - en: fd2f9feef559be51 - zh: 595f766907b810c2 + en: a12fb358183cc6d8 + zh: 7fdb0434d3c407fe /deepseek-ai-dsh-experimental-agent-team/further-exploration: en: 2bbfd4ffbaeedd00 zh: d1afb5d320b469a1 diff --git a/packages/experimental/agent-team/README.md b/packages/experimental/agent-team/README.md index ad8b144b3d..3f912b40f6 100644 --- a/packages/experimental/agent-team/README.md +++ b/packages/experimental/agent-team/README.md @@ -150,7 +150,7 @@ Mailbox projection and checkpoint admission preserve every decoded JSON field of ### Disposal -Disposal closes admission, aborts and awaits admitted sends and creations, then releases the roster’s live children and descendants. Non-Team children remain untouched. Admitted operations share one `disposalTimeoutMs` settlement deadline; each subsequent Team child drain has its own deadline. This value is not a whole-service shutdown bound. Cleanup failures are reported. +The runtime lifecycle tracks sends and complete creation transactions in one operation set. Disposal closes admission, aborts and awaits those operations, then releases the roster’s live children and descendants. Non-Team children remain untouched. Admitted operations share one `disposalTimeoutMs` settlement deadline; each subsequent Team child drain has its own deadline. This value is not a whole-service shutdown bound. Cleanup failures are reported. diff --git a/packages/experimental/agent-team/README.zh.md b/packages/experimental/agent-team/README.zh.md index 0a33bde69a..6b4affba78 100644 --- a/packages/experimental/agent-team/README.zh.md +++ b/packages/experimental/agent-team/README.zh.md @@ -150,7 +150,7 @@ Mailbox 投影与 checkpoint 准入保留本地声明的校验器之外获准内 ### Dispose -dispose 关闭准入,中止并等待已获准的发送和创建,然后释放 roster 中的 live child 及其后代。非 Team child 不受影响。已获准操作共享一个 `disposalTimeoutMs` 等待期限;随后每个 Team 的 child drain 各有独立期限。此值不是整个服务关闭的总时限。清理失败会明确报告。 +运行时生命周期用同一个操作集合跟踪发送和完整创建事务。dispose 关闭准入,中止并等待这些操作,然后释放 roster 中的 live child 及其后代。非 Team child 不受影响。已获准操作共享一个 `disposalTimeoutMs` 等待期限;随后每个 Team 的 child drain 各有独立期限。此值不是整个服务关闭的总时限。清理失败会明确报告。 diff --git a/packages/experimental/agent-team/src/index.ts b/packages/experimental/agent-team/src/index.ts index b7abc1d1f5..2d35933776 100644 --- a/packages/experimental/agent-team/src/index.ts +++ b/packages/experimental/agent-team/src/index.ts @@ -264,10 +264,7 @@ export class TeamService extends Service { this.activity.close() const failures: unknown[] = [] - await this.lifecycle.settle([ - ...this.lifecycle.pending(), - ...this.roster.pendingCreations(), - ], failures) + await this.lifecycle.settle(this.lifecycle.pending(), failures) for (const [root, childIds] of this.roster.liveChildrenByRoot()) { try { await this.roster.stopTeammates(root, childIds) diff --git a/packages/experimental/agent-team/src/lifecycle.ts b/packages/experimental/agent-team/src/lifecycle.ts index f427239182..079d627168 100644 --- a/packages/experimental/agent-team/src/lifecycle.ts +++ b/packages/experimental/agent-team/src/lifecycle.ts @@ -48,7 +48,7 @@ export class TeamRuntimeLifecycle { } /** - * Track an admitted operation until it settles. + * Track an admitted send or complete creation transaction until it settles. * @param operation - asynchronous work owned by this runtime. * @returns the same operation. */ diff --git a/packages/experimental/agent-team/src/roster.ts b/packages/experimental/agent-team/src/roster.ts index d58357e03f..470e998907 100644 --- a/packages/experimental/agent-team/src/roster.ts +++ b/packages/experimental/agent-team/src/roster.ts @@ -56,8 +56,6 @@ export function resolveActiveMember( /** Owns Team identities and the lifecycle of rostered continuable children. */ export class TeamRoster { - private readonly inFlightCreations = new Set>() - /** * @param ctx - Team service context with Agent, Session, persistence, and subagent services. * @param journal - authoritative Lead-log transaction owner. @@ -167,21 +165,7 @@ export class TeamRoster { */ async spawn(caller: Agent, request: SpawnTeammateRequest): Promise { if (this.lifecycle.disposed) throw new TeamError('Agent Teams service is disposing', 'TEAM_DISPOSED') - const operation = this.spawnAdmitted(caller, request) - this.inFlightCreations.add(operation) - try { - return await operation - } finally { - this.inFlightCreations.delete(operation) - } - } - - /** - * Return admitted creation operations captured for ordered disposal. - * @returns detached snapshot ordered only by Set insertion. - */ - pendingCreations(): readonly Promise[] { - return [...this.inFlightCreations] + return await this.lifecycle.track(this.spawnAdmitted(caller, request)) } /** diff --git a/packages/experimental/agent-team/tests/team.spec.ts b/packages/experimental/agent-team/tests/team.spec.ts index e20f52c096..937fd7fc8c 100644 --- a/packages/experimental/agent-team/tests/team.spec.ts +++ b/packages/experimental/agent-team/tests/team.spec.ts @@ -86,7 +86,6 @@ function content(text: string) { interface TeamServiceInternals { readonly lifecycle: TeamRuntimeLifecycle readonly roster: { - readonly inFlightCreations: Set> checkpointInitialPrompt(childId: SessionId, messageId: string, signal: AbortSignal): Promise reconcileProvisioning(root: Agent, signal: AbortSignal): Promise recoverFor(agent: Agent, signal: AbortSignal): Promise @@ -1173,13 +1172,11 @@ describe('Team direct messages and waiting', () => { expect(ctx.get('agentTeams')).toBeUndefined() }) - it('retains an in-flight creation cleanup failure during disposal', async () => { + it('retains an in-flight operation failure during disposal', async () => { const { ctx } = await setup([]) const internal = teamInternals(ctx) - const cleanupFailure = new Error('creation cleanup failed') - const rejected = Promise.reject(cleanupFailure) - void rejected.catch(() => undefined) - internal.roster.inFlightCreations.add(rejected) + const cleanupFailure = new Error('operation failed') + void internal.lifecycle.track(Promise.reject(cleanupFailure)) await expect(internal.disposeRuntime()).rejects.toMatchObject({ errors: [cleanupFailure] }) }) @@ -1304,12 +1301,13 @@ describe('Team direct messages and waiting', () => { expect(ctx.get('agentTeams')).toBeUndefined() }) - it('shares one settlement deadline across sends and creations', async () => { + it('shares one settlement deadline across admitted operations', async () => { const { ctx } = await setup([], { disposalTimeoutMs: 25 }) const internal = teamInternals(ctx) - const release = Promise.withResolvers() - void internal.lifecycle.track(release.promise) - internal.roster.inFlightCreations.add(release.promise) + const first = Promise.withResolvers() + const second = Promise.withResolvers() + void internal.lifecycle.track(first.promise) + void internal.lifecycle.track(second.promise) vi.useFakeTimers() let failure: unknown const disposal = internal.disposeRuntime().catch((error: unknown) => { failure = error }) @@ -1318,17 +1316,17 @@ describe('Team direct messages and waiting', () => { expect(failure).toBeInstanceOf(AggregateError) await disposal } finally { - release.resolve(undefined) - internal.roster.inFlightCreations.delete(release.promise) + first.resolve(undefined) + second.resolve(undefined) vi.useRealTimers() await disposal } }) - it('bounds disposal while an admitted creation ignores cancellation', async () => { + it('bounds disposal while an admitted operation ignores cancellation', async () => { const { ctx, lead } = await setup([], { disposalTimeoutMs: 25 }) const internal = teamInternals(ctx) - internal.roster.inFlightCreations.add(new Promise(() => {})) + void internal.lifecycle.track(new Promise(() => {})) await expect(internal.disposeRuntime()).rejects.toBeInstanceOf(AggregateError) await expect(ctx.agentTeams.spawnTeammate(lead, { From 58ce417bab44b99277944e09c32c73670f2a4e4c Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sun, 27 Sep 2026 16:48:01 +0800 Subject: [PATCH 010/155] fix(ui-chat): use ordinary Agent presentation for Team relays --- packages/client/ui-chat/README.i18n.yaml | 4 ++-- packages/client/ui-chat/README.md | 2 +- packages/client/ui-chat/README.zh.md | 2 +- .../ui-chat/src/client/chat/turn-trigger.ts | 12 ++++-------- .../tests/turn-trigger.client.spec.tsx | 19 ++++--------------- .../experimental/agent-team/README.i18n.yaml | 4 ++-- packages/experimental/agent-team/README.md | 2 +- packages/experimental/agent-team/README.zh.md | 2 +- 8 files changed, 16 insertions(+), 31 deletions(-) diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 3b3ac656ea..f7077d438f 100644 --- a/packages/client/ui-chat/README.i18n.yaml +++ b/packages/client/ui-chat/README.i18n.yaml @@ -18,8 +18,8 @@ en: 3fda3d75483ce7c1 zh: 4d96ba654f70c021 /deepseek-ai-dsh-client-ui-chat/hidden-chat-rows: - en: b502d2a006a36be5 - zh: 1a191a628129ca8c + en: 5706ae03ceacf251 + zh: 2e59d0815351349f /deepseek-ai-dsh-client-ui-chat/command-and-failure-rows: en: 2157fcd6b0d100b5 zh: 9e865ac3953ebe30 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 88fd6f53cc..297b1b3d69 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -42,7 +42,7 @@ Settings → General → Open chat links in selects the destination for ordinary ## Hidden Chat rows -Chat omits system-prompt, ordinary Context injection, and `permission` command rows in every work-details mode. Context containing tool additions or removals remains visible. The filter changes neither recorded Session events nor Trajectory inspection. Non-human Turn triggers remain independent notices; Agent relays whose first text block is the exact `Team message from :` framing retain the Team title and icon; other command rows remain in Chat. +Chat omits system-prompt, ordinary Context injection, and `permission` command rows in every work-details mode. Context containing tool additions or removals remains visible. The filter changes neither recorded Session events nor Trajectory inspection. Non-human Turn triggers remain independent notices; other command rows remain in Chat. When an Assistant attempt retires without a visible message, Chat hides its already-published Node instead of removing its key. A retry in the same Step reuses that key when visible content returns. This also applies when the loaded window lacks the Step start. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index ea51157390..d2582913b3 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -42,7 +42,7 @@ Chat 在节点列表外通过一个 `MarkdownDelegateProvider` 提供文件及 H ## Chat 隐藏的行 -Chat 在所有工作步骤展示模式下都不显示系统提示词行、普通上下文注入和 `permission` 命令行。包含工具添加或移除记录的上下文仍然可见。该过滤不改变已记录的 Session 事件或 Trajectory 查看能力。非人工轮次触发仍作为独立通知显示;首个文本块完全匹配 `Team message from :` 前缀的 Agent relay 保留 Team 标题和图标;其他命令行仍保留在 Chat 中。 +Chat 在所有工作步骤展示模式下都不显示系统提示词行、普通上下文注入和 `permission` 命令行。包含工具添加或移除记录的上下文仍然可见。该过滤不改变已记录的 Session 事件或 Trajectory 查看能力。非人工轮次触发仍作为独立通知显示,其他命令行仍保留在 Chat 中。 Assistant 尝试结束且没有可见消息时,Chat 隐藏已发布的 Node,不移除其 key。同一 Step 的重试再次产生可见内容时,复用该 key。已加载窗口缺少 Step 起点时也遵循此规则。 diff --git a/packages/client/ui-chat/src/client/chat/turn-trigger.ts b/packages/client/ui-chat/src/client/chat/turn-trigger.ts index 8cf5106a48..d4912668ea 100644 --- a/packages/client/ui-chat/src/client/chat/turn-trigger.ts +++ b/packages/client/ui-chat/src/client/chat/turn-trigger.ts @@ -14,7 +14,7 @@ function field(source: Record, key: string): string { } /** - * Describe a waking message using its source and recognized producer framing. + * Describe a waking message using its recorded source. * @param node - durable context, including the original notification body. * @returns localized title key and source-family icon. */ @@ -32,14 +32,10 @@ export function turnTriggerDetails(node: ContextMessageNode): { icon = 'goal' break } - case 'agent-message': { - const first = node.content[0] - const team = field(source, 'form') === 'relay' && first?.type === 'text' - && /^Team message from [a-z0-9]+(?:-[a-z0-9]+)*:$/u.test(first.text) - title = team ? 'message.trigger.team' : 'message.trigger.agent' - icon = team ? 'team' : 'agent' + case 'agent-message': + title = 'message.trigger.agent' + icon = 'agent' break - } case 'team-message': title = 'message.trigger.team' icon = 'team' diff --git a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx index 1bae3164c2..c45672dac5 100644 --- a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx +++ b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx @@ -47,29 +47,18 @@ describe('Turn trigger notices', () => { }) it.each([ - [en, 'Team message received'], - [zh, '收到团队消息'], - ])('preserves the Team title and icon for a direct inbox relay', (locale, title) => { + [en, 'Task message received'], + [zh, '收到任务消息'], + ])('presents Team relays as Agent messages while retaining the sender name', (locale, title) => { const node = trigger({ kind: 'agent-message', form: 'relay', senderSessionId: 'sender' }) node.data.content = [{ type: 'text', text: 'Team message from reviewer-2:' }, { type: 'text', text: 'Ready.' }] - expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.team', icon: 'team' }) + expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.agent', icon: 'agent' }) const view = render() expect(view.getByRole('button').textContent).toContain(title) fireEvent.click(view.getByRole('button')) expect(view.container.querySelector('[data-context-text]')?.textContent).toContain('Team message from reviewer-2:') }) - it.each([ - [{ kind: 'agent-message', form: 'notice' }, ['Team message from reviewer:']], - [{ kind: 'agent-message', form: 'relay' }, ['Ordinary message', 'Team message from reviewer:']], - [{ kind: 'agent-message', form: 'relay' }, ['Team message from reviewer: extra text']], - [{ kind: 'agent-message', form: 'relay' }, []], - ])('keeps other Agent messages in the generic presentation', (source, texts) => { - const node = trigger(source) - node.data.content = texts.map(text => ({ type: 'text', text })) - expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.agent', icon: 'agent' }) - }) - it.each([ { locale: en, title: 'Automation task' }, { locale: zh, title: '自动化任务' }, diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index 334e80cbd6..880ee75bf4 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -51,8 +51,8 @@ en: 2389048c1a494ed3 zh: 7e72acd6b83ea248 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/direct-messages-and-historical-compatibility: - en: d11d01496b0ce7bf - zh: b9290a1ecff446a5 + en: 67cc4e92adda8baa + zh: 5abdb2415e414b9d /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/shared-task-board: en: 2dc37ba97a8a7178 zh: 96bd24033030e19d diff --git a/packages/experimental/agent-team/README.md b/packages/experimental/agent-team/README.md index 3f912b40f6..9e0777b747 100644 --- a/packages/experimental/agent-team/README.md +++ b/packages/experimental/agent-team/README.md @@ -128,7 +128,7 @@ Every ordinary runtime root is the implicit Lead of a Team whose `TeamId` equals ### Direct messages and historical compatibility -`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering; delivery order belongs to the target inbox. The client recognizes the recorded Team framing for its message title and icon. +`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering; delivery order belongs to the target inbox. The client presents these messages with the ordinary Agent title and icon; the message body retains the sender name. Lead delivery calls `Agent.steer()` directly. Teammate delivery uses the continuation owner's host-only Steer path, which preserves the Team sender source while authorizing the Lead-to-child edge and cold-resuming inactive targets. Sibling messages never impersonate the Lead through the public adjacent-Agent messaging operation. diff --git a/packages/experimental/agent-team/README.zh.md b/packages/experimental/agent-team/README.zh.md index 6b4affba78..e4f7a46381 100644 --- a/packages/experimental/agent-team/README.zh.md +++ b/packages/experimental/agent-team/README.zh.md @@ -128,7 +128,7 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 直接消息与历史兼容 -`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序;投递顺序由目标 inbox 管理。客户端识别已记录的 Team 前缀,以展示对应消息标题和图标。 +`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序;投递顺序由目标 inbox 管理。客户端使用普通 Agent 消息标题和图标展示这些消息;正文保留发送者名称。 投递给 Lead 时直接调用 `Agent.steer()`。投递给 teammate 时使用 continuation owner 的 host-only Steer 路径;该路径会保留 Team 发送者 source,同时授权 Lead-to-child edge 并冷恢复 inactive target。sibling 消息绝不会通过公开的相邻 Agent 消息操作伪装成 Lead。 From 3948bffd466ea8f89aafcd2bdcada3d7a9d58973 Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sun, 27 Sep 2026 17:07:03 +0800 Subject: [PATCH 011/155] fix(agent-team): record Team-owned relay attribution --- .../2026-09-26-team-direct-inbox.i18n.yaml | 4 +- .../2026-09-26-team-direct-inbox.md | 2 +- .../2026-09-26-team-direct-inbox.zh.md | 2 +- apps/cli/tests/agent-team-headless.e2e.ts | 2 +- .../headless/tests/headless.expected.e2e.ts | 4 +- docs/config-catalog.md | 2 +- docs/config-catalog.zh.md | 2 +- docs/persistence-catalog.i18n.yaml | 146 +- docs/persistence-catalog.md | 130 +- docs/persistence-catalog.zh.md | 130 +- .../2026-09-27-team-relay-source.i18n.yaml | 28 + .../2026-09-27-team-relay-source.md | 60 + .../2026-09-27-team-relay-source.schema.json | 11409 +++ .../2026-09-27-team-relay-source.zh.md | 60 + .../historical-formats/README.i18n.yaml | 4 +- .../historical-formats/README.md | 2 +- .../historical-formats/README.zh.md | 2 +- docs/persistence-schema.json | 70822 ++++++++-------- docs/subsystems/agent-team.i18n.yaml | 4 +- docs/subsystems/agent-team.md | 2 +- docs/subsystems/agent-team.zh.md | 2 +- .../ui-chat/src/client/chat/turn-trigger.ts | 1 + .../tests/turn-trigger.client.spec.tsx | 17 +- .../experimental/agent-team/README.i18n.yaml | 4 +- packages/experimental/agent-team/README.md | 2 +- packages/experimental/agent-team/README.zh.md | 2 +- packages/experimental/agent-team/src/index.ts | 7 +- packages/experimental/agent-team/src/types.ts | 9 + .../agent-team/tests/persistence.spec.ts | 8 +- .../agent-team/tests/team.spec.ts | 4 +- .../team-direct-inbox/session.1.v4.jsonl | 2 +- 31 files changed, 47561 insertions(+), 35314 deletions(-) create mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml create mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.md create mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.schema.json create mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.zh.md diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml index f830391e86..6ef9c596f0 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml @@ -9,8 +9,8 @@ en: 83296699f94c77d3 zh: e681a426bf0a703a /agent-note-team-messages-use-the-target-inbox/decision: - en: 8d5fed34f19c7302 - zh: 25417793d3797775 + en: 2eaa9439ace9f36d + zh: 07d8da76d2dce484 /agent-note-team-messages-use-the-target-inbox/alternatives-considered: en: e847556d8e9f1071 zh: bf1abe2f0e201eac diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md index 58d18d0ecf..96ad92d639 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md @@ -10,7 +10,7 @@ A second Team outbox duplicates Agent inbox ownership with separate identities, ## Decision -New Team sends return the accepted inbox `MessageId` or throw. They use live Lead Steer or the host-only subagent Steer adapter, retaining the actual sender through the existing `agent-message` source and the member name in content. Acceptance follows ordinary Agent persistence; it neither confirms model processing nor adds a synchronous flush guarantee. Team does not retain unaccepted intent, retry it after restart, or deduplicate explicit resends. +New Team sends return the accepted inbox `MessageId` or throw. They use live Lead Steer or the host-only subagent Steer adapter, retaining the actual sender and member name through Team-owned `team-relay` source and the member name in content. Team attribution belongs to the Team source type; the delivery adapter accepts it through the existing `MessageSource` union. Acceptance follows ordinary Agent persistence; it neither confirms model processing nor adds a synchronous flush guarantee. Team does not retain unaccepted intent, retry it after restart, or deduplicate explicit resends. Historical mailbox records stay decodable and projected so existing Lead logs replay, but Team never delivers or acknowledges them. The package is experimental with no stability promise, and a second dispatch path with receipt inspection, per-target ordering, and its own disposal wait costs more than the undelivered old messages it would recover. This partially supersedes the mailbox decision in [Agent Teams](../feature/2026-08-05-agent-teams.md); roster and task decisions remain there. The [package reference](../../../../packages/experimental/agent-team/README.md#understand-the-implementation) owns the resulting limitation. diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md index 6928631c8f..6fe5cc0d32 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md @@ -10,7 +10,7 @@ Status: implemented ## 决策 -新的 Team 发送返回获准 inbox 的 `MessageId` 或抛出错误。它们使用 live Lead Steer 或 host-only subagent Steer adapter,通过现有 `agent-message` source 保留真实发送者,并在正文中保留成员名称。接收遵循普通 Agent 的持久化策略,既不确认模型已处理,也不增加同步 flush 保证。Team 不保留尚未接收的发送意图,不在重启后重试,也不对显式重发去重。 +新的 Team 发送返回获准 inbox 的 `MessageId` 或抛出错误。它们使用 live Lead Steer 或 host-only subagent Steer adapter,通过 Team 所属的 `team-relay` source 保留真实发送者和成员名称,并在正文中保留成员名称。Team 归属信息属于 Team source 类型;投递 adapter 通过现有 `MessageSource` 联合类型接受它。接收遵循普通 Agent 的持久化策略,既不确认模型已处理,也不增加同步 flush 保证。Team 不保留尚未接收的发送意图,不在重启后重试,也不对显式重发去重。 历史 mailbox 记录继续可解码并参与投影,使现有 Lead 日志能够回放,但 Team 不再投递或确认它们。该包是实验性的,没有稳定性承诺;另设一条带回执检查、同目标排序和独立 dispose 等待的投递路径,其代价高于它能补回的未投递旧消息。这部分取代了 [Agent Teams](../feature/2026-08-05-agent-teams.zh.md) 的 mailbox 决策;roster 和任务决策仍由原记录负责。[包参考](../../../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义由此产生的限制。 diff --git a/apps/cli/tests/agent-team-headless.e2e.ts b/apps/cli/tests/agent-team-headless.e2e.ts index 7fcd0d7d2d..45a9addf41 100644 --- a/apps/cli/tests/agent-team-headless.e2e.ts +++ b/apps/cli/tests/agent-team-headless.e2e.ts @@ -106,7 +106,7 @@ describe('dsh run with Agent Teams enabled', () => { expect(eventTypes).not.toContain('team/message/queued') expect(eventTypes).not.toContain('team/message/delivered') const peerMessages = parsed.flatMap(log => log.filter(record => record.type === 'user/message' - && (record.data as { source: { kind: string } }).source.kind === 'agent-message')) + && (record.data as { source: { kind: string } }).source.kind === 'team-relay')) expect(peerMessages).toHaveLength(2) const taskEvents = root!.filter(record => record.type === 'team/task') expect(taskEvents.filter((record) => { diff --git a/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts b/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts index 97123c304d..2fbcbb341f 100644 --- a/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts +++ b/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts @@ -788,14 +788,14 @@ describe('headless stream-json snapshots', () => { if (typeof message !== 'object' || message === null || Array.isArray(message)) return false const source = (message as JsonObject).source return typeof source === 'object' && source !== null && !Array.isArray(source) - && (source as JsonObject).kind === 'agent-message' + && (source as JsonObject).kind === 'team-relay' }) }) const steeredMessageIndex = implementerRows.findIndex((row) => { if (row.type !== 'user/message') return false const source = (row.data as JsonObject).source return typeof source === 'object' && source !== null && !Array.isArray(source) - && (source as JsonObject).kind === 'agent-message' + && (source as JsonObject).kind === 'team-relay' }) const openTurnStart = implementerRows.findLastIndex((row, index) => ( index < steeredMessageIndex && row.type === 'turn/start' diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 739204e312..cd43edd41a 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -827,7 +827,7 @@ export interface Config { ## `@deepseek-ai/dsh-experimental-agent-team` - `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` -- `source`: [`packages/experimental/agent-team/src/types.ts:153`](../packages/experimental/agent-team/src/types.ts) +- `source`: [`packages/experimental/agent-team/src/types.ts:162`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index 6e0f2367fa..7b2eb0966a 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -829,7 +829,7 @@ export interface Config { ## `@deepseek-ai/dsh-experimental-agent-team` - `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` -- `source`: [`packages/experimental/agent-team/src/types.ts:153`](../packages/experimental/agent-team/src/types.ts) +- `source`: [`packages/experimental/agent-team/src/types.ts:162`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index 8d98de3e35..22b1d2d102 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -9,8 +9,8 @@ en: e7c80d1de4d328b4 zh: d9f368c27fd9f998 /session-persistence-event-catalog/persistence-type-fingerprints: - en: 0254fc43535dfaad - zh: 2f592cfae60e10ac + en: 89c10f956f3255e0 + zh: 668abe049d156e47 /session-persistence-event-catalog/event-envelope: en: 7ebb1a2e0dd1f916 zh: 8946f415dda5c1b8 @@ -216,17 +216,17 @@ en: a640800a38b3c874 zh: a640800a38b3c874 /session-persistence-event-catalog/events/team/team-member-log-only: - en: a2fe5b8582ef5f46 - zh: 42bfffcde3f3d886 + en: 1b61ae72660c98bc + zh: 003fe48a37e0f7bb /session-persistence-event-catalog/events/team/team-message-delivered-log-only: - en: 4a716b14e33eab18 - zh: dcde26e4dc40b62e + en: d9a59f5719145fb7 + zh: 8d831e4f6ea0dac3 /session-persistence-event-catalog/events/team/team-message-queued-log-only: - en: 05bf873244099da5 - zh: 8a0b62912087f4aa + en: d96801713a18fa80 + zh: cfe5bfc08994c00b /session-persistence-event-catalog/events/team/team-task-log-only: - en: 5ffeb64225feda2a - zh: d58129e189a726fb + en: 3f16e581eaaf67d8 + zh: 964294fec32b5d52 /session-persistence-event-catalog/events/todo: en: 308d4bb4b6b96e35 zh: 308d4bb4b6b96e35 @@ -759,8 +759,11 @@ en: 1fa929a15e4a96ea zh: 1fa929a15e4a96ea /session-persistence-event-catalog/resolved-persistence-types/team-message: - en: b2c69bdf83f09bdf - zh: b2c69bdf83f09bdf + en: ebf5638b515116e8 + zh: ebf5638b515116e8 +/session-persistence-event-catalog/resolved-persistence-types/team-relay: + en: 2381ca4055c1043e + zh: 2381ca4055c1043e /session-persistence-event-catalog/resolved-persistence-types/team-member: en: 8cf0f09cbf885f71 zh: 8cf0f09cbf885f71 @@ -951,11 +954,11 @@ en: 586743dfeab78c55 zh: 26ccef4a02dd7a58 /session-persistence-event-catalog/resolved-persistence-types/deepseeksearchllmrequest: - en: b3df6dce576b01a2 - zh: f9c67e338cc6e449 + en: b0eb3474dc8e3e5f + zh: 3bd51444c68073b3 /session-persistence-event-catalog/resolved-persistence-types/developermessage: - en: 3df6e6aaeb92c0fa - zh: 29988ebcdd9e62e1 + en: c3bf99efbd57dcd0 + zh: 8258f69a1643b141 /session-persistence-event-catalog/resolved-persistence-types/epochheader: en: d31020fa1fda6fa4 zh: 77984c4bf09443fb @@ -1053,11 +1056,11 @@ en: 6dbe099c62f7c226 zh: 6fd788f63c038c91 /session-persistence-event-catalog/resolved-persistence-types/llmretrystartedeventdata: - en: 7854b9694cc84c3a - zh: 319ec2e2e6ffdaec + en: 2559b0a407634187 + zh: a113f3168423b87b /session-persistence-event-catalog/resolved-persistence-types/message: - en: 45a296c31664de87 - zh: 8f235285b2f985f9 + en: c580203c6047c3d5 + zh: 522fc25123e36702 /session-persistence-event-catalog/resolved-persistence-types/messagefeedbackdelete: en: c582953270d4ca44 zh: 966ccfe2e7660a2a @@ -1068,14 +1071,14 @@ en: f58575a1fc96df42 zh: 9f0c6ed9033e5c9d /session-persistence-event-catalog/resolved-persistence-types/messagefeedbackrating: - en: 490a91f1da1fc870 - zh: 2f2b9e972e22d51f + en: 63ef28c7210a20ff + zh: 14478a48bca9ae64 /session-persistence-event-catalog/resolved-persistence-types/messagesource: - en: 7d0eda01d2c3076f - zh: ce3dbfc1bd7fd176 + en: 4dbdcf9ef21b3e2b + zh: deff28371eb277ef /session-persistence-event-catalog/resolved-persistence-types/message~2: - en: 8e53b2a339808ffc - zh: d453e93e45f9e752 + en: 0b609fe9e561f4dc + zh: 53a3420b05172691 /session-persistence-event-catalog/resolved-persistence-types/modelmessagesource: en: 3b677f021d7dd4d3 zh: 2a875742b22879a2 @@ -1134,11 +1137,11 @@ en: 9a54c4478ad3b620 zh: 02c4c1fd7e252770 /session-persistence-event-catalog/resolved-persistence-types/sessiontitleeventdata: - en: 415ce281c096b4c3 - zh: 39c5bf9dfaa95579 + en: 51d7e3f1b996e5d0 + zh: 5a955c48473db8c2 /session-persistence-event-catalog/resolved-persistence-types/sessiontitlellmrequesteventdata: - en: 0e539718e4bc8ed8 - zh: 060007f55759f065 + en: 71c01199c777c527 + zh: 3e1120ba6e6f6212 /session-persistence-event-catalog/resolved-persistence-types/sessiontitlemodelidentity: en: 9531468264499498 zh: 9da23c0ad2776563 @@ -1245,14 +1248,14 @@ en: 544292eddeff5faa zh: 4e36e575a5030fb2 /session-persistence-event-catalog/resolved-persistence-types/turnendreason: - en: 083f0fef130bb976 - zh: dafd261a95708bec + en: 4391ef607f1070aa + zh: f8674649511391de /session-persistence-event-catalog/resolved-persistence-types/usermessage: - en: 88b294a9b0bdf0e4 - zh: 0597f465b9d45b27 + en: ee0568ac146e7dde + zh: 1bebe8ecc5f96361 /session-persistence-event-catalog/resolved-persistence-types/usermessage~2: - en: 31aaab9c9f53ed9c - zh: c5cd866b3f2b27e0 + en: 37701fa982f8d5dd + zh: c725cf60b19f229e /session-persistence-event-catalog/resolved-persistence-types/workflowagentoutcome: en: d0a3f9aab18c3de5 zh: 76ac69a835ca4e29 @@ -1422,11 +1425,11 @@ en: 51af619ed8532a43 zh: a5ad878c63d0e046 /session-persistence-event-catalog/resolved-persistence-types/header-reason-startsseries: - en: 62ca405eba4d2757 - zh: c6a8861533363ae9 + en: 6e33e5c0e18b6a0a + zh: e2a22c228e459bf5 /session-persistence-event-catalog/resolved-persistence-types/headerseq-message-step-turn: - en: 76e7be9a80a4082c - zh: c06aaa42a8488aea + en: f075afc903e3de53 + zh: 871457f173ae4fe3 /session-persistence-event-catalog/resolved-persistence-types/height-width: en: a5df50710083ac25 zh: aad3ccf6f6de70e4 @@ -1443,11 +1446,11 @@ en: 41f73c58a77dfa28 zh: af77f4aee3cb4a40 /session-persistence-event-catalog/resolved-persistence-types/inherited: - en: f538b60f99becc0a - zh: 0c8efa059a1e6569 + en: 316972892136b7f9 + zh: 3a9475a1aee20afa /session-persistence-event-catalog/resolved-persistence-types/inserted-outcome-removedcount-start: - en: 3985827b3ead1d92 - zh: c535166ccae6c8a3 + en: 2c23937fee151ba8 + zh: e50db054ac113dfa /session-persistence-event-catalog/resolved-persistence-types/interrupted-message-step-stream: en: f460572284c92755 zh: bae7561ce887b040 @@ -1662,8 +1665,11 @@ en: c99d8a67438771ff zh: 070f6160fc419fa5 /session-persistence-event-catalog/resolved-persistence-types/kind-stop: - en: 09ce6f3196938ccf - zh: 1b8d5540f47fd3aa + en: a64980e04d797552 + zh: ee66b5a6aed7ffc4 +/session-persistence-event-catalog/resolved-persistence-types/kind-team-relay-form-relay: + en: 8a7c120f2a2156bb + zh: b963b594e27a7fdb /session-persistence-event-catalog/resolved-persistence-types/kind-time-context: en: 5733addfc8b12a47 zh: aaf60d5396e30971 @@ -1785,17 +1791,17 @@ en: afedf4a31a67eb14 zh: 98d3bc882f2b61c3 /session-persistence-event-catalog/resolved-persistence-types/member-teamid-version: - en: 82b0989dad6bbfc0 - zh: 0789b63f1d59b2ed + en: c5d8c3bdd23b402b + zh: 02de0bba9445fd09 /session-persistence-event-catalog/resolved-persistence-types/message-step-turn: en: 7cc30865737643f2 zh: 512c6c81ed10a9b6 /session-persistence-event-catalog/resolved-persistence-types/message-teamid-version: - en: f778769acb264dd5 - zh: eba9b81d04e9f57b + en: 01e98cdbb65399f3 + zh: 766c7a3691cddcfd /session-persistence-event-catalog/resolved-persistence-types/messageid-targetid-teamid-version: - en: 91a948ede28ebcb5 - zh: 8a2b0ac6bb68a09e + en: 9e04283bb1c229a8 + zh: ee2fc1587d8342b3 /session-persistence-event-catalog/resolved-persistence-types/mode-source: en: 3028b222670ce5ad zh: cae4c9437e560d61 @@ -1827,8 +1833,8 @@ en: 5360af614fe753e3 zh: 96427c489cc71de6 /session-persistence-event-catalog/resolved-persistence-types/task-teamid-version: - en: a2fcd46e54b14120 - zh: d9a6e0e50bbff9ad + en: bdab6f64ef7efe66 + zh: b2b681924df93077 /session-persistence-event-catalog/resolved-persistence-types/todos: en: 06e6c1837e2b5d50 zh: 37cebfe3e41294ec @@ -1836,11 +1842,11 @@ en: a79b2ab16b9ed215 zh: 764cd1400ee8db63 /session-persistence-event-catalog/resolved-persistence-types/type-agent-preset-selected: - en: d59bb505610b862f - zh: e2637fbbb8365bdf + en: 7f83c82fb627a54a + zh: 8a42bd15c8cc671b /session-persistence-event-catalog/resolved-persistence-types/type-agent-inbox-spliced: - en: 109d942de30d9227 - zh: 6c6fc06634ad7945 + en: 9619813dfbf7bc17 + zh: 93110784e13f3d0b /session-persistence-event-catalog/resolved-persistence-types/type-approval-asked: en: 9c77f18b0dad22f0 zh: 8894cf2878fe90db @@ -1884,11 +1890,11 @@ en: ba73fb10b7e2ffc9 zh: 8d5c97e63e5f16da /session-persistence-event-catalog/resolved-persistence-types/type-deliverables-presented: - en: 49de6f547778d916 - zh: ce2a1af1ae934f68 + en: d58679c990e26669 + zh: 9476184de3c72c24 /session-persistence-event-catalog/resolved-persistence-types/type-developer-message: - en: 686d26ced9945d4b - zh: 535b9e92eb7535fb + en: b1d12846e8b42be7 + zh: ce14a0ce914da4c9 /session-persistence-event-catalog/resolved-persistence-types/type-feedback-message-delete: en: 204561e2311db97e zh: 77264396bd5e25c4 @@ -1953,11 +1959,11 @@ en: acf7e21e4d21ebff zh: fb83a853634d204a /session-persistence-event-catalog/resolved-persistence-types/type-session-title: - en: ba2f901c9981835f - zh: ce0358c7d16b0beb + en: 8b663a9bed3d6d02 + zh: 6e94250a6765ff54 /session-persistence-event-catalog/resolved-persistence-types/type-session-title-llm-request: - en: 7515d391badb4d0a - zh: 9eb19def7a3ed752 + en: ab5f000b3356856b + zh: 178664249c06dd65 /session-persistence-event-catalog/resolved-persistence-types/type-step-end: en: 7fc233c4a569dae2 zh: bc2b3fed4a397c00 @@ -2034,11 +2040,11 @@ en: 1b045de96172be4b zh: 8a15c6f35b576b37 /session-persistence-event-catalog/resolved-persistence-types/type-usage: - en: a01e61480accb34b - zh: 6387a3cc7666aa7e + en: a52e1f433bb4d37e + zh: f4a9bc2875013f8e /session-persistence-event-catalog/resolved-persistence-types/type-user-message: - en: 58d3e616db84f840 - zh: 9aed64a03347caad + en: 2e0b6943f08ce6b4 + zh: 8414f682acae08e0 /session-persistence-event-catalog/resolved-persistence-types/type-web-deepseek-search-llm-request: en: f109997e295af37d zh: b2dcfd599f73b61c diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index 812eaab008..4878739f69 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -21,7 +21,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) | | `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) | | `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) | -| `event:agent/inbox/spliced` | event | `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c) | +| `event:agent/inbox/spliced` | event | `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4) | | `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) | | `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) | | `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) | @@ -34,7 +34,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) | | `event:compaction/summary` | event | `e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602) | | `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) | -| `event:developer/message` | event | `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` | [`{ type: "developer/message" }`](#persistence-type-sha256-eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80) | +| `event:developer/message` | event | `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` | [`{ type: "developer/message" }`](#persistence-type-sha256-3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e) | | `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) | | `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) | | `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) | @@ -54,7 +54,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) | | `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) | | `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) | -| `event:session/title-llm-request` | event | `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d) | +| `event:session/title-llm-request` | event | `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7) | | `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) | | `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) | | `event:subagent/catalog` | event | `3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604) | @@ -76,7 +76,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:tool/result` | event | `7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397` | [`{ type: "tool/result" }`](#persistence-type-sha256-7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397) | | `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) | | `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) | -| `event:user/message` | event | `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` | [`{ type: "user/message" }`](#persistence-type-sha256-3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761) | +| `event:user/message` | event | `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` | [`{ type: "user/message" }`](#persistence-type-sha256-0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58) | | `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331) | | `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) | @@ -975,7 +975,7 @@ Source: [`packages/core/session/src/types.ts:330`](../packages/core/session/src/ Types: [TeamId](subsystems/agent-team.md) · [TeamMemberSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) @@ -993,7 +993,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamMessageId](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) @@ -1006,7 +1006,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamMessageSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) @@ -1019,7 +1019,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamTaskSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) ### `todo/*` @@ -2539,6 +2539,14 @@ SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c` `"team-message"` + + +### `"team-relay"` + +SHA-256: `c91852e53038618e7869f3e436acdb3f319c4f31b516c71a4b816e7387e3df2f` + +`"team-relay"` + ### `"team/member"` @@ -3207,7 +3215,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web | `body` | required | [`{ max_tokens, messages, model, tools }`](#persistence-type-sha256-930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731) | | `endpoint` | required | `string` | - + @@ -3215,7 +3223,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web ### `DeveloperMessage` -SHA-256: `f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b` +SHA-256: `46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba` Sources: [`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message.ts) @@ -3224,11 +3232,11 @@ Sources: [`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message | `content` | required | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | required | `string` | | `role` | required | `"developer"` | -| `source` | required | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | +| `source` | required | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | Source compatibility: `source` — `session-source-attribution` v1; `session.developer-message.source`; `kind`; `preserve`. -Attribution-only additions: `tmux-context`. +Attribution-only additions: `team-relay`, `tmux-context`. @@ -3841,7 +3849,7 @@ Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/sr | `step` | required | `number` | | `turn` | required | `number` | - + @@ -3849,15 +3857,15 @@ Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/sr ### `Message` -SHA-256: `691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6` +SHA-256: `139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2` Sources: [`packages/llm/llm/src/message.ts:196`](../packages/llm/llm/src/message.ts) One of: - [`ToolResultMessage`](#persistence-type-sha256-4b259f7f8f0a44ad5e90b70a73553ced1df27012d126921d397ff403b6c86731) -- [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) -- [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) +- [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) +- [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) - [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be) - [`SystemMessage`](#persistence-type-sha256-09f3f8dc417f278257202714132f98ba7b52957d7b558c4a04456603890eb363) @@ -3934,7 +3942,7 @@ One of: - `"negative"` - `"positive"` - + @@ -3942,7 +3950,7 @@ One of: ### `MessageSource` -SHA-256: `40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945` +SHA-256: `bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624` Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message.ts) @@ -4017,6 +4025,7 @@ Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message | `subagent-settled` | `"notice"` | `senderSessionId`: `string`; `summary`: `string` | [`SubagentSettledMessageSource`](#persistence-type-sha256-4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a) | | `system-prompt` | not declared | none | [`SystemPromptMessageSource`](#persistence-type-sha256-65a8400e451e667e5b6e34df72ceb81fca8c12330330fa72083ad40279b189ad) | | `team-message` | not declared | `messageId`: `string`; `senderId`: `string`; `senderName`: `string`; `teamId`: `string` | [`TeamMessageSource`](#persistence-type-sha256-2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0) | +| `team-relay` | `"relay"` | `senderName`: `string`; `senderSessionId`: `string` | [`{ kind: "team-relay", form: "relay" }`](#persistence-type-sha256-a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe) | | `time-context` | `"catalog"` | none | [`{ kind: "time-context", form: "catalog" }`](#persistence-type-sha256-85fe96bf15d5c7559eec3bae4d6cf1a76fda9f5be05a29c2830cff560cab0c0d) | | `time-context` | `"instructions"` | none | [`{ kind: "time-context", form: "instructions" }`](#persistence-type-sha256-f6afe41e3926f422fe849debe90819fddd739f0f59e20be9c71018b9554a7f09) | | `time-context` | `"notice"` | `summary`: `string` | [`{ kind: "time-context", form: "notice" }`](#persistence-type-sha256-ee577a0cc18664c9daee50e9455153321155604f8f1817362f8f4a4b6fb9e1ad) | @@ -4058,13 +4067,13 @@ Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message | `user-approval` | not declared | none | [`{ kind: "user-approval" }`](#persistence-type-sha256-6292bcbedaa97feaec5b48a03bb8144b581b93309d9d6c905f26da7a6a7a0a4f) | | `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) | - + ### `Message[]` -SHA-256: `fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83` +SHA-256: `9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f` -Array of [`Message`](#persistence-type-sha256-691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6). +Array of [`Message`](#persistence-type-sha256-139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2). @@ -4431,7 +4440,7 @@ Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/ | `source` | required | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) | | `title` | required | `string` | - + @@ -4439,7 +4448,7 @@ Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/ ### `SessionTitleLlmRequestEventData` -SHA-256: `9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd` +SHA-256: `4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407` Sources: [`packages/session/session-title-llm/src/index.ts:34`](../packages/session/session-title-llm/src/index.ts) @@ -4447,7 +4456,7 @@ Sources: [`packages/session/session-title-llm/src/index.ts:34`](../packages/sess |---|---|---| | `maxTokens` | required | `number` | | `messageSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | -| `messages` | required | [`Message[]`](#persistence-type-sha256-fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83) | +| `messages` | required | [`Message[]`](#persistence-type-sha256-9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f) | | `route` | required | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) | | `system` | required | `string` | | `titleProvider` | required | `string` | @@ -5101,7 +5110,7 @@ Sources: [`packages/core/session/src/types.ts:232`](../packages/core/session/src | `interrupted` | not declared | none | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) | | `max-tokens` | not declared | none | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) | - + @@ -5109,7 +5118,7 @@ Sources: [`packages/core/session/src/types.ts:232`](../packages/core/session/src ### `UserMessage` -SHA-256: `64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586` +SHA-256: `2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47` Sources: [`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message.ts) @@ -5118,19 +5127,19 @@ Sources: [`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message | `content` | required | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | required | `string` | | `role` | required | `"user"` | -| `source` | required | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | +| `source` | required | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | Source compatibility: `source` — `session-source-attribution` v1; `session.user-message.source`; `kind`; `preserve`. -Attribution-only additions: `tmux-context`. +Attribution-only additions: `team-relay`, `tmux-context`. - + ### `UserMessage[]` -SHA-256: `d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621` +SHA-256: `e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f` -Array of [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586). +Array of [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47). @@ -5973,18 +5982,18 @@ Sources: [`packages/core/session/src/types.ts:390`](../packages/core/session/src | `reason` | required | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) | | `startsSeries` | optional | `true` | - + ### `{ headerSeq?, message, step, turn }` -SHA-256: `51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f` +SHA-256: `766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194` Sources: [`packages/core/session/src/types.ts:311`](../packages/core/session/src/types.ts) | Property | Presence | Type | |---|---|---| | `headerSeq` | optional | `number` | -| `message` | required | [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) | +| `message` | required | [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) | | `step` | required | `number` | | `turn` | required | `number` | @@ -6068,17 +6077,17 @@ Sources: [`packages/core/session/src/types.ts:427`](../packages/core/session/src |---|---|---| | `inherited` | optional | `true` | - + ### `{ inserted, outcome?, removedCount?, start, … }` -SHA-256: `dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130` +SHA-256: `f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283` Sources: [`packages/core/agent/src/types.ts:96`](../packages/core/agent/src/types.ts) | Property | Presence | Type | |---|---|---| -| `inserted` | required | [`UserMessage[]`](#persistence-type-sha256-d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621) | +| `inserted` | required | [`UserMessage[]`](#persistence-type-sha256-e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f) | | `outcome` | optional | `"canceled"` | | `removedCount` | optional | `number` | | `start` | required | `number` | @@ -6909,6 +6918,21 @@ Sources: [`packages/llm/llm/src/types.ts:157`](../packages/llm/llm/src/types.ts) |---|---|---| | `kind` | required | `"stop"` | + + +### `{ kind: "team-relay", form: "relay" }` + +SHA-256: `a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe` + +Sources: [`packages/experimental/agent-team/src/types.ts:151`](../packages/experimental/agent-team/src/types.ts) + +| Property | Presence | Type | +|---|---|---| +| `form` | required | `"relay"` | +| `kind` | required | `"team-relay"` | +| `senderName` | required | `string` | +| `senderSessionId` | required | `string` | + ### `{ kind: "time-context" }` @@ -7376,7 +7400,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:61`](../packages/web SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1` -Sources: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7404,7 +7428,7 @@ Sources: [`packages/core/session/src/types.ts:330`](../packages/core/session/src SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` -Sources: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7418,7 +7442,7 @@ Sources: [`packages/experimental/agent-team/src/types.ts:234`](../packages/exper SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1` -Sources: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7564,7 +7588,7 @@ Sources: [`packages/compaction/compaction-image-offload/src/projection.ts:25`](. SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c` -Sources: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7612,17 +7636,17 @@ SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | `time` | required | `number` | | `type` | required | `"agent-preset/selected"` | - + ### `{ type: "agent/inbox/spliced" }` -SHA-256: `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` +SHA-256: `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` | Property | Presence | Type | |---|---|---| -| `data` | required | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130) | +| `data` | required | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | @@ -7863,17 +7887,17 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | `time` | required | `number` | | `type` | required | `"deliverables/presented"` | - + ### `{ type: "developer/message" }` -SHA-256: `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` +SHA-256: `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` | Property | Presence | Type | |---|---|---| -| `data` | required | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f) | +| `data` | required | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | @@ -8229,17 +8253,17 @@ SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | `time` | required | `number` | | `type` | required | `"session/title"` | - + ### `{ type: "session/title-llm-request" }` -SHA-256: `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` +SHA-256: `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` | Property | Presence | Type | |---|---|---| -| `data` | required | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd) | +| `data` | required | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | @@ -8662,17 +8686,17 @@ Sources: [`packages/llm/llm/src/types.ts:458`](../packages/llm/llm/src/types.ts) | `type` | required | `"usage"` | | `usage` | required | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) | - + ### `{ type: "user/message" }` -SHA-256: `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` +SHA-256: `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` | Property | Presence | Type | |---|---|---| -| `data` | required | [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) | +| `data` | required | [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index 5d7b2f013c..72dd2c3a50 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -23,7 +23,7 @@ | `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) | | `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) | | `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) | -| `event:agent/inbox/spliced` | event | `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c) | +| `event:agent/inbox/spliced` | event | `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4) | | `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) | | `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) | | `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) | @@ -36,7 +36,7 @@ | `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) | | `event:compaction/summary` | event | `e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602) | | `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) | -| `event:developer/message` | event | `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` | [`{ type: "developer/message" }`](#persistence-type-sha256-eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80) | +| `event:developer/message` | event | `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` | [`{ type: "developer/message" }`](#persistence-type-sha256-3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e) | | `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) | | `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) | | `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) | @@ -56,7 +56,7 @@ | `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) | | `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) | | `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) | -| `event:session/title-llm-request` | event | `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d) | +| `event:session/title-llm-request` | event | `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7) | | `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) | | `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) | | `event:subagent/catalog` | event | `3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604) | @@ -78,7 +78,7 @@ | `event:tool/result` | event | `7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397` | [`{ type: "tool/result" }`](#persistence-type-sha256-7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397) | | `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) | | `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) | -| `event:user/message` | event | `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` | [`{ type: "user/message" }`](#persistence-type-sha256-3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761) | +| `event:user/message` | event | `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` | [`{ type: "user/message" }`](#persistence-type-sha256-0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58) | | `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331) | | `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) | @@ -977,7 +977,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMemberSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) @@ -995,7 +995,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageId](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) @@ -1008,7 +1008,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) @@ -1021,7 +1021,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamTaskSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) ### `todo/*` @@ -2541,6 +2541,14 @@ SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c` `"team-message"` + + +### `"team-relay"` + +SHA-256: `c91852e53038618e7869f3e436acdb3f319c4f31b516c71a4b816e7387e3df2f` + +`"team-relay"` + ### `"team/member"` @@ -3209,7 +3217,7 @@ SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9` | `body` | 必需 | [`{ max_tokens, messages, model, tools }`](#persistence-type-sha256-930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731) | | `endpoint` | 必需 | `string` | - + @@ -3217,7 +3225,7 @@ SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9` ### `DeveloperMessage` -SHA-256: `f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b` +SHA-256: `46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba` 来源:[`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message.ts) @@ -3226,11 +3234,11 @@ SHA-256: `f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b` | `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | 必需 | `string` | | `role` | 必需 | `"developer"` | -| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | +| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | 消息源兼容策略:`source` — `session-source-attribution` v1; `session.developer-message.source`; `kind`; `preserve`. -仅表示归属的新增 kind:`tmux-context`. +仅表示归属的新增 kind:`team-relay`, `tmux-context`. @@ -3843,7 +3851,7 @@ SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20` | `step` | 必需 | `number` | | `turn` | 必需 | `number` | - + @@ -3851,15 +3859,15 @@ SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20` ### `Message` -SHA-256: `691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6` +SHA-256: `139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2` 来源:[`packages/llm/llm/src/message.ts:196`](../packages/llm/llm/src/message.ts) 以下类型之一: - [`ToolResultMessage`](#persistence-type-sha256-4b259f7f8f0a44ad5e90b70a73553ced1df27012d126921d397ff403b6c86731) -- [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) -- [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) +- [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) +- [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) - [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be) - [`SystemMessage`](#persistence-type-sha256-09f3f8dc417f278257202714132f98ba7b52957d7b558c4a04456603890eb363) @@ -3936,7 +3944,7 @@ SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2` - `"negative"` - `"positive"` - + @@ -3944,7 +3952,7 @@ SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2` ### `MessageSource` -SHA-256: `40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945` +SHA-256: `bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624` 来源:[`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message.ts) @@ -4019,6 +4027,7 @@ SHA-256: `40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945` | `subagent-settled` | `"notice"` | `senderSessionId`: `string`; `summary`: `string` | [`SubagentSettledMessageSource`](#persistence-type-sha256-4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a) | | `system-prompt` | 未声明 | 无 | [`SystemPromptMessageSource`](#persistence-type-sha256-65a8400e451e667e5b6e34df72ceb81fca8c12330330fa72083ad40279b189ad) | | `team-message` | 未声明 | `messageId`: `string`; `senderId`: `string`; `senderName`: `string`; `teamId`: `string` | [`TeamMessageSource`](#persistence-type-sha256-2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0) | +| `team-relay` | `"relay"` | `senderName`: `string`; `senderSessionId`: `string` | [`{ kind: "team-relay", form: "relay" }`](#persistence-type-sha256-a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe) | | `time-context` | `"catalog"` | 无 | [`{ kind: "time-context", form: "catalog" }`](#persistence-type-sha256-85fe96bf15d5c7559eec3bae4d6cf1a76fda9f5be05a29c2830cff560cab0c0d) | | `time-context` | `"instructions"` | 无 | [`{ kind: "time-context", form: "instructions" }`](#persistence-type-sha256-f6afe41e3926f422fe849debe90819fddd739f0f59e20be9c71018b9554a7f09) | | `time-context` | `"notice"` | `summary`: `string` | [`{ kind: "time-context", form: "notice" }`](#persistence-type-sha256-ee577a0cc18664c9daee50e9455153321155604f8f1817362f8f4a4b6fb9e1ad) | @@ -4060,13 +4069,13 @@ SHA-256: `40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945` | `user-approval` | 未声明 | 无 | [`{ kind: "user-approval" }`](#persistence-type-sha256-6292bcbedaa97feaec5b48a03bb8144b581b93309d9d6c905f26da7a6a7a0a4f) | | `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) | - + ### `Message[]` -SHA-256: `fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83` +SHA-256: `9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f` -[`Message`](#persistence-type-sha256-691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6) 的数组。 +[`Message`](#persistence-type-sha256-139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2) 的数组。 @@ -4433,7 +4442,7 @@ SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4` | `source` | 必需 | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) | | `title` | 必需 | `string` | - + @@ -4441,7 +4450,7 @@ SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4` ### `SessionTitleLlmRequestEventData` -SHA-256: `9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd` +SHA-256: `4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407` 来源:[`packages/session/session-title-llm/src/index.ts:34`](../packages/session/session-title-llm/src/index.ts) @@ -4449,7 +4458,7 @@ SHA-256: `9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd` |---|---|---| | `maxTokens` | 必需 | `number` | | `messageSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | -| `messages` | 必需 | [`Message[]`](#persistence-type-sha256-fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83) | +| `messages` | 必需 | [`Message[]`](#persistence-type-sha256-9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f) | | `route` | 必需 | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) | | `system` | 必需 | `string` | | `titleProvider` | 必需 | `string` | @@ -5103,7 +5112,7 @@ SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402` | `interrupted` | 未声明 | 无 | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) | | `max-tokens` | 未声明 | 无 | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) | - + @@ -5111,7 +5120,7 @@ SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402` ### `UserMessage` -SHA-256: `64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586` +SHA-256: `2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47` 来源:[`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message.ts) @@ -5120,19 +5129,19 @@ SHA-256: `64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586` | `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | 必需 | `string` | | `role` | 必需 | `"user"` | -| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | +| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | 消息源兼容策略:`source` — `session-source-attribution` v1; `session.user-message.source`; `kind`; `preserve`. -仅表示归属的新增 kind:`tmux-context`. +仅表示归属的新增 kind:`team-relay`, `tmux-context`. - + ### `UserMessage[]` -SHA-256: `d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621` +SHA-256: `e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f` -[`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) 的数组。 +[`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) 的数组。 @@ -5975,18 +5984,18 @@ SHA-256: `ad0c38a0adb82a94c925456df41586d9b5f9202fca18593eae2213d4445b4585` | `reason` | 必需 | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) | | `startsSeries` | 可选 | `true` | - + ### `{ headerSeq?, message, step, turn }` -SHA-256: `51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f` +SHA-256: `766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194` 来源:[`packages/core/session/src/types.ts:311`](../packages/core/session/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| | `headerSeq` | 可选 | `number` | -| `message` | 必需 | [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) | +| `message` | 必需 | [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) | | `step` | 必需 | `number` | | `turn` | 必需 | `number` | @@ -6070,17 +6079,17 @@ SHA-256: `17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3` |---|---|---| | `inherited` | 可选 | `true` | - + ### `{ inserted, outcome?, removedCount?, start, … }` -SHA-256: `dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130` +SHA-256: `f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283` 来源:[`packages/core/agent/src/types.ts:96`](../packages/core/agent/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| -| `inserted` | 必需 | [`UserMessage[]`](#persistence-type-sha256-d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621) | +| `inserted` | 必需 | [`UserMessage[]`](#persistence-type-sha256-e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f) | | `outcome` | 可选 | `"canceled"` | | `removedCount` | 可选 | `number` | | `start` | 必需 | `number` | @@ -6911,6 +6920,21 @@ SHA-256: `1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f` |---|---|---| | `kind` | 必需 | `"stop"` | + + +### `{ kind: "team-relay", form: "relay" }` + +SHA-256: `a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe` + +来源:[`packages/experimental/agent-team/src/types.ts:151`](../packages/experimental/agent-team/src/types.ts) + +| 属性 | 存在性 | 类型 | +|---|---|---| +| `form` | 必需 | `"relay"` | +| `kind` | 必需 | `"team-relay"` | +| `senderName` | 必需 | `string` | +| `senderSessionId` | 必需 | `string` | + ### `{ kind: "time-context" }` @@ -7378,7 +7402,7 @@ SHA-256: `930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731` SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1` -来源:[`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7406,7 +7430,7 @@ SHA-256: `6bc8e51124d0874bc89e1d0ceff381a9c3cd0fc240667d69f841ce4f60f65fe5` SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` -来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7420,7 +7444,7 @@ SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1` -来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7566,7 +7590,7 @@ SHA-256: `477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028` SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c` -来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7614,17 +7638,17 @@ SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | `time` | 必需 | `number` | | `type` | 必需 | `"agent-preset/selected"` | - + ### `{ type: "agent/inbox/spliced" }` -SHA-256: `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` +SHA-256: `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130) | +| `data` | 必需 | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | @@ -7865,17 +7889,17 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | `time` | 必需 | `number` | | `type` | 必需 | `"deliverables/presented"` | - + ### `{ type: "developer/message" }` -SHA-256: `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` +SHA-256: `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f) | +| `data` | 必需 | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | @@ -8231,17 +8255,17 @@ SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | `time` | 必需 | `number` | | `type` | 必需 | `"session/title"` | - + ### `{ type: "session/title-llm-request" }` -SHA-256: `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` +SHA-256: `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd) | +| `data` | 必需 | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | @@ -8664,17 +8688,17 @@ SHA-256: `f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515` | `type` | 必需 | `"usage"` | | `usage` | 必需 | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) | - + ### `{ type: "user/message" }` -SHA-256: `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` +SHA-256: `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) | +| `data` | 必需 | [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml b/docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml new file mode 100644 index 0000000000..be9b0a1032 --- /dev/null +++ b/docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml @@ -0,0 +1,28 @@ +# Bilingual-pair consistency record for 2026-09-27-team-relay-source.md (docs/i18n/README.md): per heading +# section, a hash of its English and Chinese blocks outside code blocks and generated regions. +# After editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write docs/persistence-changes/2026-09-27-team-relay-source.md +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/2026-09-27-team-relay-source: + en: e0c1ab3f13e8273e + zh: bb1e786065a69390 +/2026-09-27-team-relay-source/summary: + en: a6b6694a082889f1 + zh: 2ffcc7e2ca682aae +/2026-09-27-team-relay-source/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/2026-09-27-team-relay-source/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/2026-09-27-team-relay-source/compatibility: + en: 495a00731d6363b7 + zh: 03a17f27249df4ec +/2026-09-27-team-relay-source/verification: + en: 4f1b64efd9a6455a + zh: 3bafc76582930927 +/2026-09-27-team-relay-source/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.md b/docs/persistence-changes/2026-09-27-team-relay-source.md new file mode 100644 index 0000000000..7bea36b3af --- /dev/null +++ b/docs/persistence-changes/2026-09-27-team-relay-source.md @@ -0,0 +1,60 @@ +--- +description: "Records a persistence type transition and its compatibility acknowledgement." +kind: persistence-change +--- + +# 2026-09-27-team-relay-source + +English | [中文](2026-09-27-team-relay-source.zh.md) + +## Summary + +Adds the Team-owned team-relay attribution source to persisted user and developer message slots without changing the Session format version. + +## Table of Contents + +- [Declaration](#declaration) +- [Compatibility](#compatibility) +- [Verification](#verification) +- [Dev Note](#dev-note) + + +## Declaration + +```yaml persistence-change +schemaVersion: 1 +id: 2026-09-27-team-relay-source +baseline: false +changes: + - root: "event:agent/inbox/spliced" + previous: "2026-09-16-session-format-v4" + after: "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4" + decision: same-version + - root: "event:developer/message" + previous: "2026-09-16-session-format-v4" + after: "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e" + decision: same-version + - root: "event:session/title-llm-request" + previous: "2026-09-16-session-format-v4" + after: "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7" + decision: same-version + - root: "event:user/message" + previous: "2026-09-16-session-format-v4" + after: "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58" + decision: same-version +``` + + +## Compatibility + +Existing agent-message and historical team-message records remain unchanged. The new kind records senderSessionId, senderName, and relay form only; it imposes no replay, validation, or authority requirement. Current V4 readers preserve unknown attribution and its JSON metadata without the Team producer. Older clients can display the recorded content with generic source presentation. + + +## Verification + +pnpm exec vitest run packages/experimental/agent-team packages/experimental/tool-agent-team packages/client/ui-chat/tests/turn-trigger.client.spec.tsx: 129 tests passed. pnpm exec vitest run packages/experimental/agent-team/tests/persistence.spec.ts packages/session/session-format-v3-to-v4/tests/attribution.spec.ts packages/session/session-format-v3-to-v4/tests/message-sources.spec.ts: 16 tests passed, including target inbox recovery with Team disposed. pnpm run test:snapshot -t 'team-direct-inbox|team-targets': 2 scenarios passed. + + +## Dev Note + +None. diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.schema.json b/docs/persistence-changes/2026-09-27-team-relay-source.schema.json new file mode 100644 index 0000000000..065a8d66ca --- /dev/null +++ b/docs/persistence-changes/2026-09-27-team-relay-source.schema.json @@ -0,0 +1,11409 @@ +{ + "formatVersion": 2, + "roots": [ + { + "key": "event:agent/inbox/spliced", + "kind": "event", + "event": "agent/inbox/spliced", + "surface": false, + "digest": "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 27, + "optional": true + }, + { + "name": "seq", + "type": 20, + "optional": false + }, + { + "name": "time", + "type": 20, + "optional": false + }, + { + "name": "type", + "type": 201, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "inserted", + "type": 2, + "optional": false + }, + { + "name": "outcome", + "type": 197, + "optional": true + }, + { + "name": "removedCount", + "type": 20, + "optional": true + }, + { + "name": "start", + "type": 20, + "optional": false + }, + { + "name": "target", + "type": 198, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "role", + "type": 32, + "optional": false + }, + { + "name": "source", + "type": 33, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 9, + 11, + 14, + 16, + 18, + 29 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 12, + "optional": true + }, + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 19, + "optional": false + }, + { + "name": "offloaded", + "type": 27, + "optional": true + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 20, + "optional": false + }, + { + "name": "height", + "type": 20, + "optional": false + }, + { + "name": "mediaType", + "type": 21, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": true + }, + { + "name": "originalDimensions", + "type": 26, + "optional": true + }, + { + "name": "width", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 22, + 23, + 24, + 25 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 20, + "optional": false + }, + { + "name": "width", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 30, + "optional": false + }, + { + "name": "type", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 20, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 34, + 37, + 39, + 41, + 43, + 45, + 47, + 49, + 51, + 53, + 56, + 58, + 60, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 115, + 117, + 120, + 121, + 122, + 123, + 124, + 126, + 127, + 128, + 129, + 131, + 132, + 133, + 134, + 135, + 137, + 138, + 139, + 141, + 142, + 150, + 152, + 153, + 155, + 157, + 161, + 163, + 171, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 189, + 191, + 193, + 194, + 195, + 196 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 114, + "optional": false + }, + { + "name": "revision", + "type": 20, + "optional": false + }, + { + "name": "round", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 116, + "optional": false + }, + { + "name": "messageId", + "type": 7, + "optional": false + }, + { + "name": "senderId", + "type": 7, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "teamId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 118, + "optional": false + }, + { + "name": "model", + "type": 7, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "replayState", + "type": 119, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 125, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 136, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 32, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 140, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 27, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 7, + "optional": true + }, + { + "name": "changes", + "type": 143, + "optional": false + }, + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 149, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 144 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 145, + "optional": false + }, + { + "name": "digest", + "type": 7, + "optional": true + }, + { + "name": "path", + "type": 7, + "optional": false + }, + { + "name": "scope", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 146, + 147, + 148 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 151, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 7, + "optional": true + }, + { + "name": "kind", + "type": 32, + "optional": false + }, + { + "name": "rpcId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 7, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 7, + "optional": false + }, + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "ruleId", + "type": 7, + "optional": false + }, + { + "name": "source", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 158, + "optional": false + }, + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 160, + "optional": false + }, + { + "name": "update", + "type": 27, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 159 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 162, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 164, + "optional": false + }, + { + "name": "references", + "type": 165, + "optional": false + }, + { + "name": "version", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 166 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 20, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 167, + "optional": false + }, + { + "name": "compacted", + "type": 169, + "optional": false + }, + { + "name": "inputIndex", + "type": 20, + "optional": false + }, + { + "name": "label", + "type": 7, + "optional": false + }, + { + "name": "omittedBytes", + "type": 20, + "optional": false + }, + { + "name": "omittedMessages", + "type": 20, + "optional": false + }, + { + "name": "originalMessages", + "type": 20, + "optional": false + }, + { + "name": "retainedMessages", + "type": 20, + "optional": false + }, + { + "name": "sessionId", + "type": 7, + "optional": false + }, + { + "name": "truncated", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 20, + 168 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 174 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "text", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 190, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 192, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "canceled" + }, + { + "kind": "union", + "types": [ + 199, + 200 + ] + }, + { + "kind": "literal", + "value": "next-step" + }, + { + "kind": "literal", + "value": "next-turn" + }, + { + "kind": "literal", + "value": "agent/inbox/spliced" + } + ] + } + }, + { + "key": "event:developer/message", + "kind": "event", + "event": "developer/message", + "surface": true, + "digest": "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 26, + "optional": true + }, + { + "name": "seq", + "type": 2, + "optional": false + }, + { + "name": "sourceEventSeqs", + "type": 197, + "optional": true + }, + { + "name": "surfaceOp", + "type": 198, + "optional": false + }, + { + "name": "time", + "type": 2, + "optional": false + }, + { + "name": "type", + "type": 201, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "headerSeq", + "type": 2, + "optional": true + }, + { + "name": "message", + "type": 3, + "optional": false + }, + { + "name": "step", + "type": 2, + "optional": false + }, + { + "name": "turn", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "role", + "type": 31, + "optional": false + }, + { + "name": "source", + "type": 32, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 9, + 11, + 14, + 16, + 18, + 28 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 12, + "optional": true + }, + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 19, + "optional": false + }, + { + "name": "offloaded", + "type": 26, + "optional": true + }, + { + "name": "type", + "type": 27, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "mediaType", + "type": 20, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": true + }, + { + "name": "originalDimensions", + "type": 25, + "optional": true + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 21, + 22, + 23, + 24 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 29, + "optional": false + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 33, + 36, + 38, + 40, + 42, + 44, + 46, + 48, + 50, + 52, + 55, + 57, + 59, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 119, + 120, + 121, + 122, + 123, + 125, + 126, + 127, + 128, + 130, + 131, + 132, + 133, + 134, + 136, + 138, + 139, + 141, + 142, + 150, + 152, + 153, + 155, + 157, + 161, + 163, + 171, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 189, + 191, + 193, + 194, + 195, + 196 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 113, + "optional": false + }, + { + "name": "revision", + "type": 2, + "optional": false + }, + { + "name": "round", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 115, + "optional": false + }, + { + "name": "messageId", + "type": 7, + "optional": false + }, + { + "name": "senderId", + "type": 7, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "teamId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "model", + "type": 7, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "replayState", + "type": 118, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 124, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 129, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 135, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 137, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 140, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 26, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 7, + "optional": true + }, + { + "name": "changes", + "type": 143, + "optional": false + }, + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 149, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 144 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 145, + "optional": false + }, + { + "name": "digest", + "type": 7, + "optional": true + }, + { + "name": "path", + "type": 7, + "optional": false + }, + { + "name": "scope", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 146, + 147, + 148 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 151, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 7, + "optional": true + }, + { + "name": "kind", + "type": 137, + "optional": false + }, + { + "name": "rpcId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 7, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 7, + "optional": false + }, + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "ruleId", + "type": 7, + "optional": false + }, + { + "name": "source", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 158, + "optional": false + }, + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 160, + "optional": false + }, + { + "name": "update", + "type": 26, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 159 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 162, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 164, + "optional": false + }, + { + "name": "references", + "type": 165, + "optional": false + }, + { + "name": "version", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 166 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 2, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 167, + "optional": false + }, + { + "name": "compacted", + "type": 169, + "optional": false + }, + { + "name": "inputIndex", + "type": 2, + "optional": false + }, + { + "name": "label", + "type": 7, + "optional": false + }, + { + "name": "omittedBytes", + "type": 2, + "optional": false + }, + { + "name": "omittedMessages", + "type": 2, + "optional": false + }, + { + "name": "originalMessages", + "type": 2, + "optional": false + }, + { + "name": "retainedMessages", + "type": 2, + "optional": false + }, + { + "name": "sessionId", + "type": 7, + "optional": false + }, + { + "name": "truncated", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 2, + 168 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 174 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "text", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 190, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 192, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "union", + "types": [ + 199, + 200 + ] + }, + { + "kind": "literal", + "value": "append" + }, + { + "kind": "object", + "properties": [ + { + "name": "endSeq", + "type": 2, + "optional": false + }, + { + "name": "op", + "type": 147, + "optional": false + }, + { + "name": "startSeq", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer/message" + } + ] + } + }, + { + "key": "event:session/title-llm-request", + "kind": "event", + "event": "session/title-llm-request", + "surface": false, + "digest": "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 29, + "optional": true + }, + { + "name": "seq", + "type": 2, + "optional": false + }, + { + "name": "time", + "type": 2, + "optional": false + }, + { + "name": "type", + "type": 207, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "maxTokens", + "type": 2, + "optional": false + }, + { + "name": "messageSeqs", + "type": 3, + "optional": false + }, + { + "name": "messages", + "type": 4, + "optional": false + }, + { + "name": "route", + "type": 206, + "optional": false + }, + { + "name": "system", + "type": 10, + "optional": false + }, + { + "name": "titleProvider", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 37, + 201, + 202, + 204 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "isError", + "type": 34, + "optional": true + }, + { + "name": "role", + "type": 35, + "optional": false + }, + { + "name": "source", + "type": 36, + "optional": false + }, + { + "name": "toolCallId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 8 + }, + { + "kind": "union", + "types": [ + 9, + 12, + 14, + 17, + 19, + 21, + 31 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 15, + "optional": true + }, + { + "name": "toolName", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 10, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 22, + "optional": false + }, + { + "name": "offloaded", + "type": 29, + "optional": true + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 10, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "mediaType", + "type": 23, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": true + }, + { + "name": "originalDimensions", + "type": 28, + "optional": true + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 24, + 25, + 26, + 27 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 32, + "optional": false + }, + { + "name": "type", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 10, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 38, + "optional": false + }, + { + "name": "source", + "type": 39, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 36, + 40, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 81, + 82, + 84, + 86, + 88, + 93, + 95, + 103, + 107, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 181, + 183, + 186, + 187, + 188, + 190, + 191, + 192, + 194, + 195, + 196, + 197, + 199, + 200 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 29, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 10, + "optional": true + }, + { + "name": "changes", + "type": 73, + "optional": false + }, + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 80, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 74 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 75, + "optional": false + }, + { + "name": "digest", + "type": 10, + "optional": true + }, + { + "name": "path", + "type": 10, + "optional": false + }, + { + "name": "scope", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 76, + 77, + 78 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 10, + "optional": true + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "rpcId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 83, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 10, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 10, + "optional": false + }, + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 87, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + }, + { + "name": "ruleId", + "type": 10, + "optional": false + }, + { + "name": "source", + "type": 10, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 89, + "optional": false + }, + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 92, + "optional": false + }, + { + "name": "update", + "type": 29, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 90 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 10, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 94, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + }, + { + "name": "references", + "type": 98, + "optional": false + }, + { + "name": "version", + "type": 102, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 99 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 2, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 100, + "optional": false + }, + { + "name": "compacted", + "type": 34, + "optional": false + }, + { + "name": "inputIndex", + "type": 2, + "optional": false + }, + { + "name": "label", + "type": 10, + "optional": false + }, + { + "name": "omittedBytes", + "type": 2, + "optional": false + }, + { + "name": "omittedMessages", + "type": 2, + "optional": false + }, + { + "name": "originalMessages", + "type": 2, + "optional": false + }, + { + "name": "retainedMessages", + "type": 2, + "optional": false + }, + { + "name": "sessionId", + "type": 10, + "optional": false + }, + { + "name": "truncated", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 2, + 101 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 106 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 10, + "optional": false + }, + { + "name": "text", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 180, + "optional": false + }, + { + "name": "revision", + "type": 2, + "optional": false + }, + { + "name": "round", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 182, + "optional": false + }, + { + "name": "messageId", + "type": 10, + "optional": false + }, + { + "name": "senderId", + "type": 10, + "optional": false + }, + { + "name": "senderName", + "type": 10, + "optional": false + }, + { + "name": "teamId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "model", + "type": 10, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + }, + { + "name": "replayState", + "type": 185, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 189, + "optional": false + }, + { + "name": "senderName", + "type": 10, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 193, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 198, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 50, + "optional": false + }, + { + "name": "source", + "type": 39, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 203, + "optional": false + }, + { + "name": "source", + "type": 183, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "assistant" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 205, + "optional": false + }, + { + "name": "source", + "type": 197, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system" + }, + { + "kind": "object", + "properties": [ + { + "name": "model", + "type": 10, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session/title-llm-request" + } + ] + } + }, + { + "key": "event:user/message", + "kind": "event", + "event": "user/message", + "surface": true, + "digest": "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 25, + "optional": true + }, + { + "name": "seq", + "type": 18, + "optional": false + }, + { + "name": "sourceEventSeqs", + "type": 195, + "optional": true + }, + { + "name": "surfaceOp", + "type": 196, + "optional": false + }, + { + "name": "time", + "type": 18, + "optional": false + }, + { + "name": "type", + "type": 199, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 30, + "optional": false + }, + { + "name": "source", + "type": 31, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "union", + "types": [ + 4, + 7, + 9, + 12, + 14, + 16, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 10, + "optional": true + }, + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 5, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 17, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 32, + 35, + 37, + 39, + 41, + 43, + 45, + 47, + 50, + 52, + 54, + 56, + 58, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 111, + 113, + 116, + 117, + 118, + 119, + 120, + 122, + 123, + 124, + 125, + 127, + 128, + 129, + 130, + 131, + 133, + 134, + 135, + 137, + 138, + 146, + 148, + 149, + 151, + 153, + 157, + 159, + 167, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 185, + 187, + 189, + 190, + 191, + 192, + 193, + 194 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "revision", + "type": 18, + "optional": false + }, + { + "name": "round", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 112, + "optional": false + }, + { + "name": "messageId", + "type": 5, + "optional": false + }, + { + "name": "senderId", + "type": 5, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "teamId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 114, + "optional": false + }, + { + "name": "model", + "type": 5, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "replayState", + "type": 115, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 121, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 126, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 132, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 136, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 5, + "optional": true + }, + { + "name": "changes", + "type": 139, + "optional": false + }, + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 145, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 140 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 141, + "optional": false + }, + { + "name": "digest", + "type": 5, + "optional": true + }, + { + "name": "path", + "type": 5, + "optional": false + }, + { + "name": "scope", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 142, + 143, + 144 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 147, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 5, + "optional": true + }, + { + "name": "kind", + "type": 30, + "optional": false + }, + { + "name": "rpcId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 5, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 5, + "optional": false + }, + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "ruleId", + "type": 5, + "optional": false + }, + { + "name": "source", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 154, + "optional": false + }, + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 155 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 158, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 160, + "optional": false + }, + { + "name": "references", + "type": 161, + "optional": false + }, + { + "name": "version", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 162 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 18, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 163, + "optional": false + }, + { + "name": "compacted", + "type": 165, + "optional": false + }, + { + "name": "inputIndex", + "type": 18, + "optional": false + }, + { + "name": "label", + "type": 5, + "optional": false + }, + { + "name": "omittedBytes", + "type": 18, + "optional": false + }, + { + "name": "omittedMessages", + "type": 18, + "optional": false + }, + { + "name": "originalMessages", + "type": 18, + "optional": false + }, + { + "name": "retainedMessages", + "type": 18, + "optional": false + }, + { + "name": "sessionId", + "type": 5, + "optional": false + }, + { + "name": "truncated", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 18, + 164 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 170 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 186, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 18 + }, + { + "kind": "union", + "types": [ + 197, + 198 + ] + }, + { + "kind": "literal", + "value": "append" + }, + { + "kind": "object", + "properties": [ + { + "name": "endSeq", + "type": 18, + "optional": false + }, + { + "name": "op", + "type": 143, + "optional": false + }, + { + "name": "startSeq", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user/message" + } + ] + } + } + ], + "types": [] +} diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.zh.md b/docs/persistence-changes/2026-09-27-team-relay-source.zh.md new file mode 100644 index 0000000000..29c834ecb8 --- /dev/null +++ b/docs/persistence-changes/2026-09-27-team-relay-source.zh.md @@ -0,0 +1,60 @@ +--- +description: "记录持久化类型更改及其兼容性确认。" +kind: persistence-change +--- + +# 2026-09-27-team-relay-source + +[English](2026-09-27-team-relay-source.md) | 中文 + +## 概述 + +为持久化的 user 和 developer 消息位置添加 Team 所属的 team-relay 归属来源,不改变 Session 格式版本。 + +## 目录 + +- [声明](#declaration) +- [兼容性](#compatibility) +- [验证](#verification) +- [开发备注](#dev-note) + + +## 声明 + +```yaml persistence-change +schemaVersion: 1 +id: 2026-09-27-team-relay-source +baseline: false +changes: + - root: "event:agent/inbox/spliced" + previous: "2026-09-16-session-format-v4" + after: "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4" + decision: same-version + - root: "event:developer/message" + previous: "2026-09-16-session-format-v4" + after: "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e" + decision: same-version + - root: "event:session/title-llm-request" + previous: "2026-09-16-session-format-v4" + after: "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7" + decision: same-version + - root: "event:user/message" + previous: "2026-09-16-session-format-v4" + after: "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58" + decision: same-version +``` + + +## 兼容性 + +已有 agent-message 和历史 team-message 记录保持不变。新 kind 仅记录 senderSessionId、senderName 和 relay form,不增加回放、校验或权限要求。当前 V4 读取方在没有 Team 生产者时仍保留未知归属类型及其 JSON 元数据。旧客户端可以使用通用来源展示已记录的正文。 + + +## 验证 + +pnpm exec vitest run packages/experimental/agent-team packages/experimental/tool-agent-team packages/client/ui-chat/tests/turn-trigger.client.spec.tsx:129 个测试通过。pnpm exec vitest run packages/experimental/agent-team/tests/persistence.spec.ts packages/session/session-format-v3-to-v4/tests/attribution.spec.ts packages/session/session-format-v3-to-v4/tests/message-sources.spec.ts:16 个测试通过,包含卸载 Team 后的目标 inbox 恢复。pnpm run test:snapshot -t 'team-direct-inbox|team-targets':2 个场景通过。 + + +## 开发备注 + +无。 diff --git a/docs/persistence-changes/historical-formats/README.i18n.yaml b/docs/persistence-changes/historical-formats/README.i18n.yaml index 4579af471a..f3142d932e 100644 --- a/docs/persistence-changes/historical-formats/README.i18n.yaml +++ b/docs/persistence-changes/historical-formats/README.i18n.yaml @@ -15,8 +15,8 @@ en: 14c57f30e676f6e3 zh: b1a0ccf26fab3727 /session-persistence-formats/format-references: - en: 45dba01dd6d69c80 - zh: c366d1a3991118c9 + en: 4fd2ce623e49ee0c + zh: 205db03929396361 /session-persistence-formats/scope-and-evidence: en: b220062139ddac1e zh: 7c4c0efe05dafa9c diff --git a/docs/persistence-changes/historical-formats/README.md b/docs/persistence-changes/historical-formats/README.md index a1064e8158..453137b6f1 100644 --- a/docs/persistence-changes/historical-formats/README.md +++ b/docs/persistence-changes/historical-formats/README.md @@ -32,7 +32,7 @@ The index is generated from validated snapshots and the current writer constant. | 1 | PR #3349 | [V1](v1.md) | [JSON](v1.schema.json) | 54 / 415 | | 2 | `dsh-v0.1.3-alpha.2` | [V2](v2.md) | [JSON](v2.schema.json) | 56 / 435 | | 3 | PR #4320 | [V3](v3.md) | [JSON](v3.schema.json) | 60 / 467 | -| 4 | Current checkout | [Current catalog](../../persistence-catalog.md) | [JSON](../../persistence-schema.json) | 62 / 587 | +| 4 | Current checkout | [Current catalog](../../persistence-catalog.md) | [JSON](../../persistence-schema.json) | 62 / 589 | diff --git a/docs/persistence-changes/historical-formats/README.zh.md b/docs/persistence-changes/historical-formats/README.zh.md index 87c9d32fa6..a64ce4f1e0 100644 --- a/docs/persistence-changes/historical-formats/README.zh.md +++ b/docs/persistence-changes/historical-formats/README.zh.md @@ -32,7 +32,7 @@ description: "查找从 V0 到工作区写入器版本的每个 Session 格式 | 1 | PR #3349 | [V1](v1.zh.md) | [JSON](v1.schema.json) | 54 / 415 | | 2 | `dsh-v0.1.3-alpha.2` | [V2](v2.zh.md) | [JSON](v2.schema.json) | 56 / 435 | | 3 | PR #4320 | [V3](v3.zh.md) | [JSON](v3.schema.json) | 60 / 467 | -| 4 | 当前工作树 | [当前目录](../../persistence-catalog.zh.md) | [JSON](../../persistence-schema.json) | 62 / 587 | +| 4 | 当前工作树 | [当前目录](../../persistence-catalog.zh.md) | [JSON](../../persistence-schema.json) | 62 / 589 | diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index 3766e14c52..5cd63d98b4 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -406,7 +406,7 @@ "kind": "event", "event": "agent/inbox/spliced", "surface": false, - "digest": "1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c", + "digest": "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4", "schema": { "root": 0, "nodes": [ @@ -435,7 +435,7 @@ }, { "name": "type", - "type": 199, + "type": 201, "optional": false } ], @@ -451,7 +451,7 @@ }, { "name": "outcome", - "type": 195, + "type": 197, "optional": true }, { @@ -466,7 +466,7 @@ }, { "name": "target", - "type": 196, + "type": 198, "optional": false } ], @@ -505,6 +505,7 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ + "team-relay", "tmux-context" ] } @@ -821,9 +822,9 @@ 43, 45, 47, - 50, - 52, - 54, + 49, + 51, + 53, 56, 58, 60, @@ -834,9 +835,9 @@ 66, 67, 68, + 69, 70, 71, - 72, 73, 74, 75, @@ -847,9 +848,9 @@ 80, 81, 82, + 83, 84, 85, - 86, 87, 88, 89, @@ -860,9 +861,9 @@ 94, 95, 96, + 97, 98, 99, - 100, 101, 102, 103, @@ -873,38 +874,38 @@ 108, 109, 110, + 111, 112, - 114, + 113, + 115, 117, - 118, - 119, 120, 121, + 122, 123, 124, - 125, 126, + 127, 128, 129, - 130, 131, 132, + 133, 134, 135, - 136, + 137, 138, 139, - 147, - 149, + 141, + 142, 150, 152, - 154, - 158, - 160, - 168, - 172, - 173, - 174, + 153, + 155, + 157, + 161, + 163, + 171, 175, 176, 177, @@ -915,14 +916,15 @@ 182, 183, 184, + 185, 186, - 188, + 187, 189, - 190, 191, - 192, 193, - 194 + 194, + 195, + 196 ] }, { @@ -952,7 +954,7 @@ }, { "kind": "literal", - "value": "time-context" + "value": "repeat-tool-reminder" }, { "kind": "object", @@ -975,6 +977,81 @@ ], "indices": [] }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", "value": "tmux-context" @@ -989,7 +1066,7 @@ }, { "name": "kind", - "type": 40, + "type": 46, "optional": false }, { @@ -1014,7 +1091,7 @@ }, { "name": "kind", - "type": 42, + "type": 48, "optional": false }, { @@ -1039,7 +1116,7 @@ }, { "name": "kind", - "type": 44, + "type": 50, "optional": false }, { @@ -1064,7 +1141,7 @@ }, { "name": "kind", - "type": 46, + "type": 52, "optional": false }, { @@ -1084,12 +1161,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { "name": "kind", - "type": 49, + "type": 55, "optional": false } ], @@ -1108,12 +1185,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { "name": "kind", - "type": 51, + "type": 57, "optional": false } ], @@ -1128,12 +1205,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { "name": "kind", - "type": 53, + "type": 59, "optional": false } ], @@ -1148,12 +1225,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { "name": "kind", - "type": 55, + "type": 61, "optional": false } ], @@ -1168,67 +1245,7 @@ "properties": [ { "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, + "type": 54, "optional": false }, { @@ -1244,7 +1261,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { @@ -1260,7 +1277,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { @@ -1276,7 +1293,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { @@ -1292,7 +1309,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { @@ -1308,7 +1325,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { @@ -1324,12 +1341,60 @@ "properties": [ { "name": "form", - "type": 69, + "type": 54, "optional": false }, { "name": "kind", - "type": 49, + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 55, "optional": false } ], @@ -1344,55 +1409,7 @@ "properties": [ { "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1408,7 +1425,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1424,7 +1441,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1440,7 +1457,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1456,7 +1473,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1472,7 +1489,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1488,7 +1505,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1504,7 +1521,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1520,7 +1537,7 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { @@ -1536,12 +1553,60 @@ "properties": [ { "name": "form", - "type": 83, + "type": 72, "optional": false }, { "name": "kind", - "type": 49, + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 55, "optional": false } ], @@ -1556,55 +1621,7 @@ "properties": [ { "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1620,7 +1637,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1636,7 +1653,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1652,7 +1669,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1668,7 +1685,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1684,7 +1701,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1700,7 +1717,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1716,7 +1733,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1732,7 +1749,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { @@ -1748,12 +1765,60 @@ "properties": [ { "name": "form", - "type": 97, + "type": 86, "optional": false }, { "name": "kind", - "type": 49, + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 55, "optional": false } ], @@ -1768,55 +1833,7 @@ "properties": [ { "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1832,7 +1849,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1848,7 +1865,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1864,7 +1881,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1880,7 +1897,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1896,7 +1913,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1912,7 +1929,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1928,7 +1945,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1944,7 +1961,7 @@ "properties": [ { "name": "form", - "type": 97, + "type": 100, "optional": false }, { @@ -1955,6 +1972,54 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -1965,7 +2030,7 @@ }, { "name": "kind", - "type": 111, + "type": 114, "optional": false }, { @@ -1990,7 +2055,7 @@ "properties": [ { "name": "kind", - "type": 113, + "type": 116, "optional": false }, { @@ -2025,7 +2090,7 @@ "properties": [ { "name": "kind", - "type": 115, + "type": 118, "optional": false }, { @@ -2040,7 +2105,7 @@ }, { "name": "replayState", - "type": 116, + "type": 119, "optional": true } ], @@ -2054,39 +2119,6 @@ "kind": "opaque", "reason": "unknown" }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -2098,21 +2130,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 122, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, { "kind": "object", "properties": [ @@ -2151,7 +2168,7 @@ "properties": [ { "name": "kind", - "type": 127, + "type": 125, "optional": false } ], @@ -2159,7 +2176,7 @@ }, { "kind": "literal", - "value": "system-prompt" + "value": "ptc-mode" }, { "kind": "object", @@ -2194,6 +2211,21 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, { "kind": "object", "properties": [ @@ -2210,7 +2242,40 @@ "properties": [ { "name": "kind", - "type": 133, + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 136, "optional": false } ], @@ -2236,7 +2301,7 @@ "properties": [ { "name": "kind", - "type": 44, + "type": 50, "optional": false } ], @@ -2247,7 +2312,7 @@ "properties": [ { "name": "kind", - "type": 137, + "type": 140, "optional": false } ], @@ -2262,7 +2327,7 @@ "properties": [ { "name": "kind", - "type": 46, + "type": 52, "optional": false } ], @@ -2283,17 +2348,17 @@ }, { "name": "changes", - "type": 140, + "type": 143, "optional": false }, { "name": "form", - "type": 48, + "type": 54, "optional": false }, { "name": "kind", - "type": 146, + "type": 149, "optional": false } ], @@ -2301,14 +2366,14 @@ }, { "kind": "array", - "element": 141 + "element": 144 }, { "kind": "object", "properties": [ { "name": "action", - "type": 142, + "type": 145, "optional": false }, { @@ -2332,9 +2397,9 @@ { "kind": "union", "types": [ - 143, - 144, - 145 + 146, + 147, + 148 ] }, { @@ -2363,7 +2428,7 @@ }, { "name": "kind", - "type": 148, + "type": 151, "optional": false } ], @@ -2404,7 +2469,7 @@ }, { "name": "kind", - "type": 151, + "type": 154, "optional": false }, { @@ -2434,7 +2499,7 @@ }, { "name": "kind", - "type": 153, + "type": 156, "optional": false }, { @@ -2469,17 +2534,17 @@ "properties": [ { "name": "entries", - "type": 155, + "type": 158, "optional": false }, { "name": "form", - "type": 97, + "type": 100, "optional": false }, { "name": "kind", - "type": 157, + "type": 160, "optional": false }, { @@ -2492,7 +2557,7 @@ }, { "kind": "array", - "element": 156 + "element": 159 }, { "kind": "object", @@ -2519,12 +2584,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 54, "optional": false }, { "name": "kind", - "type": 159, + "type": 162, "optional": false }, { @@ -2544,22 +2609,22 @@ "properties": [ { "name": "form", - "type": 69, + "type": 72, "optional": false }, { "name": "kind", - "type": 161, + "type": 164, "optional": false }, { "name": "references", - "type": 162, + "type": 165, "optional": false }, { "name": "version", - "type": 167, + "type": 170, "optional": false } ], @@ -2571,7 +2636,7 @@ }, { "kind": "array", - "element": 163 + "element": 166 }, { "kind": "object", @@ -2583,12 +2648,12 @@ }, { "name": "capturedThroughSeq", - "type": 164, + "type": 167, "optional": false }, { "name": "compacted", - "type": 166, + "type": 169, "optional": false }, { @@ -2628,7 +2693,7 @@ }, { "name": "truncated", - "type": 166, + "type": 169, "optional": false } ], @@ -2638,7 +2703,7 @@ "kind": "union", "types": [ 20, - 165 + 168 ] }, { @@ -2658,17 +2723,17 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { "name": "kind", - "type": 49, + "type": 55, "optional": false }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2680,7 +2745,7 @@ }, { "kind": "array", - "element": 171 + "element": 174 }, { "kind": "object", @@ -2703,70 +2768,7 @@ "properties": [ { "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2776,7 +2778,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2787,7 +2789,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2797,7 +2799,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2808,7 +2810,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2818,7 +2820,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2829,7 +2831,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2839,7 +2841,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2850,7 +2852,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2860,7 +2862,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2871,7 +2873,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2881,7 +2883,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2892,7 +2894,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2902,7 +2904,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2913,7 +2915,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2923,7 +2925,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -2934,7 +2936,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -2944,12 +2946,105 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, { "kind": "object", "properties": [ @@ -2960,7 +3055,7 @@ }, { "name": "kind", - "type": 185, + "type": 190, "optional": false }, { @@ -2985,12 +3080,12 @@ "properties": [ { "name": "form", - "type": 83, + "type": 86, "optional": false }, { "name": "kind", - "type": 187, + "type": 192, "optional": false }, { @@ -3005,69 +3100,6 @@ "kind": "literal", "value": "agent-message" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -3159,8 +3191,8 @@ { "kind": "union", "types": [ - 197, - 198 + 199, + 200 ] }, { @@ -6523,7 +6555,7 @@ "kind": "event", "event": "developer/message", "surface": true, - "digest": "eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80", + "digest": "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e", "schema": { "root": 0, "nodes": [ @@ -6547,12 +6579,12 @@ }, { "name": "sourceEventSeqs", - "type": 195, + "type": 197, "optional": true }, { "name": "surfaceOp", - "type": 196, + "type": 198, "optional": false }, { @@ -6562,7 +6594,7 @@ }, { "name": "type", - "type": 199, + "type": 201, "optional": false } ], @@ -6627,6 +6659,7 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ + "team-relay", "tmux-context" ] } @@ -6939,9 +6972,9 @@ 42, 44, 46, - 49, - 51, - 53, + 48, + 50, + 52, 55, 57, 59, @@ -6952,9 +6985,9 @@ 65, 66, 67, + 68, 69, 70, - 71, 72, 73, 74, @@ -6965,9 +6998,9 @@ 79, 80, 81, + 82, 83, 84, - 85, 86, 87, 88, @@ -6978,9 +7011,9 @@ 93, 94, 95, + 96, 97, 98, - 99, 100, 101, 102, @@ -6991,38 +7024,38 @@ 107, 108, 109, + 110, 111, - 113, + 112, + 114, 116, - 117, - 118, 119, 120, + 121, 122, 123, - 124, 125, + 126, 127, 128, - 129, 130, 131, + 132, 133, - 135, + 134, 136, 138, 139, - 147, - 149, + 141, + 142, 150, 152, - 154, - 158, - 160, - 168, - 172, - 173, - 174, + 153, + 155, + 157, + 161, + 163, + 171, 175, 176, 177, @@ -7033,14 +7066,15 @@ 182, 183, 184, + 185, 186, - 188, + 187, 189, - 190, 191, - 192, 193, - 194 + 194, + 195, + 196 ] }, { @@ -7070,7 +7104,7 @@ }, { "kind": "literal", - "value": "time-context" + "value": "repeat-tool-reminder" }, { "kind": "object", @@ -7093,6 +7127,81 @@ ], "indices": [] }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", "value": "tmux-context" @@ -7107,7 +7216,7 @@ }, { "name": "kind", - "type": 39, + "type": 45, "optional": false }, { @@ -7132,7 +7241,7 @@ }, { "name": "kind", - "type": 41, + "type": 47, "optional": false }, { @@ -7157,7 +7266,7 @@ }, { "name": "kind", - "type": 43, + "type": 49, "optional": false }, { @@ -7182,7 +7291,7 @@ }, { "name": "kind", - "type": 45, + "type": 51, "optional": false }, { @@ -7202,12 +7311,12 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { "name": "kind", - "type": 48, + "type": 54, "optional": false } ], @@ -7226,12 +7335,12 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { "name": "kind", - "type": 50, + "type": 56, "optional": false } ], @@ -7246,12 +7355,12 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { "name": "kind", - "type": 52, + "type": 58, "optional": false } ], @@ -7266,12 +7375,12 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { "name": "kind", - "type": 54, + "type": 60, "optional": false } ], @@ -7286,67 +7395,7 @@ "properties": [ { "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, + "type": 53, "optional": false }, { @@ -7362,7 +7411,7 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { @@ -7378,7 +7427,7 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { @@ -7394,7 +7443,7 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { @@ -7410,7 +7459,7 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { @@ -7426,7 +7475,7 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { @@ -7442,12 +7491,60 @@ "properties": [ { "name": "form", - "type": 68, + "type": 53, "optional": false }, { "name": "kind", - "type": 48, + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 54, "optional": false } ], @@ -7462,55 +7559,7 @@ "properties": [ { "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7526,7 +7575,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7542,7 +7591,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7558,7 +7607,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7574,7 +7623,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7590,7 +7639,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7606,7 +7655,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7622,7 +7671,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7638,7 +7687,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { @@ -7654,12 +7703,60 @@ "properties": [ { "name": "form", - "type": 82, + "type": 71, "optional": false }, { "name": "kind", - "type": 48, + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 54, "optional": false } ], @@ -7674,55 +7771,7 @@ "properties": [ { "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7738,7 +7787,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7754,7 +7803,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7770,7 +7819,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7786,7 +7835,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7802,7 +7851,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7818,7 +7867,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7834,7 +7883,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7850,7 +7899,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { @@ -7866,12 +7915,60 @@ "properties": [ { "name": "form", - "type": 96, + "type": 85, "optional": false }, { "name": "kind", - "type": 48, + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 54, "optional": false } ], @@ -7886,55 +7983,7 @@ "properties": [ { "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -7950,7 +7999,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -7966,7 +8015,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -7982,7 +8031,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -7998,7 +8047,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -8014,7 +8063,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -8030,7 +8079,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -8046,7 +8095,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -8062,7 +8111,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 99, "optional": false }, { @@ -8073,6 +8122,54 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -8083,7 +8180,7 @@ }, { "name": "kind", - "type": 110, + "type": 113, "optional": false }, { @@ -8108,7 +8205,7 @@ "properties": [ { "name": "kind", - "type": 112, + "type": 115, "optional": false }, { @@ -8143,7 +8240,7 @@ "properties": [ { "name": "kind", - "type": 114, + "type": 117, "optional": false }, { @@ -8158,7 +8255,7 @@ }, { "name": "replayState", - "type": 115, + "type": 118, "optional": true } ], @@ -8172,39 +8269,6 @@ "kind": "opaque", "reason": "unknown" }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -8216,21 +8280,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 121, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, { "kind": "object", "properties": [ @@ -8269,7 +8318,7 @@ "properties": [ { "name": "kind", - "type": 126, + "type": 124, "optional": false } ], @@ -8277,7 +8326,7 @@ }, { "kind": "literal", - "value": "system-prompt" + "value": "ptc-mode" }, { "kind": "object", @@ -8312,6 +8361,21 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 129, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, { "kind": "object", "properties": [ @@ -8323,36 +8387,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 132, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 134, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, { "kind": "object", "properties": [ @@ -8364,6 +8398,43 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 135, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, { "kind": "object", "properties": [ @@ -8375,6 +8446,32 @@ ], "indices": [] }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 140, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", "value": "cordis-host-runner" @@ -8384,7 +8481,7 @@ "properties": [ { "name": "kind", - "type": 45, + "type": 51, "optional": false } ], @@ -8405,17 +8502,17 @@ }, { "name": "changes", - "type": 140, + "type": 143, "optional": false }, { "name": "form", - "type": 47, + "type": 53, "optional": false }, { "name": "kind", - "type": 146, + "type": 149, "optional": false } ], @@ -8423,14 +8520,14 @@ }, { "kind": "array", - "element": 141 + "element": 144 }, { "kind": "object", "properties": [ { "name": "action", - "type": 142, + "type": 145, "optional": false }, { @@ -8454,9 +8551,9 @@ { "kind": "union", "types": [ - 143, - 144, - 145 + 146, + 147, + 148 ] }, { @@ -8485,7 +8582,7 @@ }, { "name": "kind", - "type": 148, + "type": 151, "optional": false } ], @@ -8505,7 +8602,7 @@ }, { "name": "kind", - "type": 134, + "type": 137, "optional": false }, { @@ -8526,7 +8623,7 @@ }, { "name": "kind", - "type": 151, + "type": 154, "optional": false }, { @@ -8556,7 +8653,7 @@ }, { "name": "kind", - "type": 153, + "type": 156, "optional": false }, { @@ -8591,17 +8688,17 @@ "properties": [ { "name": "entries", - "type": 155, + "type": 158, "optional": false }, { "name": "form", - "type": 96, + "type": 99, "optional": false }, { "name": "kind", - "type": 157, + "type": 160, "optional": false }, { @@ -8614,7 +8711,7 @@ }, { "kind": "array", - "element": 156 + "element": 159 }, { "kind": "object", @@ -8641,12 +8738,12 @@ "properties": [ { "name": "form", - "type": 47, + "type": 53, "optional": false }, { "name": "kind", - "type": 159, + "type": 162, "optional": false }, { @@ -8666,22 +8763,22 @@ "properties": [ { "name": "form", - "type": 68, + "type": 71, "optional": false }, { "name": "kind", - "type": 161, + "type": 164, "optional": false }, { "name": "references", - "type": 162, + "type": 165, "optional": false }, { "name": "version", - "type": 167, + "type": 170, "optional": false } ], @@ -8693,7 +8790,7 @@ }, { "kind": "array", - "element": 163 + "element": 166 }, { "kind": "object", @@ -8705,12 +8802,12 @@ }, { "name": "capturedThroughSeq", - "type": 164, + "type": 167, "optional": false }, { "name": "compacted", - "type": 166, + "type": 169, "optional": false }, { @@ -8750,7 +8847,7 @@ }, { "name": "truncated", - "type": 166, + "type": 169, "optional": false } ], @@ -8760,7 +8857,7 @@ "kind": "union", "types": [ 2, - 165 + 168 ] }, { @@ -8780,17 +8877,17 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { "name": "kind", - "type": 48, + "type": 54, "optional": false }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -8802,7 +8899,7 @@ }, { "kind": "array", - "element": 171 + "element": 174 }, { "kind": "object", @@ -8825,70 +8922,7 @@ "properties": [ { "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -8898,7 +8932,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -8909,7 +8943,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -8919,7 +8953,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -8930,7 +8964,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -8940,7 +8974,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -8951,7 +8985,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -8961,7 +8995,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -8972,7 +9006,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -8982,7 +9016,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -8993,7 +9027,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -9003,7 +9037,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -9014,7 +9048,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -9024,7 +9058,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -9035,7 +9069,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -9045,7 +9079,7 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], @@ -9056,7 +9090,7 @@ "properties": [ { "name": "form", - "type": 169, + "type": 172, "optional": false }, { @@ -9066,12 +9100,105 @@ }, { "name": "sections", - "type": 170, + "type": 173, "optional": false } ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, { "kind": "object", "properties": [ @@ -9082,7 +9209,7 @@ }, { "name": "kind", - "type": 185, + "type": 190, "optional": false }, { @@ -9107,12 +9234,12 @@ "properties": [ { "name": "form", - "type": 82, + "type": 85, "optional": false }, { "name": "kind", - "type": 187, + "type": 192, "optional": false }, { @@ -9127,69 +9254,6 @@ "kind": "literal", "value": "agent-message" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -9281,8 +9345,8 @@ { "kind": "union", "types": [ - 197, - 198 + 199, + 200 ] }, { @@ -9299,7 +9363,7 @@ }, { "name": "op", - "type": 144, + "type": 147, "optional": false }, { @@ -11794,7 +11858,7 @@ "kind": "event", "event": "session/title-llm-request", "surface": false, - "digest": "fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d", + "digest": "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7", "schema": { "root": 0, "nodes": [ @@ -11823,7 +11887,7 @@ }, { "name": "type", - "type": 205, + "type": 207, "optional": false } ], @@ -11849,7 +11913,7 @@ }, { "name": "route", - "type": 204, + "type": 206, "optional": false }, { @@ -11882,9 +11946,9 @@ "types": [ 6, 37, - 199, - 200, - 202 + 201, + 202, + 204 ] }, { @@ -12133,14 +12197,6 @@ 27 ] }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, { "kind": "literal", "value": "image/gif" @@ -12149,6 +12205,14 @@ "kind": "literal", "value": "image/jpeg" }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, { "kind": "object", "properties": [ @@ -12267,6 +12331,7 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ + "team-relay", "tmux-context" ] } @@ -12291,25 +12356,22 @@ 53, 55, 57, - 59, - 61, + 60, + 62, + 64, + 66, + 68, 70, 72, - 74, - 76, - 78, - 80, - 85, - 87, + 81, + 82, + 84, + 86, + 88, + 93, 95, - 100, - 102, 103, - 104, - 105, - 106, 107, - 108, 109, 110, 111, @@ -12318,7 +12380,6 @@ 114, 115, 116, - 117, 118, 119, 120, @@ -12342,8 +12403,10 @@ 138, 139, 140, + 141, 142, 143, + 144, 145, 146, 147, @@ -12361,6 +12424,7 @@ 159, 160, 161, + 162, 163, 164, 165, @@ -12371,25 +12435,27 @@ 170, 171, 172, + 173, 174, 175, + 176, 177, - 180, + 178, + 179, 181, - 182, 183, - 184, 186, 187, 188, - 189, 190, + 191, 192, - 193, 194, 195, 196, - 198 + 197, + 199, + 200 ] }, { @@ -12405,6 +12471,11 @@ "type": 42, "optional": false }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + }, { "name": "summary", "type": 10, @@ -12419,7 +12490,7 @@ }, { "kind": "literal", - "value": "model-selection" + "value": "subagent-settled" }, { "kind": "object", @@ -12434,7 +12505,7 @@ }, { "kind": "literal", - "value": "user-approval" + "value": "tool-goal" }, { "kind": "object", @@ -12449,7 +12520,7 @@ }, { "kind": "literal", - "value": "cordis-host-runner" + "value": "tool-jobs" }, { "kind": "object", @@ -12462,10 +12533,99 @@ ], "indices": [] }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", "value": "dsh-session-title-llm" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "agent-message" + }, { "kind": "object", "properties": [ @@ -12476,7 +12636,82 @@ }, { "name": "kind", - "type": 50, + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 67, "optional": false }, { @@ -12501,7 +12736,7 @@ }, { "name": "kind", - "type": 52, + "type": 69, "optional": false }, { @@ -12526,7 +12761,7 @@ }, { "name": "kind", - "type": 54, + "type": 71, "optional": false }, { @@ -12541,81 +12776,6 @@ "kind": "literal", "value": "runtime-context" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, { "kind": "object", "properties": [ @@ -12631,17 +12791,17 @@ }, { "name": "changes", - "type": 62, + "type": 73, "optional": false }, { "name": "form", - "type": 68, + "type": 79, "optional": false }, { "name": "kind", - "type": 69, + "type": 80, "optional": false } ], @@ -12649,14 +12809,14 @@ }, { "kind": "array", - "element": 63 + "element": 74 }, { "kind": "object", "properties": [ { "name": "action", - "type": 64, + "type": 75, "optional": false }, { @@ -12680,9 +12840,9 @@ { "kind": "union", "types": [ - 65, - 66, - 67 + 76, + 77, + 78 ] }, { @@ -12715,7 +12875,7 @@ }, { "name": "kind", - "type": 71, + "type": 50, "optional": false }, { @@ -12726,10 +12886,6 @@ ], "indices": [] }, - { - "kind": "literal", - "value": "user" - }, { "kind": "object", "properties": [ @@ -12740,7 +12896,7 @@ }, { "name": "kind", - "type": 73, + "type": 83, "optional": false }, { @@ -12765,7 +12921,7 @@ }, { "name": "kind", - "type": 75, + "type": 85, "optional": false }, { @@ -12778,7 +12934,7 @@ }, { "kind": "literal", - "value": "tool-goal" + "value": "schedule" }, { "kind": "object", @@ -12795,7 +12951,7 @@ }, { "name": "kind", - "type": 77, + "type": 87, "optional": false }, { @@ -12825,47 +12981,22 @@ "kind": "literal", "value": "webhook" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, { "kind": "object", "properties": [ { "name": "entries", - "type": 81, + "type": 89, "optional": false }, { "name": "form", - "type": 83, + "type": 91, "optional": false }, { "name": "kind", - "type": 84, + "type": 92, "optional": false }, { @@ -12878,7 +13009,7 @@ }, { "kind": "array", - "element": 82 + "element": 90 }, { "kind": "object", @@ -12909,12 +13040,12 @@ "properties": [ { "name": "form", - "type": 68, + "type": 79, "optional": false }, { "name": "kind", - "type": 86, + "type": 94, "optional": false }, { @@ -12934,22 +13065,22 @@ "properties": [ { "name": "form", - "type": 88, + "type": 96, "optional": false }, { "name": "kind", - "type": 89, + "type": 97, "optional": false }, { "name": "references", - "type": 90, + "type": 98, "optional": false }, { "name": "version", - "type": 94, + "type": 102, "optional": false } ], @@ -12965,7 +13096,7 @@ }, { "kind": "array", - "element": 91 + "element": 99 }, { "kind": "object", @@ -12977,7 +13108,7 @@ }, { "name": "capturedThroughSeq", - "type": 92, + "type": 100, "optional": false }, { @@ -13032,7 +13163,7 @@ "kind": "union", "types": [ 2, - 93 + 101 ] }, { @@ -13048,17 +13179,17 @@ "properties": [ { "name": "form", - "type": 96, + "type": 104, "optional": false }, { "name": "kind", - "type": 97, + "type": 61, "optional": false }, { "name": "sections", - "type": 98, + "type": 105, "optional": false } ], @@ -13068,13 +13199,9 @@ "kind": "literal", "value": "snapshot" }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, { "kind": "array", - "element": 99 + "element": 106 }, { "kind": "object", @@ -13097,17 +13224,17 @@ "properties": [ { "name": "form", - "type": 96, + "type": 41, "optional": false }, { "name": "kind", - "type": 101, + "type": 108, "optional": false }, { - "name": "sections", - "type": 98, + "name": "summary", + "type": 10, "optional": false } ], @@ -13115,24 +13242,24 @@ }, { "kind": "literal", - "value": "hooks-codex" + "value": "time-context" }, { "kind": "object", "properties": [ { "name": "form", - "type": 96, + "type": 104, "optional": false }, { "name": "kind", - "type": 42, + "type": 63, "optional": false }, { "name": "sections", - "type": 98, + "type": 105, "optional": false } ], @@ -13143,17 +13270,17 @@ "properties": [ { "name": "form", - "type": 96, + "type": 104, "optional": false }, { "name": "kind", - "type": 50, + "type": 65, "optional": false }, { "name": "sections", - "type": 98, + "type": 105, "optional": false } ], @@ -13164,17 +13291,17 @@ "properties": [ { "name": "form", - "type": 96, + "type": 104, "optional": false }, { "name": "kind", - "type": 52, + "type": 67, "optional": false }, { "name": "sections", - "type": 98, + "type": 105, "optional": false } ], @@ -13185,17 +13312,126 @@ "properties": [ { "name": "form", - "type": 96, + "type": 104, "optional": false }, { "name": "kind", - "type": 54, + "type": 69, "optional": false }, { "name": "sections", - "type": 98, + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -13222,132 +13458,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -13358,7 +13468,7 @@ }, { "name": "kind", - "type": 48, + "type": 46, "optional": false }, { @@ -13374,417 +13484,17 @@ "properties": [ { "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, + "type": 41, "optional": false }, { "name": "kind", "type": 52, "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false }, { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 44, + "name": "summary", + "type": 10, "optional": false } ], @@ -13800,12 +13510,7 @@ }, { "name": "kind", - "type": 141, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, + "type": 56, "optional": false }, { @@ -13816,202 +13521,18 @@ ], "indices": [] }, - { - "kind": "literal", - "value": "subagent-settled" - }, { "kind": "object", "properties": [ { "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", "type": 79, "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false } ], "indices": [] @@ -14021,7 +13542,135 @@ "properties": [ { "name": "form", - "type": 144, + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, "optional": false }, { @@ -14037,12 +13686,12 @@ "properties": [ { "name": "form", - "type": 144, + "type": 79, "optional": false }, { "name": "kind", - "type": 48, + "type": 46, "optional": false } ], @@ -14053,96 +13702,7 @@ "properties": [ { "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 162, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, + "type": 79, "optional": false }, { @@ -14158,12 +13718,17 @@ "properties": [ { "name": "form", - "type": 83, + "type": 104, "optional": false }, { "name": "kind", - "type": 54, + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -14174,7 +13739,7 @@ "properties": [ { "name": "form", - "type": 83, + "type": 79, "optional": false }, { @@ -14190,12 +13755,12 @@ "properties": [ { "name": "form", - "type": 83, + "type": 96, "optional": false }, { "name": "kind", - "type": 58, + "type": 61, "optional": false } ], @@ -14206,12 +13771,12 @@ "properties": [ { "name": "form", - "type": 83, + "type": 96, "optional": false }, { "name": "kind", - "type": 60, + "type": 63, "optional": false } ], @@ -14222,12 +13787,12 @@ "properties": [ { "name": "form", - "type": 83, + "type": 96, "optional": false }, { "name": "kind", - "type": 75, + "type": 65, "optional": false } ], @@ -14238,12 +13803,12 @@ "properties": [ { "name": "form", - "type": 83, + "type": 96, "optional": false }, { "name": "kind", - "type": 79, + "type": 67, "optional": false } ], @@ -14254,7 +13819,108 @@ "properties": [ { "name": "form", - "type": 83, + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, "optional": false }, { @@ -14270,12 +13936,502 @@ "properties": [ { "name": "form", - "type": 83, + "type": 96, "optional": false }, { "name": "kind", - "type": 48, + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 56, "optional": false } ], @@ -14291,7 +14447,7 @@ }, { "name": "kind", - "type": 173, + "type": 180, "optional": false }, { @@ -14314,30 +14470,9 @@ { "kind": "object", "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, { "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 176, + "type": 182, "optional": false }, { @@ -14372,7 +14507,7 @@ "properties": [ { "name": "kind", - "type": 178, + "type": 184, "optional": false }, { @@ -14387,7 +14522,7 @@ }, { "name": "replayState", - "type": 179, + "type": 185, "optional": true } ], @@ -14406,7 +14541,7 @@ "properties": [ { "name": "kind", - "type": 97, + "type": 61, "optional": false } ], @@ -14417,7 +14552,48 @@ "properties": [ { "name": "kind", - "type": 101, + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 189, + "optional": false + }, + { + "name": "senderName", + "type": 10, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 65, "optional": false } ], @@ -14428,7 +14604,7 @@ "properties": [ { "name": "kind", - "type": 42, + "type": 67, "optional": false } ], @@ -14439,18 +14615,7 @@ "properties": [ { "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 185, + "type": 193, "optional": false } ], @@ -14465,28 +14630,7 @@ "properties": [ { "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 69, "optional": false } ], @@ -14497,7 +14641,7 @@ "properties": [ { "name": "kind", - "type": 54, + "type": 71, "optional": false } ], @@ -14508,7 +14652,7 @@ "properties": [ { "name": "kind", - "type": 56, + "type": 85, "optional": false } ], @@ -14519,7 +14663,7 @@ "properties": [ { "name": "kind", - "type": 191, + "type": 198, "optional": false } ], @@ -14534,7 +14678,7 @@ "properties": [ { "name": "kind", - "type": 58, + "type": 108, "optional": false } ], @@ -14545,55 +14689,7 @@ "properties": [ { "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 197, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 71, + "type": 117, "optional": false } ], @@ -14614,7 +14710,7 @@ }, { "name": "role", - "type": 71, + "type": 50, "optional": false }, { @@ -14628,6 +14724,7 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ + "team-relay", "tmux-context" ] } @@ -14650,12 +14747,12 @@ }, { "name": "role", - "type": 201, + "type": 203, "optional": false }, { "name": "source", - "type": 177, + "type": 183, "optional": false } ], @@ -14680,12 +14777,12 @@ }, { "name": "role", - "type": 203, + "type": 205, "optional": false }, { "name": "source", - "type": 190, + "type": 197, "optional": false } ], @@ -18632,7 +18729,7 @@ "kind": "event", "event": "user/message", "surface": true, - "digest": "3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761", + "digest": "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58", "schema": { "root": 0, "nodes": [ @@ -18656,12 +18753,12 @@ }, { "name": "sourceEventSeqs", - "type": 193, + "type": 195, "optional": true }, { "name": "surfaceOp", - "type": 194, + "type": 196, "optional": false }, { @@ -18671,7 +18768,7 @@ }, { "name": "type", - "type": 197, + "type": 199, "optional": false } ], @@ -18706,6 +18803,7 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ + "team-relay", "tmux-context" ] } @@ -19021,8 +19119,8 @@ 39, 41, 43, - 46, - 48, + 45, + 47, 50, 52, 54, @@ -19034,8 +19132,8 @@ 63, 64, 65, + 66, 67, - 68, 69, 70, 71, @@ -19047,8 +19145,8 @@ 77, 78, 79, + 80, 81, - 82, 83, 84, 85, @@ -19060,8 +19158,8 @@ 91, 92, 93, + 94, 95, - 96, 97, 98, 99, @@ -19073,37 +19171,37 @@ 105, 106, 107, + 108, 109, 111, - 114, - 115, + 113, 116, 117, 118, + 119, 120, - 121, 122, 123, + 124, 125, - 126, 127, 128, 129, + 130, 131, - 132, 133, + 134, 135, - 136, - 144, + 137, + 138, 146, - 147, + 148, 149, 151, - 155, + 153, 157, - 165, - 169, - 170, + 159, + 167, 171, 172, 173, @@ -19115,15 +19213,16 @@ 179, 180, 181, + 182, 183, 185, - 186, 187, - 188, 189, 190, 191, - 192 + 192, + 193, + 194 ] }, { @@ -19153,7 +19252,7 @@ }, { "kind": "literal", - "value": "tmux-context" + "value": "schedule" }, { "kind": "object", @@ -19176,6 +19275,56 @@ ], "indices": [] }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", "value": "tool-goal" @@ -19190,7 +19339,7 @@ }, { "name": "kind", - "type": 38, + "type": 42, "optional": false }, { @@ -19215,7 +19364,7 @@ }, { "name": "kind", - "type": 40, + "type": 44, "optional": false }, { @@ -19240,7 +19389,7 @@ }, { "name": "kind", - "type": 42, + "type": 46, "optional": false }, { @@ -19260,12 +19409,12 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 45, + "type": 49, "optional": false } ], @@ -19284,12 +19433,12 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 47, + "type": 51, "optional": false } ], @@ -19304,12 +19453,12 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 49, + "type": 53, "optional": false } ], @@ -19324,12 +19473,12 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 51, + "type": 55, "optional": false } ], @@ -19344,12 +19493,12 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 53, + "type": 57, "optional": false } ], @@ -19364,12 +19513,12 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 55, + "type": 59, "optional": false } ], @@ -19384,47 +19533,7 @@ "properties": [ { "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, + "type": 48, "optional": false }, { @@ -19440,7 +19549,7 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { @@ -19456,7 +19565,7 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { @@ -19472,7 +19581,7 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { @@ -19488,7 +19597,7 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { @@ -19504,12 +19613,44 @@ "properties": [ { "name": "form", - "type": 66, + "type": 48, "optional": false }, { "name": "kind", - "type": 45, + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 49, "optional": false } ], @@ -19524,39 +19665,7 @@ "properties": [ { "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19572,7 +19681,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19588,7 +19697,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19604,7 +19713,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19620,7 +19729,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19636,7 +19745,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19652,7 +19761,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19668,7 +19777,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19684,7 +19793,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19700,7 +19809,7 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { @@ -19716,12 +19825,44 @@ "properties": [ { "name": "form", - "type": 80, + "type": 68, "optional": false }, { "name": "kind", - "type": 45, + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 49, "optional": false } ], @@ -19736,39 +19877,7 @@ "properties": [ { "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19784,7 +19893,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19800,7 +19909,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19816,7 +19925,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19832,7 +19941,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19848,7 +19957,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19864,7 +19973,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19880,7 +19989,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19896,7 +20005,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19912,7 +20021,7 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { @@ -19928,12 +20037,44 @@ "properties": [ { "name": "form", - "type": 94, + "type": 82, "optional": false }, { "name": "kind", - "type": 45, + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 49, "optional": false } ], @@ -19948,39 +20089,7 @@ "properties": [ { "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -19996,7 +20105,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20012,7 +20121,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20028,7 +20137,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20044,7 +20153,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20060,7 +20169,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20076,7 +20185,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20092,7 +20201,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20108,7 +20217,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20124,7 +20233,7 @@ "properties": [ { "name": "form", - "type": 94, + "type": 96, "optional": false }, { @@ -20135,6 +20244,38 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -20145,7 +20286,7 @@ }, { "name": "kind", - "type": 108, + "type": 110, "optional": false }, { @@ -20170,7 +20311,7 @@ "properties": [ { "name": "kind", - "type": 110, + "type": 112, "optional": false }, { @@ -20205,7 +20346,7 @@ "properties": [ { "name": "kind", - "type": 112, + "type": 114, "optional": false }, { @@ -20220,7 +20361,7 @@ }, { "name": "replayState", - "type": 113, + "type": 115, "optional": true } ], @@ -20234,28 +20375,6 @@ "kind": "opaque", "reason": "unknown" }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -20278,21 +20397,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 119, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, { "kind": "object", "properties": [ @@ -20320,18 +20424,7 @@ "properties": [ { "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 124, + "type": 121, "optional": false } ], @@ -20339,7 +20432,18 @@ }, { "kind": "literal", - "value": "system-prompt" + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] }, { "kind": "object", @@ -20363,6 +20467,21 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 126, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, { "kind": "object", "properties": [ @@ -20390,7 +20509,29 @@ "properties": [ { "name": "kind", - "type": 130, + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 132, "optional": false } ], @@ -20416,7 +20557,7 @@ "properties": [ { "name": "kind", - "type": 40, + "type": 44, "optional": false } ], @@ -20427,7 +20568,7 @@ "properties": [ { "name": "kind", - "type": 134, + "type": 136, "optional": false } ], @@ -20442,7 +20583,7 @@ "properties": [ { "name": "kind", - "type": 42, + "type": 46, "optional": false } ], @@ -20463,17 +20604,17 @@ }, { "name": "changes", - "type": 137, + "type": 139, "optional": false }, { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 143, + "type": 145, "optional": false } ], @@ -20481,14 +20622,14 @@ }, { "kind": "array", - "element": 138 + "element": 140 }, { "kind": "object", "properties": [ { "name": "action", - "type": 139, + "type": 141, "optional": false }, { @@ -20512,9 +20653,9 @@ { "kind": "union", "types": [ - 140, - 141, - 142 + 142, + 143, + 144 ] }, { @@ -20543,7 +20684,7 @@ }, { "name": "kind", - "type": 145, + "type": 147, "optional": false } ], @@ -20584,7 +20725,7 @@ }, { "name": "kind", - "type": 148, + "type": 150, "optional": false }, { @@ -20614,7 +20755,7 @@ }, { "name": "kind", - "type": 150, + "type": 152, "optional": false }, { @@ -20649,17 +20790,17 @@ "properties": [ { "name": "entries", - "type": 152, + "type": 154, "optional": false }, { "name": "form", - "type": 94, + "type": 96, "optional": false }, { "name": "kind", - "type": 154, + "type": 156, "optional": false }, { @@ -20672,7 +20813,7 @@ }, { "kind": "array", - "element": 153 + "element": 155 }, { "kind": "object", @@ -20699,12 +20840,12 @@ "properties": [ { "name": "form", - "type": 44, + "type": 48, "optional": false }, { "name": "kind", - "type": 156, + "type": 158, "optional": false }, { @@ -20724,22 +20865,22 @@ "properties": [ { "name": "form", - "type": 66, + "type": 68, "optional": false }, { "name": "kind", - "type": 158, + "type": 160, "optional": false }, { "name": "references", - "type": 159, + "type": 161, "optional": false }, { "name": "version", - "type": 164, + "type": 166, "optional": false } ], @@ -20751,7 +20892,7 @@ }, { "kind": "array", - "element": 160 + "element": 162 }, { "kind": "object", @@ -20763,12 +20904,12 @@ }, { "name": "capturedThroughSeq", - "type": 161, + "type": 163, "optional": false }, { "name": "compacted", - "type": 163, + "type": 165, "optional": false }, { @@ -20808,7 +20949,7 @@ }, { "name": "truncated", - "type": 163, + "type": 165, "optional": false } ], @@ -20818,7 +20959,7 @@ "kind": "union", "types": [ 18, - 162 + 164 ] }, { @@ -20838,17 +20979,17 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { "name": "kind", - "type": 45, + "type": 49, "optional": false }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -20860,7 +21001,7 @@ }, { "kind": "array", - "element": 168 + "element": 170 }, { "kind": "object", @@ -20883,49 +21024,7 @@ "properties": [ { "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -20935,7 +21034,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -20946,7 +21045,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -20956,7 +21055,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -20967,7 +21066,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -20977,7 +21076,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -20988,7 +21087,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -20998,7 +21097,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -21009,7 +21108,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -21019,7 +21118,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -21030,7 +21129,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -21040,7 +21139,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -21051,7 +21150,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -21061,7 +21160,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -21072,7 +21171,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -21082,7 +21181,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -21093,7 +21192,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -21103,7 +21202,7 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], @@ -21114,7 +21213,7 @@ "properties": [ { "name": "form", - "type": 166, + "type": 168, "optional": false }, { @@ -21124,12 +21223,84 @@ }, { "name": "sections", - "type": 167, + "type": 169, "optional": false } ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, { "kind": "object", "properties": [ @@ -21140,7 +21311,7 @@ }, { "name": "kind", - "type": 182, + "type": 186, "optional": false }, { @@ -21165,12 +21336,12 @@ "properties": [ { "name": "form", - "type": 80, + "type": 82, "optional": false }, { "name": "kind", - "type": 184, + "type": 188, "optional": false }, { @@ -21185,48 +21356,6 @@ "kind": "literal", "value": "agent-message" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -21360,8 +21489,8 @@ { "kind": "union", "types": [ - 195, - 196 + 197, + 198 ] }, { @@ -21378,7 +21507,7 @@ }, { "name": "op", - "type": 141, + "type": 143, "optional": false }, { @@ -21871,6 +22000,2813 @@ "packages/core/session/src/types.ts:32" ] }, + { + "digest": "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 27, + "optional": true + }, + { + "name": "seq", + "type": 20, + "optional": false + }, + { + "name": "time", + "type": 20, + "optional": false + }, + { + "name": "type", + "type": 201, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "inserted", + "type": 2, + "optional": false + }, + { + "name": "outcome", + "type": 197, + "optional": true + }, + { + "name": "removedCount", + "type": 20, + "optional": true + }, + { + "name": "start", + "type": 20, + "optional": false + }, + { + "name": "target", + "type": 198, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "role", + "type": 32, + "optional": false + }, + { + "name": "source", + "type": 33, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 9, + 11, + 14, + 16, + 18, + 29 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 12, + "optional": true + }, + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 19, + "optional": false + }, + { + "name": "offloaded", + "type": 27, + "optional": true + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 20, + "optional": false + }, + { + "name": "height", + "type": 20, + "optional": false + }, + { + "name": "mediaType", + "type": 21, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": true + }, + { + "name": "originalDimensions", + "type": 26, + "optional": true + }, + { + "name": "width", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 22, + 23, + 24, + 25 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 20, + "optional": false + }, + { + "name": "width", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 30, + "optional": false + }, + { + "name": "type", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 20, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 34, + 37, + 39, + 41, + 43, + 45, + 47, + 49, + 51, + 53, + 56, + 58, + 60, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 115, + 117, + 120, + 121, + 122, + 123, + 124, + 126, + 127, + 128, + 129, + 131, + 132, + 133, + 134, + 135, + 137, + 138, + 139, + 141, + 142, + 150, + 152, + 153, + 155, + 157, + 161, + 163, + 171, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 189, + 191, + 193, + 194, + 195, + 196 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 114, + "optional": false + }, + { + "name": "revision", + "type": 20, + "optional": false + }, + { + "name": "round", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 116, + "optional": false + }, + { + "name": "messageId", + "type": 7, + "optional": false + }, + { + "name": "senderId", + "type": 7, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "teamId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 118, + "optional": false + }, + { + "name": "model", + "type": 7, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "replayState", + "type": 119, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 125, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 136, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 32, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 140, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 27, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 7, + "optional": true + }, + { + "name": "changes", + "type": 143, + "optional": false + }, + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 149, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 144 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 145, + "optional": false + }, + { + "name": "digest", + "type": 7, + "optional": true + }, + { + "name": "path", + "type": 7, + "optional": false + }, + { + "name": "scope", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 146, + 147, + 148 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 151, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 7, + "optional": true + }, + { + "name": "kind", + "type": 32, + "optional": false + }, + { + "name": "rpcId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 7, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 7, + "optional": false + }, + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "ruleId", + "type": 7, + "optional": false + }, + { + "name": "source", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 158, + "optional": false + }, + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 160, + "optional": false + }, + { + "name": "update", + "type": 27, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 159 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 54, + "optional": false + }, + { + "name": "kind", + "type": 162, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 164, + "optional": false + }, + { + "name": "references", + "type": 165, + "optional": false + }, + { + "name": "version", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 166 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 20, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 167, + "optional": false + }, + { + "name": "compacted", + "type": 169, + "optional": false + }, + { + "name": "inputIndex", + "type": 20, + "optional": false + }, + { + "name": "label", + "type": 7, + "optional": false + }, + { + "name": "omittedBytes", + "type": 20, + "optional": false + }, + { + "name": "omittedMessages", + "type": 20, + "optional": false + }, + { + "name": "originalMessages", + "type": 20, + "optional": false + }, + { + "name": "retainedMessages", + "type": 20, + "optional": false + }, + { + "name": "sessionId", + "type": 7, + "optional": false + }, + { + "name": "truncated", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 20, + 168 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 174 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "text", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 190, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 192, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "canceled" + }, + { + "kind": "union", + "types": [ + 199, + 200 + ] + }, + { + "kind": "literal", + "value": "next-step" + }, + { + "kind": "literal", + "value": "next-turn" + }, + { + "kind": "literal", + "value": "agent/inbox/spliced" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235", "schema": { @@ -22547,6 +25483,2805 @@ "packages/goal/goal/src/types.ts:20" ] }, + { + "digest": "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 25, + "optional": true + }, + { + "name": "seq", + "type": 18, + "optional": false + }, + { + "name": "sourceEventSeqs", + "type": 195, + "optional": true + }, + { + "name": "surfaceOp", + "type": 196, + "optional": false + }, + { + "name": "time", + "type": 18, + "optional": false + }, + { + "name": "type", + "type": 199, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 30, + "optional": false + }, + { + "name": "source", + "type": 31, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "union", + "types": [ + 4, + 7, + 9, + 12, + 14, + 16, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 10, + "optional": true + }, + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 5, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 17, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 32, + 35, + 37, + 39, + 41, + 43, + 45, + 47, + 50, + 52, + 54, + 56, + 58, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 111, + 113, + 116, + 117, + 118, + 119, + 120, + 122, + 123, + 124, + 125, + 127, + 128, + 129, + 130, + 131, + 133, + 134, + 135, + 137, + 138, + 146, + 148, + 149, + 151, + 153, + 157, + 159, + 167, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 185, + 187, + 189, + 190, + 191, + 192, + 193, + 194 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "revision", + "type": 18, + "optional": false + }, + { + "name": "round", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 112, + "optional": false + }, + { + "name": "messageId", + "type": 5, + "optional": false + }, + { + "name": "senderId", + "type": 5, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "teamId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 114, + "optional": false + }, + { + "name": "model", + "type": 5, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "replayState", + "type": 115, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 121, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 126, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 132, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 136, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 5, + "optional": true + }, + { + "name": "changes", + "type": 139, + "optional": false + }, + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 145, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 140 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 141, + "optional": false + }, + { + "name": "digest", + "type": 5, + "optional": true + }, + { + "name": "path", + "type": 5, + "optional": false + }, + { + "name": "scope", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 142, + 143, + 144 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 147, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 5, + "optional": true + }, + { + "name": "kind", + "type": 30, + "optional": false + }, + { + "name": "rpcId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 5, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 5, + "optional": false + }, + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "ruleId", + "type": 5, + "optional": false + }, + { + "name": "source", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 154, + "optional": false + }, + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 155 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 158, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 160, + "optional": false + }, + { + "name": "references", + "type": 161, + "optional": false + }, + { + "name": "version", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 162 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 18, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 163, + "optional": false + }, + { + "name": "compacted", + "type": 165, + "optional": false + }, + { + "name": "inputIndex", + "type": 18, + "optional": false + }, + { + "name": "label", + "type": 5, + "optional": false + }, + { + "name": "omittedBytes", + "type": 18, + "optional": false + }, + { + "name": "omittedMessages", + "type": 18, + "optional": false + }, + { + "name": "originalMessages", + "type": 18, + "optional": false + }, + { + "name": "retainedMessages", + "type": 18, + "optional": false + }, + { + "name": "sessionId", + "type": 5, + "optional": false + }, + { + "name": "truncated", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 18, + 164 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 170 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 186, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 18 + }, + { + "kind": "union", + "types": [ + 197, + 198 + ] + }, + { + "kind": "literal", + "value": "append" + }, + { + "kind": "object", + "properties": [ + { + "name": "endSeq", + "type": 18, + "optional": false + }, + { + "name": "op", + "type": 143, + "optional": false + }, + { + "name": "startSeq", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user/message" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1", "schema": { @@ -22590,7 +28325,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:236" + "packages/experimental/agent-team/src/types.ts:245" ] }, { @@ -25353,6 +31088,2875 @@ "names": [], "sources": [] }, + { + "digest": "139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "union", + "types": [ + 1, + 33, + 197, + 198, + 200 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "isError", + "type": 30, + "optional": true + }, + { + "name": "role", + "type": 31, + "optional": false + }, + { + "name": "source", + "type": 32, + "optional": false + }, + { + "name": "toolCallId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "union", + "types": [ + 4, + 7, + 9, + 12, + 14, + 16, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 10, + "optional": true + }, + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 5, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 17, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 34, + "optional": false + }, + { + "name": "source", + "type": 35, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 32, + 36, + 39, + 41, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 60, + 62, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 118, + 120, + 123, + 124, + 125, + 126, + 127, + 129, + 130, + 131, + 132, + 134, + 135, + 136, + 137, + 138, + 140, + 142, + 143, + 145, + 146, + 154, + 155, + 157, + 159, + 163, + 165, + 172, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 190, + 192, + 194, + 195, + 196 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "revision", + "type": 18, + "optional": false + }, + { + "name": "round", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 119, + "optional": false + }, + { + "name": "messageId", + "type": 5, + "optional": false + }, + { + "name": "senderId", + "type": 5, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "teamId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 121, + "optional": false + }, + { + "name": "model", + "type": 5, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "replayState", + "type": 122, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 128, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 133, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 139, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 141, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 144, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 5, + "optional": true + }, + { + "name": "changes", + "type": 147, + "optional": false + }, + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 153, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 148 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 149, + "optional": false + }, + { + "name": "digest", + "type": 5, + "optional": true + }, + { + "name": "path", + "type": 5, + "optional": false + }, + { + "name": "scope", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 150, + 151, + 152 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 5, + "optional": true + }, + { + "name": "kind", + "type": 141, + "optional": false + }, + { + "name": "rpcId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 5, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 5, + "optional": false + }, + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 158, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "ruleId", + "type": 5, + "optional": false + }, + { + "name": "source", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 160, + "optional": false + }, + { + "name": "form", + "type": 103, + "optional": false + }, + { + "name": "kind", + "type": 162, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 161 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 164, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 166, + "optional": false + }, + { + "name": "references", + "type": 167, + "optional": false + }, + { + "name": "version", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 168 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 18, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 169, + "optional": false + }, + { + "name": "compacted", + "type": 30, + "optional": false + }, + { + "name": "inputIndex", + "type": 18, + "optional": false + }, + { + "name": "label", + "type": 5, + "optional": false + }, + { + "name": "omittedBytes", + "type": 18, + "optional": false + }, + { + "name": "omittedMessages", + "type": 18, + "optional": false + }, + { + "name": "originalMessages", + "type": 18, + "optional": false + }, + { + "name": "retainedMessages", + "type": 18, + "optional": false + }, + { + "name": "sessionId", + "type": 5, + "optional": false + }, + { + "name": "truncated", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 18, + 170 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 175 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 173, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 174, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 189, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 191, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 193, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 141, + "optional": false + }, + { + "name": "source", + "type": 35, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 199, + "optional": false + }, + { + "name": "source", + "type": 120, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "assistant" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 201, + "optional": false + }, + { + "name": "source", + "type": 132, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system" + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#Message" + ], + "sources": [ + "packages/llm/llm/src/message.ts:196" + ] + }, { "digest": "13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176", "schema": { @@ -25479,2781 +34083,6 @@ "names": [], "sources": [] }, - { - "digest": "1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 27, - "optional": true - }, - { - "name": "seq", - "type": 20, - "optional": false - }, - { - "name": "time", - "type": 20, - "optional": false - }, - { - "name": "type", - "type": 199, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "inserted", - "type": 2, - "optional": false - }, - { - "name": "outcome", - "type": 195, - "optional": true - }, - { - "name": "removedCount", - "type": 20, - "optional": true - }, - { - "name": "start", - "type": 20, - "optional": false - }, - { - "name": "target", - "type": 196, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "role", - "type": 32, - "optional": false - }, - { - "name": "source", - "type": 33, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 9, - 11, - 14, - 16, - 18, - 29 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 12, - "optional": true - }, - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 19, - "optional": false - }, - { - "name": "offloaded", - "type": 27, - "optional": true - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 20, - "optional": false - }, - { - "name": "height", - "type": 20, - "optional": false - }, - { - "name": "mediaType", - "type": 21, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": true - }, - { - "name": "originalDimensions", - "type": 26, - "optional": true - }, - { - "name": "width", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 22, - 23, - 24, - 25 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 20, - "optional": false - }, - { - "name": "width", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 30, - "optional": false - }, - { - "name": "type", - "type": 31, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 20, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 34, - 37, - 39, - 41, - 43, - 45, - 47, - 50, - 52, - 54, - 56, - 58, - 60, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 112, - 114, - 117, - 118, - 119, - 120, - 121, - 123, - 124, - 125, - 126, - 128, - 129, - 130, - 131, - 132, - 134, - 135, - 136, - 138, - 139, - 147, - 149, - 150, - 152, - 154, - 158, - 160, - 168, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 186, - 188, - 189, - 190, - 191, - 192, - 193, - 194 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 111, - "optional": false - }, - { - "name": "revision", - "type": 20, - "optional": false - }, - { - "name": "round", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 113, - "optional": false - }, - { - "name": "messageId", - "type": 7, - "optional": false - }, - { - "name": "senderId", - "type": 7, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "teamId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 115, - "optional": false - }, - { - "name": "model", - "type": 7, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "replayState", - "type": 116, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 122, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 127, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 133, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 32, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 137, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 27, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 7, - "optional": true - }, - { - "name": "changes", - "type": 140, - "optional": false - }, - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 146, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 141 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 142, - "optional": false - }, - { - "name": "digest", - "type": 7, - "optional": true - }, - { - "name": "path", - "type": 7, - "optional": false - }, - { - "name": "scope", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 143, - 144, - 145 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 148, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 7, - "optional": true - }, - { - "name": "kind", - "type": 32, - "optional": false - }, - { - "name": "rpcId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 151, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 7, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 7, - "optional": false - }, - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 153, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "ruleId", - "type": 7, - "optional": false - }, - { - "name": "source", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 155, - "optional": false - }, - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 157, - "optional": false - }, - { - "name": "update", - "type": 27, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 156 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 159, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 69, - "optional": false - }, - { - "name": "kind", - "type": 161, - "optional": false - }, - { - "name": "references", - "type": 162, - "optional": false - }, - { - "name": "version", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 163 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 20, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 164, - "optional": false - }, - { - "name": "compacted", - "type": 166, - "optional": false - }, - { - "name": "inputIndex", - "type": 20, - "optional": false - }, - { - "name": "label", - "type": 7, - "optional": false - }, - { - "name": "omittedBytes", - "type": 20, - "optional": false - }, - { - "name": "omittedMessages", - "type": 20, - "optional": false - }, - { - "name": "originalMessages", - "type": 20, - "optional": false - }, - { - "name": "retainedMessages", - "type": 20, - "optional": false - }, - { - "name": "sessionId", - "type": 7, - "optional": false - }, - { - "name": "truncated", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 20, - 165 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 171 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "text", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 185, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 187, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "canceled" - }, - { - "kind": "union", - "types": [ - 197, - 198 - ] - }, - { - "kind": "literal", - "value": "next-step" - }, - { - "kind": "literal", - "value": "next-turn" - }, - { - "kind": "literal", - "value": "agent/inbox/spliced" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff", "schema": { @@ -32260,6 +38089,2728 @@ "names": [], "sources": [] }, + { + "digest": "2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 1, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "role", + "type": 29, + "optional": false + }, + { + "name": "source", + "type": 30, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "union", + "types": [ + 3, + 6, + 8, + 11, + 13, + 15, + 26 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 9, + "optional": true + }, + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 16, + "optional": false + }, + { + "name": "offloaded", + "type": 24, + "optional": true + }, + { + "name": "type", + "type": 25, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "mediaType", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "originalDimensions", + "type": 23, + "optional": true + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 19, + 20, + 21, + 22 + ] + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 27, + "optional": false + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 31, + 34, + 36, + 39, + 41, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 59, + 60, + 61, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 110, + 111, + 112, + 113, + 115, + 116, + 117, + 118, + 120, + 121, + 122, + 123, + 124, + 126, + 127, + 129, + 130, + 131, + 132, + 140, + 142, + 143, + 145, + 147, + 151, + 153, + 161, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 179, + 181, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + }, + { + "name": "revision", + "type": 17, + "optional": false + }, + { + "name": "round", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 106, + "optional": false + }, + { + "name": "messageId", + "type": 4, + "optional": false + }, + { + "name": "senderId", + "type": 4, + "optional": false + }, + { + "name": "senderName", + "type": 4, + "optional": false + }, + { + "name": "teamId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "model", + "type": 4, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "replayState", + "type": 109, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 114, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 119, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 125, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 128, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 24, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 4, + "optional": true + }, + { + "name": "changes", + "type": 133, + "optional": false + }, + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 139, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 134 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 135, + "optional": false + }, + { + "name": "digest", + "type": 4, + "optional": true + }, + { + "name": "path", + "type": 4, + "optional": false + }, + { + "name": "scope", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 136, + 137, + 138 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 4, + "optional": true + }, + { + "name": "kind", + "type": 29, + "optional": false + }, + { + "name": "rpcId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 144, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 4, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 4, + "optional": false + }, + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 146, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "ruleId", + "type": 4, + "optional": false + }, + { + "name": "source", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 148, + "optional": false + }, + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "update", + "type": 24, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 149 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "references", + "type": 155, + "optional": false + }, + { + "name": "version", + "type": 160, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 156 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 17, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 157, + "optional": false + }, + { + "name": "compacted", + "type": 159, + "optional": false + }, + { + "name": "inputIndex", + "type": 17, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": false + }, + { + "name": "omittedBytes", + "type": 17, + "optional": false + }, + { + "name": "omittedMessages", + "type": 17, + "optional": false + }, + { + "name": "originalMessages", + "type": 17, + "optional": false + }, + { + "name": "retainedMessages", + "type": 17, + "optional": false + }, + { + "name": "sessionId", + "type": 4, + "optional": false + }, + { + "name": "truncated", + "type": 159, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 17, + 158 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 164 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "text", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 178, + "optional": false + }, + { + "name": "senderName", + "type": 4, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 180, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 182, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#UserMessage" + ], + "sources": [ + "packages/llm/llm/src/message.ts:162" + ] + }, { "digest": "24b10f7cdae64928f89c49afc2eca0af9eb4a2f135e16f3416e6b8461fef1748", "schema": { @@ -35467,6 +44018,2835 @@ "packages/llm/llm/src/assistant-stream.ts:35" ] }, + { + "digest": "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 26, + "optional": true + }, + { + "name": "seq", + "type": 2, + "optional": false + }, + { + "name": "sourceEventSeqs", + "type": 197, + "optional": true + }, + { + "name": "surfaceOp", + "type": 198, + "optional": false + }, + { + "name": "time", + "type": 2, + "optional": false + }, + { + "name": "type", + "type": 201, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "headerSeq", + "type": 2, + "optional": true + }, + { + "name": "message", + "type": 3, + "optional": false + }, + { + "name": "step", + "type": 2, + "optional": false + }, + { + "name": "turn", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "role", + "type": 31, + "optional": false + }, + { + "name": "source", + "type": 32, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 9, + 11, + 14, + 16, + 18, + 28 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 12, + "optional": true + }, + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 19, + "optional": false + }, + { + "name": "offloaded", + "type": 26, + "optional": true + }, + { + "name": "type", + "type": 27, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "mediaType", + "type": 20, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": true + }, + { + "name": "originalDimensions", + "type": 25, + "optional": true + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 21, + 22, + 23, + 24 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 29, + "optional": false + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 33, + 36, + 38, + 40, + 42, + 44, + 46, + 48, + 50, + 52, + 55, + 57, + 59, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 119, + 120, + 121, + 122, + 123, + 125, + 126, + 127, + 128, + 130, + 131, + 132, + 133, + 134, + 136, + 138, + 139, + 141, + 142, + 150, + 152, + 153, + 155, + 157, + 161, + 163, + 171, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 189, + 191, + 193, + 194, + 195, + 196 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 113, + "optional": false + }, + { + "name": "revision", + "type": 2, + "optional": false + }, + { + "name": "round", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 115, + "optional": false + }, + { + "name": "messageId", + "type": 7, + "optional": false + }, + { + "name": "senderId", + "type": 7, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "teamId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "model", + "type": 7, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "replayState", + "type": 118, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 124, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 129, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 135, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 137, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 140, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 26, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 7, + "optional": true + }, + { + "name": "changes", + "type": 143, + "optional": false + }, + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 149, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 144 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 145, + "optional": false + }, + { + "name": "digest", + "type": 7, + "optional": true + }, + { + "name": "path", + "type": 7, + "optional": false + }, + { + "name": "scope", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 146, + 147, + 148 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 151, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 7, + "optional": true + }, + { + "name": "kind", + "type": 137, + "optional": false + }, + { + "name": "rpcId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 7, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 7, + "optional": false + }, + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "ruleId", + "type": 7, + "optional": false + }, + { + "name": "source", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 158, + "optional": false + }, + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 160, + "optional": false + }, + { + "name": "update", + "type": 26, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 159 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 53, + "optional": false + }, + { + "name": "kind", + "type": 162, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 71, + "optional": false + }, + { + "name": "kind", + "type": 164, + "optional": false + }, + { + "name": "references", + "type": 165, + "optional": false + }, + { + "name": "version", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 166 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 2, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 167, + "optional": false + }, + { + "name": "compacted", + "type": 169, + "optional": false + }, + { + "name": "inputIndex", + "type": 2, + "optional": false + }, + { + "name": "label", + "type": 7, + "optional": false + }, + { + "name": "omittedBytes", + "type": 2, + "optional": false + }, + { + "name": "omittedMessages", + "type": 2, + "optional": false + }, + { + "name": "originalMessages", + "type": 2, + "optional": false + }, + { + "name": "retainedMessages", + "type": 2, + "optional": false + }, + { + "name": "sessionId", + "type": 7, + "optional": false + }, + { + "name": "truncated", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 2, + 168 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 174 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "text", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 172, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 173, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 190, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 192, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "union", + "types": [ + 199, + 200 + ] + }, + { + "kind": "literal", + "value": "append" + }, + { + "kind": "object", + "properties": [ + { + "name": "endSeq", + "type": 2, + "optional": false + }, + { + "name": "op", + "type": 147, + "optional": false + }, + { + "name": "startSeq", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer/message" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2", "schema": { @@ -36487,2773 +47867,6 @@ "names": [], "sources": [] }, - { - "digest": "3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 25, - "optional": true - }, - { - "name": "seq", - "type": 18, - "optional": false - }, - { - "name": "sourceEventSeqs", - "type": 193, - "optional": true - }, - { - "name": "surfaceOp", - "type": 194, - "optional": false - }, - { - "name": "time", - "type": 18, - "optional": false - }, - { - "name": "type", - "type": 197, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 30, - "optional": false - }, - { - "name": "source", - "type": 31, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "union", - "types": [ - 4, - 7, - 9, - 12, - 14, - 16, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 10, - "optional": true - }, - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 5, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 17, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 32, - 35, - 37, - 39, - 41, - 43, - 46, - 48, - 50, - 52, - 54, - 56, - 58, - 60, - 61, - 62, - 63, - 64, - 65, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 109, - 111, - 114, - 115, - 116, - 117, - 118, - 120, - 121, - 122, - 123, - 125, - 126, - 127, - 128, - 129, - 131, - 132, - 133, - 135, - 136, - 144, - 146, - 147, - 149, - 151, - 155, - 157, - 165, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 183, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "revision", - "type": 18, - "optional": false - }, - { - "name": "round", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "messageId", - "type": 5, - "optional": false - }, - { - "name": "senderId", - "type": 5, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "teamId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 112, - "optional": false - }, - { - "name": "model", - "type": 5, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "replayState", - "type": 113, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 119, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 124, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 134, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 5, - "optional": true - }, - { - "name": "changes", - "type": 137, - "optional": false - }, - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 143, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 138 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 139, - "optional": false - }, - { - "name": "digest", - "type": 5, - "optional": true - }, - { - "name": "path", - "type": 5, - "optional": false - }, - { - "name": "scope", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 140, - 141, - 142 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 145, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 5, - "optional": true - }, - { - "name": "kind", - "type": 30, - "optional": false - }, - { - "name": "rpcId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 148, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 5, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 5, - "optional": false - }, - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "ruleId", - "type": 5, - "optional": false - }, - { - "name": "source", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 152, - "optional": false - }, - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 153 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 44, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 158, - "optional": false - }, - { - "name": "references", - "type": 159, - "optional": false - }, - { - "name": "version", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 160 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 18, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 161, - "optional": false - }, - { - "name": "compacted", - "type": 163, - "optional": false - }, - { - "name": "inputIndex", - "type": 18, - "optional": false - }, - { - "name": "label", - "type": 5, - "optional": false - }, - { - "name": "omittedBytes", - "type": 18, - "optional": false - }, - { - "name": "omittedMessages", - "type": 18, - "optional": false - }, - { - "name": "originalMessages", - "type": 18, - "optional": false - }, - { - "name": "retainedMessages", - "type": 18, - "optional": false - }, - { - "name": "sessionId", - "type": 5, - "optional": false - }, - { - "name": "truncated", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 18, - 162 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 168 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 182, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 18 - }, - { - "kind": "union", - "types": [ - 195, - 196 - ] - }, - { - "kind": "literal", - "value": "append" - }, - { - "kind": "object", - "properties": [ - { - "name": "endSeq", - "type": 18, - "optional": false - }, - { - "name": "op", - "type": 141, - "optional": false - }, - { - "name": "startSeq", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user/message" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "3f74ba74acd10644c1ed6947a411d8088bd2cfac74f61bb8540f96d68e31f004", "schema": { @@ -39364,2377 +47977,6 @@ "names": [], "sources": [] }, - { - "digest": "40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "union", - "types": [ - 1, - 4, - 6, - 8, - 10, - 12, - 14, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 53, - 55, - 58, - 59, - 60, - 62, - 63, - 64, - 65, - 67, - 68, - 69, - 70, - 71, - 73, - 75, - 76, - 78, - 79, - 80, - 81, - 91, - 93, - 94, - 96, - 99, - 103, - 105, - 113, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 131, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 50, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "revision", - "type": 52, - "optional": false - }, - { - "name": "round", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "messageId", - "type": 50, - "optional": false - }, - { - "name": "senderId", - "type": 50, - "optional": false - }, - { - "name": "senderName", - "type": 50, - "optional": false - }, - { - "name": "teamId", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "model", - "type": 50, - "optional": false - }, - { - "name": "provider", - "type": 50, - "optional": false - }, - { - "name": "replayState", - "type": 57, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 66, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 72, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 74, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 77, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 82, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 50, - "optional": true - }, - { - "name": "changes", - "type": 83, - "optional": false - }, - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 90, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "array", - "element": 84 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 85, - "optional": false - }, - { - "name": "digest", - "type": 50, - "optional": true - }, - { - "name": "path", - "type": 50, - "optional": false - }, - { - "name": "scope", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 86, - 87, - 88 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 50, - "optional": false - }, - { - "name": "kind", - "type": 92, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 50, - "optional": true - }, - { - "name": "kind", - "type": 74, - "optional": false - }, - { - "name": "rpcId", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 50, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 50, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 50, - "optional": false - }, - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 98, - "optional": false - }, - { - "name": "provider", - "type": 50, - "optional": false - }, - { - "name": "ruleId", - "type": 50, - "optional": false - }, - { - "name": "source", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 100, - "optional": false - }, - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - }, - { - "name": "update", - "type": 82, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 101 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 50, - "optional": false - }, - { - "name": "name", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - }, - { - "name": "name", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 106, - "optional": false - }, - { - "name": "references", - "type": 107, - "optional": false - }, - { - "name": "version", - "type": 112, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 108 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 52, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 109, - "optional": false - }, - { - "name": "compacted", - "type": 111, - "optional": false - }, - { - "name": "inputIndex", - "type": 52, - "optional": false - }, - { - "name": "label", - "type": 50, - "optional": false - }, - { - "name": "omittedBytes", - "type": 52, - "optional": false - }, - { - "name": "omittedMessages", - "type": 52, - "optional": false - }, - { - "name": "originalMessages", - "type": 52, - "optional": false - }, - { - "name": "retainedMessages", - "type": 52, - "optional": false - }, - { - "name": "sessionId", - "type": 50, - "optional": false - }, - { - "name": "truncated", - "type": 111, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 52, - 110 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 16, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 116 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 50, - "optional": false - }, - { - "name": "text", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 18, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 114, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - }, - { - "name": "sections", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 130, - "optional": false - }, - { - "name": "senderSessionId", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 15, - "optional": false - }, - { - "name": "kind", - "type": 132, - "optional": false - }, - { - "name": "senderSessionId", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 16, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 18, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 97, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - }, - { - "name": "summary", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#MessageSource" - ], - "sources": [ - "packages/llm/llm/src/message.ts:136" - ] - }, { "digest": "4208123b50df5006b181481ab45fcf1cde807b88d3fd4d340090bc2e202fac41", "schema": { @@ -42252,6 +48494,2732 @@ "packages/interaction/user-approval/src/types.ts:44" ] }, + { + "digest": "46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 1, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "role", + "type": 29, + "optional": false + }, + { + "name": "source", + "type": 30, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "union", + "types": [ + 3, + 6, + 8, + 11, + 13, + 15, + 26 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 9, + "optional": true + }, + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 16, + "optional": false + }, + { + "name": "offloaded", + "type": 24, + "optional": true + }, + { + "name": "type", + "type": 25, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "mediaType", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "originalDimensions", + "type": 23, + "optional": true + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 19, + 20, + 21, + 22 + ] + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 27, + "optional": false + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 31, + 34, + 36, + 38, + 41, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 59, + 60, + 61, + 62, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 106, + 108, + 111, + 112, + 113, + 114, + 115, + 117, + 118, + 119, + 120, + 122, + 123, + 124, + 125, + 126, + 128, + 130, + 132, + 133, + 134, + 142, + 144, + 145, + 147, + 149, + 153, + 155, + 163, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 181, + 183, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 105, + "optional": false + }, + { + "name": "revision", + "type": 17, + "optional": false + }, + { + "name": "round", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 107, + "optional": false + }, + { + "name": "messageId", + "type": 4, + "optional": false + }, + { + "name": "senderId", + "type": 4, + "optional": false + }, + { + "name": "senderName", + "type": 4, + "optional": false + }, + { + "name": "teamId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 109, + "optional": false + }, + { + "name": "model", + "type": 4, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "replayState", + "type": 110, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 116, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 121, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 127, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 129, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 131, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 24, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 4, + "optional": true + }, + { + "name": "changes", + "type": 135, + "optional": false + }, + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 136 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 137, + "optional": false + }, + { + "name": "digest", + "type": 4, + "optional": true + }, + { + "name": "path", + "type": 4, + "optional": false + }, + { + "name": "scope", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 138, + 139, + 140 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 143, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 4, + "optional": true + }, + { + "name": "kind", + "type": 131, + "optional": false + }, + { + "name": "rpcId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 146, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 4, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 4, + "optional": false + }, + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 148, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "ruleId", + "type": 4, + "optional": false + }, + { + "name": "source", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 150, + "optional": false + }, + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "update", + "type": 24, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 151 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 39, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "references", + "type": 157, + "optional": false + }, + { + "name": "version", + "type": 162, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 158 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 17, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 159, + "optional": false + }, + { + "name": "compacted", + "type": 161, + "optional": false + }, + { + "name": "inputIndex", + "type": 17, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": false + }, + { + "name": "omittedBytes", + "type": 17, + "optional": false + }, + { + "name": "omittedMessages", + "type": 17, + "optional": false + }, + { + "name": "originalMessages", + "type": 17, + "optional": false + }, + { + "name": "retainedMessages", + "type": 17, + "optional": false + }, + { + "name": "sessionId", + "type": 4, + "optional": false + }, + { + "name": "truncated", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 17, + 160 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 166 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "text", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 180, + "optional": false + }, + { + "name": "senderName", + "type": 4, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 182, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#DeveloperMessage" + ], + "sources": [ + "packages/llm/llm/src/message.ts:157" + ] + }, { "digest": "477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028", "schema": { @@ -44054,6 +53022,2935 @@ "packages/subagent/subagent/src/continuation-messages.ts:15" ] }, + { + "digest": "4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "maxTokens", + "type": 1, + "optional": false + }, + { + "name": "messageSeqs", + "type": 2, + "optional": false + }, + { + "name": "messages", + "type": 3, + "optional": false + }, + { + "name": "route", + "type": 205, + "optional": false + }, + { + "name": "system", + "type": 9, + "optional": false + }, + { + "name": "titleProvider", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "array", + "element": 1 + }, + { + "kind": "array", + "element": 4 + }, + { + "kind": "union", + "types": [ + 5, + 36, + 200, + 201, + 203 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 9, + "optional": false + }, + { + "name": "isError", + "type": 33, + "optional": true + }, + { + "name": "role", + "type": 34, + "optional": false + }, + { + "name": "source", + "type": 35, + "optional": false + }, + { + "name": "toolCallId", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 7 + }, + { + "kind": "union", + "types": [ + 8, + 11, + 13, + 16, + 18, + 20, + 30 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 9, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 9, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 14, + "optional": true + }, + { + "name": "toolName", + "type": 9, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 9, + "optional": false + }, + { + "name": "type", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 9, + "optional": false + }, + { + "name": "id", + "type": 9, + "optional": false + }, + { + "name": "name", + "type": 9, + "optional": false + }, + { + "name": "type", + "type": 19, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 21, + "optional": false + }, + { + "name": "offloaded", + "type": 28, + "optional": true + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 9, + "optional": false + }, + { + "name": "bytes", + "type": 1, + "optional": false + }, + { + "name": "height", + "type": 1, + "optional": false + }, + { + "name": "mediaType", + "type": 22, + "optional": false + }, + { + "name": "name", + "type": 9, + "optional": true + }, + { + "name": "originalDimensions", + "type": 27, + "optional": true + }, + { + "name": "width", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 23, + 24, + 25, + 26 + ] + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 1, + "optional": false + }, + { + "name": "width", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 31, + "optional": false + }, + { + "name": "type", + "type": 32, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 9, + "optional": false + }, + { + "name": "bytes", + "type": 1, + "optional": false + }, + { + "name": "name", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 9, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 9, + "optional": false + }, + { + "name": "role", + "type": 37, + "optional": false + }, + { + "name": "source", + "type": 38, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 35, + 39, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 69, + 71, + 73, + 75, + 77, + 82, + 84, + 86, + 94, + 99, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 175, + 176, + 178, + 181, + 182, + 183, + 184, + 185, + 187, + 188, + 189, + 190, + 191, + 193, + 194, + 195, + 196, + 197, + 199 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 28, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 9, + "optional": true + }, + { + "name": "changes", + "type": 61, + "optional": false + }, + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 68, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 62 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 63, + "optional": false + }, + { + "name": "digest", + "type": 9, + "optional": true + }, + { + "name": "path", + "type": 9, + "optional": false + }, + { + "name": "scope", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 64, + 65, + 66 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 9, + "optional": true + }, + { + "name": "kind", + "type": 70, + "optional": false + }, + { + "name": "rpcId", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 9, + "optional": false + }, + { + "name": "kind", + "type": 72, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 9, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 74, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 9, + "optional": false + }, + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 76, + "optional": false + }, + { + "name": "provider", + "type": 9, + "optional": false + }, + { + "name": "ruleId", + "type": 9, + "optional": false + }, + { + "name": "source", + "type": 9, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 78, + "optional": false + }, + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 81, + "optional": false + }, + { + "name": "update", + "type": 28, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 79 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 9, + "optional": false + }, + { + "name": "name", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 83, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + }, + { + "name": "name", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 88, + "optional": false + }, + { + "name": "references", + "type": 89, + "optional": false + }, + { + "name": "version", + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 90 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 1, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 91, + "optional": false + }, + { + "name": "compacted", + "type": 33, + "optional": false + }, + { + "name": "inputIndex", + "type": 1, + "optional": false + }, + { + "name": "label", + "type": 9, + "optional": false + }, + { + "name": "omittedBytes", + "type": 1, + "optional": false + }, + { + "name": "omittedMessages", + "type": 1, + "optional": false + }, + { + "name": "originalMessages", + "type": 1, + "optional": false + }, + { + "name": "retainedMessages", + "type": 1, + "optional": false + }, + { + "name": "sessionId", + "type": 9, + "optional": false + }, + { + "name": "truncated", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 1, + 92 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 96, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "array", + "element": 98 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 9, + "optional": false + }, + { + "name": "text", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 74, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 83, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 95, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 96, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 74, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 83, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 67, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 96, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 132, + "optional": false + }, + { + "name": "senderName", + "type": 9, + "optional": false + }, + { + "name": "senderSessionId", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 74, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 83, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 143, + "optional": false + }, + { + "name": "senderSessionId", + "type": 9, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 96, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 74, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 83, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 96, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 131, + "optional": false + }, + { + "name": "kind", + "type": 163, + "optional": false + }, + { + "name": "senderSessionId", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 74, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 83, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 9, + "optional": false + }, + { + "name": "kind", + "type": 174, + "optional": false + }, + { + "name": "revision", + "type": 1, + "optional": false + }, + { + "name": "round", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 96, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 177, + "optional": false + }, + { + "name": "messageId", + "type": 9, + "optional": false + }, + { + "name": "senderId", + "type": 9, + "optional": false + }, + { + "name": "senderName", + "type": 9, + "optional": false + }, + { + "name": "teamId", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 179, + "optional": false + }, + { + "name": "model", + "type": 9, + "optional": false + }, + { + "name": "provider", + "type": 9, + "optional": false + }, + { + "name": "replayState", + "type": 180, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 96, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 100, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 186, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + }, + { + "name": "summary", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 192, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 74, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 83, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 198, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 70, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 9, + "optional": false + }, + { + "name": "role", + "type": 70, + "optional": false + }, + { + "name": "source", + "type": 38, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 9, + "optional": false + }, + { + "name": "role", + "type": 202, + "optional": false + }, + { + "name": "source", + "type": 178, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "assistant" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 9, + "optional": false + }, + { + "name": "role", + "type": 204, + "optional": false + }, + { + "name": "source", + "type": 191, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system" + }, + { + "kind": "object", + "properties": [ + { + "name": "model", + "type": 9, + "optional": false + }, + { + "name": "provider", + "type": 9, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [ + "packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData" + ], + "sources": [ + "packages/session/session-title-llm/src/index.ts:34" + ] + }, { "digest": "4ae007ed190a72c92138b22d059b83208079c7551ca13fb59ae8cf5e23693964", "schema": { @@ -45311,2724 +57208,6 @@ "names": [], "sources": [] }, - { - "digest": "51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "headerSeq", - "type": 1, - "optional": true - }, - { - "name": "message", - "type": 2, - "optional": false - }, - { - "name": "step", - "type": 1, - "optional": false - }, - { - "name": "turn", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "role", - "type": 30, - "optional": false - }, - { - "name": "source", - "type": 31, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 4 - }, - { - "kind": "union", - "types": [ - 5, - 8, - 10, - 13, - 15, - 17, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 11, - "optional": true - }, - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 14, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 18, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 1, - "optional": false - }, - { - "name": "height", - "type": 1, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 1, - "optional": false - }, - { - "name": "width", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 1, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 32, - 35, - 38, - 40, - 42, - 44, - 46, - 48, - 50, - 52, - 54, - 56, - 58, - 60, - 61, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 105, - 107, - 110, - 111, - 112, - 113, - 114, - 116, - 117, - 118, - 119, - 121, - 122, - 123, - 124, - 125, - 127, - 129, - 131, - 132, - 133, - 141, - 143, - 144, - 146, - 148, - 152, - 154, - 162, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 180, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - }, - { - "name": "revision", - "type": 1, - "optional": false - }, - { - "name": "round", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 106, - "optional": false - }, - { - "name": "messageId", - "type": 6, - "optional": false - }, - { - "name": "senderId", - "type": 6, - "optional": false - }, - { - "name": "senderName", - "type": 6, - "optional": false - }, - { - "name": "teamId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "model", - "type": 6, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "replayState", - "type": 109, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 115, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 120, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 126, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 128, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 6, - "optional": true - }, - { - "name": "changes", - "type": 134, - "optional": false - }, - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 140, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 135 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 136, - "optional": false - }, - { - "name": "digest", - "type": 6, - "optional": true - }, - { - "name": "path", - "type": 6, - "optional": false - }, - { - "name": "scope", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 137, - 138, - 139 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 142, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 6, - "optional": true - }, - { - "name": "kind", - "type": 128, - "optional": false - }, - { - "name": "rpcId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 145, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 6, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 6, - "optional": false - }, - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 147, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "ruleId", - "type": 6, - "optional": false - }, - { - "name": "source", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 149, - "optional": false - }, - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 151, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 150 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 153, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 155, - "optional": false - }, - { - "name": "references", - "type": 156, - "optional": false - }, - { - "name": "version", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 157 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 1, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 158, - "optional": false - }, - { - "name": "compacted", - "type": 160, - "optional": false - }, - { - "name": "inputIndex", - "type": 1, - "optional": false - }, - { - "name": "label", - "type": 6, - "optional": false - }, - { - "name": "omittedBytes", - "type": 1, - "optional": false - }, - { - "name": "omittedMessages", - "type": 1, - "optional": false - }, - { - "name": "originalMessages", - "type": 1, - "optional": false - }, - { - "name": "retainedMessages", - "type": 1, - "optional": false - }, - { - "name": "sessionId", - "type": 6, - "optional": false - }, - { - "name": "truncated", - "type": 160, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 1, - 159 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 165 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "text", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 163, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "sections", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 179, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 181, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [], - "sources": [ - "packages/core/session/src/types.ts:311" - ] - }, { "digest": "51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357", "schema": { @@ -51785,2696 +60964,6 @@ "packages/subagent/subagent/src/descriptor.ts:72" ] }, - { - "digest": "64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 1, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "role", - "type": 29, - "optional": false - }, - { - "name": "source", - "type": 30, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "union", - "types": [ - 3, - 6, - 8, - 11, - 13, - 15, - 26 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 9, - "optional": true - }, - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 14, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 16, - "optional": false - }, - { - "name": "offloaded", - "type": 24, - "optional": true - }, - { - "name": "type", - "type": 25, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "mediaType", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": true - }, - { - "name": "originalDimensions", - "type": 23, - "optional": true - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 19, - 20, - 21, - 22 - ] - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 27, - "optional": false - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 31, - 34, - 36, - 38, - 40, - 42, - 44, - 46, - 48, - 50, - 52, - 54, - 56, - 58, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 102, - 104, - 107, - 108, - 109, - 110, - 112, - 113, - 114, - 115, - 117, - 118, - 119, - 120, - 121, - 123, - 124, - 125, - 127, - 128, - 129, - 137, - 139, - 140, - 142, - 145, - 149, - 151, - 159, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 177, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - }, - { - "name": "revision", - "type": 17, - "optional": false - }, - { - "name": "round", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 103, - "optional": false - }, - { - "name": "messageId", - "type": 4, - "optional": false - }, - { - "name": "senderId", - "type": 4, - "optional": false - }, - { - "name": "senderName", - "type": 4, - "optional": false - }, - { - "name": "teamId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 105, - "optional": false - }, - { - "name": "model", - "type": 4, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "replayState", - "type": 106, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 111, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 116, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 122, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 126, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 24, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 4, - "optional": true - }, - { - "name": "changes", - "type": 130, - "optional": false - }, - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 136, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 131 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 132, - "optional": false - }, - { - "name": "digest", - "type": 4, - "optional": true - }, - { - "name": "path", - "type": 4, - "optional": false - }, - { - "name": "scope", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 133, - 134, - 135 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 138, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 4, - "optional": true - }, - { - "name": "kind", - "type": 29, - "optional": false - }, - { - "name": "rpcId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 141, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 4, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 4, - "optional": false - }, - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 144, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "ruleId", - "type": 4, - "optional": false - }, - { - "name": "source", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 146, - "optional": false - }, - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 148, - "optional": false - }, - { - "name": "update", - "type": 24, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 147 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 59, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "references", - "type": 153, - "optional": false - }, - { - "name": "version", - "type": 158, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 154 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 17, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 155, - "optional": false - }, - { - "name": "compacted", - "type": 157, - "optional": false - }, - { - "name": "inputIndex", - "type": 17, - "optional": false - }, - { - "name": "label", - "type": 4, - "optional": false - }, - { - "name": "omittedBytes", - "type": 17, - "optional": false - }, - { - "name": "omittedMessages", - "type": 17, - "optional": false - }, - { - "name": "originalMessages", - "type": 17, - "optional": false - }, - { - "name": "retainedMessages", - "type": 17, - "optional": false - }, - { - "name": "sessionId", - "type": 4, - "optional": false - }, - { - "name": "truncated", - "type": 157, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 17, - 156 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 162 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "text", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 160, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 176, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 178, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 143, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#UserMessage" - ], - "sources": [ - "packages/llm/llm/src/message.ts:162" - ] - }, { "digest": "6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25", "schema": { @@ -55267,2842 +61756,6 @@ "names": [], "sources": [] }, - { - "digest": "691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "union", - "types": [ - 1, - 33, - 195, - 196, - 198 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "isError", - "type": 30, - "optional": true - }, - { - "name": "role", - "type": 31, - "optional": false - }, - { - "name": "source", - "type": 32, - "optional": false - }, - { - "name": "toolCallId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "union", - "types": [ - 4, - 7, - 9, - 12, - 14, - 16, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 10, - "optional": true - }, - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 5, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 17, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 31, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 34, - "optional": false - }, - { - "name": "source", - "type": 35, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 32, - 36, - 39, - 41, - 43, - 45, - 47, - 49, - 51, - 54, - 56, - 58, - 60, - 62, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 115, - 117, - 120, - 121, - 122, - 123, - 124, - 126, - 127, - 128, - 129, - 131, - 132, - 133, - 134, - 135, - 137, - 139, - 140, - 142, - 143, - 151, - 152, - 154, - 156, - 160, - 162, - 169, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 187, - 189, - 190, - 191, - 192, - 193, - 194 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 114, - "optional": false - }, - { - "name": "revision", - "type": 18, - "optional": false - }, - { - "name": "round", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 116, - "optional": false - }, - { - "name": "messageId", - "type": 5, - "optional": false - }, - { - "name": "senderId", - "type": 5, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "teamId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 118, - "optional": false - }, - { - "name": "model", - "type": 5, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "replayState", - "type": 119, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 125, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 136, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 138, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 141, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 5, - "optional": true - }, - { - "name": "changes", - "type": 144, - "optional": false - }, - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 145 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 146, - "optional": false - }, - { - "name": "digest", - "type": 5, - "optional": true - }, - { - "name": "path", - "type": 5, - "optional": false - }, - { - "name": "scope", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 147, - 148, - 149 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 5, - "optional": true - }, - { - "name": "kind", - "type": 138, - "optional": false - }, - { - "name": "rpcId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 153, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 5, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 5, - "optional": false - }, - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 155, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "ruleId", - "type": 5, - "optional": false - }, - { - "name": "source", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 157, - "optional": false - }, - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 159, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 158 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 161, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 163, - "optional": false - }, - { - "name": "references", - "type": 164, - "optional": false - }, - { - "name": "version", - "type": 168, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 165 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 18, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 166, - "optional": false - }, - { - "name": "compacted", - "type": 30, - "optional": false - }, - { - "name": "inputIndex", - "type": 18, - "optional": false - }, - { - "name": "label", - "type": 5, - "optional": false - }, - { - "name": "omittedBytes", - "type": 18, - "optional": false - }, - { - "name": "omittedMessages", - "type": 18, - "optional": false - }, - { - "name": "originalMessages", - "type": 18, - "optional": false - }, - { - "name": "retainedMessages", - "type": 18, - "optional": false - }, - { - "name": "sessionId", - "type": 5, - "optional": false - }, - { - "name": "truncated", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 18, - 167 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 172 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 170, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 186, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 138, - "optional": false - }, - { - "name": "source", - "type": 35, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 197, - "optional": false - }, - { - "name": "source", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "assistant" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 199, - "optional": false - }, - { - "name": "source", - "type": 129, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system" - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#Message" - ], - "sources": [ - "packages/llm/llm/src/message.ts:196" - ] - }, { "digest": "693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057", "schema": { @@ -59736,6 +63389,2756 @@ "names": [], "sources": [] }, + { + "digest": "766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "headerSeq", + "type": 1, + "optional": true + }, + { + "name": "message", + "type": 2, + "optional": false + }, + { + "name": "step", + "type": 1, + "optional": false + }, + { + "name": "turn", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 30, + "optional": false + }, + { + "name": "source", + "type": 31, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 4 + }, + { + "kind": "union", + "types": [ + 5, + 8, + 10, + 13, + 15, + 17, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 11, + "optional": true + }, + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 18, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 1, + "optional": false + }, + { + "name": "height", + "type": 1, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 1, + "optional": false + }, + { + "name": "width", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 1, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 32, + 35, + 37, + 39, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 61, + 62, + 63, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 107, + 109, + 112, + 113, + 114, + 115, + 116, + 118, + 119, + 120, + 121, + 123, + 124, + 125, + 126, + 127, + 129, + 131, + 133, + 134, + 135, + 143, + 145, + 146, + 148, + 150, + 154, + 156, + 164, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 182, + 184, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 106, + "optional": false + }, + { + "name": "revision", + "type": 1, + "optional": false + }, + { + "name": "round", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "messageId", + "type": 6, + "optional": false + }, + { + "name": "senderId", + "type": 6, + "optional": false + }, + { + "name": "senderName", + "type": 6, + "optional": false + }, + { + "name": "teamId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "model", + "type": 6, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "replayState", + "type": 111, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 122, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 128, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 132, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 6, + "optional": true + }, + { + "name": "changes", + "type": 136, + "optional": false + }, + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 142, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 137 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 138, + "optional": false + }, + { + "name": "digest", + "type": 6, + "optional": true + }, + { + "name": "path", + "type": 6, + "optional": false + }, + { + "name": "scope", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 139, + 140, + 141 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 144, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 6, + "optional": true + }, + { + "name": "kind", + "type": 132, + "optional": false + }, + { + "name": "rpcId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 147, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 6, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 6, + "optional": false + }, + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 149, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "ruleId", + "type": 6, + "optional": false + }, + { + "name": "source", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 151, + "optional": false + }, + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 153, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 152 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 155, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 157, + "optional": false + }, + { + "name": "references", + "type": 158, + "optional": false + }, + { + "name": "version", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 159 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 1, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 160, + "optional": false + }, + { + "name": "compacted", + "type": 162, + "optional": false + }, + { + "name": "inputIndex", + "type": 1, + "optional": false + }, + { + "name": "label", + "type": 6, + "optional": false + }, + { + "name": "omittedBytes", + "type": 1, + "optional": false + }, + { + "name": "omittedMessages", + "type": 1, + "optional": false + }, + { + "name": "originalMessages", + "type": 1, + "optional": false + }, + { + "name": "retainedMessages", + "type": 1, + "optional": false + }, + { + "name": "sessionId", + "type": 6, + "optional": false + }, + { + "name": "truncated", + "type": 162, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 1, + 161 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 167 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "text", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 165, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 181, + "optional": false + }, + { + "name": "senderName", + "type": 6, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 183, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 185, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [], + "sources": [ + "packages/core/session/src/types.ts:311" + ] + }, { "digest": "76632533f67879dcb346fcae640540dbc89b2472b0bce88c59f7e48fc5c0e668", "schema": { @@ -65418,63 +71821,19 @@ "sources": [] }, { - "digest": "9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd", + "digest": "9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f", "schema": { "root": 0, "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "maxTokens", - "type": 1, - "optional": false - }, - { - "name": "messageSeqs", - "type": 2, - "optional": false - }, - { - "name": "messages", - "type": 3, - "optional": false - }, - { - "name": "route", - "type": 203, - "optional": false - }, - { - "name": "system", - "type": 10, - "optional": false - }, - { - "name": "titleProvider", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, { "kind": "array", "element": 1 }, - { - "kind": "array", - "element": 4 - }, { "kind": "union", "types": [ - 5, - 36, + 2, + 34, 198, 199, 201 @@ -65485,32 +71844,32 @@ "properties": [ { "name": "content", - "type": 6, + "type": 3, "optional": false }, { "name": "id", - "type": 10, + "type": 6, "optional": false }, { "name": "isError", - "type": 33, + "type": 31, "optional": true }, { "name": "role", - "type": 34, + "type": 32, "optional": false }, { "name": "source", - "type": 35, + "type": 33, "optional": false }, { "name": "toolCallId", - "type": 10, + "type": 6, "optional": false } ], @@ -65518,69 +71877,40 @@ }, { "kind": "array", - "element": 7 + "element": 4 }, { "kind": "union", "types": [ + 5, 8, - 12, - 14, - 16, + 10, + 21, + 24, 26, - 29, - 31 + 28 ] }, { "kind": "object", "properties": [ - { - "name": "tool", - "type": 9, - "optional": true - }, { "name": "toolName", - "type": 10, + "type": 6, "optional": false }, { "name": "type", - "type": 11, + "type": 7, "optional": false } ], "indices": [] }, - { - "kind": "primitive", - "type": "never" - }, { "kind": "primitive", "type": "string" }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "tool-removal" @@ -65590,22 +71920,22 @@ "properties": [ { "name": "arguments", - "type": 10, + "type": 6, "optional": false }, { "name": "id", - "type": 10, + "type": 6, "optional": false }, { "name": "name", - "type": 10, + "type": 6, "optional": false }, { "name": "type", - "type": 15, + "type": 9, "optional": false } ], @@ -65620,17 +71950,17 @@ "properties": [ { "name": "attachment", - "type": 17, + "type": 11, "optional": false }, { "name": "offloaded", - "type": 24, + "type": 19, "optional": true }, { "name": "type", - "type": 25, + "type": 20, "optional": false } ], @@ -65641,58 +71971,62 @@ "properties": [ { "name": "attachmentId", - "type": 10, + "type": 6, "optional": false }, { "name": "bytes", - "type": 1, + "type": 12, "optional": false }, { "name": "height", - "type": 1, + "type": 12, "optional": false }, { "name": "mediaType", - "type": 18, + "type": 13, "optional": false }, { "name": "name", - "type": 10, + "type": 6, "optional": true }, { "name": "originalDimensions", - "type": 23, + "type": 18, "optional": true }, { "name": "width", - "type": 1, + "type": 12, "optional": false } ], "indices": [] }, + { + "kind": "primitive", + "type": "number" + }, { "kind": "union", "types": [ - 19, - 20, - 21, - 22 + 14, + 15, + 16, + 17 ] }, { "kind": "literal", - "value": "image/gif" + "value": "image/jpeg" }, { "kind": "literal", - "value": "image/jpeg" + "value": "image/gif" }, { "kind": "literal", @@ -65707,12 +72041,12 @@ "properties": [ { "name": "height", - "type": 1, + "type": 12, "optional": false }, { "name": "width", - "type": 1, + "type": 12, "optional": false } ], @@ -65731,12 +72065,12 @@ "properties": [ { "name": "attachment", - "type": 27, + "type": 22, "optional": false }, { "name": "type", - "type": 28, + "type": 23, "optional": false } ], @@ -65747,17 +72081,17 @@ "properties": [ { "name": "attachmentId", - "type": 10, + "type": 6, "optional": false }, { "name": "bytes", - "type": 1, + "type": 12, "optional": false }, { "name": "name", - "type": 10, + "type": 6, "optional": false } ], @@ -65772,12 +72106,12 @@ "properties": [ { "name": "text", - "type": 10, + "type": 6, "optional": false }, { "name": "type", - "type": 30, + "type": 25, "optional": false } ], @@ -65792,12 +72126,12 @@ "properties": [ { "name": "text", - "type": 10, + "type": 6, "optional": false }, { "name": "type", - "type": 32, + "type": 27, "optional": false } ], @@ -65807,6 +72141,35 @@ "kind": "literal", "value": "text" }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 29, + "optional": true + }, + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, { "kind": "primitive", "type": "boolean" @@ -65820,12 +72183,12 @@ "properties": [ { "name": "callId", - "type": 10, + "type": 6, "optional": false }, { "name": "kind", - "type": 34, + "type": 32, "optional": false } ], @@ -65836,22 +72199,22 @@ "properties": [ { "name": "content", - "type": 6, + "type": 3, "optional": false }, { "name": "id", - "type": 10, + "type": 6, "optional": false }, { "name": "role", - "type": 37, + "type": 35, "optional": false }, { "name": "source", - "type": 38, + "type": 36, "optional": false, "compatibility": { "version": 1, @@ -65860,6 +72223,7 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ + "team-relay", "tmux-context" ] } @@ -65874,10 +72238,11 @@ { "kind": "union", "types": [ - 35, - 39, + 33, + 37, + 40, 42, - 45, + 44, 47, 49, 51, @@ -65895,17 +72260,17 @@ 90, 91, 92, - 93, - 95, + 94, 96, 98, - 100, - 102, + 99, + 101, + 103, 104, + 105, 106, - 107, 109, - 112, + 111, 113, 114, 115, @@ -65968,7 +72333,7 @@ 176, 177, 178, - 180, + 179, 181, 182, 183, @@ -65990,17 +72355,17 @@ "properties": [ { "name": "form", - "type": 40, + "type": 38, "optional": false }, { "name": "kind", - "type": 41, + "type": 39, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, "optional": false } ], @@ -66010,6 +72375,56 @@ "kind": "literal", "value": "notice" }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", "value": "dsh-session-title-llm" @@ -66019,12 +72434,12 @@ "properties": [ { "name": "form", - "type": 43, + "type": 45, "optional": false }, { "name": "kind", - "type": 44, + "type": 46, "optional": false } ], @@ -66043,12 +72458,12 @@ "properties": [ { "name": "form", - "type": 43, + "type": 45, "optional": false }, { "name": "kind", - "type": 46, + "type": 48, "optional": false } ], @@ -66063,12 +72478,12 @@ "properties": [ { "name": "form", - "type": 43, + "type": 45, "optional": false }, { "name": "kind", - "type": 48, + "type": 50, "optional": false } ], @@ -66078,37 +72493,17 @@ "kind": "literal", "value": "model-selection" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, { "kind": "object", "properties": [ { "name": "baseline", - "type": 24, + "type": 19, "optional": true }, { "name": "baselineIdentity", - "type": 10, + "type": 6, "optional": true }, { @@ -66118,7 +72513,7 @@ }, { "name": "form", - "type": 43, + "type": 45, "optional": false }, { @@ -66143,17 +72538,17 @@ }, { "name": "digest", - "type": 10, + "type": 6, "optional": true }, { "name": "path", - "type": 10, + "type": 6, "optional": false }, { "name": "scope", - "type": 10, + "type": 6, "optional": false } ], @@ -66188,7 +72583,7 @@ "properties": [ { "name": "clientTimeZone", - "type": 10, + "type": 6, "optional": true }, { @@ -66198,7 +72593,7 @@ }, { "name": "rpcId", - "type": 10, + "type": 6, "optional": false } ], @@ -66213,7 +72608,7 @@ "properties": [ { "name": "compactionId", - "type": 10, + "type": 6, "optional": false }, { @@ -66223,7 +72618,7 @@ }, { "name": "sourceCommandId", - "type": 10, + "type": 6, "optional": true } ], @@ -66238,7 +72633,7 @@ "properties": [ { "name": "form", - "type": 43, + "type": 45, "optional": false }, { @@ -66251,19 +72646,19 @@ }, { "kind": "literal", - "value": "repeat-tool-reminder" + "value": "plan-mode" }, { "kind": "object", "properties": [ { "name": "deliveryId", - "type": 10, + "type": 6, "optional": false }, { "name": "form", - "type": 40, + "type": 38, "optional": false }, { @@ -66273,22 +72668,22 @@ }, { "name": "provider", - "type": 10, + "type": 6, "optional": false }, { "name": "ruleId", - "type": 10, + "type": 6, "optional": false }, { "name": "source", - "type": 10, + "type": 6, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, "optional": false } ], @@ -66318,7 +72713,7 @@ }, { "name": "update", - "type": 24, + "type": 19, "optional": true } ], @@ -66333,12 +72728,12 @@ "properties": [ { "name": "description", - "type": 10, + "type": 6, "optional": false }, { "name": "name", - "type": 10, + "type": 6, "optional": false } ], @@ -66357,37 +72752,17 @@ "properties": [ { "name": "form", - "type": 43, + "type": 45, "optional": false }, { "name": "kind", "type": 73, "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false }, { "name": "name", - "type": 10, + "type": 6, "optional": false } ], @@ -66397,6 +72772,26 @@ "kind": "literal", "value": "skill-invocation" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 45, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, { "kind": "object", "properties": [ @@ -66440,7 +72835,7 @@ "properties": [ { "name": "capturedFormatVersion", - "type": 1, + "type": 12, "optional": true }, { @@ -66450,47 +72845,47 @@ }, { "name": "compacted", - "type": 33, + "type": 31, "optional": false }, { "name": "inputIndex", - "type": 1, + "type": 12, "optional": false }, { "name": "label", - "type": 10, + "type": 6, "optional": false }, { "name": "omittedBytes", - "type": 1, + "type": 12, "optional": false }, { "name": "omittedMessages", - "type": 1, + "type": 12, "optional": false }, { "name": "originalMessages", - "type": 1, + "type": 12, "optional": false }, { "name": "retainedMessages", - "type": 1, + "type": 12, "optional": false }, { "name": "sessionId", - "type": 10, + "type": 6, "optional": false }, { "name": "truncated", - "type": 33, + "type": 31, "optional": false } ], @@ -66499,7 +72894,7 @@ { "kind": "union", "types": [ - 1, + 12, 82 ] }, @@ -66521,7 +72916,7 @@ }, { "name": "kind", - "type": 44, + "type": 46, "optional": false }, { @@ -66545,33 +72940,12 @@ "properties": [ { "name": "name", - "type": 10, + "type": 6, "optional": false }, { "name": "text", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 86, + "type": 6, "optional": false } ], @@ -66650,7 +73024,7 @@ }, { "name": "kind", - "type": 73, + "type": 75, "optional": false }, { @@ -66671,7 +73045,32 @@ }, { "name": "kind", - "type": 94, + "type": 93, + "optional": false + }, + { + "name": "sections", + "type": 86, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 95, "optional": false }, { @@ -66686,22 +73085,6 @@ "kind": "literal", "value": "schedule" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 94, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -66727,6 +73110,22 @@ "kind": "literal", "value": "time-context" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 45, + "optional": false + }, + { + "name": "kind", + "type": 93, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -66737,7 +73136,7 @@ }, { "name": "kind", - "type": 99, + "type": 100, "optional": false }, { @@ -66762,7 +73161,7 @@ }, { "name": "kind", - "type": 101, + "type": 102, "optional": false }, { @@ -66787,7 +73186,7 @@ }, { "name": "kind", - "type": 103, + "type": 39, "optional": false }, { @@ -66798,35 +73197,6 @@ ], "indices": [] }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 105, - "optional": false - }, - { - "name": "sections", - "type": 86, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, { "kind": "object", "properties": [ @@ -66853,7 +73223,28 @@ "properties": [ { "name": "form", - "type": 40, + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 86, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 107, "optional": false }, { @@ -66861,14 +73252,48 @@ "type": 108, "optional": false }, + { + "name": "senderName", + "type": 6, + "optional": false + }, { "name": "senderSessionId", - "type": 10, + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, "optional": false } ], @@ -66883,26 +73308,22 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 111, + "type": 112, "optional": false }, { "name": "senderSessionId", - "type": 10, + "type": 6, "optional": false } ], "indices": [] }, - { - "kind": "literal", - "value": "relay" - }, { "kind": "literal", "value": "agent-message" @@ -66912,17 +73333,12 @@ "properties": [ { "name": "form", - "type": 40, + "type": 45, "optional": false }, { "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 95, "optional": false } ], @@ -66933,7 +73349,70 @@ "properties": [ { "name": "form", - "type": 43, + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 45, "optional": false }, { @@ -66949,17 +73428,12 @@ "properties": [ { "name": "form", - "type": 40, + "type": 45, "optional": false }, { "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 100, "optional": false } ], @@ -66970,17 +73444,12 @@ "properties": [ { "name": "form", - "type": 40, + "type": 45, "optional": false }, { "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 102, "optional": false } ], @@ -66991,17 +73460,12 @@ "properties": [ { "name": "form", - "type": 40, + "type": 45, "optional": false }, { "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 39, "optional": false } ], @@ -67012,92 +73476,7 @@ "properties": [ { "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 64, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 99, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 103, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, + "type": 45, "optional": false }, { @@ -67113,12 +73492,12 @@ "properties": [ { "name": "form", - "type": 77, + "type": 45, "optional": false }, { "name": "kind", - "type": 44, + "type": 43, "optional": false } ], @@ -67161,17 +73540,17 @@ "properties": [ { "name": "form", - "type": 40, + "type": 38, "optional": false }, { "name": "kind", - "type": 73, + "type": 64, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, "optional": false } ], @@ -67219,7 +73598,7 @@ }, { "name": "kind", - "type": 73, + "type": 75, "optional": false } ], @@ -67235,7 +73614,23 @@ }, { "name": "kind", - "type": 94, + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 77, + "optional": false + }, + { + "name": "kind", + "type": 95, "optional": false } ], @@ -67267,7 +73662,7 @@ }, { "name": "kind", - "type": 99, + "type": 100, "optional": false } ], @@ -67283,7 +73678,7 @@ }, { "name": "kind", - "type": 101, + "type": 102, "optional": false } ], @@ -67299,7 +73694,7 @@ }, { "name": "kind", - "type": 103, + "type": 39, "optional": false } ], @@ -67310,33 +73705,17 @@ "properties": [ { "name": "form", - "type": 77, + "type": 38, "optional": false }, { "name": "kind", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 94, + "type": 75, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, "optional": false } ], @@ -67363,12 +73742,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 77, "optional": false }, { "name": "kind", - "type": 44, + "type": 43, "optional": false } ], @@ -67379,7 +73758,7 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { @@ -67395,7 +73774,7 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { @@ -67411,7 +73790,7 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { @@ -67427,7 +73806,7 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { @@ -67443,12 +73822,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 73, + "type": 75, "optional": false } ], @@ -67459,12 +73838,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 94, + "type": 93, "optional": false } ], @@ -67475,12 +73854,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 97, + "type": 95, "optional": false } ], @@ -67491,17 +73870,17 @@ "properties": [ { "name": "form", - "type": 40, + "type": 38, "optional": false }, { "name": "kind", - "type": 97, + "type": 93, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, "optional": false } ], @@ -67512,12 +73891,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 99, + "type": 97, "optional": false } ], @@ -67528,12 +73907,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 101, + "type": 100, "optional": false } ], @@ -67544,12 +73923,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 103, + "type": 102, "optional": false } ], @@ -67560,12 +73939,12 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { "name": "kind", - "type": 105, + "type": 39, "optional": false } ], @@ -67576,7 +73955,7 @@ "properties": [ { "name": "form", - "type": 110, + "type": 107, "optional": false }, { @@ -67592,12 +73971,12 @@ "properties": [ { "name": "form", - "type": 70, + "type": 107, "optional": false }, { "name": "kind", - "type": 44, + "type": 43, "optional": false } ], @@ -67656,17 +74035,17 @@ "properties": [ { "name": "form", - "type": 40, + "type": 38, "optional": false }, { "name": "kind", - "type": 99, + "type": 95, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, "optional": false } ], @@ -67698,7 +74077,7 @@ }, { "name": "kind", - "type": 73, + "type": 75, "optional": false } ], @@ -67714,7 +74093,23 @@ }, { "name": "kind", - "type": 94, + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 70, + "optional": false + }, + { + "name": "kind", + "type": 95, "optional": false } ], @@ -67746,7 +74141,7 @@ }, { "name": "kind", - "type": 99, + "type": 100, "optional": false } ], @@ -67762,7 +74157,7 @@ }, { "name": "kind", - "type": 101, + "type": 102, "optional": false } ], @@ -67778,23 +74173,7 @@ }, { "name": "kind", - "type": 103, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 70, - "optional": false - }, - { - "name": "kind", - "type": 105, + "type": 39, "optional": false } ], @@ -67821,17 +74200,33 @@ "properties": [ { "name": "form", - "type": 40, + "type": 38, "optional": false }, { "name": "kind", - "type": 101, + "type": 97, "optional": false }, { "name": "summary", - "type": 10, + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 70, + "optional": false + }, + { + "name": "kind", + "type": 43, "optional": false } ], @@ -67842,7 +74237,7 @@ "properties": [ { "name": "goalId", - "type": 10, + "type": 6, "optional": false }, { @@ -67852,12 +74247,12 @@ }, { "name": "revision", - "type": 1, + "type": 12, "optional": false }, { "name": "round", - "type": 1, + "type": 12, "optional": false } ], @@ -67877,22 +74272,22 @@ }, { "name": "messageId", - "type": 10, + "type": 6, "optional": false }, { "name": "senderId", - "type": 10, + "type": 6, "optional": false }, { "name": "senderName", - "type": 10, + "type": 6, "optional": false }, { "name": "teamId", - "type": 10, + "type": 6, "optional": false } ], @@ -67912,12 +74307,12 @@ }, { "name": "model", - "type": 10, + "type": 6, "optional": false }, { "name": "provider", - "type": 10, + "type": 6, "optional": false }, { @@ -67936,17 +74331,6 @@ "kind": "opaque", "reason": "unknown" }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -67985,7 +74369,39 @@ "properties": [ { "name": "kind", - "type": 179, + "type": 64, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 180, "optional": false } ], @@ -67998,19 +74414,9 @@ { "kind": "object", "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, { "name": "kind", - "type": 103, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 75, "optional": false } ], @@ -68021,7 +74427,7 @@ "properties": [ { "name": "kind", - "type": 64, + "type": 93, "optional": false } ], @@ -68032,18 +74438,7 @@ "properties": [ { "name": "kind", - "type": 73, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 94, + "type": 95, "optional": false } ], @@ -68080,7 +74475,7 @@ "properties": [ { "name": "kind", - "type": 99, + "type": 100, "optional": false } ], @@ -68091,7 +74486,7 @@ "properties": [ { "name": "kind", - "type": 101, + "type": 102, "optional": false } ], @@ -68102,7 +74497,7 @@ "properties": [ { "name": "kind", - "type": 103, + "type": 39, "optional": false } ], @@ -68123,6 +74518,27 @@ "kind": "literal", "value": "tool-registry" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -68137,30 +74553,9 @@ { "kind": "object", "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, { "name": "kind", - "type": 105, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 105, + "type": 41, "optional": false } ], @@ -68186,7 +74581,7 @@ "properties": [ { "name": "kind", - "type": 41, + "type": 43, "optional": false } ], @@ -68197,12 +74592,12 @@ "properties": [ { "name": "content", - "type": 6, + "type": 3, "optional": false }, { "name": "id", - "type": 10, + "type": 6, "optional": false }, { @@ -68212,7 +74607,7 @@ }, { "name": "source", - "type": 38, + "type": 36, "optional": false, "compatibility": { "version": 1, @@ -68221,6 +74616,7 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ + "team-relay", "tmux-context" ] } @@ -68233,12 +74629,12 @@ "properties": [ { "name": "content", - "type": 6, + "type": 3, "optional": false }, { "name": "id", - "type": 10, + "type": 6, "optional": false }, { @@ -68263,12 +74659,12 @@ "properties": [ { "name": "content", - "type": 6, + "type": 3, "optional": false }, { "name": "id", - "type": 10, + "type": 6, "optional": false }, { @@ -68287,31 +74683,11 @@ { "kind": "literal", "value": "system" - }, - { - "kind": "object", - "properties": [ - { - "name": "model", - "type": 10, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - } - ], - "indices": [] } ] }, - "names": [ - "packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData" - ], - "sources": [ - "packages/session/session-title-llm/src/index.ts:34" - ] + "names": [], + "sources": [] }, { "digest": "9d80129e13edfb6feb03ed327e6085c6ef60b97ad074244b2f5fd4667424a6a4", @@ -68511,6 +74887,56 @@ "names": [], "sources": [] }, + { + "digest": "a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 1, + "optional": false + }, + { + "name": "kind", + "type": 2, + "optional": false + }, + { + "name": "senderName", + "type": 3, + "optional": false + }, + { + "name": "senderSessionId", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "primitive", + "type": "string" + } + ] + }, + "names": [], + "sources": [ + "packages/experimental/agent-team/src/types.ts:151" + ] + }, { "digest": "a0a2e5c42e1c929445ecd1cd70f49be6b66441894ec72c08e8ae332821d4a3cb", "schema": { @@ -69515,7 +75941,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:232" + "packages/experimental/agent-team/src/types.ts:241" ] }, { @@ -71559,7 +77985,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:230" + "packages/experimental/agent-team/src/types.ts:239" ] }, { @@ -73691,6 +80117,2408 @@ "names": [], "sources": [] }, + { + "digest": "bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "union", + "types": [ + 1, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 21, + 23, + 25, + 27, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 55, + 57, + 60, + 61, + 62, + 64, + 65, + 66, + 67, + 69, + 70, + 71, + 72, + 73, + 75, + 77, + 78, + 80, + 81, + 82, + 83, + 93, + 95, + 96, + 98, + 101, + 105, + 107, + 115, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 133, + 135, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "revision", + "type": 54, + "optional": false + }, + { + "name": "round", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "messageId", + "type": 52, + "optional": false + }, + { + "name": "senderId", + "type": 52, + "optional": false + }, + { + "name": "senderName", + "type": 52, + "optional": false + }, + { + "name": "teamId", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "model", + "type": 52, + "optional": false + }, + { + "name": "provider", + "type": 52, + "optional": false + }, + { + "name": "replayState", + "type": 59, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 68, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 74, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 76, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 84, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 52, + "optional": true + }, + { + "name": "changes", + "type": 85, + "optional": false + }, + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 92, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "array", + "element": 86 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 87, + "optional": false + }, + { + "name": "digest", + "type": 52, + "optional": true + }, + { + "name": "path", + "type": 52, + "optional": false + }, + { + "name": "scope", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 88, + 89, + 90 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 94, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 52, + "optional": true + }, + { + "name": "kind", + "type": 76, + "optional": false + }, + { + "name": "rpcId", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 52, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 52, + "optional": false + }, + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 100, + "optional": false + }, + { + "name": "provider", + "type": 52, + "optional": false + }, + { + "name": "ruleId", + "type": 52, + "optional": false + }, + { + "name": "source", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 102, + "optional": false + }, + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + }, + { + "name": "update", + "type": 84, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 103 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 52, + "optional": false + }, + { + "name": "name", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 106, + "optional": false + }, + { + "name": "name", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "references", + "type": 109, + "optional": false + }, + { + "name": "version", + "type": 114, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 110 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 54, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 111, + "optional": false + }, + { + "name": "compacted", + "type": 113, + "optional": false + }, + { + "name": "inputIndex", + "type": 54, + "optional": false + }, + { + "name": "label", + "type": 52, + "optional": false + }, + { + "name": "omittedBytes", + "type": 54, + "optional": false + }, + { + "name": "omittedMessages", + "type": 54, + "optional": false + }, + { + "name": "originalMessages", + "type": 54, + "optional": false + }, + { + "name": "retainedMessages", + "type": 54, + "optional": false + }, + { + "name": "sessionId", + "type": 52, + "optional": false + }, + { + "name": "truncated", + "type": 113, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 54, + 112 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 118 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 52, + "optional": false + }, + { + "name": "text", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 15, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 116, + "optional": false + }, + { + "name": "kind", + "type": 17, + "optional": false + }, + { + "name": "sections", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 132, + "optional": false + }, + { + "name": "senderName", + "type": 52, + "optional": false + }, + { + "name": "senderSessionId", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 134, + "optional": false + }, + { + "name": "senderSessionId", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 19, + "optional": false + }, + { + "name": "kind", + "type": 136, + "optional": false + }, + { + "name": "senderSessionId", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 15, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 99, + "optional": false + }, + { + "name": "kind", + "type": 17, + "optional": false + }, + { + "name": "summary", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#MessageSource" + ], + "sources": [ + "packages/llm/llm/src/message.ts:136" + ] + }, { "digest": "bcf0caf62d964b2fcf5404bd5c909cfa9a21c3f3c96e6b7e36d9e33565223825", "schema": { @@ -74380,6 +83208,20 @@ "names": [], "sources": [] }, + { + "digest": "c91852e53038618e7869f3e436acdb3f319c4f31b516c71a4b816e7387e3df2f", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "literal", + "value": "team-relay" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "c99e20441bf15341e9db54385e558e5c03d21dff2eb1ac08ccbf47c2d8747954", "schema": { @@ -74999,64 +83841,163 @@ "sources": [] }, { - "digest": "d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621", + "digest": "d28765f87d6b6ab408e0b2f3e7e297791b004b806d8e302c49903ebae815feb2", "schema": { "root": 0, "nodes": [ + { + "kind": "literal", + "value": "one-shot" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 29, + "optional": true + }, + { + "name": "seq", + "type": 2, + "optional": false + }, + { + "name": "time", + "type": 2, + "optional": false + }, + { + "name": "type", + "type": 207, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "maxTokens", + "type": 2, + "optional": false + }, + { + "name": "messageSeqs", + "type": 3, + "optional": false + }, + { + "name": "messages", + "type": 4, + "optional": false + }, + { + "name": "route", + "type": 206, + "optional": false + }, + { + "name": "system", + "type": 10, + "optional": false + }, + { + "name": "titleProvider", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, { "kind": "array", - "element": 1 + "element": 2 + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 37, + 201, + 202, + 204 + ] }, { "kind": "object", "properties": [ { "name": "content", - "type": 2, + "type": 7, "optional": false }, { "name": "id", - "type": 5, + "type": 10, "optional": false }, + { + "name": "isError", + "type": 34, + "optional": true + }, { "name": "role", - "type": 30, + "type": 35, "optional": false }, { "name": "source", - "type": 31, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } + "type": 36, + "optional": false + }, + { + "name": "toolCallId", + "type": 10, + "optional": false } ], "indices": [] }, { "kind": "array", - "element": 3 + "element": 8 }, { "kind": "union", "types": [ - 4, - 7, 9, 12, 14, - 16, - 27 + 17, + 19, + 21, + 31 ] }, { @@ -75064,12 +84005,12 @@ "properties": [ { "name": "text", - "type": 5, + "type": 10, "optional": false }, { "name": "type", - "type": 6, + "type": 11, "optional": false } ], @@ -75088,12 +84029,12 @@ "properties": [ { "name": "text", - "type": 5, + "type": 10, "optional": false }, { "name": "type", - "type": 8, + "type": 13, "optional": false } ], @@ -75108,17 +84049,17 @@ "properties": [ { "name": "tool", - "type": 10, + "type": 15, "optional": true }, { "name": "toolName", - "type": 5, + "type": 10, "optional": false }, { "name": "type", - "type": 11, + "type": 16, "optional": false } ], @@ -75137,12 +84078,12 @@ "properties": [ { "name": "toolName", - "type": 5, + "type": 10, "optional": false }, { "name": "type", - "type": 13, + "type": 18, "optional": false } ], @@ -75157,22 +84098,22 @@ "properties": [ { "name": "arguments", - "type": 5, + "type": 10, "optional": false }, { "name": "id", - "type": 5, + "type": 10, "optional": false }, { "name": "name", - "type": 5, + "type": 10, "optional": false }, { "name": "type", - "type": 15, + "type": 20, "optional": false } ], @@ -75187,17 +84128,17 @@ "properties": [ { "name": "attachment", - "type": 17, + "type": 22, "optional": false }, { "name": "offloaded", - "type": 25, + "type": 29, "optional": true }, { "name": "type", - "type": 26, + "type": 30, "optional": false } ], @@ -75208,55 +84149,55 @@ "properties": [ { "name": "attachmentId", - "type": 5, + "type": 10, "optional": false }, { "name": "bytes", - "type": 18, + "type": 2, "optional": false }, { "name": "height", - "type": 18, + "type": 2, "optional": false }, { "name": "mediaType", - "type": 19, + "type": 23, "optional": false }, { "name": "name", - "type": 5, + "type": 10, "optional": true }, { "name": "originalDimensions", - "type": 24, + "type": 28, "optional": true }, { "name": "width", - "type": 18, + "type": 2, "optional": false } ], "indices": [] }, - { - "kind": "primitive", - "type": "number" - }, { "kind": "union", "types": [ - 20, - 21, - 22, - 23 + 24, + 25, + 26, + 27 ] }, + { + "kind": "literal", + "value": "image/gif" + }, { "kind": "literal", "value": "image/jpeg" @@ -75269,21 +84210,17 @@ "kind": "literal", "value": "image/webp" }, - { - "kind": "literal", - "value": "image/gif" - }, { "kind": "object", "properties": [ { "name": "height", - "type": 18, + "type": 2, "optional": false }, { "name": "width", - "type": 18, + "type": 2, "optional": false } ], @@ -75302,12 +84239,12 @@ "properties": [ { "name": "attachment", - "type": 28, + "type": 32, "optional": false }, { "name": "type", - "type": 29, + "type": 33, "optional": false } ], @@ -75318,17 +84255,17 @@ "properties": [ { "name": "attachmentId", - "type": 5, + "type": 10, "optional": false }, { "name": "bytes", - "type": 18, + "type": 2, "optional": false }, { "name": "name", - "type": 5, + "type": 10, "optional": false } ], @@ -75338,96 +84275,155 @@ "kind": "literal", "value": "file" }, + { + "kind": "primitive", + "type": "boolean" + }, { "kind": "literal", - "value": "user" + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 38, + "optional": false + }, + { + "name": "source", + "type": 39, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer" }, { "kind": "union", "types": [ - 32, - 35, - 38, + 36, 40, - 42, - 44, - 46, - 48, - 50, - 52, - 54, - 56, - 58, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, 60, - 61, - 63, + 62, 64, - 65, 66, - 67, 68, - 69, 70, - 71, 72, - 73, - 74, - 75, - 77, - 78, - 79, - 80, 81, 82, - 83, 84, - 85, 86, - 87, 88, - 89, - 91, - 92, 93, - 94, 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, 103, - 105, 107, + 109, 110, 111, 112, 113, + 114, 115, 116, - 117, 118, + 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, + 129, 130, 131, 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, 140, + 141, 142, 143, + 144, 145, + 146, 147, + 148, + 149, + 150, 151, + 152, 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, 161, + 162, + 163, + 164, 165, 166, 167, @@ -75441,19 +84437,22 @@ 175, 176, 177, + 178, 179, 181, - 182, 183, - 184, - 185, 186, 187, 188, - 189, 190, 191, - 192 + 192, + 194, + 195, + 196, + 197, + 199, + 200 ] }, { @@ -75461,17 +84460,22 @@ "properties": [ { "name": "form", - "type": 33, + "type": 41, "optional": false }, { "name": "kind", - "type": 34, + "type": 42, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, "optional": false }, { "name": "summary", - "type": 5, + "type": 10, "optional": false } ], @@ -75483,183 +84487,14 @@ }, { "kind": "literal", - "value": "hooks-claude-code" + "value": "subagent-settled" }, { "kind": "object", "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, { "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 53, + "type": 44, "optional": false } ], @@ -75672,14 +84507,9 @@ { "kind": "object", "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, { "name": "kind", - "type": 55, + "type": 46, "optional": false } ], @@ -75693,13 +84523,38 @@ "kind": "object", "properties": [ { - "name": "form", - "type": 36, + "name": "kind", + "type": 48, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ { "name": "kind", - "type": 57, + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, "optional": false } ], @@ -75713,13 +84568,23 @@ "kind": "object", "properties": [ { - "name": "form", - "type": 36, + "name": "kind", + "type": 54, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ { "name": "kind", - "type": 59, + "type": 56, "optional": false } ], @@ -75734,240 +84599,17 @@ "properties": [ { "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, + "type": 58, "optional": false }, { "name": "kind", "type": 59, "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false }, { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 37, + "name": "senderSessionId", + "type": 10, "optional": false } ], @@ -75978,48 +84620,264 @@ "value": "relay" }, { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] + "kind": "literal", + "value": "agent-message" }, { "kind": "object", "properties": [ { "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", "type": 41, "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false } ], "indices": [] }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, { "kind": "object", "properties": [ { "name": "form", - "type": 76, + "type": 41, "optional": false }, { "name": "kind", - "type": 43, + "type": 63, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 29, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 10, + "optional": true + }, + { + "name": "changes", + "type": 73, + "optional": false + }, + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 80, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 74 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 75, + "optional": false + }, + { + "name": "digest", + "type": 10, + "optional": true + }, + { + "name": "path", + "type": 10, + "optional": false + }, + { + "name": "scope", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 76, + 77, + 78 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 10, + "optional": true + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "rpcId", + "type": 10, "optional": false } ], @@ -76029,157 +84887,138 @@ "kind": "object", "properties": [ { - "name": "form", - "type": 76, + "name": "compactionId", + "type": 10, "optional": false }, { "name": "kind", - "type": 45, + "type": 83, "optional": false + }, + { + "name": "sourceCommandId", + "type": 10, + "optional": true } ], "indices": [] }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, { "kind": "object", "properties": [ { "name": "form", - "type": 76, + "type": 41, "optional": false }, { "name": "kind", - "type": 47, + "type": 85, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], "indices": [] }, + { + "kind": "literal", + "value": "schedule" + }, { "kind": "object", "properties": [ + { + "name": "deliveryId", + "type": 10, + "optional": false + }, { "name": "form", - "type": 76, + "type": 41, "optional": false }, { "name": "kind", - "type": 49, + "type": 87, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + }, + { + "name": "ruleId", + "type": 10, + "optional": false + }, + { + "name": "source", + "type": 10, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], "indices": [] }, { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] + "kind": "literal", + "value": "webhook" }, { "kind": "object", "properties": [ + { + "name": "entries", + "type": 89, + "optional": false + }, { "name": "form", - "type": 76, + "type": 91, "optional": false }, { "name": "kind", - "type": 53, + "type": 92, "optional": false + }, + { + "name": "update", + "type": 29, + "optional": true } ], "indices": [] }, { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] + "kind": "array", + "element": 90 }, { "kind": "object", "properties": [ { - "name": "form", - "type": 76, + "name": "description", + "type": 10, "optional": false }, { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 37, + "name": "name", + "type": 10, "optional": false } ], @@ -76189,17 +85028,189 @@ "kind": "literal", "value": "catalog" }, + { + "kind": "literal", + "value": "skill-catalog" + }, { "kind": "object", "properties": [ { "name": "form", - "type": 90, + "type": 79, "optional": false }, { "name": "kind", - "type": 39, + "type": 94, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + }, + { + "name": "references", + "type": 98, + "optional": false + }, + { + "name": "version", + "type": 102, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 99 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 2, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 100, + "optional": false + }, + { + "name": "compacted", + "type": 34, + "optional": false + }, + { + "name": "inputIndex", + "type": 2, + "optional": false + }, + { + "name": "label", + "type": 10, + "optional": false + }, + { + "name": "omittedBytes", + "type": 2, + "optional": false + }, + { + "name": "omittedMessages", + "type": 2, + "optional": false + }, + { + "name": "originalMessages", + "type": 2, + "optional": false + }, + { + "name": "retainedMessages", + "type": 2, + "optional": false + }, + { + "name": "sessionId", + "type": 10, + "optional": false + }, + { + "name": "truncated", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 2, + 101 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 106 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 10, + "optional": false + }, + { + "name": "text", + "type": 10, "optional": false } ], @@ -76210,28 +85221,42 @@ "properties": [ { "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", "type": 41, "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false } ], "indices": [] }, + { + "kind": "literal", + "value": "time-context" + }, { "kind": "object", "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 43, + "type": 63, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -76242,12 +85267,17 @@ "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 45, + "type": 65, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -76258,12 +85288,17 @@ "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 47, + "type": 67, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -76274,12 +85309,17 @@ "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 49, + "type": 69, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -76290,12 +85330,17 @@ "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 51, + "type": 71, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -76306,12 +85351,17 @@ "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 53, + "type": 85, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -76322,12 +85372,17 @@ "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 55, + "type": 108, + "optional": false + }, + { + "name": "sections", + "type": 105, "optional": false } ], @@ -76338,12 +85393,42 @@ "properties": [ { "name": "form", - "type": 90, + "type": 104, "optional": false }, { "name": "kind", - "type": 57, + "type": 117, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -76354,12 +85439,17 @@ "properties": [ { "name": "form", - "type": 90, + "type": 41, "optional": false }, { "name": "kind", - "type": 59, + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -76370,12 +85460,975 @@ "properties": [ { "name": "form", - "type": 90, + "type": 41, "optional": false }, { "name": "kind", - "type": 34, + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 79, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 104, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 65, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 67, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 91, + "optional": false + }, + { + "name": "kind", + "type": 56, "optional": false } ], @@ -76386,22 +86439,22 @@ "properties": [ { "name": "goalId", - "type": 5, + "type": 10, "optional": false }, { "name": "kind", - "type": 104, + "type": 180, "optional": false }, { "name": "revision", - "type": 18, + "type": 2, "optional": false }, { "name": "round", - "type": 18, + "type": 2, "optional": false } ], @@ -76416,27 +86469,27 @@ "properties": [ { "name": "kind", - "type": 106, + "type": 182, "optional": false }, { "name": "messageId", - "type": 5, + "type": 10, "optional": false }, { "name": "senderId", - "type": 5, + "type": 10, "optional": false }, { "name": "senderName", - "type": 5, + "type": 10, "optional": false }, { "name": "teamId", - "type": 5, + "type": 10, "optional": false } ], @@ -76451,22 +86504,22 @@ "properties": [ { "name": "kind", - "type": 108, + "type": 184, "optional": false }, { "name": "model", - "type": 5, + "type": 10, "optional": false }, { "name": "provider", - "type": 5, + "type": 10, "optional": false }, { "name": "replayState", - "type": 109, + "type": 185, "optional": true } ], @@ -76485,7 +86538,7 @@ "properties": [ { "name": "kind", - "type": 37, + "type": 61, "optional": false } ], @@ -76496,7 +86549,48 @@ "properties": [ { "name": "kind", - "type": 39, + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 58, + "optional": false + }, + { + "name": "kind", + "type": 189, + "optional": false + }, + { + "name": "senderName", + "type": 10, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 65, "optional": false } ], @@ -76507,7 +86601,7 @@ "properties": [ { "name": "kind", - "type": 41, + "type": 67, "optional": false } ], @@ -76518,7 +86612,7 @@ "properties": [ { "name": "kind", - "type": 114, + "type": 193, "optional": false } ], @@ -76533,7 +86627,7 @@ "properties": [ { "name": "kind", - "type": 43, + "type": 69, "optional": false } ], @@ -76544,7 +86638,7 @@ "properties": [ { "name": "kind", - "type": 45, + "type": 71, "optional": false } ], @@ -76555,7 +86649,7 @@ "properties": [ { "name": "kind", - "type": 47, + "type": 85, "optional": false } ], @@ -76566,7 +86660,7 @@ "properties": [ { "name": "kind", - "type": 119, + "type": 198, "optional": false } ], @@ -76581,7 +86675,7 @@ "properties": [ { "name": "kind", - "type": 49, + "type": 108, "optional": false } ], @@ -76592,7 +86686,7 @@ "properties": [ { "name": "kind", - "type": 51, + "type": 117, "optional": false } ], @@ -76602,545 +86696,35 @@ "kind": "object", "properties": [ { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 125, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 129, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 5, - "optional": true - }, - { - "name": "changes", - "type": 133, + "name": "content", + "type": 7, "optional": false }, { - "name": "form", - "type": 36, + "name": "id", + "type": 10, "optional": false }, { - "name": "kind", - "type": 139, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 134 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 135, - "optional": false - }, - { - "name": "digest", - "type": 5, - "optional": true - }, - { - "name": "path", - "type": 5, - "optional": false - }, - { - "name": "scope", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 136, - 137, - 138 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 141, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 5, - "optional": true - }, - { - "name": "kind", - "type": 30, - "optional": false - }, - { - "name": "rpcId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 144, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 5, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 5, - "optional": false - }, - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 146, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "ruleId", - "type": 5, + "name": "role", + "type": 50, "optional": false }, { "name": "source", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 148, - "optional": false - }, - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 149 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 36, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "references", - "type": 155, - "optional": false - }, - { - "name": "version", - "type": 160, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 156 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 18, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 157, - "optional": false - }, - { - "name": "compacted", - "type": 159, - "optional": false - }, - { - "name": "inputIndex", - "type": 18, - "optional": false - }, - { - "name": "label", - "type": 5, - "optional": false - }, - { - "name": "omittedBytes", - "type": 18, - "optional": false - }, - { - "name": "omittedMessages", - "type": 18, - "optional": false - }, - { - "name": "originalMessages", - "type": 18, - "optional": false - }, - { - "name": "retainedMessages", - "type": 18, - "optional": false - }, - { - "name": "sessionId", - "type": 5, - "optional": false - }, - { - "name": "truncated", - "type": 159, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 18, - 158 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 164 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } } ], "indices": [] @@ -77149,254 +86733,23 @@ "kind": "object", "properties": [ { - "name": "form", - "type": 162, + "name": "content", + "type": 7, "optional": false }, { - "name": "kind", - "type": 41, + "name": "id", + "type": 10, "optional": false }, { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, + "name": "role", + "type": 203, "optional": false }, { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 178, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, + "name": "source", + "type": 183, "optional": false } ], @@ -77404,24 +86757,29 @@ }, { "kind": "literal", - "value": "subagent-settled" + "value": "assistant" }, { "kind": "object", "properties": [ { - "name": "form", - "type": 76, + "name": "content", + "type": 7, "optional": false }, { - "name": "kind", - "type": 180, + "name": "id", + "type": 10, "optional": false }, { - "name": "senderSessionId", - "type": 5, + "name": "role", + "type": 205, + "optional": false + }, + { + "name": "source", + "type": 197, "optional": false } ], @@ -77429,273 +86787,27 @@ }, { "kind": "literal", - "value": "agent-message" + "value": "system" }, { "kind": "object", "properties": [ { - "name": "form", - "type": 33, + "name": "model", + "type": 10, "optional": false }, { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 5, + "name": "provider", + "type": 10, "optional": false } ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "d28765f87d6b6ab408e0b2f3e7e297791b004b806d8e302c49903ebae815feb2", - "schema": { - "root": 0, - "nodes": [ { "kind": "literal", - "value": "one-shot" + "value": "session/title-llm-request" } ] }, @@ -78614,2748 +87726,6 @@ "names": [], "sources": [] }, - { - "digest": "dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "inserted", - "type": 1, - "optional": false - }, - { - "name": "outcome", - "type": 194, - "optional": true - }, - { - "name": "removedCount", - "type": 19, - "optional": true - }, - { - "name": "start", - "type": 19, - "optional": false - }, - { - "name": "target", - "type": 195, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "role", - "type": 31, - "optional": false - }, - { - "name": "source", - "type": 32, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 4 - }, - { - "kind": "union", - "types": [ - 5, - 8, - 10, - 13, - 15, - 17, - 28 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 11, - "optional": true - }, - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 14, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 18, - "optional": false - }, - { - "name": "offloaded", - "type": 26, - "optional": true - }, - { - "name": "type", - "type": 27, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 19, - "optional": false - }, - { - "name": "height", - "type": 19, - "optional": false - }, - { - "name": "mediaType", - "type": 20, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": true - }, - { - "name": "originalDimensions", - "type": 25, - "optional": true - }, - { - "name": "width", - "type": 19, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 21, - 22, - 23, - 24 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 19, - "optional": false - }, - { - "name": "width", - "type": 19, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 29, - "optional": false - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 33, - 36, - 38, - 40, - 42, - 45, - 47, - 49, - 51, - 53, - 55, - 57, - 59, - 61, - 62, - 63, - 64, - 65, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 109, - 111, - 114, - 115, - 116, - 117, - 118, - 120, - 121, - 122, - 123, - 125, - 126, - 127, - 128, - 129, - 131, - 132, - 133, - 135, - 136, - 144, - 146, - 147, - 149, - 151, - 155, - 157, - 165, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 183, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "revision", - "type": 19, - "optional": false - }, - { - "name": "round", - "type": 19, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "messageId", - "type": 6, - "optional": false - }, - { - "name": "senderId", - "type": 6, - "optional": false - }, - { - "name": "senderName", - "type": 6, - "optional": false - }, - { - "name": "teamId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 112, - "optional": false - }, - { - "name": "model", - "type": 6, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "replayState", - "type": 113, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 119, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 124, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 31, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 134, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 26, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 6, - "optional": true - }, - { - "name": "changes", - "type": 137, - "optional": false - }, - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 143, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 138 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 139, - "optional": false - }, - { - "name": "digest", - "type": 6, - "optional": true - }, - { - "name": "path", - "type": 6, - "optional": false - }, - { - "name": "scope", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 140, - 141, - 142 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 145, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 6, - "optional": true - }, - { - "name": "kind", - "type": 31, - "optional": false - }, - { - "name": "rpcId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 148, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 6, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 6, - "optional": false - }, - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "ruleId", - "type": 6, - "optional": false - }, - { - "name": "source", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 152, - "optional": false - }, - { - "name": "form", - "type": 94, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "update", - "type": 26, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 153 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 43, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 66, - "optional": false - }, - { - "name": "kind", - "type": 158, - "optional": false - }, - { - "name": "references", - "type": 159, - "optional": false - }, - { - "name": "version", - "type": 164, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 160 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 19, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 161, - "optional": false - }, - { - "name": "compacted", - "type": 163, - "optional": false - }, - { - "name": "inputIndex", - "type": 19, - "optional": false - }, - { - "name": "label", - "type": 6, - "optional": false - }, - { - "name": "omittedBytes", - "type": 19, - "optional": false - }, - { - "name": "omittedMessages", - "type": 19, - "optional": false - }, - { - "name": "originalMessages", - "type": 19, - "optional": false - }, - { - "name": "retainedMessages", - "type": 19, - "optional": false - }, - { - "name": "sessionId", - "type": 6, - "optional": false - }, - { - "name": "truncated", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 19, - 162 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 168 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "text", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 166, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 182, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "canceled" - }, - { - "kind": "union", - "types": [ - 196, - 197 - ] - }, - { - "kind": "literal", - "value": "next-step" - }, - { - "kind": "literal", - "value": "next-turn" - } - ] - }, - "names": [], - "sources": [ - "packages/core/agent/src/types.ts:96" - ] - }, { "digest": "dd2780e7e07684332f7a9ab047237798d260e7eaffb1321cb38eca695d184c3d", "schema": { @@ -81786,6 +88156,2728 @@ "names": [], "sources": [] }, + { + "digest": "e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "array", + "element": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 30, + "optional": false + }, + { + "name": "source", + "type": 31, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "union", + "types": [ + 4, + 7, + 9, + 12, + 14, + 16, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 10, + "optional": true + }, + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 5, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 17, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 32, + 35, + 37, + 39, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 61, + 62, + 63, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 107, + 109, + 112, + 113, + 114, + 115, + 117, + 118, + 119, + 120, + 122, + 123, + 124, + 125, + 126, + 128, + 129, + 131, + 132, + 133, + 134, + 142, + 144, + 145, + 147, + 149, + 153, + 155, + 163, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 181, + 183, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 106, + "optional": false + }, + { + "name": "revision", + "type": 18, + "optional": false + }, + { + "name": "round", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "messageId", + "type": 5, + "optional": false + }, + { + "name": "senderId", + "type": 5, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "teamId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "model", + "type": 5, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "replayState", + "type": 111, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 116, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 121, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 127, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 5, + "optional": true + }, + { + "name": "changes", + "type": 135, + "optional": false + }, + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 136 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 137, + "optional": false + }, + { + "name": "digest", + "type": 5, + "optional": true + }, + { + "name": "path", + "type": 5, + "optional": false + }, + { + "name": "scope", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 138, + 139, + 140 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 143, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 5, + "optional": true + }, + { + "name": "kind", + "type": 30, + "optional": false + }, + { + "name": "rpcId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 146, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 5, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 5, + "optional": false + }, + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 148, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "ruleId", + "type": 5, + "optional": false + }, + { + "name": "source", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 150, + "optional": false + }, + { + "name": "form", + "type": 92, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 151 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 64, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "references", + "type": 157, + "optional": false + }, + { + "name": "version", + "type": 162, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 158 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 18, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 159, + "optional": false + }, + { + "name": "compacted", + "type": 161, + "optional": false + }, + { + "name": "inputIndex", + "type": 18, + "optional": false + }, + { + "name": "label", + "type": 5, + "optional": false + }, + { + "name": "omittedBytes", + "type": 18, + "optional": false + }, + { + "name": "omittedMessages", + "type": 18, + "optional": false + }, + { + "name": "originalMessages", + "type": 18, + "optional": false + }, + { + "name": "retainedMessages", + "type": 18, + "optional": false + }, + { + "name": "sessionId", + "type": 5, + "optional": false + }, + { + "name": "truncated", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 18, + 160 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 166 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 164, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 180, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 182, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 78, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602", "schema": { @@ -83509,7 +92601,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:234" + "packages/experimental/agent-team/src/types.ts:243" ] }, { @@ -83932,2803 +93024,6 @@ "packages/schedule/schedule/src/types.ts:223" ] }, - { - "digest": "eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 26, - "optional": true - }, - { - "name": "seq", - "type": 2, - "optional": false - }, - { - "name": "sourceEventSeqs", - "type": 195, - "optional": true - }, - { - "name": "surfaceOp", - "type": 196, - "optional": false - }, - { - "name": "time", - "type": 2, - "optional": false - }, - { - "name": "type", - "type": 199, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "headerSeq", - "type": 2, - "optional": true - }, - { - "name": "message", - "type": 3, - "optional": false - }, - { - "name": "step", - "type": 2, - "optional": false - }, - { - "name": "turn", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "role", - "type": 31, - "optional": false - }, - { - "name": "source", - "type": 32, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 9, - 11, - 14, - 16, - 18, - 28 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 12, - "optional": true - }, - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 19, - "optional": false - }, - { - "name": "offloaded", - "type": 26, - "optional": true - }, - { - "name": "type", - "type": 27, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "mediaType", - "type": 20, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": true - }, - { - "name": "originalDimensions", - "type": 25, - "optional": true - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 21, - 22, - 23, - 24 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 29, - "optional": false - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 33, - 36, - 38, - 40, - 42, - 44, - 46, - 49, - 51, - 53, - 55, - 57, - 59, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 111, - 113, - 116, - 117, - 118, - 119, - 120, - 122, - 123, - 124, - 125, - 127, - 128, - 129, - 130, - 131, - 133, - 135, - 136, - 138, - 139, - 147, - 149, - 150, - 152, - 154, - 158, - 160, - 168, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 186, - 188, - 189, - 190, - 191, - 192, - 193, - 194 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "revision", - "type": 2, - "optional": false - }, - { - "name": "round", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 112, - "optional": false - }, - { - "name": "messageId", - "type": 7, - "optional": false - }, - { - "name": "senderId", - "type": 7, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "teamId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 114, - "optional": false - }, - { - "name": "model", - "type": 7, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "replayState", - "type": 115, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 121, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 126, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 132, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 134, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 137, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 26, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 7, - "optional": true - }, - { - "name": "changes", - "type": 140, - "optional": false - }, - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 146, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 141 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 142, - "optional": false - }, - { - "name": "digest", - "type": 7, - "optional": true - }, - { - "name": "path", - "type": 7, - "optional": false - }, - { - "name": "scope", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 143, - 144, - 145 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 148, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 7, - "optional": true - }, - { - "name": "kind", - "type": 134, - "optional": false - }, - { - "name": "rpcId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 151, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 7, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 7, - "optional": false - }, - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 153, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "ruleId", - "type": 7, - "optional": false - }, - { - "name": "source", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 155, - "optional": false - }, - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 157, - "optional": false - }, - { - "name": "update", - "type": 26, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 156 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 47, - "optional": false - }, - { - "name": "kind", - "type": 159, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 161, - "optional": false - }, - { - "name": "references", - "type": 162, - "optional": false - }, - { - "name": "version", - "type": 167, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 163 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 2, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 164, - "optional": false - }, - { - "name": "compacted", - "type": 166, - "optional": false - }, - { - "name": "inputIndex", - "type": 2, - "optional": false - }, - { - "name": "label", - "type": 7, - "optional": false - }, - { - "name": "omittedBytes", - "type": 2, - "optional": false - }, - { - "name": "omittedMessages", - "type": 2, - "optional": false - }, - { - "name": "originalMessages", - "type": 2, - "optional": false - }, - { - "name": "retainedMessages", - "type": 2, - "optional": false - }, - { - "name": "sessionId", - "type": 7, - "optional": false - }, - { - "name": "truncated", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 2, - 165 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 171 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "text", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 169, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 185, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 187, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "union", - "types": [ - 197, - 198 - ] - }, - { - "kind": "literal", - "value": "append" - }, - { - "kind": "object", - "properties": [ - { - "name": "endSeq", - "type": 2, - "optional": false - }, - { - "name": "op", - "type": 144, - "optional": false - }, - { - "name": "startSeq", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer/message" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "eefbea819caeeea91ccb02dfafc16c68dd7f961cf9c1b2be25a2084509cf5c5a", "schema": { @@ -87416,6 +93711,2780 @@ "packages/llm/llm/src/types.ts:396" ] }, + { + "digest": "f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "inserted", + "type": 1, + "optional": false + }, + { + "name": "outcome", + "type": 196, + "optional": true + }, + { + "name": "removedCount", + "type": 19, + "optional": true + }, + { + "name": "start", + "type": 19, + "optional": false + }, + { + "name": "target", + "type": 197, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 31, + "optional": false + }, + { + "name": "source", + "type": 32, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "team-relay", + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 4 + }, + { + "kind": "union", + "types": [ + 5, + 8, + 10, + 13, + 15, + 17, + 28 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 11, + "optional": true + }, + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 18, + "optional": false + }, + { + "name": "offloaded", + "type": 26, + "optional": true + }, + { + "name": "type", + "type": 27, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 19, + "optional": false + }, + { + "name": "height", + "type": 19, + "optional": false + }, + { + "name": "mediaType", + "type": 20, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": true + }, + { + "name": "originalDimensions", + "type": 25, + "optional": true + }, + { + "name": "width", + "type": 19, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 21, + 22, + 23, + 24 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 19, + "optional": false + }, + { + "name": "width", + "type": 19, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 29, + "optional": false + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 33, + 36, + 38, + 40, + 42, + 44, + 46, + 49, + 51, + 53, + 55, + 57, + 59, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 111, + 113, + 116, + 117, + 118, + 119, + 120, + 122, + 123, + 124, + 125, + 127, + 128, + 129, + 130, + 131, + 133, + 134, + 135, + 137, + 138, + 146, + 148, + 149, + 151, + 153, + 157, + 159, + 167, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 185, + 187, + 189, + 190, + 191, + 192, + 193, + 194, + 195 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "revision", + "type": 19, + "optional": false + }, + { + "name": "round", + "type": 19, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 112, + "optional": false + }, + { + "name": "messageId", + "type": 6, + "optional": false + }, + { + "name": "senderId", + "type": 6, + "optional": false + }, + { + "name": "senderName", + "type": 6, + "optional": false + }, + { + "name": "teamId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 114, + "optional": false + }, + { + "name": "model", + "type": 6, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "replayState", + "type": 115, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 121, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 126, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 132, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 136, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 26, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 6, + "optional": true + }, + { + "name": "changes", + "type": 139, + "optional": false + }, + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 145, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 140 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 141, + "optional": false + }, + { + "name": "digest", + "type": 6, + "optional": true + }, + { + "name": "path", + "type": 6, + "optional": false + }, + { + "name": "scope", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 142, + 143, + 144 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 147, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 6, + "optional": true + }, + { + "name": "kind", + "type": 31, + "optional": false + }, + { + "name": "rpcId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 6, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 6, + "optional": false + }, + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "ruleId", + "type": 6, + "optional": false + }, + { + "name": "source", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 154, + "optional": false + }, + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "update", + "type": 26, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 155 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 158, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 160, + "optional": false + }, + { + "name": "references", + "type": 161, + "optional": false + }, + { + "name": "version", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 162 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 19, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 163, + "optional": false + }, + { + "name": "compacted", + "type": 165, + "optional": false + }, + { + "name": "inputIndex", + "type": 19, + "optional": false + }, + { + "name": "label", + "type": 6, + "optional": false + }, + { + "name": "omittedBytes", + "type": 19, + "optional": false + }, + { + "name": "omittedMessages", + "type": 19, + "optional": false + }, + { + "name": "originalMessages", + "type": 19, + "optional": false + }, + { + "name": "retainedMessages", + "type": 19, + "optional": false + }, + { + "name": "sessionId", + "type": 6, + "optional": false + }, + { + "name": "truncated", + "type": 165, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 19, + 164 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 170 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "text", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 168, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderName", + "type": 6, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 186, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "canceled" + }, + { + "kind": "union", + "types": [ + 198, + 199 + ] + }, + { + "kind": "literal", + "value": "next-step" + }, + { + "kind": "literal", + "value": "next-turn" + } + ] + }, + "names": [], + "sources": [ + "packages/core/agent/src/types.ts:96" + ] + }, { "digest": "f4a66f654996c093aae700ea4c434ff2ee3569fea9c0e5813ccf6afdccabd163", "schema": { @@ -87581,2700 +96650,6 @@ "packages/context/session-reference/src/types.ts:13" ] }, - { - "digest": "f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 1, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "role", - "type": 29, - "optional": false - }, - { - "name": "source", - "type": 30, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "union", - "types": [ - 3, - 6, - 8, - 11, - 13, - 15, - 26 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 9, - "optional": true - }, - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 14, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 16, - "optional": false - }, - { - "name": "offloaded", - "type": 24, - "optional": true - }, - { - "name": "type", - "type": 25, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "mediaType", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": true - }, - { - "name": "originalDimensions", - "type": 23, - "optional": true - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 19, - 20, - 21, - 22 - ] - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 27, - "optional": false - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 31, - 34, - 37, - 39, - 41, - 43, - 45, - 47, - 49, - 51, - 53, - 55, - 57, - 59, - 60, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 104, - 106, - 109, - 110, - 111, - 112, - 113, - 115, - 116, - 117, - 118, - 120, - 121, - 122, - 123, - 124, - 126, - 128, - 130, - 131, - 132, - 140, - 142, - 143, - 145, - 147, - 151, - 153, - 161, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 179, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 103, - "optional": false - }, - { - "name": "revision", - "type": 17, - "optional": false - }, - { - "name": "round", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 105, - "optional": false - }, - { - "name": "messageId", - "type": 4, - "optional": false - }, - { - "name": "senderId", - "type": 4, - "optional": false - }, - { - "name": "senderName", - "type": 4, - "optional": false - }, - { - "name": "teamId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 107, - "optional": false - }, - { - "name": "model", - "type": 4, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "replayState", - "type": 108, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 114, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 119, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 125, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 127, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 129, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 24, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 4, - "optional": true - }, - { - "name": "changes", - "type": 133, - "optional": false - }, - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 139, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 134 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 135, - "optional": false - }, - { - "name": "digest", - "type": 4, - "optional": true - }, - { - "name": "path", - "type": 4, - "optional": false - }, - { - "name": "scope", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 136, - 137, - 138 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 141, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 4, - "optional": true - }, - { - "name": "kind", - "type": 127, - "optional": false - }, - { - "name": "rpcId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 144, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 4, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 4, - "optional": false - }, - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 146, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "ruleId", - "type": 4, - "optional": false - }, - { - "name": "source", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 148, - "optional": false - }, - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "update", - "type": 24, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 149 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 61, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "references", - "type": 155, - "optional": false - }, - { - "name": "version", - "type": 160, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 156 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 17, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 157, - "optional": false - }, - { - "name": "compacted", - "type": 159, - "optional": false - }, - { - "name": "inputIndex", - "type": 17, - "optional": false - }, - { - "name": "label", - "type": 4, - "optional": false - }, - { - "name": "omittedBytes", - "type": 17, - "optional": false - }, - { - "name": "omittedMessages", - "type": 17, - "optional": false - }, - { - "name": "originalMessages", - "type": 17, - "optional": false - }, - { - "name": "retainedMessages", - "type": 17, - "optional": false - }, - { - "name": "sessionId", - "type": 4, - "optional": false - }, - { - "name": "truncated", - "type": 159, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 17, - 158 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 164 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "text", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 178, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 180, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#DeveloperMessage" - ], - "sources": [ - "packages/llm/llm/src/message.ts:157" - ] - }, { "digest": "f6329fb30c7ea8013e8975ca5e78284fb7685cc6bd620e8aa4e9a99bc81d45eb", "schema": { @@ -90921,2933 +97296,6 @@ "packages/llm/llm/src/message.ts:167" ] }, - { - "digest": "fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 29, - "optional": true - }, - { - "name": "seq", - "type": 2, - "optional": false - }, - { - "name": "time", - "type": 2, - "optional": false - }, - { - "name": "type", - "type": 205, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "maxTokens", - "type": 2, - "optional": false - }, - { - "name": "messageSeqs", - "type": 3, - "optional": false - }, - { - "name": "messages", - "type": 4, - "optional": false - }, - { - "name": "route", - "type": 204, - "optional": false - }, - { - "name": "system", - "type": 10, - "optional": false - }, - { - "name": "titleProvider", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 37, - 199, - 200, - 202 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "isError", - "type": 34, - "optional": true - }, - { - "name": "role", - "type": 35, - "optional": false - }, - { - "name": "source", - "type": 36, - "optional": false - }, - { - "name": "toolCallId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 8 - }, - { - "kind": "union", - "types": [ - 9, - 12, - 14, - 17, - 19, - 21, - 31 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 15, - "optional": true - }, - { - "name": "toolName", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 10, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 22, - "optional": false - }, - { - "name": "offloaded", - "type": 29, - "optional": true - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 10, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "mediaType", - "type": 23, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": true - }, - { - "name": "originalDimensions", - "type": 28, - "optional": true - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 24, - 25, - 26, - 27 - ] - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 32, - "optional": false - }, - { - "name": "type", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 10, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 38, - "optional": false - }, - { - "name": "source", - "type": 39, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 36, - 40, - 43, - 45, - 47, - 49, - 51, - 53, - 55, - 57, - 59, - 61, - 70, - 72, - 74, - 76, - 78, - 80, - 85, - 87, - 95, - 100, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 142, - 143, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 174, - 175, - 177, - 180, - 181, - 182, - 183, - 184, - 186, - 187, - 188, - 189, - 190, - 192, - 193, - 194, - 195, - 196, - 198 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 29, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 10, - "optional": true - }, - { - "name": "changes", - "type": 62, - "optional": false - }, - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 63 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 64, - "optional": false - }, - { - "name": "digest", - "type": 10, - "optional": true - }, - { - "name": "path", - "type": 10, - "optional": false - }, - { - "name": "scope", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 65, - 66, - 67 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 10, - "optional": true - }, - { - "name": "kind", - "type": 71, - "optional": false - }, - { - "name": "rpcId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 73, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 10, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 10, - "optional": false - }, - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 77, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - }, - { - "name": "ruleId", - "type": 10, - "optional": false - }, - { - "name": "source", - "type": 10, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 81, - "optional": false - }, - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 84, - "optional": false - }, - { - "name": "update", - "type": 29, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 82 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 10, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 86, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 89, - "optional": false - }, - { - "name": "references", - "type": 90, - "optional": false - }, - { - "name": "version", - "type": 94, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 91 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 2, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 92, - "optional": false - }, - { - "name": "compacted", - "type": 34, - "optional": false - }, - { - "name": "inputIndex", - "type": 2, - "optional": false - }, - { - "name": "label", - "type": 10, - "optional": false - }, - { - "name": "omittedBytes", - "type": 2, - "optional": false - }, - { - "name": "omittedMessages", - "type": 2, - "optional": false - }, - { - "name": "originalMessages", - "type": 2, - "optional": false - }, - { - "name": "retainedMessages", - "type": 2, - "optional": false - }, - { - "name": "sessionId", - "type": 10, - "optional": false - }, - { - "name": "truncated", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 2, - 93 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "array", - "element": 99 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 10, - "optional": false - }, - { - "name": "text", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 98, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 141, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 88, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 144, - "optional": false - }, - { - "name": "kind", - "type": 162, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 83, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 173, - "optional": false - }, - { - "name": "revision", - "type": 2, - "optional": false - }, - { - "name": "round", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 176, - "optional": false - }, - { - "name": "messageId", - "type": 10, - "optional": false - }, - { - "name": "senderId", - "type": 10, - "optional": false - }, - { - "name": "senderName", - "type": 10, - "optional": false - }, - { - "name": "teamId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 178, - "optional": false - }, - { - "name": "model", - "type": 10, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - }, - { - "name": "replayState", - "type": 179, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 101, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 185, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 101, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 191, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 197, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 71, - "optional": false - }, - { - "name": "source", - "type": 39, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 201, - "optional": false - }, - { - "name": "source", - "type": 177, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "assistant" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 203, - "optional": false - }, - { - "name": "source", - "type": 190, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system" - }, - { - "kind": "object", - "properties": [ - { - "name": "model", - "type": 10, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session/title-llm-request" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd", "schema": { @@ -94014,2842 +97462,6 @@ "packages/skill/tool-skill/src/index.ts:34" ] }, - { - "digest": "fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "array", - "element": 1 - }, - { - "kind": "union", - "types": [ - 2, - 34, - 196, - 197, - 199 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "isError", - "type": 31, - "optional": true - }, - { - "name": "role", - "type": 32, - "optional": false - }, - { - "name": "source", - "type": 33, - "optional": false - }, - { - "name": "toolCallId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 4 - }, - { - "kind": "union", - "types": [ - 5, - 8, - 19, - 22, - 24, - 26, - 29 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 9, - "optional": false - }, - { - "name": "offloaded", - "type": 17, - "optional": true - }, - { - "name": "type", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 10, - "optional": false - }, - { - "name": "height", - "type": 10, - "optional": false - }, - { - "name": "mediaType", - "type": 11, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": true - }, - { - "name": "originalDimensions", - "type": 16, - "optional": true - }, - { - "name": "width", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 12, - 13, - 14, - 15 - ] - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 10, - "optional": false - }, - { - "name": "width", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 20, - "optional": false - }, - { - "name": "type", - "type": 21, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 10, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 23, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 25, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 27, - "optional": true - }, - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 32, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "role", - "type": 35, - "optional": false - }, - { - "name": "source", - "type": 36, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 33, - 37, - 40, - 42, - 44, - 46, - 48, - 56, - 58, - 60, - 62, - 65, - 70, - 72, - 80, - 84, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 94, - 96, - 98, - 100, - 101, - 103, - 105, - 107, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 166, - 167, - 169, - 172, - 173, - 174, - 175, - 176, - 178, - 179, - 180, - 181, - 182, - 184, - 185, - 186, - 187, - 188, - 190, - 191, - 192, - 193, - 195 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 17, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 6, - "optional": true - }, - { - "name": "changes", - "type": 49, - "optional": false - }, - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 50 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 51, - "optional": false - }, - { - "name": "digest", - "type": 6, - "optional": true - }, - { - "name": "path", - "type": 6, - "optional": false - }, - { - "name": "scope", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 52, - 53, - 54 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 6, - "optional": true - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "rpcId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 6, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 6, - "optional": false - }, - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 64, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "ruleId", - "type": 6, - "optional": false - }, - { - "name": "source", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 66, - "optional": false - }, - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - }, - { - "name": "update", - "type": 17, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 67 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 74, - "optional": false - }, - { - "name": "references", - "type": 75, - "optional": false - }, - { - "name": "version", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 76 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 10, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 77, - "optional": false - }, - { - "name": "compacted", - "type": 31, - "optional": false - }, - { - "name": "inputIndex", - "type": 10, - "optional": false - }, - { - "name": "label", - "type": 6, - "optional": false - }, - { - "name": "omittedBytes", - "type": 10, - "optional": false - }, - { - "name": "omittedMessages", - "type": 10, - "optional": false - }, - { - "name": "originalMessages", - "type": 10, - "optional": false - }, - { - "name": "retainedMessages", - "type": 10, - "optional": false - }, - { - "name": "sessionId", - "type": 6, - "optional": false - }, - { - "name": "truncated", - "type": 31, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 10, - 78 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 83 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "text", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 99, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 81, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - }, - { - "name": "sections", - "type": 82, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 106, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 109, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 99, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 99, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 73, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 99, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 108, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 99, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 165, - "optional": false - }, - { - "name": "revision", - "type": 10, - "optional": false - }, - { - "name": "round", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 99, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 168, - "optional": false - }, - { - "name": "messageId", - "type": 6, - "optional": false - }, - { - "name": "senderId", - "type": 6, - "optional": false - }, - { - "name": "senderName", - "type": 6, - "optional": false - }, - { - "name": "teamId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 170, - "optional": false - }, - { - "name": "model", - "type": 6, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "replayState", - "type": 171, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 177, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 183, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 95, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 99, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 189, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 102, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 194, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 104, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "role", - "type": 57, - "optional": false - }, - { - "name": "source", - "type": 36, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "role", - "type": 198, - "optional": false - }, - { - "name": "source", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "assistant" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "role", - "type": 200, - "optional": false - }, - { - "name": "source", - "type": 182, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "fcf427290c6213c2a7feb57492d832ce324f5b9737a759f424dab69e6bd101a0", "schema": { diff --git a/docs/subsystems/agent-team.i18n.yaml b/docs/subsystems/agent-team.i18n.yaml index a4c599562f..554be14048 100644 --- a/docs/subsystems/agent-team.i18n.yaml +++ b/docs/subsystems/agent-team.i18n.yaml @@ -9,8 +9,8 @@ en: df72d9409b89714d zh: 982934dd18864ca2 /agent-teams/messages-and-historical-mailbox: - en: 2aed7dd369f47747 - zh: 4f080e50c584ad37 + en: 31add73bb0520fd4 + zh: 18c92eaadb3607fd /agent-teams/shared-task-dag: en: 4515005d07e4d2a3 zh: 26811b31f69009d6 diff --git a/docs/subsystems/agent-team.md b/docs/subsystems/agent-team.md index c5c6a0f775..20b33da9e0 100644 --- a/docs/subsystems/agent-team.md +++ b/docs/subsystems/agent-team.md @@ -25,7 +25,7 @@ Every member starts in `provisioning` and reaches exactly one terminal roster ph ## Messages and historical mailbox -New sends return inbox acceptance or reject. The target stores the existing `agent-message` source with the real sender Session id and a sender-name content prefix. Team has no new-message outbox or resend deduplication. The [package contract](../../packages/experimental/agent-team/README.md#understand-the-implementation) defines persistence. The following mailbox types remain readable so historical Lead logs still replay; Team does not deliver their pending records. +New sends return inbox acceptance or reject. The target stores Team-owned `team-relay` source with the real sender Session id and member name. The content prefix also names the sender for the model. Team has no new-message outbox or resend deduplication. The [package contract](../../packages/experimental/agent-team/README.md#understand-the-implementation) defines persistence. The following mailbox types remain readable so historical Lead logs still replay; Team does not deliver their pending records. ```ts type-equiv /** One peer message recorded by the historical Team mailbox. */ diff --git a/docs/subsystems/agent-team.zh.md b/docs/subsystems/agent-team.zh.md index 2e3c0b040e..f129b417b2 100644 --- a/docs/subsystems/agent-team.zh.md +++ b/docs/subsystems/agent-team.zh.md @@ -25,7 +25,7 @@ interface TeamMemberSnapshot { ## 消息与历史 mailbox -新发送返回 inbox 接收结果或拒绝。目标保存现有 `agent-message` source,包含真实发送者 Session id 和发送者名称正文前缀。Team 不为新消息提供 outbox 或重发去重。[包约定](../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义持久化。以下 mailbox 类型继续可读,以便历史 Lead 日志仍能回放;Team 不投递其中的 pending 记录。 +新发送返回 inbox 接收结果或拒绝。目标保存 Team 所属的 `team-relay` source,包含真实发送者 Session id 和成员名称。正文前缀也向模型标明发送者。Team 不为新消息提供 outbox 或重发去重。[包约定](../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义持久化。以下 mailbox 类型继续可读,以便历史 Lead 日志仍能回放;Team 不投递其中的 pending 记录。 ```ts type-equiv /** One peer message recorded by the historical Team mailbox. */ diff --git a/packages/client/ui-chat/src/client/chat/turn-trigger.ts b/packages/client/ui-chat/src/client/chat/turn-trigger.ts index d4912668ea..95c271193d 100644 --- a/packages/client/ui-chat/src/client/chat/turn-trigger.ts +++ b/packages/client/ui-chat/src/client/chat/turn-trigger.ts @@ -37,6 +37,7 @@ export function turnTriggerDetails(node: ContextMessageNode): { icon = 'agent' break case 'team-message': + case 'team-relay': title = 'message.trigger.team' icon = 'team' break diff --git a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx index c45672dac5..bc4dd84334 100644 --- a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx +++ b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx @@ -31,6 +31,7 @@ describe('Turn trigger notices', () => { [{ kind: 'goal' }, 'goal', 'Continuing goal'], [{ kind: 'agent-message' }, 'agent', 'Task message received'], [{ kind: 'team-message' }, 'team', 'Team message received'], + [{ kind: 'team-relay' }, 'team', 'Team message received'], [{ kind: 'subagent-settled' }, 'subagent', 'Subtask status updated'], [{ kind: 'webhook', provider: 'github' }, 'github', 'GitHub event received'], [{ kind: 'webhook', provider: 'custom' }, 'webhook', 'External event received'], @@ -47,18 +48,24 @@ describe('Turn trigger notices', () => { }) it.each([ - [en, 'Task message received'], - [zh, '收到任务消息'], - ])('presents Team relays as Agent messages while retaining the sender name', (locale, title) => { - const node = trigger({ kind: 'agent-message', form: 'relay', senderSessionId: 'sender' }) + [en, 'Team message received'], + [zh, '收到团队消息'], + ])('presents Team relays from their recorded source while retaining the sender name', (locale, title) => { + const node = trigger({ kind: 'team-relay', form: 'relay', senderSessionId: 'sender', senderName: 'reviewer-2' }) node.data.content = [{ type: 'text', text: 'Team message from reviewer-2:' }, { type: 'text', text: 'Ready.' }] - expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.agent', icon: 'agent' }) + expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.team', icon: 'team' }) const view = render() expect(view.getByRole('button').textContent).toContain(title) fireEvent.click(view.getByRole('button')) expect(view.container.querySelector('[data-context-text]')?.textContent).toContain('Team message from reviewer-2:') }) + it('does not classify Agent messages by Team-looking content', () => { + const node = trigger({ kind: 'agent-message', form: 'relay', senderSessionId: 'sender' }) + node.data.content = [{ type: 'text', text: 'Team message from reviewer-2:' }] + expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.agent', icon: 'agent' }) + }) + it.each([ { locale: en, title: 'Automation task' }, { locale: zh, title: '自动化任务' }, diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index 880ee75bf4..05bf066d15 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -51,8 +51,8 @@ en: 2389048c1a494ed3 zh: 7e72acd6b83ea248 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/direct-messages-and-historical-compatibility: - en: 67cc4e92adda8baa - zh: 5abdb2415e414b9d + en: 634f799f560f58c3 + zh: beec22b4100ac53c /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/shared-task-board: en: 2dc37ba97a8a7178 zh: 96bd24033030e19d diff --git a/packages/experimental/agent-team/README.md b/packages/experimental/agent-team/README.md index 9e0777b747..3953817291 100644 --- a/packages/experimental/agent-team/README.md +++ b/packages/experimental/agent-team/README.md @@ -128,7 +128,7 @@ Every ordinary runtime root is the implicit Lead of a Team whose `TeamId` equals ### Direct messages and historical compatibility -`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering; delivery order belongs to the target inbox. The client presents these messages with the ordinary Agent title and icon; the message body retains the sender name. +`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores Team-owned `team-relay` source with the actual `senderSessionId` and `senderName`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering; delivery order belongs to the target inbox. The client selects the Team title and icon from `source.kind`; the message body retains the sender name. Lead delivery calls `Agent.steer()` directly. Teammate delivery uses the continuation owner's host-only Steer path, which preserves the Team sender source while authorizing the Lead-to-child edge and cold-resuming inactive targets. Sibling messages never impersonate the Lead through the public adjacent-Agent messaging operation. diff --git a/packages/experimental/agent-team/README.zh.md b/packages/experimental/agent-team/README.zh.md index e4f7a46381..d8ba61f0fb 100644 --- a/packages/experimental/agent-team/README.zh.md +++ b/packages/experimental/agent-team/README.zh.md @@ -128,7 +128,7 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 直接消息与历史兼容 -`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序;投递顺序由目标 inbox 管理。客户端使用普通 Agent 消息标题和图标展示这些消息;正文保留发送者名称。 +`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存 Team 所属的 `team-relay` source,包含真实 `senderSessionId` 和 `senderName`;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序;投递顺序由目标 inbox 管理。客户端依据 `source.kind` 选择 Team 标题和图标;正文保留发送者名称。 投递给 Lead 时直接调用 `Agent.steer()`。投递给 teammate 时使用 continuation owner 的 host-only Steer 路径;该路径会保留 Team 发送者 source,同时授权 Lead-to-child edge 并冷恢复 inactive target。sibling 消息绝不会通过公开的相邻 Agent 消息操作伪装成 Lead。 diff --git a/packages/experimental/agent-team/src/index.ts b/packages/experimental/agent-team/src/index.ts index 2d35933776..3dd49c05c2 100644 --- a/packages/experimental/agent-team/src/index.ts +++ b/packages/experimental/agent-team/src/index.ts @@ -234,7 +234,12 @@ export class TeamService extends Service { if (Buffer.byteLength(JSON.stringify(content), 'utf8') > this.config.maxMessageBytes) { throw new TeamError(`team message exceeds ${this.config.maxMessageBytes} bytes`, 'TEAM_MESSAGE_TOO_LARGE') } - const source = { kind: 'agent-message' as const, form: 'relay' as const, senderSessionId: caller.id } + const source = { + kind: 'team-relay' as const, + form: 'relay' as const, + senderSessionId: caller.id, + senderName: membership.name, + } let messageId if (target.id === root.id) { const input = createUserMessage({ content, source }) diff --git a/packages/experimental/agent-team/src/types.ts b/packages/experimental/agent-team/src/types.ts index 465f6bbf12..73cfca058e 100644 --- a/packages/experimental/agent-team/src/types.ts +++ b/packages/experimental/agent-team/src/types.ts @@ -145,6 +145,15 @@ export interface TeamMessageSource { declare module '@deepseek-ai/dsh-llm' { interface MessageSourceMap { + /** Sender attribution survives reading without the Team producer. + * @persistenceAttribution + */ + 'team-relay': { + readonly kind: 'team-relay' + readonly form: 'relay' + readonly senderSessionId: SessionId + readonly senderName: string + } 'team-message': TeamMessageSource } } diff --git a/packages/experimental/agent-team/tests/persistence.spec.ts b/packages/experimental/agent-team/tests/persistence.spec.ts index c72ff4c437..e75cb4e8b0 100644 --- a/packages/experimental/agent-team/tests/persistence.spec.ts +++ b/packages/experimental/agent-team/tests/persistence.spec.ts @@ -106,12 +106,13 @@ async function stack( await ctx.plugin(AgentLoop, { agents: [] }) await ctx.plugin(SubagentService) await ctx.plugin(SubagentSpawn, { providerName: 'spawn' }) - await ctx.plugin(TeamService) + const teamFiber = await ctx.plugin(TeamService) const adapter = new MockAdapter(script) ctx.llm.registerAdapter(['mock'], adapter) return { ctx, adapter, + teamFiber, dispose: async () => { await disposeContext(ctx) }, } } @@ -159,7 +160,7 @@ async function persistedChild( for (const backend of backends) { describe(`${backend.name} Agent Teams recovery`, () => { - it('restores a directly accepted target inbox from its flushed crash prefix without Team intent', async () => { + it('restores a directly accepted target inbox and sender attribution without the Team producer', async () => { const liveRoot = mkdtempSync(join(tmpdir(), 'dsh-team-live-')) const crashRoot = mkdtempSync(join(tmpdir(), 'dsh-team-crash-')) roots.push(liveRoot, crashRoot) @@ -180,13 +181,14 @@ for (const backend of backends) { expect(lead.session.snapshotEvents().some(event => event.type.startsWith('team/message/'))).toBe(false) await first.dispose() const second = await stack(backend, crashRoot, [textResponse('recovered')]) + await second.teamFiber.dispose() const writer = await second.ctx.sessionPersistence.create(prefix.header) try { await writer.append(prefix.events) } finally { await writer.close() } const resumed = await second.ctx.agents.resume({ resumeSessionId: child.id, agentOptions: { provider: 'mock', model: 'mock' }, }) expect(resumed.agent.inbox.nextStep.find(message => message.id === receipt.messageId)).toMatchObject({ - source: { kind: 'agent-message', form: 'relay', senderSessionId: lead.id }, + source: { kind: 'team-relay', form: 'relay', senderSessionId: lead.id, senderName: 'lead' }, content: [{ type: 'text', text: 'Team message from lead:' }, { type: 'text', text: 'accepted before crash' }], }) await resumed.dispose() diff --git a/packages/experimental/agent-team/tests/team.spec.ts b/packages/experimental/agent-team/tests/team.spec.ts index 937fd7fc8c..915a3619df 100644 --- a/packages/experimental/agent-team/tests/team.spec.ts +++ b/packages/experimental/agent-team/tests/team.spec.ts @@ -890,7 +890,7 @@ describe('Team direct messages and waiting', () => { expect(Object.keys(result)).toEqual(['messageId']) expect(result.messageId).toBeTypeOf('string') expect(agent.inbox.nextStep.find(message => message.id === result.messageId)).toMatchObject({ - source: { kind: 'agent-message', form: 'relay', senderSessionId: alpha.id }, + source: { kind: 'team-relay', form: 'relay', senderSessionId: alpha.id, senderName: 'alpha' }, content: [{ type: 'text', text: 'Team message from alpha:' }, { type: 'text', text: 'update' }], }) } @@ -913,7 +913,7 @@ describe('Team direct messages and waiting', () => { for (const [id, receipt] of [[lead.id, leadResult], [beta.member.id, peerResult]] as const) { const messages = (await storedEvents(ctx, id)).flatMap(event => event.type === 'user/message' ? [event.data] : []) expect(messages.find(message => message.id === receipt.messageId)).toMatchObject({ - source: { kind: 'agent-message', senderSessionId: alpha.id }, + source: { kind: 'team-relay', senderSessionId: alpha.id, senderName: 'alpha' }, }) } }) diff --git a/snapshots/session/team-direct-inbox/session.1.v4.jsonl b/snapshots/session/team-direct-inbox/session.1.v4.jsonl index 7316d89461..f682118c87 100644 --- a/snapshots/session/team-direct-inbox/session.1.v4.jsonl +++ b/snapshots/session/team-direct-inbox/session.1.v4.jsonl @@ -15,7 +15,7 @@ {"type":"session/title","data":{"title":" You are teammate \"revi","messageSeqs":[9],"source":{"kind":"fallback"}}} {"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:16}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429365968,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790429365968,"index":0,"dt":[],"id":"direct-1","name":"bash","args":["{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"]},{"type":"chunk","time":1790429365968,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}}},{"type":"chunk","time":1790429365968,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429365969,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}} -{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Team message from lead:"},{"type":"text","text":"Review the direct inbox delivery."}],"source":{"kind":"agent-message","form":"relay","senderSessionId":"{{session:1}}"},"role":"user","id":"{{message:17}}"}]}} +{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Team message from lead:"},{"type":"text","text":"Review the direct inbox delivery."}],"source":{"kind":"team-relay","form":"relay","senderSessionId":"{{session:1}}","senderName":"lead"},"role":"user","id":"{{message:17}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-1"},"toolCallId":"direct-1","content":[{"type":"text","text":"Error: tool call aborted"}],"isError":true,"id":"{{message:18}}"},"error":{"name":"AbortError","code":"ABORTED"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"aborted","reason":{"kind":"parent"}}}} From 43dd2bdeacfa5149f0a8cbffa2f784ceb47188f5 Mon Sep 17 00:00:00 2001 From: Dudu-0223 Date: Sun, 27 Sep 2026 17:12:27 +0800 Subject: [PATCH 012/155] revert: keep existing Agent attribution for Team messages --- .../2026-09-26-team-direct-inbox.i18n.yaml | 4 +- .../2026-09-26-team-direct-inbox.md | 2 +- .../2026-09-26-team-direct-inbox.zh.md | 2 +- apps/cli/tests/agent-team-headless.e2e.ts | 2 +- .../headless/tests/headless.expected.e2e.ts | 4 +- docs/config-catalog.md | 2 +- docs/config-catalog.zh.md | 2 +- docs/persistence-catalog.i18n.yaml | 146 +- docs/persistence-catalog.md | 130 +- docs/persistence-catalog.zh.md | 130 +- .../2026-09-27-team-relay-source.i18n.yaml | 28 - .../2026-09-27-team-relay-source.md | 60 - .../2026-09-27-team-relay-source.schema.json | 11409 --- .../2026-09-27-team-relay-source.zh.md | 60 - .../historical-formats/README.i18n.yaml | 4 +- .../historical-formats/README.md | 2 +- .../historical-formats/README.zh.md | 2 +- docs/persistence-schema.json | 67618 ++++++++-------- docs/subsystems/agent-team.i18n.yaml | 4 +- docs/subsystems/agent-team.md | 2 +- docs/subsystems/agent-team.zh.md | 2 +- .../ui-chat/src/client/chat/turn-trigger.ts | 1 - .../tests/turn-trigger.client.spec.tsx | 17 +- .../experimental/agent-team/README.i18n.yaml | 4 +- packages/experimental/agent-team/README.md | 2 +- packages/experimental/agent-team/README.zh.md | 2 +- packages/experimental/agent-team/src/index.ts | 7 +- packages/experimental/agent-team/src/types.ts | 9 - .../agent-team/tests/persistence.spec.ts | 8 +- .../agent-team/tests/team.spec.ts | 4 +- .../team-direct-inbox/session.1.v4.jsonl | 2 +- 31 files changed, 33712 insertions(+), 45959 deletions(-) delete mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml delete mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.md delete mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.schema.json delete mode 100644 docs/persistence-changes/2026-09-27-team-relay-source.zh.md diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml index 6ef9c596f0..f830391e86 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.i18n.yaml @@ -9,8 +9,8 @@ en: 83296699f94c77d3 zh: e681a426bf0a703a /agent-note-team-messages-use-the-target-inbox/decision: - en: 2eaa9439ace9f36d - zh: 07d8da76d2dce484 + en: 8d5fed34f19c7302 + zh: 25417793d3797775 /agent-note-team-messages-use-the-target-inbox/alternatives-considered: en: e847556d8e9f1071 zh: bf1abe2f0e201eac diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md index 96ad92d639..58d18d0ecf 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.md @@ -10,7 +10,7 @@ A second Team outbox duplicates Agent inbox ownership with separate identities, ## Decision -New Team sends return the accepted inbox `MessageId` or throw. They use live Lead Steer or the host-only subagent Steer adapter, retaining the actual sender and member name through Team-owned `team-relay` source and the member name in content. Team attribution belongs to the Team source type; the delivery adapter accepts it through the existing `MessageSource` union. Acceptance follows ordinary Agent persistence; it neither confirms model processing nor adds a synchronous flush guarantee. Team does not retain unaccepted intent, retry it after restart, or deduplicate explicit resends. +New Team sends return the accepted inbox `MessageId` or throw. They use live Lead Steer or the host-only subagent Steer adapter, retaining the actual sender through the existing `agent-message` source and the member name in content. Acceptance follows ordinary Agent persistence; it neither confirms model processing nor adds a synchronous flush guarantee. Team does not retain unaccepted intent, retry it after restart, or deduplicate explicit resends. Historical mailbox records stay decodable and projected so existing Lead logs replay, but Team never delivers or acknowledges them. The package is experimental with no stability promise, and a second dispatch path with receipt inspection, per-target ordering, and its own disposal wait costs more than the undelivered old messages it would recover. This partially supersedes the mailbox decision in [Agent Teams](../feature/2026-08-05-agent-teams.md); roster and task decisions remain there. The [package reference](../../../../packages/experimental/agent-team/README.md#understand-the-implementation) owns the resulting limitation. diff --git a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md index 6fe5cc0d32..6928631c8f 100644 --- a/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md +++ b/.agents/notes/implemented/simplification/2026-09-26-team-direct-inbox.zh.md @@ -10,7 +10,7 @@ Status: implemented ## 决策 -新的 Team 发送返回获准 inbox 的 `MessageId` 或抛出错误。它们使用 live Lead Steer 或 host-only subagent Steer adapter,通过 Team 所属的 `team-relay` source 保留真实发送者和成员名称,并在正文中保留成员名称。Team 归属信息属于 Team source 类型;投递 adapter 通过现有 `MessageSource` 联合类型接受它。接收遵循普通 Agent 的持久化策略,既不确认模型已处理,也不增加同步 flush 保证。Team 不保留尚未接收的发送意图,不在重启后重试,也不对显式重发去重。 +新的 Team 发送返回获准 inbox 的 `MessageId` 或抛出错误。它们使用 live Lead Steer 或 host-only subagent Steer adapter,通过现有 `agent-message` source 保留真实发送者,并在正文中保留成员名称。接收遵循普通 Agent 的持久化策略,既不确认模型已处理,也不增加同步 flush 保证。Team 不保留尚未接收的发送意图,不在重启后重试,也不对显式重发去重。 历史 mailbox 记录继续可解码并参与投影,使现有 Lead 日志能够回放,但 Team 不再投递或确认它们。该包是实验性的,没有稳定性承诺;另设一条带回执检查、同目标排序和独立 dispose 等待的投递路径,其代价高于它能补回的未投递旧消息。这部分取代了 [Agent Teams](../feature/2026-08-05-agent-teams.zh.md) 的 mailbox 决策;roster 和任务决策仍由原记录负责。[包参考](../../../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义由此产生的限制。 diff --git a/apps/cli/tests/agent-team-headless.e2e.ts b/apps/cli/tests/agent-team-headless.e2e.ts index 45a9addf41..7fcd0d7d2d 100644 --- a/apps/cli/tests/agent-team-headless.e2e.ts +++ b/apps/cli/tests/agent-team-headless.e2e.ts @@ -106,7 +106,7 @@ describe('dsh run with Agent Teams enabled', () => { expect(eventTypes).not.toContain('team/message/queued') expect(eventTypes).not.toContain('team/message/delivered') const peerMessages = parsed.flatMap(log => log.filter(record => record.type === 'user/message' - && (record.data as { source: { kind: string } }).source.kind === 'team-relay')) + && (record.data as { source: { kind: string } }).source.kind === 'agent-message')) expect(peerMessages).toHaveLength(2) const taskEvents = root!.filter(record => record.type === 'team/task') expect(taskEvents.filter((record) => { diff --git a/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts b/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts index 2fbcbb341f..97123c304d 100644 --- a/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts +++ b/apps/cli/tests/profiles/headless/tests/headless.expected.e2e.ts @@ -788,14 +788,14 @@ describe('headless stream-json snapshots', () => { if (typeof message !== 'object' || message === null || Array.isArray(message)) return false const source = (message as JsonObject).source return typeof source === 'object' && source !== null && !Array.isArray(source) - && (source as JsonObject).kind === 'team-relay' + && (source as JsonObject).kind === 'agent-message' }) }) const steeredMessageIndex = implementerRows.findIndex((row) => { if (row.type !== 'user/message') return false const source = (row.data as JsonObject).source return typeof source === 'object' && source !== null && !Array.isArray(source) - && (source as JsonObject).kind === 'team-relay' + && (source as JsonObject).kind === 'agent-message' }) const openTurnStart = implementerRows.findLastIndex((row, index) => ( index < steeredMessageIndex && row.type === 'turn/start' diff --git a/docs/config-catalog.md b/docs/config-catalog.md index cd43edd41a..739204e312 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -827,7 +827,7 @@ export interface Config { ## `@deepseek-ai/dsh-experimental-agent-team` - `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` -- `source`: [`packages/experimental/agent-team/src/types.ts:162`](../packages/experimental/agent-team/src/types.ts) +- `source`: [`packages/experimental/agent-team/src/types.ts:153`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index 7b2eb0966a..6e0f2367fa 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -829,7 +829,7 @@ export interface Config { ## `@deepseek-ai/dsh-experimental-agent-team` - `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` -- `source`: [`packages/experimental/agent-team/src/types.ts:162`](../packages/experimental/agent-team/src/types.ts) +- `source`: [`packages/experimental/agent-team/src/types.ts:153`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index 22b1d2d102..8d98de3e35 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -9,8 +9,8 @@ en: e7c80d1de4d328b4 zh: d9f368c27fd9f998 /session-persistence-event-catalog/persistence-type-fingerprints: - en: 89c10f956f3255e0 - zh: 668abe049d156e47 + en: 0254fc43535dfaad + zh: 2f592cfae60e10ac /session-persistence-event-catalog/event-envelope: en: 7ebb1a2e0dd1f916 zh: 8946f415dda5c1b8 @@ -216,17 +216,17 @@ en: a640800a38b3c874 zh: a640800a38b3c874 /session-persistence-event-catalog/events/team/team-member-log-only: - en: 1b61ae72660c98bc - zh: 003fe48a37e0f7bb + en: a2fe5b8582ef5f46 + zh: 42bfffcde3f3d886 /session-persistence-event-catalog/events/team/team-message-delivered-log-only: - en: d9a59f5719145fb7 - zh: 8d831e4f6ea0dac3 + en: 4a716b14e33eab18 + zh: dcde26e4dc40b62e /session-persistence-event-catalog/events/team/team-message-queued-log-only: - en: d96801713a18fa80 - zh: cfe5bfc08994c00b + en: 05bf873244099da5 + zh: 8a0b62912087f4aa /session-persistence-event-catalog/events/team/team-task-log-only: - en: 3f16e581eaaf67d8 - zh: 964294fec32b5d52 + en: 5ffeb64225feda2a + zh: d58129e189a726fb /session-persistence-event-catalog/events/todo: en: 308d4bb4b6b96e35 zh: 308d4bb4b6b96e35 @@ -759,11 +759,8 @@ en: 1fa929a15e4a96ea zh: 1fa929a15e4a96ea /session-persistence-event-catalog/resolved-persistence-types/team-message: - en: ebf5638b515116e8 - zh: ebf5638b515116e8 -/session-persistence-event-catalog/resolved-persistence-types/team-relay: - en: 2381ca4055c1043e - zh: 2381ca4055c1043e + en: b2c69bdf83f09bdf + zh: b2c69bdf83f09bdf /session-persistence-event-catalog/resolved-persistence-types/team-member: en: 8cf0f09cbf885f71 zh: 8cf0f09cbf885f71 @@ -954,11 +951,11 @@ en: 586743dfeab78c55 zh: 26ccef4a02dd7a58 /session-persistence-event-catalog/resolved-persistence-types/deepseeksearchllmrequest: - en: b0eb3474dc8e3e5f - zh: 3bd51444c68073b3 + en: b3df6dce576b01a2 + zh: f9c67e338cc6e449 /session-persistence-event-catalog/resolved-persistence-types/developermessage: - en: c3bf99efbd57dcd0 - zh: 8258f69a1643b141 + en: 3df6e6aaeb92c0fa + zh: 29988ebcdd9e62e1 /session-persistence-event-catalog/resolved-persistence-types/epochheader: en: d31020fa1fda6fa4 zh: 77984c4bf09443fb @@ -1056,11 +1053,11 @@ en: 6dbe099c62f7c226 zh: 6fd788f63c038c91 /session-persistence-event-catalog/resolved-persistence-types/llmretrystartedeventdata: - en: 2559b0a407634187 - zh: a113f3168423b87b + en: 7854b9694cc84c3a + zh: 319ec2e2e6ffdaec /session-persistence-event-catalog/resolved-persistence-types/message: - en: c580203c6047c3d5 - zh: 522fc25123e36702 + en: 45a296c31664de87 + zh: 8f235285b2f985f9 /session-persistence-event-catalog/resolved-persistence-types/messagefeedbackdelete: en: c582953270d4ca44 zh: 966ccfe2e7660a2a @@ -1071,14 +1068,14 @@ en: f58575a1fc96df42 zh: 9f0c6ed9033e5c9d /session-persistence-event-catalog/resolved-persistence-types/messagefeedbackrating: - en: 63ef28c7210a20ff - zh: 14478a48bca9ae64 + en: 490a91f1da1fc870 + zh: 2f2b9e972e22d51f /session-persistence-event-catalog/resolved-persistence-types/messagesource: - en: 4dbdcf9ef21b3e2b - zh: deff28371eb277ef + en: 7d0eda01d2c3076f + zh: ce3dbfc1bd7fd176 /session-persistence-event-catalog/resolved-persistence-types/message~2: - en: 0b609fe9e561f4dc - zh: 53a3420b05172691 + en: 8e53b2a339808ffc + zh: d453e93e45f9e752 /session-persistence-event-catalog/resolved-persistence-types/modelmessagesource: en: 3b677f021d7dd4d3 zh: 2a875742b22879a2 @@ -1137,11 +1134,11 @@ en: 9a54c4478ad3b620 zh: 02c4c1fd7e252770 /session-persistence-event-catalog/resolved-persistence-types/sessiontitleeventdata: - en: 51d7e3f1b996e5d0 - zh: 5a955c48473db8c2 + en: 415ce281c096b4c3 + zh: 39c5bf9dfaa95579 /session-persistence-event-catalog/resolved-persistence-types/sessiontitlellmrequesteventdata: - en: 71c01199c777c527 - zh: 3e1120ba6e6f6212 + en: 0e539718e4bc8ed8 + zh: 060007f55759f065 /session-persistence-event-catalog/resolved-persistence-types/sessiontitlemodelidentity: en: 9531468264499498 zh: 9da23c0ad2776563 @@ -1248,14 +1245,14 @@ en: 544292eddeff5faa zh: 4e36e575a5030fb2 /session-persistence-event-catalog/resolved-persistence-types/turnendreason: - en: 4391ef607f1070aa - zh: f8674649511391de + en: 083f0fef130bb976 + zh: dafd261a95708bec /session-persistence-event-catalog/resolved-persistence-types/usermessage: - en: ee0568ac146e7dde - zh: 1bebe8ecc5f96361 + en: 88b294a9b0bdf0e4 + zh: 0597f465b9d45b27 /session-persistence-event-catalog/resolved-persistence-types/usermessage~2: - en: 37701fa982f8d5dd - zh: c725cf60b19f229e + en: 31aaab9c9f53ed9c + zh: c5cd866b3f2b27e0 /session-persistence-event-catalog/resolved-persistence-types/workflowagentoutcome: en: d0a3f9aab18c3de5 zh: 76ac69a835ca4e29 @@ -1425,11 +1422,11 @@ en: 51af619ed8532a43 zh: a5ad878c63d0e046 /session-persistence-event-catalog/resolved-persistence-types/header-reason-startsseries: - en: 6e33e5c0e18b6a0a - zh: e2a22c228e459bf5 + en: 62ca405eba4d2757 + zh: c6a8861533363ae9 /session-persistence-event-catalog/resolved-persistence-types/headerseq-message-step-turn: - en: f075afc903e3de53 - zh: 871457f173ae4fe3 + en: 76e7be9a80a4082c + zh: c06aaa42a8488aea /session-persistence-event-catalog/resolved-persistence-types/height-width: en: a5df50710083ac25 zh: aad3ccf6f6de70e4 @@ -1446,11 +1443,11 @@ en: 41f73c58a77dfa28 zh: af77f4aee3cb4a40 /session-persistence-event-catalog/resolved-persistence-types/inherited: - en: 316972892136b7f9 - zh: 3a9475a1aee20afa + en: f538b60f99becc0a + zh: 0c8efa059a1e6569 /session-persistence-event-catalog/resolved-persistence-types/inserted-outcome-removedcount-start: - en: 2c23937fee151ba8 - zh: e50db054ac113dfa + en: 3985827b3ead1d92 + zh: c535166ccae6c8a3 /session-persistence-event-catalog/resolved-persistence-types/interrupted-message-step-stream: en: f460572284c92755 zh: bae7561ce887b040 @@ -1665,11 +1662,8 @@ en: c99d8a67438771ff zh: 070f6160fc419fa5 /session-persistence-event-catalog/resolved-persistence-types/kind-stop: - en: a64980e04d797552 - zh: ee66b5a6aed7ffc4 -/session-persistence-event-catalog/resolved-persistence-types/kind-team-relay-form-relay: - en: 8a7c120f2a2156bb - zh: b963b594e27a7fdb + en: 09ce6f3196938ccf + zh: 1b8d5540f47fd3aa /session-persistence-event-catalog/resolved-persistence-types/kind-time-context: en: 5733addfc8b12a47 zh: aaf60d5396e30971 @@ -1791,17 +1785,17 @@ en: afedf4a31a67eb14 zh: 98d3bc882f2b61c3 /session-persistence-event-catalog/resolved-persistence-types/member-teamid-version: - en: c5d8c3bdd23b402b - zh: 02de0bba9445fd09 + en: 82b0989dad6bbfc0 + zh: 0789b63f1d59b2ed /session-persistence-event-catalog/resolved-persistence-types/message-step-turn: en: 7cc30865737643f2 zh: 512c6c81ed10a9b6 /session-persistence-event-catalog/resolved-persistence-types/message-teamid-version: - en: 01e98cdbb65399f3 - zh: 766c7a3691cddcfd + en: f778769acb264dd5 + zh: eba9b81d04e9f57b /session-persistence-event-catalog/resolved-persistence-types/messageid-targetid-teamid-version: - en: 9e04283bb1c229a8 - zh: ee2fc1587d8342b3 + en: 91a948ede28ebcb5 + zh: 8a2b0ac6bb68a09e /session-persistence-event-catalog/resolved-persistence-types/mode-source: en: 3028b222670ce5ad zh: cae4c9437e560d61 @@ -1833,8 +1827,8 @@ en: 5360af614fe753e3 zh: 96427c489cc71de6 /session-persistence-event-catalog/resolved-persistence-types/task-teamid-version: - en: bdab6f64ef7efe66 - zh: b2b681924df93077 + en: a2fcd46e54b14120 + zh: d9a6e0e50bbff9ad /session-persistence-event-catalog/resolved-persistence-types/todos: en: 06e6c1837e2b5d50 zh: 37cebfe3e41294ec @@ -1842,11 +1836,11 @@ en: a79b2ab16b9ed215 zh: 764cd1400ee8db63 /session-persistence-event-catalog/resolved-persistence-types/type-agent-preset-selected: - en: 7f83c82fb627a54a - zh: 8a42bd15c8cc671b + en: d59bb505610b862f + zh: e2637fbbb8365bdf /session-persistence-event-catalog/resolved-persistence-types/type-agent-inbox-spliced: - en: 9619813dfbf7bc17 - zh: 93110784e13f3d0b + en: 109d942de30d9227 + zh: 6c6fc06634ad7945 /session-persistence-event-catalog/resolved-persistence-types/type-approval-asked: en: 9c77f18b0dad22f0 zh: 8894cf2878fe90db @@ -1890,11 +1884,11 @@ en: ba73fb10b7e2ffc9 zh: 8d5c97e63e5f16da /session-persistence-event-catalog/resolved-persistence-types/type-deliverables-presented: - en: d58679c990e26669 - zh: 9476184de3c72c24 + en: 49de6f547778d916 + zh: ce2a1af1ae934f68 /session-persistence-event-catalog/resolved-persistence-types/type-developer-message: - en: b1d12846e8b42be7 - zh: ce14a0ce914da4c9 + en: 686d26ced9945d4b + zh: 535b9e92eb7535fb /session-persistence-event-catalog/resolved-persistence-types/type-feedback-message-delete: en: 204561e2311db97e zh: 77264396bd5e25c4 @@ -1959,11 +1953,11 @@ en: acf7e21e4d21ebff zh: fb83a853634d204a /session-persistence-event-catalog/resolved-persistence-types/type-session-title: - en: 8b663a9bed3d6d02 - zh: 6e94250a6765ff54 + en: ba2f901c9981835f + zh: ce0358c7d16b0beb /session-persistence-event-catalog/resolved-persistence-types/type-session-title-llm-request: - en: ab5f000b3356856b - zh: 178664249c06dd65 + en: 7515d391badb4d0a + zh: 9eb19def7a3ed752 /session-persistence-event-catalog/resolved-persistence-types/type-step-end: en: 7fc233c4a569dae2 zh: bc2b3fed4a397c00 @@ -2040,11 +2034,11 @@ en: 1b045de96172be4b zh: 8a15c6f35b576b37 /session-persistence-event-catalog/resolved-persistence-types/type-usage: - en: a52e1f433bb4d37e - zh: f4a9bc2875013f8e + en: a01e61480accb34b + zh: 6387a3cc7666aa7e /session-persistence-event-catalog/resolved-persistence-types/type-user-message: - en: 2e0b6943f08ce6b4 - zh: 8414f682acae08e0 + en: 58d3e616db84f840 + zh: 9aed64a03347caad /session-persistence-event-catalog/resolved-persistence-types/type-web-deepseek-search-llm-request: en: f109997e295af37d zh: b2dcfd599f73b61c diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index 4878739f69..812eaab008 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -21,7 +21,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) | | `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) | | `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) | -| `event:agent/inbox/spliced` | event | `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4) | +| `event:agent/inbox/spliced` | event | `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c) | | `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) | | `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) | | `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) | @@ -34,7 +34,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) | | `event:compaction/summary` | event | `e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602) | | `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) | -| `event:developer/message` | event | `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` | [`{ type: "developer/message" }`](#persistence-type-sha256-3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e) | +| `event:developer/message` | event | `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` | [`{ type: "developer/message" }`](#persistence-type-sha256-eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80) | | `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) | | `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) | | `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) | @@ -54,7 +54,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) | | `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) | | `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) | -| `event:session/title-llm-request` | event | `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7) | +| `event:session/title-llm-request` | event | `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d) | | `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) | | `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) | | `event:subagent/catalog` | event | `3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604) | @@ -76,7 +76,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:tool/result` | event | `7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397` | [`{ type: "tool/result" }`](#persistence-type-sha256-7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397) | | `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) | | `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) | -| `event:user/message` | event | `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` | [`{ type: "user/message" }`](#persistence-type-sha256-0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58) | +| `event:user/message` | event | `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` | [`{ type: "user/message" }`](#persistence-type-sha256-3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761) | | `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331) | | `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) | @@ -975,7 +975,7 @@ Source: [`packages/core/session/src/types.ts:330`](../packages/core/session/src/ Types: [TeamId](subsystems/agent-team.md) · [TeamMemberSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) @@ -993,7 +993,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:239`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamMessageId](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) @@ -1006,7 +1006,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:245`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamMessageSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) @@ -1019,7 +1019,7 @@ Source: [`packages/experimental/agent-team/src/types.ts:243`](../packages/experi Types: [TeamId](subsystems/agent-team.md) · [TeamTaskSnapshot](subsystems/agent-team.md) -Source: [`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) +Source: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) ### `todo/*` @@ -2539,14 +2539,6 @@ SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c` `"team-message"` - - -### `"team-relay"` - -SHA-256: `c91852e53038618e7869f3e436acdb3f319c4f31b516c71a4b816e7387e3df2f` - -`"team-relay"` - ### `"team/member"` @@ -3215,7 +3207,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web | `body` | required | [`{ max_tokens, messages, model, tools }`](#persistence-type-sha256-930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731) | | `endpoint` | required | `string` | - + @@ -3223,7 +3215,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web ### `DeveloperMessage` -SHA-256: `46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba` +SHA-256: `f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b` Sources: [`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message.ts) @@ -3232,11 +3224,11 @@ Sources: [`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message | `content` | required | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | required | `string` | | `role` | required | `"developer"` | -| `source` | required | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | +| `source` | required | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | Source compatibility: `source` — `session-source-attribution` v1; `session.developer-message.source`; `kind`; `preserve`. -Attribution-only additions: `team-relay`, `tmux-context`. +Attribution-only additions: `tmux-context`. @@ -3849,7 +3841,7 @@ Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/sr | `step` | required | `number` | | `turn` | required | `number` | - + @@ -3857,15 +3849,15 @@ Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/sr ### `Message` -SHA-256: `139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2` +SHA-256: `691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6` Sources: [`packages/llm/llm/src/message.ts:196`](../packages/llm/llm/src/message.ts) One of: - [`ToolResultMessage`](#persistence-type-sha256-4b259f7f8f0a44ad5e90b70a73553ced1df27012d126921d397ff403b6c86731) -- [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) -- [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) +- [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) +- [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) - [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be) - [`SystemMessage`](#persistence-type-sha256-09f3f8dc417f278257202714132f98ba7b52957d7b558c4a04456603890eb363) @@ -3942,7 +3934,7 @@ One of: - `"negative"` - `"positive"` - + @@ -3950,7 +3942,7 @@ One of: ### `MessageSource` -SHA-256: `bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624` +SHA-256: `40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945` Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message.ts) @@ -4025,7 +4017,6 @@ Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message | `subagent-settled` | `"notice"` | `senderSessionId`: `string`; `summary`: `string` | [`SubagentSettledMessageSource`](#persistence-type-sha256-4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a) | | `system-prompt` | not declared | none | [`SystemPromptMessageSource`](#persistence-type-sha256-65a8400e451e667e5b6e34df72ceb81fca8c12330330fa72083ad40279b189ad) | | `team-message` | not declared | `messageId`: `string`; `senderId`: `string`; `senderName`: `string`; `teamId`: `string` | [`TeamMessageSource`](#persistence-type-sha256-2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0) | -| `team-relay` | `"relay"` | `senderName`: `string`; `senderSessionId`: `string` | [`{ kind: "team-relay", form: "relay" }`](#persistence-type-sha256-a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe) | | `time-context` | `"catalog"` | none | [`{ kind: "time-context", form: "catalog" }`](#persistence-type-sha256-85fe96bf15d5c7559eec3bae4d6cf1a76fda9f5be05a29c2830cff560cab0c0d) | | `time-context` | `"instructions"` | none | [`{ kind: "time-context", form: "instructions" }`](#persistence-type-sha256-f6afe41e3926f422fe849debe90819fddd739f0f59e20be9c71018b9554a7f09) | | `time-context` | `"notice"` | `summary`: `string` | [`{ kind: "time-context", form: "notice" }`](#persistence-type-sha256-ee577a0cc18664c9daee50e9455153321155604f8f1817362f8f4a4b6fb9e1ad) | @@ -4067,13 +4058,13 @@ Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message | `user-approval` | not declared | none | [`{ kind: "user-approval" }`](#persistence-type-sha256-6292bcbedaa97feaec5b48a03bb8144b581b93309d9d6c905f26da7a6a7a0a4f) | | `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) | - + ### `Message[]` -SHA-256: `9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f` +SHA-256: `fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83` -Array of [`Message`](#persistence-type-sha256-139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2). +Array of [`Message`](#persistence-type-sha256-691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6). @@ -4440,7 +4431,7 @@ Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/ | `source` | required | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) | | `title` | required | `string` | - + @@ -4448,7 +4439,7 @@ Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/ ### `SessionTitleLlmRequestEventData` -SHA-256: `4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407` +SHA-256: `9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd` Sources: [`packages/session/session-title-llm/src/index.ts:34`](../packages/session/session-title-llm/src/index.ts) @@ -4456,7 +4447,7 @@ Sources: [`packages/session/session-title-llm/src/index.ts:34`](../packages/sess |---|---|---| | `maxTokens` | required | `number` | | `messageSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | -| `messages` | required | [`Message[]`](#persistence-type-sha256-9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f) | +| `messages` | required | [`Message[]`](#persistence-type-sha256-fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83) | | `route` | required | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) | | `system` | required | `string` | | `titleProvider` | required | `string` | @@ -5110,7 +5101,7 @@ Sources: [`packages/core/session/src/types.ts:232`](../packages/core/session/src | `interrupted` | not declared | none | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) | | `max-tokens` | not declared | none | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) | - + @@ -5118,7 +5109,7 @@ Sources: [`packages/core/session/src/types.ts:232`](../packages/core/session/src ### `UserMessage` -SHA-256: `2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47` +SHA-256: `64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586` Sources: [`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message.ts) @@ -5127,19 +5118,19 @@ Sources: [`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message | `content` | required | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | required | `string` | | `role` | required | `"user"` | -| `source` | required | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | +| `source` | required | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | Source compatibility: `source` — `session-source-attribution` v1; `session.user-message.source`; `kind`; `preserve`. -Attribution-only additions: `team-relay`, `tmux-context`. +Attribution-only additions: `tmux-context`. - + ### `UserMessage[]` -SHA-256: `e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f` +SHA-256: `d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621` -Array of [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47). +Array of [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586). @@ -5982,18 +5973,18 @@ Sources: [`packages/core/session/src/types.ts:390`](../packages/core/session/src | `reason` | required | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) | | `startsSeries` | optional | `true` | - + ### `{ headerSeq?, message, step, turn }` -SHA-256: `766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194` +SHA-256: `51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f` Sources: [`packages/core/session/src/types.ts:311`](../packages/core/session/src/types.ts) | Property | Presence | Type | |---|---|---| | `headerSeq` | optional | `number` | -| `message` | required | [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) | +| `message` | required | [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) | | `step` | required | `number` | | `turn` | required | `number` | @@ -6077,17 +6068,17 @@ Sources: [`packages/core/session/src/types.ts:427`](../packages/core/session/src |---|---|---| | `inherited` | optional | `true` | - + ### `{ inserted, outcome?, removedCount?, start, … }` -SHA-256: `f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283` +SHA-256: `dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130` Sources: [`packages/core/agent/src/types.ts:96`](../packages/core/agent/src/types.ts) | Property | Presence | Type | |---|---|---| -| `inserted` | required | [`UserMessage[]`](#persistence-type-sha256-e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f) | +| `inserted` | required | [`UserMessage[]`](#persistence-type-sha256-d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621) | | `outcome` | optional | `"canceled"` | | `removedCount` | optional | `number` | | `start` | required | `number` | @@ -6918,21 +6909,6 @@ Sources: [`packages/llm/llm/src/types.ts:157`](../packages/llm/llm/src/types.ts) |---|---|---| | `kind` | required | `"stop"` | - - -### `{ kind: "team-relay", form: "relay" }` - -SHA-256: `a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe` - -Sources: [`packages/experimental/agent-team/src/types.ts:151`](../packages/experimental/agent-team/src/types.ts) - -| Property | Presence | Type | -|---|---|---| -| `form` | required | `"relay"` | -| `kind` | required | `"team-relay"` | -| `senderName` | required | `string` | -| `senderSessionId` | required | `string` | - ### `{ kind: "time-context" }` @@ -7400,7 +7376,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:61`](../packages/web SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1` -Sources: [`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7428,7 +7404,7 @@ Sources: [`packages/core/session/src/types.ts:330`](../packages/core/session/src SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` -Sources: [`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7442,7 +7418,7 @@ Sources: [`packages/experimental/agent-team/src/types.ts:243`](../packages/exper SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1` -Sources: [`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7588,7 +7564,7 @@ Sources: [`packages/compaction/compaction-image-offload/src/projection.ts:25`](. SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c` -Sources: [`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) +Sources: [`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -7636,17 +7612,17 @@ SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | `time` | required | `number` | | `type` | required | `"agent-preset/selected"` | - + ### `{ type: "agent/inbox/spliced" }` -SHA-256: `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` +SHA-256: `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` | Property | Presence | Type | |---|---|---| -| `data` | required | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283) | +| `data` | required | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | @@ -7887,17 +7863,17 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | `time` | required | `number` | | `type` | required | `"deliverables/presented"` | - + ### `{ type: "developer/message" }` -SHA-256: `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` +SHA-256: `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` | Property | Presence | Type | |---|---|---| -| `data` | required | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194) | +| `data` | required | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | @@ -8253,17 +8229,17 @@ SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | `time` | required | `number` | | `type` | required | `"session/title"` | - + ### `{ type: "session/title-llm-request" }` -SHA-256: `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` +SHA-256: `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` | Property | Presence | Type | |---|---|---| -| `data` | required | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407) | +| `data` | required | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | @@ -8686,17 +8662,17 @@ Sources: [`packages/llm/llm/src/types.ts:458`](../packages/llm/llm/src/types.ts) | `type` | required | `"usage"` | | `usage` | required | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) | - + ### `{ type: "user/message" }` -SHA-256: `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` +SHA-256: `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` | Property | Presence | Type | |---|---|---| -| `data` | required | [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) | +| `data` | required | [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index 72dd2c3a50..5d7b2f013c 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -23,7 +23,7 @@ | `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) | | `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) | | `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) | -| `event:agent/inbox/spliced` | event | `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4) | +| `event:agent/inbox/spliced` | event | `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c) | | `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) | | `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) | | `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) | @@ -36,7 +36,7 @@ | `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) | | `event:compaction/summary` | event | `e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602) | | `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) | -| `event:developer/message` | event | `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` | [`{ type: "developer/message" }`](#persistence-type-sha256-3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e) | +| `event:developer/message` | event | `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` | [`{ type: "developer/message" }`](#persistence-type-sha256-eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80) | | `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) | | `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) | | `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) | @@ -56,7 +56,7 @@ | `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) | | `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) | | `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) | -| `event:session/title-llm-request` | event | `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7) | +| `event:session/title-llm-request` | event | `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d) | | `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) | | `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) | | `event:subagent/catalog` | event | `3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-3abae7324356f155cb42450c00b806d134ec93bd6439d2063b8d724162d58604) | @@ -78,7 +78,7 @@ | `event:tool/result` | event | `7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397` | [`{ type: "tool/result" }`](#persistence-type-sha256-7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397) | | `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) | | `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) | -| `event:user/message` | event | `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` | [`{ type: "user/message" }`](#persistence-type-sha256-0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58) | +| `event:user/message` | event | `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` | [`{ type: "user/message" }`](#persistence-type-sha256-3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761) | | `event:web/deepseek-search-llm-request` | event | `cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-cf6e3aaf1e2de6480aa0157730a41b9a492108a55304100b0f7e112711dd4331) | | `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) | @@ -977,7 +977,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMemberSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) @@ -995,7 +995,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageId](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) @@ -1008,7 +1008,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamMessageSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) @@ -1021,7 +1021,7 @@ export type SessionEvent = { 类型:[TeamId](subsystems/agent-team.zh.md) · [TeamTaskSnapshot](subsystems/agent-team.zh.md) -来源:[`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) ### `todo/*` @@ -2541,14 +2541,6 @@ SHA-256: `2e4debca12f2c449f96dc6574f3fbf2fb346193443114a241d01a236362ec48c` `"team-message"` - - -### `"team-relay"` - -SHA-256: `c91852e53038618e7869f3e436acdb3f319c4f31b516c71a4b816e7387e3df2f` - -`"team-relay"` - ### `"team/member"` @@ -3217,7 +3209,7 @@ SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9` | `body` | 必需 | [`{ max_tokens, messages, model, tools }`](#persistence-type-sha256-930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731) | | `endpoint` | 必需 | `string` | - + @@ -3225,7 +3217,7 @@ SHA-256: `2517ba143a271508d3ca35126d5aca8f7f1facf5aaddce4adf011832042fa2b9` ### `DeveloperMessage` -SHA-256: `46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba` +SHA-256: `f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b` 来源:[`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message.ts) @@ -3234,11 +3226,11 @@ SHA-256: `46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba` | `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | 必需 | `string` | | `role` | 必需 | `"developer"` | -| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | +| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | 消息源兼容策略:`source` — `session-source-attribution` v1; `session.developer-message.source`; `kind`; `preserve`. -仅表示归属的新增 kind:`team-relay`, `tmux-context`. +仅表示归属的新增 kind:`tmux-context`. @@ -3851,7 +3843,7 @@ SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20` | `step` | 必需 | `number` | | `turn` | 必需 | `number` | - + @@ -3859,15 +3851,15 @@ SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20` ### `Message` -SHA-256: `139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2` +SHA-256: `691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6` 来源:[`packages/llm/llm/src/message.ts:196`](../packages/llm/llm/src/message.ts) 以下类型之一: - [`ToolResultMessage`](#persistence-type-sha256-4b259f7f8f0a44ad5e90b70a73553ced1df27012d126921d397ff403b6c86731) -- [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) -- [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) +- [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) +- [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) - [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be) - [`SystemMessage`](#persistence-type-sha256-09f3f8dc417f278257202714132f98ba7b52957d7b558c4a04456603890eb363) @@ -3944,7 +3936,7 @@ SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2` - `"negative"` - `"positive"` - + @@ -3952,7 +3944,7 @@ SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2` ### `MessageSource` -SHA-256: `bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624` +SHA-256: `40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945` 来源:[`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message.ts) @@ -4027,7 +4019,6 @@ SHA-256: `bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624` | `subagent-settled` | `"notice"` | `senderSessionId`: `string`; `summary`: `string` | [`SubagentSettledMessageSource`](#persistence-type-sha256-4e97c3d85c0fc817ee58873c38c25a2474abaaa0af4839311b50b68db3b8cf1a) | | `system-prompt` | 未声明 | 无 | [`SystemPromptMessageSource`](#persistence-type-sha256-65a8400e451e667e5b6e34df72ceb81fca8c12330330fa72083ad40279b189ad) | | `team-message` | 未声明 | `messageId`: `string`; `senderId`: `string`; `senderName`: `string`; `teamId`: `string` | [`TeamMessageSource`](#persistence-type-sha256-2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0) | -| `team-relay` | `"relay"` | `senderName`: `string`; `senderSessionId`: `string` | [`{ kind: "team-relay", form: "relay" }`](#persistence-type-sha256-a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe) | | `time-context` | `"catalog"` | 无 | [`{ kind: "time-context", form: "catalog" }`](#persistence-type-sha256-85fe96bf15d5c7559eec3bae4d6cf1a76fda9f5be05a29c2830cff560cab0c0d) | | `time-context` | `"instructions"` | 无 | [`{ kind: "time-context", form: "instructions" }`](#persistence-type-sha256-f6afe41e3926f422fe849debe90819fddd739f0f59e20be9c71018b9554a7f09) | | `time-context` | `"notice"` | `summary`: `string` | [`{ kind: "time-context", form: "notice" }`](#persistence-type-sha256-ee577a0cc18664c9daee50e9455153321155604f8f1817362f8f4a4b6fb9e1ad) | @@ -4069,13 +4060,13 @@ SHA-256: `bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624` | `user-approval` | 未声明 | 无 | [`{ kind: "user-approval" }`](#persistence-type-sha256-6292bcbedaa97feaec5b48a03bb8144b581b93309d9d6c905f26da7a6a7a0a4f) | | `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) | - + ### `Message[]` -SHA-256: `9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f` +SHA-256: `fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83` -[`Message`](#persistence-type-sha256-139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2) 的数组。 +[`Message`](#persistence-type-sha256-691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6) 的数组。 @@ -4442,7 +4433,7 @@ SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4` | `source` | 必需 | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) | | `title` | 必需 | `string` | - + @@ -4450,7 +4441,7 @@ SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4` ### `SessionTitleLlmRequestEventData` -SHA-256: `4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407` +SHA-256: `9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd` 来源:[`packages/session/session-title-llm/src/index.ts:34`](../packages/session/session-title-llm/src/index.ts) @@ -4458,7 +4449,7 @@ SHA-256: `4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407` |---|---|---| | `maxTokens` | 必需 | `number` | | `messageSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | -| `messages` | 必需 | [`Message[]`](#persistence-type-sha256-9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f) | +| `messages` | 必需 | [`Message[]`](#persistence-type-sha256-fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83) | | `route` | 必需 | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) | | `system` | 必需 | `string` | | `titleProvider` | 必需 | `string` | @@ -5112,7 +5103,7 @@ SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402` | `interrupted` | 未声明 | 无 | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) | | `max-tokens` | 未声明 | 无 | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) | - + @@ -5120,7 +5111,7 @@ SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402` ### `UserMessage` -SHA-256: `2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47` +SHA-256: `64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586` 来源:[`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message.ts) @@ -5129,19 +5120,19 @@ SHA-256: `2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47` | `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) | | `id` | 必需 | `string` | | `role` | 必需 | `"user"` | -| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624) | +| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945) | 消息源兼容策略:`source` — `session-source-attribution` v1; `session.user-message.source`; `kind`; `preserve`. -仅表示归属的新增 kind:`team-relay`, `tmux-context`. +仅表示归属的新增 kind:`tmux-context`. - + ### `UserMessage[]` -SHA-256: `e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f` +SHA-256: `d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621` -[`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) 的数组。 +[`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) 的数组。 @@ -5984,18 +5975,18 @@ SHA-256: `ad0c38a0adb82a94c925456df41586d9b5f9202fca18593eae2213d4445b4585` | `reason` | 必需 | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) | | `startsSeries` | 可选 | `true` | - + ### `{ headerSeq?, message, step, turn }` -SHA-256: `766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194` +SHA-256: `51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f` 来源:[`packages/core/session/src/types.ts:311`](../packages/core/session/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| | `headerSeq` | 可选 | `number` | -| `message` | 必需 | [`DeveloperMessage`](#persistence-type-sha256-46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba) | +| `message` | 必需 | [`DeveloperMessage`](#persistence-type-sha256-f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b) | | `step` | 必需 | `number` | | `turn` | 必需 | `number` | @@ -6079,17 +6070,17 @@ SHA-256: `17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3` |---|---|---| | `inherited` | 可选 | `true` | - + ### `{ inserted, outcome?, removedCount?, start, … }` -SHA-256: `f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283` +SHA-256: `dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130` 来源:[`packages/core/agent/src/types.ts:96`](../packages/core/agent/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| -| `inserted` | 必需 | [`UserMessage[]`](#persistence-type-sha256-e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f) | +| `inserted` | 必需 | [`UserMessage[]`](#persistence-type-sha256-d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621) | | `outcome` | 可选 | `"canceled"` | | `removedCount` | 可选 | `number` | | `start` | 必需 | `number` | @@ -6920,21 +6911,6 @@ SHA-256: `1d76406cbb2ddadb0dbbb51e9d8bc6cf678fed455cf8eb512f36f7c86d37a62f` |---|---|---| | `kind` | 必需 | `"stop"` | - - -### `{ kind: "team-relay", form: "relay" }` - -SHA-256: `a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe` - -来源:[`packages/experimental/agent-team/src/types.ts:151`](../packages/experimental/agent-team/src/types.ts) - -| 属性 | 存在性 | 类型 | -|---|---|---| -| `form` | 必需 | `"relay"` | -| `kind` | 必需 | `"team-relay"` | -| `senderName` | 必需 | `string` | -| `senderSessionId` | 必需 | `string` | - ### `{ kind: "time-context" }` @@ -7402,7 +7378,7 @@ SHA-256: `930a6567a10bb62ddd157bd8abdf4b182810c8c3b49d91309b3b009a5fed9731` SHA-256: `b1ebd5cda47d90d980bb05bffc3f970c51537b9aff15b3bc3d639811727741b1` -来源:[`packages/experimental/agent-team/src/types.ts:239`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:230`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7430,7 +7406,7 @@ SHA-256: `6bc8e51124d0874bc89e1d0ceff381a9c3cd0fc240667d69f841ce4f60f65fe5` SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` -来源:[`packages/experimental/agent-team/src/types.ts:243`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:234`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7444,7 +7420,7 @@ SHA-256: `ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403` SHA-256: `0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1` -来源:[`packages/experimental/agent-team/src/types.ts:245`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:236`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7590,7 +7566,7 @@ SHA-256: `477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028` SHA-256: `a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c` -来源:[`packages/experimental/agent-team/src/types.ts:241`](../packages/experimental/agent-team/src/types.ts) +来源:[`packages/experimental/agent-team/src/types.ts:232`](../packages/experimental/agent-team/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -7638,17 +7614,17 @@ SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | `time` | 必需 | `number` | | `type` | 必需 | `"agent-preset/selected"` | - + ### `{ type: "agent/inbox/spliced" }` -SHA-256: `069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4` +SHA-256: `1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283) | +| `data` | 必需 | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | @@ -7889,17 +7865,17 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | `time` | 必需 | `number` | | `type` | 必需 | `"deliverables/presented"` | - + ### `{ type: "developer/message" }` -SHA-256: `3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e` +SHA-256: `eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194) | +| `data` | 必需 | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | @@ -8255,17 +8231,17 @@ SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | `time` | 必需 | `number` | | `type` | 必需 | `"session/title"` | - + ### `{ type: "session/title-llm-request" }` -SHA-256: `d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7` +SHA-256: `fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407) | +| `data` | 必需 | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | @@ -8688,17 +8664,17 @@ SHA-256: `f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515` | `type` | 必需 | `"usage"` | | `usage` | 必需 | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) | - + ### `{ type: "user/message" }` -SHA-256: `0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58` +SHA-256: `3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`UserMessage`](#persistence-type-sha256-2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47) | +| `data` | 必需 | [`UserMessage`](#persistence-type-sha256-64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) | diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml b/docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml deleted file mode 100644 index be9b0a1032..0000000000 --- a/docs/persistence-changes/2026-09-27-team-relay-source.i18n.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Bilingual-pair consistency record for 2026-09-27-team-relay-source.md (docs/i18n/README.md): per heading -# section, a hash of its English and Chinese blocks outside code blocks and generated regions. -# After editing either side, bring the other along and re-record with: -# pnpm run verify-translation-pairing --write docs/persistence-changes/2026-09-27-team-relay-source.md -/: - en: 3d5a424ae7d7e46b - zh: c22a8e4a62d8cc1a -/2026-09-27-team-relay-source: - en: e0c1ab3f13e8273e - zh: bb1e786065a69390 -/2026-09-27-team-relay-source/summary: - en: a6b6694a082889f1 - zh: 2ffcc7e2ca682aae -/2026-09-27-team-relay-source/table-of-contents: - en: 6cf314a069ceb451 - zh: 9adff678e9ecab3b -/2026-09-27-team-relay-source/declaration: - en: 6907136f28e48c90 - zh: 02f8298485f3d8e7 -/2026-09-27-team-relay-source/compatibility: - en: 495a00731d6363b7 - zh: 03a17f27249df4ec -/2026-09-27-team-relay-source/verification: - en: 4f1b64efd9a6455a - zh: 3bafc76582930927 -/2026-09-27-team-relay-source/dev-note: - en: b75c8458928b72b9 - zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.md b/docs/persistence-changes/2026-09-27-team-relay-source.md deleted file mode 100644 index 7bea36b3af..0000000000 --- a/docs/persistence-changes/2026-09-27-team-relay-source.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -description: "Records a persistence type transition and its compatibility acknowledgement." -kind: persistence-change ---- - -# 2026-09-27-team-relay-source - -English | [中文](2026-09-27-team-relay-source.zh.md) - -## Summary - -Adds the Team-owned team-relay attribution source to persisted user and developer message slots without changing the Session format version. - -## Table of Contents - -- [Declaration](#declaration) -- [Compatibility](#compatibility) -- [Verification](#verification) -- [Dev Note](#dev-note) - - -## Declaration - -```yaml persistence-change -schemaVersion: 1 -id: 2026-09-27-team-relay-source -baseline: false -changes: - - root: "event:agent/inbox/spliced" - previous: "2026-09-16-session-format-v4" - after: "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4" - decision: same-version - - root: "event:developer/message" - previous: "2026-09-16-session-format-v4" - after: "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e" - decision: same-version - - root: "event:session/title-llm-request" - previous: "2026-09-16-session-format-v4" - after: "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7" - decision: same-version - - root: "event:user/message" - previous: "2026-09-16-session-format-v4" - after: "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58" - decision: same-version -``` - - -## Compatibility - -Existing agent-message and historical team-message records remain unchanged. The new kind records senderSessionId, senderName, and relay form only; it imposes no replay, validation, or authority requirement. Current V4 readers preserve unknown attribution and its JSON metadata without the Team producer. Older clients can display the recorded content with generic source presentation. - - -## Verification - -pnpm exec vitest run packages/experimental/agent-team packages/experimental/tool-agent-team packages/client/ui-chat/tests/turn-trigger.client.spec.tsx: 129 tests passed. pnpm exec vitest run packages/experimental/agent-team/tests/persistence.spec.ts packages/session/session-format-v3-to-v4/tests/attribution.spec.ts packages/session/session-format-v3-to-v4/tests/message-sources.spec.ts: 16 tests passed, including target inbox recovery with Team disposed. pnpm run test:snapshot -t 'team-direct-inbox|team-targets': 2 scenarios passed. - - -## Dev Note - -None. diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.schema.json b/docs/persistence-changes/2026-09-27-team-relay-source.schema.json deleted file mode 100644 index 065a8d66ca..0000000000 --- a/docs/persistence-changes/2026-09-27-team-relay-source.schema.json +++ /dev/null @@ -1,11409 +0,0 @@ -{ - "formatVersion": 2, - "roots": [ - { - "key": "event:agent/inbox/spliced", - "kind": "event", - "event": "agent/inbox/spliced", - "surface": false, - "digest": "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 27, - "optional": true - }, - { - "name": "seq", - "type": 20, - "optional": false - }, - { - "name": "time", - "type": 20, - "optional": false - }, - { - "name": "type", - "type": 201, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "inserted", - "type": 2, - "optional": false - }, - { - "name": "outcome", - "type": 197, - "optional": true - }, - { - "name": "removedCount", - "type": 20, - "optional": true - }, - { - "name": "start", - "type": 20, - "optional": false - }, - { - "name": "target", - "type": 198, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "role", - "type": 32, - "optional": false - }, - { - "name": "source", - "type": 33, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 9, - 11, - 14, - 16, - 18, - 29 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 12, - "optional": true - }, - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 19, - "optional": false - }, - { - "name": "offloaded", - "type": 27, - "optional": true - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 20, - "optional": false - }, - { - "name": "height", - "type": 20, - "optional": false - }, - { - "name": "mediaType", - "type": 21, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": true - }, - { - "name": "originalDimensions", - "type": 26, - "optional": true - }, - { - "name": "width", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 22, - 23, - 24, - 25 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 20, - "optional": false - }, - { - "name": "width", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 30, - "optional": false - }, - { - "name": "type", - "type": 31, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 20, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 34, - 37, - 39, - 41, - 43, - 45, - 47, - 49, - 51, - 53, - 56, - 58, - 60, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 115, - 117, - 120, - 121, - 122, - 123, - 124, - 126, - 127, - 128, - 129, - 131, - 132, - 133, - 134, - 135, - 137, - 138, - 139, - 141, - 142, - 150, - 152, - 153, - 155, - 157, - 161, - 163, - 171, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 189, - 191, - 193, - 194, - 195, - 196 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 114, - "optional": false - }, - { - "name": "revision", - "type": 20, - "optional": false - }, - { - "name": "round", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 116, - "optional": false - }, - { - "name": "messageId", - "type": 7, - "optional": false - }, - { - "name": "senderId", - "type": 7, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "teamId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 118, - "optional": false - }, - { - "name": "model", - "type": 7, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "replayState", - "type": 119, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 125, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 136, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 32, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 140, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 27, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 7, - "optional": true - }, - { - "name": "changes", - "type": 143, - "optional": false - }, - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 149, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 144 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 145, - "optional": false - }, - { - "name": "digest", - "type": 7, - "optional": true - }, - { - "name": "path", - "type": 7, - "optional": false - }, - { - "name": "scope", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 146, - 147, - 148 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 151, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 7, - "optional": true - }, - { - "name": "kind", - "type": 32, - "optional": false - }, - { - "name": "rpcId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 7, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 7, - "optional": false - }, - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "ruleId", - "type": 7, - "optional": false - }, - { - "name": "source", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 158, - "optional": false - }, - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 160, - "optional": false - }, - { - "name": "update", - "type": 27, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 159 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 162, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 164, - "optional": false - }, - { - "name": "references", - "type": 165, - "optional": false - }, - { - "name": "version", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 166 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 20, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 167, - "optional": false - }, - { - "name": "compacted", - "type": 169, - "optional": false - }, - { - "name": "inputIndex", - "type": 20, - "optional": false - }, - { - "name": "label", - "type": 7, - "optional": false - }, - { - "name": "omittedBytes", - "type": 20, - "optional": false - }, - { - "name": "omittedMessages", - "type": 20, - "optional": false - }, - { - "name": "originalMessages", - "type": 20, - "optional": false - }, - { - "name": "retainedMessages", - "type": 20, - "optional": false - }, - { - "name": "sessionId", - "type": 7, - "optional": false - }, - { - "name": "truncated", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 20, - 168 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 174 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "text", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 190, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 192, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "canceled" - }, - { - "kind": "union", - "types": [ - 199, - 200 - ] - }, - { - "kind": "literal", - "value": "next-step" - }, - { - "kind": "literal", - "value": "next-turn" - }, - { - "kind": "literal", - "value": "agent/inbox/spliced" - } - ] - } - }, - { - "key": "event:developer/message", - "kind": "event", - "event": "developer/message", - "surface": true, - "digest": "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 26, - "optional": true - }, - { - "name": "seq", - "type": 2, - "optional": false - }, - { - "name": "sourceEventSeqs", - "type": 197, - "optional": true - }, - { - "name": "surfaceOp", - "type": 198, - "optional": false - }, - { - "name": "time", - "type": 2, - "optional": false - }, - { - "name": "type", - "type": 201, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "headerSeq", - "type": 2, - "optional": true - }, - { - "name": "message", - "type": 3, - "optional": false - }, - { - "name": "step", - "type": 2, - "optional": false - }, - { - "name": "turn", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "role", - "type": 31, - "optional": false - }, - { - "name": "source", - "type": 32, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 9, - 11, - 14, - 16, - 18, - 28 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 12, - "optional": true - }, - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 19, - "optional": false - }, - { - "name": "offloaded", - "type": 26, - "optional": true - }, - { - "name": "type", - "type": 27, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "mediaType", - "type": 20, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": true - }, - { - "name": "originalDimensions", - "type": 25, - "optional": true - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 21, - 22, - 23, - 24 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 29, - "optional": false - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 33, - 36, - 38, - 40, - 42, - 44, - 46, - 48, - 50, - 52, - 55, - 57, - 59, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 114, - 116, - 119, - 120, - 121, - 122, - 123, - 125, - 126, - 127, - 128, - 130, - 131, - 132, - 133, - 134, - 136, - 138, - 139, - 141, - 142, - 150, - 152, - 153, - 155, - 157, - 161, - 163, - 171, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 189, - 191, - 193, - 194, - 195, - 196 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 113, - "optional": false - }, - { - "name": "revision", - "type": 2, - "optional": false - }, - { - "name": "round", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 115, - "optional": false - }, - { - "name": "messageId", - "type": 7, - "optional": false - }, - { - "name": "senderId", - "type": 7, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "teamId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 117, - "optional": false - }, - { - "name": "model", - "type": 7, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "replayState", - "type": 118, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 124, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 129, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 135, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 137, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 140, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 26, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 7, - "optional": true - }, - { - "name": "changes", - "type": 143, - "optional": false - }, - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 149, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 144 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 145, - "optional": false - }, - { - "name": "digest", - "type": 7, - "optional": true - }, - { - "name": "path", - "type": 7, - "optional": false - }, - { - "name": "scope", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 146, - 147, - 148 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 151, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 7, - "optional": true - }, - { - "name": "kind", - "type": 137, - "optional": false - }, - { - "name": "rpcId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 7, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 7, - "optional": false - }, - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "ruleId", - "type": 7, - "optional": false - }, - { - "name": "source", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 158, - "optional": false - }, - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 160, - "optional": false - }, - { - "name": "update", - "type": 26, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 159 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 162, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 164, - "optional": false - }, - { - "name": "references", - "type": 165, - "optional": false - }, - { - "name": "version", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 166 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 2, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 167, - "optional": false - }, - { - "name": "compacted", - "type": 169, - "optional": false - }, - { - "name": "inputIndex", - "type": 2, - "optional": false - }, - { - "name": "label", - "type": 7, - "optional": false - }, - { - "name": "omittedBytes", - "type": 2, - "optional": false - }, - { - "name": "omittedMessages", - "type": 2, - "optional": false - }, - { - "name": "originalMessages", - "type": 2, - "optional": false - }, - { - "name": "retainedMessages", - "type": 2, - "optional": false - }, - { - "name": "sessionId", - "type": 7, - "optional": false - }, - { - "name": "truncated", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 2, - 168 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 174 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "text", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 190, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 192, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "union", - "types": [ - 199, - 200 - ] - }, - { - "kind": "literal", - "value": "append" - }, - { - "kind": "object", - "properties": [ - { - "name": "endSeq", - "type": 2, - "optional": false - }, - { - "name": "op", - "type": 147, - "optional": false - }, - { - "name": "startSeq", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer/message" - } - ] - } - }, - { - "key": "event:session/title-llm-request", - "kind": "event", - "event": "session/title-llm-request", - "surface": false, - "digest": "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 29, - "optional": true - }, - { - "name": "seq", - "type": 2, - "optional": false - }, - { - "name": "time", - "type": 2, - "optional": false - }, - { - "name": "type", - "type": 207, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "maxTokens", - "type": 2, - "optional": false - }, - { - "name": "messageSeqs", - "type": 3, - "optional": false - }, - { - "name": "messages", - "type": 4, - "optional": false - }, - { - "name": "route", - "type": 206, - "optional": false - }, - { - "name": "system", - "type": 10, - "optional": false - }, - { - "name": "titleProvider", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 37, - 201, - 202, - 204 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "isError", - "type": 34, - "optional": true - }, - { - "name": "role", - "type": 35, - "optional": false - }, - { - "name": "source", - "type": 36, - "optional": false - }, - { - "name": "toolCallId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 8 - }, - { - "kind": "union", - "types": [ - 9, - 12, - 14, - 17, - 19, - 21, - 31 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 15, - "optional": true - }, - { - "name": "toolName", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 10, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - }, - { - "name": "type", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 22, - "optional": false - }, - { - "name": "offloaded", - "type": 29, - "optional": true - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 10, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "mediaType", - "type": 23, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": true - }, - { - "name": "originalDimensions", - "type": 28, - "optional": true - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 24, - 25, - 26, - 27 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 32, - "optional": false - }, - { - "name": "type", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 10, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 38, - "optional": false - }, - { - "name": "source", - "type": 39, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 36, - 40, - 43, - 45, - 47, - 49, - 51, - 53, - 55, - 57, - 60, - 62, - 64, - 66, - 68, - 70, - 72, - 81, - 82, - 84, - 86, - 88, - 93, - 95, - 103, - 107, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 181, - 183, - 186, - 187, - 188, - 190, - 191, - 192, - 194, - 195, - 196, - 197, - 199, - 200 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 29, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 10, - "optional": true - }, - { - "name": "changes", - "type": 73, - "optional": false - }, - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 80, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 74 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 75, - "optional": false - }, - { - "name": "digest", - "type": 10, - "optional": true - }, - { - "name": "path", - "type": 10, - "optional": false - }, - { - "name": "scope", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 76, - 77, - 78 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 10, - "optional": true - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "rpcId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 10, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 10, - "optional": false - }, - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 87, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - }, - { - "name": "ruleId", - "type": 10, - "optional": false - }, - { - "name": "source", - "type": 10, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 89, - "optional": false - }, - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 92, - "optional": false - }, - { - "name": "update", - "type": 29, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 90 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 10, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 94, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "references", - "type": 98, - "optional": false - }, - { - "name": "version", - "type": 102, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 99 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 2, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 100, - "optional": false - }, - { - "name": "compacted", - "type": 34, - "optional": false - }, - { - "name": "inputIndex", - "type": 2, - "optional": false - }, - { - "name": "label", - "type": 10, - "optional": false - }, - { - "name": "omittedBytes", - "type": 2, - "optional": false - }, - { - "name": "omittedMessages", - "type": 2, - "optional": false - }, - { - "name": "originalMessages", - "type": 2, - "optional": false - }, - { - "name": "retainedMessages", - "type": 2, - "optional": false - }, - { - "name": "sessionId", - "type": 10, - "optional": false - }, - { - "name": "truncated", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 2, - 101 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 106 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 10, - "optional": false - }, - { - "name": "text", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 180, - "optional": false - }, - { - "name": "revision", - "type": 2, - "optional": false - }, - { - "name": "round", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 182, - "optional": false - }, - { - "name": "messageId", - "type": 10, - "optional": false - }, - { - "name": "senderId", - "type": 10, - "optional": false - }, - { - "name": "senderName", - "type": 10, - "optional": false - }, - { - "name": "teamId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "model", - "type": 10, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - }, - { - "name": "replayState", - "type": 185, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 189, - "optional": false - }, - { - "name": "senderName", - "type": 10, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 193, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 198, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 50, - "optional": false - }, - { - "name": "source", - "type": 39, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 203, - "optional": false - }, - { - "name": "source", - "type": 183, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "assistant" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 205, - "optional": false - }, - { - "name": "source", - "type": 197, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system" - }, - { - "kind": "object", - "properties": [ - { - "name": "model", - "type": 10, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session/title-llm-request" - } - ] - } - }, - { - "key": "event:user/message", - "kind": "event", - "event": "user/message", - "surface": true, - "digest": "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 25, - "optional": true - }, - { - "name": "seq", - "type": 18, - "optional": false - }, - { - "name": "sourceEventSeqs", - "type": 195, - "optional": true - }, - { - "name": "surfaceOp", - "type": 196, - "optional": false - }, - { - "name": "time", - "type": 18, - "optional": false - }, - { - "name": "type", - "type": 199, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 30, - "optional": false - }, - { - "name": "source", - "type": 31, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "union", - "types": [ - 4, - 7, - 9, - 12, - 14, - 16, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 10, - "optional": true - }, - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 5, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 17, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 32, - 35, - 37, - 39, - 41, - 43, - 45, - 47, - 50, - 52, - 54, - 56, - 58, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 111, - 113, - 116, - 117, - 118, - 119, - 120, - 122, - 123, - 124, - 125, - 127, - 128, - 129, - 130, - 131, - 133, - 134, - 135, - 137, - 138, - 146, - 148, - 149, - 151, - 153, - 157, - 159, - 167, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 185, - 187, - 189, - 190, - 191, - 192, - 193, - 194 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "revision", - "type": 18, - "optional": false - }, - { - "name": "round", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 112, - "optional": false - }, - { - "name": "messageId", - "type": 5, - "optional": false - }, - { - "name": "senderId", - "type": 5, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "teamId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 114, - "optional": false - }, - { - "name": "model", - "type": 5, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "replayState", - "type": 115, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 121, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 126, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 132, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 136, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 5, - "optional": true - }, - { - "name": "changes", - "type": 139, - "optional": false - }, - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 145, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 140 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 141, - "optional": false - }, - { - "name": "digest", - "type": 5, - "optional": true - }, - { - "name": "path", - "type": 5, - "optional": false - }, - { - "name": "scope", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 142, - 143, - 144 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 147, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 5, - "optional": true - }, - { - "name": "kind", - "type": 30, - "optional": false - }, - { - "name": "rpcId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 5, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 5, - "optional": false - }, - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "ruleId", - "type": 5, - "optional": false - }, - { - "name": "source", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 154, - "optional": false - }, - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 155 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 158, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 160, - "optional": false - }, - { - "name": "references", - "type": 161, - "optional": false - }, - { - "name": "version", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 162 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 18, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 163, - "optional": false - }, - { - "name": "compacted", - "type": 165, - "optional": false - }, - { - "name": "inputIndex", - "type": 18, - "optional": false - }, - { - "name": "label", - "type": 5, - "optional": false - }, - { - "name": "omittedBytes", - "type": 18, - "optional": false - }, - { - "name": "omittedMessages", - "type": 18, - "optional": false - }, - { - "name": "originalMessages", - "type": 18, - "optional": false - }, - { - "name": "retainedMessages", - "type": 18, - "optional": false - }, - { - "name": "sessionId", - "type": 5, - "optional": false - }, - { - "name": "truncated", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 18, - 164 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 170 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 186, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 18 - }, - { - "kind": "union", - "types": [ - 197, - 198 - ] - }, - { - "kind": "literal", - "value": "append" - }, - { - "kind": "object", - "properties": [ - { - "name": "endSeq", - "type": 18, - "optional": false - }, - { - "name": "op", - "type": 143, - "optional": false - }, - { - "name": "startSeq", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user/message" - } - ] - } - } - ], - "types": [] -} diff --git a/docs/persistence-changes/2026-09-27-team-relay-source.zh.md b/docs/persistence-changes/2026-09-27-team-relay-source.zh.md deleted file mode 100644 index 29c834ecb8..0000000000 --- a/docs/persistence-changes/2026-09-27-team-relay-source.zh.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -description: "记录持久化类型更改及其兼容性确认。" -kind: persistence-change ---- - -# 2026-09-27-team-relay-source - -[English](2026-09-27-team-relay-source.md) | 中文 - -## 概述 - -为持久化的 user 和 developer 消息位置添加 Team 所属的 team-relay 归属来源,不改变 Session 格式版本。 - -## 目录 - -- [声明](#declaration) -- [兼容性](#compatibility) -- [验证](#verification) -- [开发备注](#dev-note) - - -## 声明 - -```yaml persistence-change -schemaVersion: 1 -id: 2026-09-27-team-relay-source -baseline: false -changes: - - root: "event:agent/inbox/spliced" - previous: "2026-09-16-session-format-v4" - after: "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4" - decision: same-version - - root: "event:developer/message" - previous: "2026-09-16-session-format-v4" - after: "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e" - decision: same-version - - root: "event:session/title-llm-request" - previous: "2026-09-16-session-format-v4" - after: "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7" - decision: same-version - - root: "event:user/message" - previous: "2026-09-16-session-format-v4" - after: "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58" - decision: same-version -``` - - -## 兼容性 - -已有 agent-message 和历史 team-message 记录保持不变。新 kind 仅记录 senderSessionId、senderName 和 relay form,不增加回放、校验或权限要求。当前 V4 读取方在没有 Team 生产者时仍保留未知归属类型及其 JSON 元数据。旧客户端可以使用通用来源展示已记录的正文。 - - -## 验证 - -pnpm exec vitest run packages/experimental/agent-team packages/experimental/tool-agent-team packages/client/ui-chat/tests/turn-trigger.client.spec.tsx:129 个测试通过。pnpm exec vitest run packages/experimental/agent-team/tests/persistence.spec.ts packages/session/session-format-v3-to-v4/tests/attribution.spec.ts packages/session/session-format-v3-to-v4/tests/message-sources.spec.ts:16 个测试通过,包含卸载 Team 后的目标 inbox 恢复。pnpm run test:snapshot -t 'team-direct-inbox|team-targets':2 个场景通过。 - - -## 开发备注 - -无。 diff --git a/docs/persistence-changes/historical-formats/README.i18n.yaml b/docs/persistence-changes/historical-formats/README.i18n.yaml index f3142d932e..4579af471a 100644 --- a/docs/persistence-changes/historical-formats/README.i18n.yaml +++ b/docs/persistence-changes/historical-formats/README.i18n.yaml @@ -15,8 +15,8 @@ en: 14c57f30e676f6e3 zh: b1a0ccf26fab3727 /session-persistence-formats/format-references: - en: 4fd2ce623e49ee0c - zh: 205db03929396361 + en: 45dba01dd6d69c80 + zh: c366d1a3991118c9 /session-persistence-formats/scope-and-evidence: en: b220062139ddac1e zh: 7c4c0efe05dafa9c diff --git a/docs/persistence-changes/historical-formats/README.md b/docs/persistence-changes/historical-formats/README.md index 453137b6f1..a1064e8158 100644 --- a/docs/persistence-changes/historical-formats/README.md +++ b/docs/persistence-changes/historical-formats/README.md @@ -32,7 +32,7 @@ The index is generated from validated snapshots and the current writer constant. | 1 | PR #3349 | [V1](v1.md) | [JSON](v1.schema.json) | 54 / 415 | | 2 | `dsh-v0.1.3-alpha.2` | [V2](v2.md) | [JSON](v2.schema.json) | 56 / 435 | | 3 | PR #4320 | [V3](v3.md) | [JSON](v3.schema.json) | 60 / 467 | -| 4 | Current checkout | [Current catalog](../../persistence-catalog.md) | [JSON](../../persistence-schema.json) | 62 / 589 | +| 4 | Current checkout | [Current catalog](../../persistence-catalog.md) | [JSON](../../persistence-schema.json) | 62 / 587 | diff --git a/docs/persistence-changes/historical-formats/README.zh.md b/docs/persistence-changes/historical-formats/README.zh.md index a64ce4f1e0..87c9d32fa6 100644 --- a/docs/persistence-changes/historical-formats/README.zh.md +++ b/docs/persistence-changes/historical-formats/README.zh.md @@ -32,7 +32,7 @@ description: "查找从 V0 到工作区写入器版本的每个 Session 格式 | 1 | PR #3349 | [V1](v1.zh.md) | [JSON](v1.schema.json) | 54 / 415 | | 2 | `dsh-v0.1.3-alpha.2` | [V2](v2.zh.md) | [JSON](v2.schema.json) | 56 / 435 | | 3 | PR #4320 | [V3](v3.zh.md) | [JSON](v3.schema.json) | 60 / 467 | -| 4 | 当前工作树 | [当前目录](../../persistence-catalog.zh.md) | [JSON](../../persistence-schema.json) | 62 / 589 | +| 4 | 当前工作树 | [当前目录](../../persistence-catalog.zh.md) | [JSON](../../persistence-schema.json) | 62 / 587 | diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index 5cd63d98b4..3766e14c52 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -406,7 +406,7 @@ "kind": "event", "event": "agent/inbox/spliced", "surface": false, - "digest": "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4", + "digest": "1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c", "schema": { "root": 0, "nodes": [ @@ -435,7 +435,7 @@ }, { "name": "type", - "type": 201, + "type": 199, "optional": false } ], @@ -451,7 +451,7 @@ }, { "name": "outcome", - "type": 197, + "type": 195, "optional": true }, { @@ -466,7 +466,7 @@ }, { "name": "target", - "type": 198, + "type": 196, "optional": false } ], @@ -505,7 +505,6 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -822,9 +821,9 @@ 43, 45, 47, - 49, - 51, - 53, + 50, + 52, + 54, 56, 58, 60, @@ -835,9 +834,9 @@ 66, 67, 68, - 69, 70, 71, + 72, 73, 74, 75, @@ -848,9 +847,9 @@ 80, 81, 82, - 83, 84, 85, + 86, 87, 88, 89, @@ -861,9 +860,9 @@ 94, 95, 96, - 97, 98, 99, + 100, 101, 102, 103, @@ -874,38 +873,38 @@ 108, 109, 110, - 111, 112, - 113, - 115, + 114, 117, + 118, + 119, 120, 121, - 122, 123, 124, + 125, 126, - 127, 128, 129, + 130, 131, 132, - 133, 134, 135, - 137, + 136, 138, 139, - 141, - 142, + 147, + 149, 150, 152, - 153, - 155, - 157, - 161, - 163, - 171, + 154, + 158, + 160, + 168, + 172, + 173, + 174, 175, 176, 177, @@ -916,15 +915,14 @@ 182, 183, 184, - 185, 186, - 187, + 188, 189, + 190, 191, + 192, 193, - 194, - 195, - 196 + 194 ] }, { @@ -952,81 +950,6 @@ "kind": "literal", "value": "notice" }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "time-context" @@ -1041,7 +964,7 @@ }, { "name": "kind", - "type": 44, + "type": 38, "optional": false }, { @@ -1066,7 +989,7 @@ }, { "name": "kind", - "type": 46, + "type": 40, "optional": false }, { @@ -1091,7 +1014,7 @@ }, { "name": "kind", - "type": 48, + "type": 42, "optional": false }, { @@ -1116,7 +1039,7 @@ }, { "name": "kind", - "type": 50, + "type": 44, "optional": false }, { @@ -1141,7 +1064,7 @@ }, { "name": "kind", - "type": 52, + "type": 46, "optional": false }, { @@ -1161,12 +1084,12 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { "name": "kind", - "type": 55, + "type": 49, "optional": false } ], @@ -1185,12 +1108,12 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { "name": "kind", - "type": 57, + "type": 51, "optional": false } ], @@ -1205,12 +1128,12 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { "name": "kind", - "type": 59, + "type": 53, "optional": false } ], @@ -1225,12 +1148,12 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { "name": "kind", - "type": 61, + "type": 55, "optional": false } ], @@ -1245,7 +1168,67 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, "optional": false }, { @@ -1261,7 +1244,7 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { @@ -1277,7 +1260,7 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { @@ -1293,7 +1276,7 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { @@ -1309,7 +1292,7 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { @@ -1325,7 +1308,7 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { @@ -1341,60 +1324,12 @@ "properties": [ { "name": "form", - "type": 54, + "type": 69, "optional": false }, { "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 55, + "type": 49, "optional": false } ], @@ -1409,7 +1344,55 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, "optional": false }, { @@ -1425,7 +1408,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1441,7 +1424,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1457,7 +1440,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1473,7 +1456,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1489,7 +1472,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1505,7 +1488,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1521,7 +1504,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1537,7 +1520,7 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { @@ -1553,60 +1536,12 @@ "properties": [ { "name": "form", - "type": 72, + "type": 83, "optional": false }, { "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 55, + "type": 49, "optional": false } ], @@ -1621,7 +1556,55 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, "optional": false }, { @@ -1637,7 +1620,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1653,7 +1636,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1669,7 +1652,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1685,7 +1668,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1701,7 +1684,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1717,7 +1700,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1733,7 +1716,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1749,7 +1732,7 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { @@ -1765,60 +1748,12 @@ "properties": [ { "name": "form", - "type": 86, + "type": 97, "optional": false }, { "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 55, + "type": 49, "optional": false } ], @@ -1833,7 +1768,55 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, "optional": false }, { @@ -1849,7 +1832,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1865,7 +1848,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1881,7 +1864,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1897,7 +1880,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1913,7 +1896,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1929,7 +1912,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1945,7 +1928,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1961,7 +1944,7 @@ "properties": [ { "name": "form", - "type": 100, + "type": 97, "optional": false }, { @@ -1972,54 +1955,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -2030,7 +1965,7 @@ }, { "name": "kind", - "type": 114, + "type": 111, "optional": false }, { @@ -2055,7 +1990,7 @@ "properties": [ { "name": "kind", - "type": 116, + "type": 113, "optional": false }, { @@ -2090,7 +2025,7 @@ "properties": [ { "name": "kind", - "type": 118, + "type": 115, "optional": false }, { @@ -2105,7 +2040,7 @@ }, { "name": "replayState", - "type": 119, + "type": 116, "optional": true } ], @@ -2119,6 +2054,39 @@ "kind": "opaque", "reason": "unknown" }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -2130,6 +2098,21 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 122, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, { "kind": "object", "properties": [ @@ -2168,7 +2151,7 @@ "properties": [ { "name": "kind", - "type": 125, + "type": 127, "optional": false } ], @@ -2176,7 +2159,7 @@ }, { "kind": "literal", - "value": "ptc-mode" + "value": "system-prompt" }, { "kind": "object", @@ -2211,21 +2194,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, { "kind": "object", "properties": [ @@ -2242,40 +2210,7 @@ "properties": [ { "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 136, + "type": 133, "optional": false } ], @@ -2301,7 +2236,7 @@ "properties": [ { "name": "kind", - "type": 50, + "type": 44, "optional": false } ], @@ -2312,7 +2247,7 @@ "properties": [ { "name": "kind", - "type": 140, + "type": 137, "optional": false } ], @@ -2327,7 +2262,7 @@ "properties": [ { "name": "kind", - "type": 52, + "type": 46, "optional": false } ], @@ -2348,17 +2283,17 @@ }, { "name": "changes", - "type": 143, + "type": 140, "optional": false }, { "name": "form", - "type": 54, + "type": 48, "optional": false }, { "name": "kind", - "type": 149, + "type": 146, "optional": false } ], @@ -2366,14 +2301,14 @@ }, { "kind": "array", - "element": 144 + "element": 141 }, { "kind": "object", "properties": [ { "name": "action", - "type": 145, + "type": 142, "optional": false }, { @@ -2397,9 +2332,9 @@ { "kind": "union", "types": [ - 146, - 147, - 148 + 143, + 144, + 145 ] }, { @@ -2428,7 +2363,7 @@ }, { "name": "kind", - "type": 151, + "type": 148, "optional": false } ], @@ -2469,7 +2404,7 @@ }, { "name": "kind", - "type": 154, + "type": 151, "optional": false }, { @@ -2499,7 +2434,7 @@ }, { "name": "kind", - "type": 156, + "type": 153, "optional": false }, { @@ -2534,17 +2469,17 @@ "properties": [ { "name": "entries", - "type": 158, + "type": 155, "optional": false }, { "name": "form", - "type": 100, + "type": 97, "optional": false }, { "name": "kind", - "type": 160, + "type": 157, "optional": false }, { @@ -2557,7 +2492,7 @@ }, { "kind": "array", - "element": 159 + "element": 156 }, { "kind": "object", @@ -2584,12 +2519,12 @@ "properties": [ { "name": "form", - "type": 54, + "type": 48, "optional": false }, { "name": "kind", - "type": 162, + "type": 159, "optional": false }, { @@ -2609,22 +2544,22 @@ "properties": [ { "name": "form", - "type": 72, + "type": 69, "optional": false }, { "name": "kind", - "type": 164, + "type": 161, "optional": false }, { "name": "references", - "type": 165, + "type": 162, "optional": false }, { "name": "version", - "type": 170, + "type": 167, "optional": false } ], @@ -2636,7 +2571,7 @@ }, { "kind": "array", - "element": 166 + "element": 163 }, { "kind": "object", @@ -2648,12 +2583,12 @@ }, { "name": "capturedThroughSeq", - "type": 167, + "type": 164, "optional": false }, { "name": "compacted", - "type": 169, + "type": 166, "optional": false }, { @@ -2693,7 +2628,7 @@ }, { "name": "truncated", - "type": 169, + "type": 166, "optional": false } ], @@ -2703,7 +2638,7 @@ "kind": "union", "types": [ 20, - 168 + 165 ] }, { @@ -2723,17 +2658,17 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { "name": "kind", - "type": 55, + "type": 49, "optional": false }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2745,7 +2680,7 @@ }, { "kind": "array", - "element": 174 + "element": 171 }, { "kind": "object", @@ -2768,7 +2703,70 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, "optional": false }, { @@ -2778,7 +2776,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2789,7 +2787,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2799,7 +2797,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2810,7 +2808,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2820,7 +2818,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2831,7 +2829,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2841,7 +2839,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2852,7 +2850,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2862,7 +2860,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2873,7 +2871,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2883,7 +2881,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2894,7 +2892,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2904,7 +2902,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2915,7 +2913,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2925,7 +2923,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -2936,7 +2934,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -2946,105 +2944,12 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, { "kind": "object", "properties": [ @@ -3055,7 +2960,7 @@ }, { "name": "kind", - "type": 190, + "type": 185, "optional": false }, { @@ -3080,12 +2985,12 @@ "properties": [ { "name": "form", - "type": 86, + "type": 83, "optional": false }, { "name": "kind", - "type": 192, + "type": 187, "optional": false }, { @@ -3100,6 +3005,69 @@ "kind": "literal", "value": "agent-message" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -3191,8 +3159,8 @@ { "kind": "union", "types": [ - 199, - 200 + 197, + 198 ] }, { @@ -6555,7 +6523,7 @@ "kind": "event", "event": "developer/message", "surface": true, - "digest": "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e", + "digest": "eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80", "schema": { "root": 0, "nodes": [ @@ -6579,12 +6547,12 @@ }, { "name": "sourceEventSeqs", - "type": 197, + "type": 195, "optional": true }, { "name": "surfaceOp", - "type": 198, + "type": 196, "optional": false }, { @@ -6594,7 +6562,7 @@ }, { "name": "type", - "type": 201, + "type": 199, "optional": false } ], @@ -6659,7 +6627,6 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -6972,9 +6939,9 @@ 42, 44, 46, - 48, - 50, - 52, + 49, + 51, + 53, 55, 57, 59, @@ -6985,9 +6952,9 @@ 65, 66, 67, - 68, 69, 70, + 71, 72, 73, 74, @@ -6998,9 +6965,9 @@ 79, 80, 81, - 82, 83, 84, + 85, 86, 87, 88, @@ -7011,9 +6978,9 @@ 93, 94, 95, - 96, 97, 98, + 99, 100, 101, 102, @@ -7024,38 +6991,38 @@ 107, 108, 109, - 110, 111, - 112, - 114, + 113, 116, + 117, + 118, 119, 120, - 121, 122, 123, + 124, 125, - 126, 127, 128, + 129, 130, 131, - 132, 133, - 134, + 135, 136, 138, 139, - 141, - 142, + 147, + 149, 150, 152, - 153, - 155, - 157, - 161, - 163, - 171, + 154, + 158, + 160, + 168, + 172, + 173, + 174, 175, 176, 177, @@ -7066,15 +7033,14 @@ 182, 183, 184, - 185, 186, - 187, + 188, 189, + 190, 191, + 192, 193, - 194, - 195, - 196 + 194 ] }, { @@ -7102,81 +7068,6 @@ "kind": "literal", "value": "notice" }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "time-context" @@ -7191,7 +7082,7 @@ }, { "name": "kind", - "type": 43, + "type": 37, "optional": false }, { @@ -7216,7 +7107,7 @@ }, { "name": "kind", - "type": 45, + "type": 39, "optional": false }, { @@ -7241,7 +7132,7 @@ }, { "name": "kind", - "type": 47, + "type": 41, "optional": false }, { @@ -7266,7 +7157,7 @@ }, { "name": "kind", - "type": 49, + "type": 43, "optional": false }, { @@ -7291,7 +7182,7 @@ }, { "name": "kind", - "type": 51, + "type": 45, "optional": false }, { @@ -7311,12 +7202,12 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { "name": "kind", - "type": 54, + "type": 48, "optional": false } ], @@ -7335,12 +7226,12 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { "name": "kind", - "type": 56, + "type": 50, "optional": false } ], @@ -7355,12 +7246,12 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { "name": "kind", - "type": 58, + "type": 52, "optional": false } ], @@ -7375,12 +7266,12 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { "name": "kind", - "type": 60, + "type": 54, "optional": false } ], @@ -7395,7 +7286,67 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 47, "optional": false }, { @@ -7411,7 +7362,7 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { @@ -7427,7 +7378,7 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { @@ -7443,7 +7394,7 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { @@ -7459,7 +7410,7 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { @@ -7475,7 +7426,7 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { @@ -7491,60 +7442,12 @@ "properties": [ { "name": "form", - "type": 53, + "type": 68, "optional": false }, { "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 54, + "type": 48, "optional": false } ], @@ -7559,7 +7462,55 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, "optional": false }, { @@ -7575,7 +7526,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7591,7 +7542,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7607,7 +7558,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7623,7 +7574,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7639,7 +7590,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7655,7 +7606,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7671,7 +7622,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7687,7 +7638,7 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { @@ -7703,60 +7654,12 @@ "properties": [ { "name": "form", - "type": 71, + "type": 82, "optional": false }, { "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 54, + "type": 48, "optional": false } ], @@ -7771,7 +7674,55 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 82, "optional": false }, { @@ -7787,7 +7738,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7803,7 +7754,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7819,7 +7770,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7835,7 +7786,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7851,7 +7802,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7867,7 +7818,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7883,7 +7834,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7899,7 +7850,7 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { @@ -7915,60 +7866,12 @@ "properties": [ { "name": "form", - "type": 85, + "type": 96, "optional": false }, { "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 54, + "type": 48, "optional": false } ], @@ -7983,7 +7886,55 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, "optional": false }, { @@ -7999,7 +7950,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8015,7 +7966,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8031,7 +7982,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8047,7 +7998,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8063,7 +8014,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8079,7 +8030,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8095,7 +8046,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8111,7 +8062,7 @@ "properties": [ { "name": "form", - "type": 99, + "type": 96, "optional": false }, { @@ -8122,54 +8073,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -8180,7 +8083,7 @@ }, { "name": "kind", - "type": 113, + "type": 110, "optional": false }, { @@ -8205,7 +8108,7 @@ "properties": [ { "name": "kind", - "type": 115, + "type": 112, "optional": false }, { @@ -8240,7 +8143,7 @@ "properties": [ { "name": "kind", - "type": 117, + "type": 114, "optional": false }, { @@ -8255,7 +8158,7 @@ }, { "name": "replayState", - "type": 118, + "type": 115, "optional": true } ], @@ -8269,6 +8172,39 @@ "kind": "opaque", "reason": "unknown" }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -8280,6 +8216,21 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 121, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, { "kind": "object", "properties": [ @@ -8318,7 +8269,7 @@ "properties": [ { "name": "kind", - "type": 124, + "type": 126, "optional": false } ], @@ -8326,7 +8277,7 @@ }, { "kind": "literal", - "value": "ptc-mode" + "value": "system-prompt" }, { "kind": "object", @@ -8366,7 +8317,18 @@ "properties": [ { "name": "kind", - "type": 129, + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 132, "optional": false } ], @@ -8374,19 +8336,23 @@ }, { "kind": "literal", - "value": "system-prompt" + "value": "tool-registry" }, { "kind": "object", "properties": [ { "name": "kind", - "type": 41, + "type": 134, "optional": false } ], "indices": [] }, + { + "kind": "literal", + "value": "user" + }, { "kind": "object", "properties": [ @@ -8398,43 +8364,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 135, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, { "kind": "object", "properties": [ @@ -8446,32 +8375,6 @@ ], "indices": [] }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 140, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "cordis-host-runner" @@ -8481,7 +8384,7 @@ "properties": [ { "name": "kind", - "type": 51, + "type": 45, "optional": false } ], @@ -8502,17 +8405,17 @@ }, { "name": "changes", - "type": 143, + "type": 140, "optional": false }, { "name": "form", - "type": 53, + "type": 47, "optional": false }, { "name": "kind", - "type": 149, + "type": 146, "optional": false } ], @@ -8520,14 +8423,14 @@ }, { "kind": "array", - "element": 144 + "element": 141 }, { "kind": "object", "properties": [ { "name": "action", - "type": 145, + "type": 142, "optional": false }, { @@ -8551,9 +8454,9 @@ { "kind": "union", "types": [ - 146, - 147, - 148 + 143, + 144, + 145 ] }, { @@ -8582,7 +8485,7 @@ }, { "name": "kind", - "type": 151, + "type": 148, "optional": false } ], @@ -8602,7 +8505,7 @@ }, { "name": "kind", - "type": 137, + "type": 134, "optional": false }, { @@ -8623,7 +8526,7 @@ }, { "name": "kind", - "type": 154, + "type": 151, "optional": false }, { @@ -8653,7 +8556,7 @@ }, { "name": "kind", - "type": 156, + "type": 153, "optional": false }, { @@ -8688,17 +8591,17 @@ "properties": [ { "name": "entries", - "type": 158, + "type": 155, "optional": false }, { "name": "form", - "type": 99, + "type": 96, "optional": false }, { "name": "kind", - "type": 160, + "type": 157, "optional": false }, { @@ -8711,7 +8614,7 @@ }, { "kind": "array", - "element": 159 + "element": 156 }, { "kind": "object", @@ -8738,12 +8641,12 @@ "properties": [ { "name": "form", - "type": 53, + "type": 47, "optional": false }, { "name": "kind", - "type": 162, + "type": 159, "optional": false }, { @@ -8763,22 +8666,22 @@ "properties": [ { "name": "form", - "type": 71, + "type": 68, "optional": false }, { "name": "kind", - "type": 164, + "type": 161, "optional": false }, { "name": "references", - "type": 165, + "type": 162, "optional": false }, { "name": "version", - "type": 170, + "type": 167, "optional": false } ], @@ -8790,7 +8693,7 @@ }, { "kind": "array", - "element": 166 + "element": 163 }, { "kind": "object", @@ -8802,12 +8705,12 @@ }, { "name": "capturedThroughSeq", - "type": 167, + "type": 164, "optional": false }, { "name": "compacted", - "type": 169, + "type": 166, "optional": false }, { @@ -8847,7 +8750,7 @@ }, { "name": "truncated", - "type": 169, + "type": 166, "optional": false } ], @@ -8857,7 +8760,7 @@ "kind": "union", "types": [ 2, - 168 + 165 ] }, { @@ -8877,17 +8780,17 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { "name": "kind", - "type": 54, + "type": 48, "optional": false }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -8899,7 +8802,7 @@ }, { "kind": "array", - "element": 174 + "element": 171 }, { "kind": "object", @@ -8922,7 +8825,70 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, "optional": false }, { @@ -8932,7 +8898,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -8943,7 +8909,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -8953,7 +8919,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -8964,7 +8930,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -8974,7 +8940,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -8985,7 +8951,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -8995,7 +8961,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -9006,7 +8972,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -9016,7 +8982,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -9027,7 +8993,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -9037,7 +9003,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -9048,7 +9014,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -9058,7 +9024,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -9069,7 +9035,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -9079,7 +9045,7 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], @@ -9090,7 +9056,7 @@ "properties": [ { "name": "form", - "type": 172, + "type": 169, "optional": false }, { @@ -9100,105 +9066,12 @@ }, { "name": "sections", - "type": 173, + "type": 170, "optional": false } ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, { "kind": "object", "properties": [ @@ -9209,7 +9082,7 @@ }, { "name": "kind", - "type": 190, + "type": 185, "optional": false }, { @@ -9234,12 +9107,12 @@ "properties": [ { "name": "form", - "type": 85, + "type": 82, "optional": false }, { "name": "kind", - "type": 192, + "type": 187, "optional": false }, { @@ -9254,6 +9127,69 @@ "kind": "literal", "value": "agent-message" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -9345,8 +9281,8 @@ { "kind": "union", "types": [ - 199, - 200 + 197, + 198 ] }, { @@ -9363,7 +9299,7 @@ }, { "name": "op", - "type": 147, + "type": 144, "optional": false }, { @@ -11858,7 +11794,7 @@ "kind": "event", "event": "session/title-llm-request", "surface": false, - "digest": "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7", + "digest": "fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d", "schema": { "root": 0, "nodes": [ @@ -11887,7 +11823,7 @@ }, { "name": "type", - "type": 207, + "type": 205, "optional": false } ], @@ -11913,7 +11849,7 @@ }, { "name": "route", - "type": 206, + "type": 204, "optional": false }, { @@ -11946,9 +11882,9 @@ "types": [ 6, 37, - 201, - 202, - 204 + 199, + 200, + 202 ] }, { @@ -12197,14 +12133,6 @@ 27 ] }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, { "kind": "literal", "value": "image/png" @@ -12213,6 +12141,14 @@ "kind": "literal", "value": "image/webp" }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, { "kind": "object", "properties": [ @@ -12331,7 +12267,6 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -12356,22 +12291,25 @@ 53, 55, 57, - 60, - 62, - 64, - 66, - 68, + 59, + 61, 70, 72, - 81, - 82, - 84, - 86, - 88, - 93, + 74, + 76, + 78, + 80, + 85, + 87, 95, + 100, + 102, 103, + 104, + 105, + 106, 107, + 108, 109, 110, 111, @@ -12380,6 +12318,7 @@ 114, 115, 116, + 117, 118, 119, 120, @@ -12403,10 +12342,8 @@ 138, 139, 140, - 141, 142, 143, - 144, 145, 146, 147, @@ -12424,7 +12361,6 @@ 159, 160, 161, - 162, 163, 164, 165, @@ -12435,27 +12371,25 @@ 170, 171, 172, - 173, 174, 175, - 176, 177, - 178, - 179, + 180, 181, + 182, 183, + 184, 186, 187, 188, + 189, 190, - 191, 192, + 193, 194, 195, 196, - 197, - 199, - 200 + 198 ] }, { @@ -12471,11 +12405,6 @@ "type": 42, "optional": false }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - }, { "name": "summary", "type": 10, @@ -12490,7 +12419,7 @@ }, { "kind": "literal", - "value": "subagent-settled" + "value": "model-selection" }, { "kind": "object", @@ -12505,7 +12434,7 @@ }, { "kind": "literal", - "value": "tool-goal" + "value": "user-approval" }, { "kind": "object", @@ -12520,7 +12449,7 @@ }, { "kind": "literal", - "value": "tool-jobs" + "value": "cordis-host-runner" }, { "kind": "object", @@ -12533,99 +12462,10 @@ ], "indices": [] }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "dsh-session-title-llm" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "agent-message" - }, { "kind": "object", "properties": [ @@ -12636,82 +12476,7 @@ }, { "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 67, + "type": 50, "optional": false }, { @@ -12736,7 +12501,7 @@ }, { "name": "kind", - "type": 69, + "type": 52, "optional": false }, { @@ -12761,7 +12526,7 @@ }, { "name": "kind", - "type": 71, + "type": 54, "optional": false }, { @@ -12776,6 +12541,81 @@ "kind": "literal", "value": "runtime-context" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, { "kind": "object", "properties": [ @@ -12791,17 +12631,17 @@ }, { "name": "changes", - "type": 73, + "type": 62, "optional": false }, { "name": "form", - "type": 79, + "type": 68, "optional": false }, { "name": "kind", - "type": 80, + "type": 69, "optional": false } ], @@ -12809,14 +12649,14 @@ }, { "kind": "array", - "element": 74 + "element": 63 }, { "kind": "object", "properties": [ { "name": "action", - "type": 75, + "type": 64, "optional": false }, { @@ -12840,9 +12680,9 @@ { "kind": "union", "types": [ - 76, - 77, - 78 + 65, + 66, + 67 ] }, { @@ -12875,7 +12715,7 @@ }, { "name": "kind", - "type": 50, + "type": 71, "optional": false }, { @@ -12886,6 +12726,10 @@ ], "indices": [] }, + { + "kind": "literal", + "value": "user" + }, { "kind": "object", "properties": [ @@ -12896,7 +12740,7 @@ }, { "name": "kind", - "type": 83, + "type": 73, "optional": false }, { @@ -12921,7 +12765,7 @@ }, { "name": "kind", - "type": 85, + "type": 75, "optional": false }, { @@ -12934,7 +12778,7 @@ }, { "kind": "literal", - "value": "schedule" + "value": "tool-goal" }, { "kind": "object", @@ -12951,7 +12795,7 @@ }, { "name": "kind", - "type": 87, + "type": 77, "optional": false }, { @@ -12984,19 +12828,44 @@ { "kind": "object", "properties": [ - { - "name": "entries", - "type": 89, - "optional": false - }, { "name": "form", - "type": 91, + "type": 41, "optional": false }, { "name": "kind", - "type": 92, + "type": 79, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 81, + "optional": false + }, + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 84, "optional": false }, { @@ -13009,7 +12878,7 @@ }, { "kind": "array", - "element": 90 + "element": 82 }, { "kind": "object", @@ -13040,12 +12909,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 68, "optional": false }, { "name": "kind", - "type": 94, + "type": 86, "optional": false }, { @@ -13065,22 +12934,22 @@ "properties": [ { "name": "form", - "type": 96, + "type": 88, "optional": false }, { "name": "kind", - "type": 97, + "type": 89, "optional": false }, { "name": "references", - "type": 98, + "type": 90, "optional": false }, { "name": "version", - "type": 102, + "type": 94, "optional": false } ], @@ -13096,7 +12965,7 @@ }, { "kind": "array", - "element": 99 + "element": 91 }, { "kind": "object", @@ -13108,7 +12977,7 @@ }, { "name": "capturedThroughSeq", - "type": 100, + "type": 92, "optional": false }, { @@ -13163,7 +13032,7 @@ "kind": "union", "types": [ 2, - 101 + 93 ] }, { @@ -13179,17 +13048,17 @@ "properties": [ { "name": "form", - "type": 104, + "type": 96, "optional": false }, { "name": "kind", - "type": 61, + "type": 97, "optional": false }, { "name": "sections", - "type": 105, + "type": 98, "optional": false } ], @@ -13199,9 +13068,13 @@ "kind": "literal", "value": "snapshot" }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, { "kind": "array", - "element": 106 + "element": 99 }, { "kind": "object", @@ -13219,6 +13092,115 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -13229,7 +13211,601 @@ }, { "name": "kind", - "type": 108, + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, "optional": false }, { @@ -13242,24 +13818,19 @@ }, { "kind": "literal", - "value": "time-context" + "value": "subagent-settled" }, { "kind": "object", "properties": [ { "name": "form", - "type": 104, + "type": 88, "optional": false }, { "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "sections", - "type": 105, + "type": 48, "optional": false } ], @@ -13270,143 +13841,12 @@ "properties": [ { "name": "form", - "type": 104, + "type": 144, "optional": false }, { "name": "kind", - "type": 65, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - }, - { - "name": "sections", - "type": 105, + "type": 97, "optional": false } ], @@ -13414,23 +13854,279 @@ }, { "kind": "literal", - "value": "tmux-context" + "value": "relay" }, { "kind": "object", "properties": [ { "name": "form", - "type": 41, + "type": 144, "optional": false }, { "name": "kind", - "type": 117, + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, "optional": false }, { - "name": "summary", + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 162, + "optional": false + }, + { + "name": "senderSessionId", "type": 10, "optional": false } @@ -13438,271 +14134,15 @@ "indices": [] }, { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] + "kind": "literal", + "value": "agent-message" }, { "kind": "object", "properties": [ { "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, + "type": 83, "optional": false }, { @@ -13718,17 +14158,12 @@ "properties": [ { "name": "form", - "type": 104, + "type": 83, "optional": false }, { "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 105, + "type": 54, "optional": false } ], @@ -13739,13 +14174,77 @@ "properties": [ { "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", "type": 79, "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false } ], "indices": [] @@ -13755,172 +14254,7 @@ "properties": [ { "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, + "type": 83, "optional": false }, { @@ -13936,502 +14270,12 @@ "properties": [ { "name": "form", - "type": 96, + "type": 83, "optional": false }, { "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 56, + "type": 48, "optional": false } ], @@ -14447,7 +14291,7 @@ }, { "name": "kind", - "type": 180, + "type": 173, "optional": false }, { @@ -14470,9 +14314,30 @@ { "kind": "object", "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, { "name": "kind", - "type": 182, + "type": 97, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 176, "optional": false }, { @@ -14507,7 +14372,7 @@ "properties": [ { "name": "kind", - "type": 184, + "type": 178, "optional": false }, { @@ -14522,7 +14387,7 @@ }, { "name": "replayState", - "type": 185, + "type": 179, "optional": true } ], @@ -14541,7 +14406,7 @@ "properties": [ { "name": "kind", - "type": 61, + "type": 97, "optional": false } ], @@ -14552,48 +14417,7 @@ "properties": [ { "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 189, - "optional": false - }, - { - "name": "senderName", - "type": 10, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 65, + "type": 101, "optional": false } ], @@ -14604,7 +14428,7 @@ "properties": [ { "name": "kind", - "type": 67, + "type": 42, "optional": false } ], @@ -14615,7 +14439,18 @@ "properties": [ { "name": "kind", - "type": 193, + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 185, "optional": false } ], @@ -14630,7 +14465,28 @@ "properties": [ { "name": "kind", - "type": 69, + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -14641,7 +14497,7 @@ "properties": [ { "name": "kind", - "type": 71, + "type": 54, "optional": false } ], @@ -14652,7 +14508,7 @@ "properties": [ { "name": "kind", - "type": 85, + "type": 56, "optional": false } ], @@ -14663,7 +14519,7 @@ "properties": [ { "name": "kind", - "type": 198, + "type": 191, "optional": false } ], @@ -14678,7 +14534,7 @@ "properties": [ { "name": "kind", - "type": 108, + "type": 58, "optional": false } ], @@ -14689,7 +14545,55 @@ "properties": [ { "name": "kind", - "type": 117, + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 197, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 71, "optional": false } ], @@ -14710,7 +14614,7 @@ }, { "name": "role", - "type": 50, + "type": 71, "optional": false }, { @@ -14724,7 +14628,6 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -14747,12 +14650,12 @@ }, { "name": "role", - "type": 203, + "type": 201, "optional": false }, { "name": "source", - "type": 183, + "type": 177, "optional": false } ], @@ -14777,12 +14680,12 @@ }, { "name": "role", - "type": 205, + "type": 203, "optional": false }, { "name": "source", - "type": 197, + "type": 190, "optional": false } ], @@ -18729,7 +18632,7 @@ "kind": "event", "event": "user/message", "surface": true, - "digest": "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58", + "digest": "3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761", "schema": { "root": 0, "nodes": [ @@ -18753,12 +18656,12 @@ }, { "name": "sourceEventSeqs", - "type": 195, + "type": 193, "optional": true }, { "name": "surfaceOp", - "type": 196, + "type": 194, "optional": false }, { @@ -18768,7 +18671,7 @@ }, { "name": "type", - "type": 199, + "type": 197, "optional": false } ], @@ -18803,7 +18706,6 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -19119,8 +19021,8 @@ 39, 41, 43, - 45, - 47, + 46, + 48, 50, 52, 54, @@ -19132,8 +19034,8 @@ 63, 64, 65, - 66, 67, + 68, 69, 70, 71, @@ -19145,8 +19047,8 @@ 77, 78, 79, - 80, 81, + 82, 83, 84, 85, @@ -19158,8 +19060,8 @@ 91, 92, 93, - 94, 95, + 96, 97, 98, 99, @@ -19171,37 +19073,37 @@ 105, 106, 107, - 108, 109, 111, - 113, + 114, + 115, 116, 117, 118, - 119, 120, + 121, 122, 123, - 124, 125, + 126, 127, 128, 129, - 130, 131, + 132, 133, - 134, 135, - 137, - 138, + 136, + 144, 146, - 148, + 147, 149, 151, - 153, + 155, 157, - 159, - 167, + 165, + 169, + 170, 171, 172, 173, @@ -19213,16 +19115,15 @@ 179, 180, 181, - 182, 183, 185, + 186, 187, + 188, 189, 190, 191, - 192, - 193, - 194 + 192 ] }, { @@ -19250,56 +19151,6 @@ "kind": "literal", "value": "notice" }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "tmux-context" @@ -19314,7 +19165,7 @@ }, { "name": "kind", - "type": 40, + "type": 36, "optional": false }, { @@ -19339,7 +19190,7 @@ }, { "name": "kind", - "type": 42, + "type": 38, "optional": false }, { @@ -19364,7 +19215,7 @@ }, { "name": "kind", - "type": 44, + "type": 40, "optional": false }, { @@ -19389,7 +19240,7 @@ }, { "name": "kind", - "type": 46, + "type": 42, "optional": false }, { @@ -19409,12 +19260,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 49, + "type": 45, "optional": false } ], @@ -19433,12 +19284,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 51, + "type": 47, "optional": false } ], @@ -19453,12 +19304,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 53, + "type": 49, "optional": false } ], @@ -19473,12 +19324,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 55, + "type": 51, "optional": false } ], @@ -19493,12 +19344,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 57, + "type": 53, "optional": false } ], @@ -19513,12 +19364,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 59, + "type": 55, "optional": false } ], @@ -19533,7 +19384,47 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, "optional": false }, { @@ -19549,7 +19440,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { @@ -19565,7 +19456,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { @@ -19581,7 +19472,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { @@ -19597,7 +19488,7 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { @@ -19613,44 +19504,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 66, "optional": false }, { "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 49, + "type": 45, "optional": false } ], @@ -19665,7 +19524,39 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, "optional": false }, { @@ -19681,7 +19572,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19697,7 +19588,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19713,7 +19604,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19729,7 +19620,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19745,7 +19636,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19761,7 +19652,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19777,7 +19668,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19793,7 +19684,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19809,7 +19700,7 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { @@ -19825,44 +19716,12 @@ "properties": [ { "name": "form", - "type": 68, + "type": 80, "optional": false }, { "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 49, + "type": 45, "optional": false } ], @@ -19877,7 +19736,39 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, "optional": false }, { @@ -19893,7 +19784,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -19909,7 +19800,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -19925,7 +19816,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -19941,7 +19832,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -19957,7 +19848,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -19973,7 +19864,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -19989,7 +19880,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -20005,7 +19896,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -20021,7 +19912,7 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { @@ -20037,44 +19928,12 @@ "properties": [ { "name": "form", - "type": 82, + "type": 94, "optional": false }, { "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 49, + "type": 45, "optional": false } ], @@ -20089,7 +19948,39 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, "optional": false }, { @@ -20105,7 +19996,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20121,7 +20012,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20137,7 +20028,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20153,7 +20044,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20169,7 +20060,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20185,7 +20076,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20201,7 +20092,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20217,7 +20108,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20233,7 +20124,7 @@ "properties": [ { "name": "form", - "type": 96, + "type": 94, "optional": false }, { @@ -20244,38 +20135,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -20286,7 +20145,7 @@ }, { "name": "kind", - "type": 110, + "type": 108, "optional": false }, { @@ -20311,7 +20170,7 @@ "properties": [ { "name": "kind", - "type": 112, + "type": 110, "optional": false }, { @@ -20346,7 +20205,7 @@ "properties": [ { "name": "kind", - "type": 114, + "type": 112, "optional": false }, { @@ -20361,7 +20220,7 @@ }, { "name": "replayState", - "type": 115, + "type": 113, "optional": true } ], @@ -20375,6 +20234,28 @@ "kind": "opaque", "reason": "unknown" }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -20397,6 +20278,21 @@ ], "indices": [] }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 119, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, { "kind": "object", "properties": [ @@ -20424,7 +20320,18 @@ "properties": [ { "name": "kind", - "type": 121, + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 124, "optional": false } ], @@ -20432,18 +20339,7 @@ }, { "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] + "value": "system-prompt" }, { "kind": "object", @@ -20467,21 +20363,6 @@ ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 126, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, { "kind": "object", "properties": [ @@ -20509,29 +20390,7 @@ "properties": [ { "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 132, + "type": 130, "optional": false } ], @@ -20557,7 +20416,7 @@ "properties": [ { "name": "kind", - "type": 44, + "type": 40, "optional": false } ], @@ -20568,7 +20427,7 @@ "properties": [ { "name": "kind", - "type": 136, + "type": 134, "optional": false } ], @@ -20583,7 +20442,7 @@ "properties": [ { "name": "kind", - "type": 46, + "type": 42, "optional": false } ], @@ -20604,17 +20463,17 @@ }, { "name": "changes", - "type": 139, + "type": 137, "optional": false }, { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 145, + "type": 143, "optional": false } ], @@ -20622,14 +20481,14 @@ }, { "kind": "array", - "element": 140 + "element": 138 }, { "kind": "object", "properties": [ { "name": "action", - "type": 141, + "type": 139, "optional": false }, { @@ -20653,9 +20512,9 @@ { "kind": "union", "types": [ - 142, - 143, - 144 + 140, + 141, + 142 ] }, { @@ -20684,7 +20543,7 @@ }, { "name": "kind", - "type": 147, + "type": 145, "optional": false } ], @@ -20725,7 +20584,7 @@ }, { "name": "kind", - "type": 150, + "type": 148, "optional": false }, { @@ -20755,7 +20614,7 @@ }, { "name": "kind", - "type": 152, + "type": 150, "optional": false }, { @@ -20790,17 +20649,17 @@ "properties": [ { "name": "entries", - "type": 154, + "type": 152, "optional": false }, { "name": "form", - "type": 96, + "type": 94, "optional": false }, { "name": "kind", - "type": 156, + "type": 154, "optional": false }, { @@ -20813,7 +20672,7 @@ }, { "kind": "array", - "element": 155 + "element": 153 }, { "kind": "object", @@ -20840,12 +20699,12 @@ "properties": [ { "name": "form", - "type": 48, + "type": 44, "optional": false }, { "name": "kind", - "type": 158, + "type": 156, "optional": false }, { @@ -20865,22 +20724,22 @@ "properties": [ { "name": "form", - "type": 68, + "type": 66, "optional": false }, { "name": "kind", - "type": 160, + "type": 158, "optional": false }, { "name": "references", - "type": 161, + "type": 159, "optional": false }, { "name": "version", - "type": 166, + "type": 164, "optional": false } ], @@ -20892,7 +20751,7 @@ }, { "kind": "array", - "element": 162 + "element": 160 }, { "kind": "object", @@ -20904,12 +20763,12 @@ }, { "name": "capturedThroughSeq", - "type": 163, + "type": 161, "optional": false }, { "name": "compacted", - "type": 165, + "type": 163, "optional": false }, { @@ -20949,7 +20808,7 @@ }, { "name": "truncated", - "type": 165, + "type": 163, "optional": false } ], @@ -20959,7 +20818,7 @@ "kind": "union", "types": [ 18, - 164 + 162 ] }, { @@ -20979,17 +20838,17 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { "name": "kind", - "type": 49, + "type": 45, "optional": false }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21001,7 +20860,7 @@ }, { "kind": "array", - "element": 170 + "element": 168 }, { "kind": "object", @@ -21024,7 +20883,49 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, "optional": false }, { @@ -21034,7 +20935,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21045,7 +20946,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21055,7 +20956,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21066,7 +20967,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21076,7 +20977,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21087,7 +20988,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21097,7 +20998,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21108,7 +21009,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21118,7 +21019,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21129,7 +21030,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21139,7 +21040,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21150,7 +21051,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21160,7 +21061,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21171,7 +21072,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21181,7 +21082,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21192,7 +21093,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21202,7 +21103,7 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], @@ -21213,7 +21114,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 166, "optional": false }, { @@ -21223,84 +21124,12 @@ }, { "name": "sections", - "type": 169, + "type": 167, "optional": false } ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, { "kind": "object", "properties": [ @@ -21311,7 +21140,7 @@ }, { "name": "kind", - "type": 186, + "type": 182, "optional": false }, { @@ -21336,12 +21165,12 @@ "properties": [ { "name": "form", - "type": 82, + "type": 80, "optional": false }, { "name": "kind", - "type": 188, + "type": 184, "optional": false }, { @@ -21356,6 +21185,48 @@ "kind": "literal", "value": "agent-message" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -21489,8 +21360,8 @@ { "kind": "union", "types": [ - 197, - 198 + 195, + 196 ] }, { @@ -21507,7 +21378,7 @@ }, { "name": "op", - "type": 143, + "type": 141, "optional": false }, { @@ -22000,2813 +21871,6 @@ "packages/core/session/src/types.ts:32" ] }, - { - "digest": "069fe0ac1098edd8c2582179e19aa1168db48efcbc41052d0b8a8d4a29d09dd4", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 27, - "optional": true - }, - { - "name": "seq", - "type": 20, - "optional": false - }, - { - "name": "time", - "type": 20, - "optional": false - }, - { - "name": "type", - "type": 201, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "inserted", - "type": 2, - "optional": false - }, - { - "name": "outcome", - "type": 197, - "optional": true - }, - { - "name": "removedCount", - "type": 20, - "optional": true - }, - { - "name": "start", - "type": 20, - "optional": false - }, - { - "name": "target", - "type": 198, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "role", - "type": 32, - "optional": false - }, - { - "name": "source", - "type": 33, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 9, - 11, - 14, - 16, - 18, - 29 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 12, - "optional": true - }, - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 19, - "optional": false - }, - { - "name": "offloaded", - "type": 27, - "optional": true - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 20, - "optional": false - }, - { - "name": "height", - "type": 20, - "optional": false - }, - { - "name": "mediaType", - "type": 21, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": true - }, - { - "name": "originalDimensions", - "type": 26, - "optional": true - }, - { - "name": "width", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 22, - 23, - 24, - 25 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 20, - "optional": false - }, - { - "name": "width", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 30, - "optional": false - }, - { - "name": "type", - "type": 31, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 20, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 34, - 37, - 39, - 41, - 43, - 45, - 47, - 49, - 51, - 53, - 56, - 58, - 60, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 115, - 117, - 120, - 121, - 122, - 123, - 124, - 126, - 127, - 128, - 129, - 131, - 132, - 133, - 134, - 135, - 137, - 138, - 139, - 141, - 142, - 150, - 152, - 153, - 155, - 157, - 161, - 163, - 171, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 189, - 191, - 193, - 194, - 195, - 196 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 114, - "optional": false - }, - { - "name": "revision", - "type": 20, - "optional": false - }, - { - "name": "round", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 116, - "optional": false - }, - { - "name": "messageId", - "type": 7, - "optional": false - }, - { - "name": "senderId", - "type": 7, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "teamId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 118, - "optional": false - }, - { - "name": "model", - "type": 7, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "replayState", - "type": 119, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 125, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 136, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 32, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 140, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 27, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 7, - "optional": true - }, - { - "name": "changes", - "type": 143, - "optional": false - }, - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 149, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 144 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 145, - "optional": false - }, - { - "name": "digest", - "type": 7, - "optional": true - }, - { - "name": "path", - "type": 7, - "optional": false - }, - { - "name": "scope", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 146, - 147, - 148 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 151, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 7, - "optional": true - }, - { - "name": "kind", - "type": 32, - "optional": false - }, - { - "name": "rpcId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 7, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 7, - "optional": false - }, - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "ruleId", - "type": 7, - "optional": false - }, - { - "name": "source", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 158, - "optional": false - }, - { - "name": "form", - "type": 100, - "optional": false - }, - { - "name": "kind", - "type": 160, - "optional": false - }, - { - "name": "update", - "type": 27, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 159 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 54, - "optional": false - }, - { - "name": "kind", - "type": 162, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 72, - "optional": false - }, - { - "name": "kind", - "type": 164, - "optional": false - }, - { - "name": "references", - "type": 165, - "optional": false - }, - { - "name": "version", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 166 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 20, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 167, - "optional": false - }, - { - "name": "compacted", - "type": 169, - "optional": false - }, - { - "name": "inputIndex", - "type": 20, - "optional": false - }, - { - "name": "label", - "type": 7, - "optional": false - }, - { - "name": "omittedBytes", - "type": 20, - "optional": false - }, - { - "name": "omittedMessages", - "type": 20, - "optional": false - }, - { - "name": "originalMessages", - "type": 20, - "optional": false - }, - { - "name": "retainedMessages", - "type": 20, - "optional": false - }, - { - "name": "sessionId", - "type": 7, - "optional": false - }, - { - "name": "truncated", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 20, - 168 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 174 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "text", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 190, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 86, - "optional": false - }, - { - "name": "kind", - "type": 192, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 35, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "canceled" - }, - { - "kind": "union", - "types": [ - 199, - 200 - ] - }, - { - "kind": "literal", - "value": "next-step" - }, - { - "kind": "literal", - "value": "next-turn" - }, - { - "kind": "literal", - "value": "agent/inbox/spliced" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235", "schema": { @@ -25483,2805 +22547,6 @@ "packages/goal/goal/src/types.ts:20" ] }, - { - "digest": "0ba8d5b72bf31a4148e9d1fabf661869806ec32fe0d86d92c49cdef691b22d58", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 25, - "optional": true - }, - { - "name": "seq", - "type": 18, - "optional": false - }, - { - "name": "sourceEventSeqs", - "type": 195, - "optional": true - }, - { - "name": "surfaceOp", - "type": 196, - "optional": false - }, - { - "name": "time", - "type": 18, - "optional": false - }, - { - "name": "type", - "type": 199, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 30, - "optional": false - }, - { - "name": "source", - "type": 31, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "union", - "types": [ - 4, - 7, - 9, - 12, - 14, - 16, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 10, - "optional": true - }, - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 5, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 17, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 32, - 35, - 37, - 39, - 41, - 43, - 45, - 47, - 50, - 52, - 54, - 56, - 58, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 111, - 113, - 116, - 117, - 118, - 119, - 120, - 122, - 123, - 124, - 125, - 127, - 128, - 129, - 130, - 131, - 133, - 134, - 135, - 137, - 138, - 146, - 148, - 149, - 151, - 153, - 157, - 159, - 167, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 185, - 187, - 189, - 190, - 191, - 192, - 193, - 194 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "revision", - "type": 18, - "optional": false - }, - { - "name": "round", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 112, - "optional": false - }, - { - "name": "messageId", - "type": 5, - "optional": false - }, - { - "name": "senderId", - "type": 5, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "teamId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 114, - "optional": false - }, - { - "name": "model", - "type": 5, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "replayState", - "type": 115, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 121, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 126, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 132, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 136, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 5, - "optional": true - }, - { - "name": "changes", - "type": 139, - "optional": false - }, - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 145, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 140 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 141, - "optional": false - }, - { - "name": "digest", - "type": 5, - "optional": true - }, - { - "name": "path", - "type": 5, - "optional": false - }, - { - "name": "scope", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 142, - 143, - 144 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 147, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 5, - "optional": true - }, - { - "name": "kind", - "type": 30, - "optional": false - }, - { - "name": "rpcId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 5, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 5, - "optional": false - }, - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "ruleId", - "type": 5, - "optional": false - }, - { - "name": "source", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 154, - "optional": false - }, - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 155 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 48, - "optional": false - }, - { - "name": "kind", - "type": 158, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 68, - "optional": false - }, - { - "name": "kind", - "type": 160, - "optional": false - }, - { - "name": "references", - "type": 161, - "optional": false - }, - { - "name": "version", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 162 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 18, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 163, - "optional": false - }, - { - "name": "compacted", - "type": 165, - "optional": false - }, - { - "name": "inputIndex", - "type": 18, - "optional": false - }, - { - "name": "label", - "type": 5, - "optional": false - }, - { - "name": "omittedBytes", - "type": 18, - "optional": false - }, - { - "name": "omittedMessages", - "type": 18, - "optional": false - }, - { - "name": "originalMessages", - "type": 18, - "optional": false - }, - { - "name": "retainedMessages", - "type": 18, - "optional": false - }, - { - "name": "sessionId", - "type": 5, - "optional": false - }, - { - "name": "truncated", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 18, - 164 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 170 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 168, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 186, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 18 - }, - { - "kind": "union", - "types": [ - 197, - 198 - ] - }, - { - "kind": "literal", - "value": "append" - }, - { - "kind": "object", - "properties": [ - { - "name": "endSeq", - "type": 18, - "optional": false - }, - { - "name": "op", - "type": 143, - "optional": false - }, - { - "name": "startSeq", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user/message" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "0bcfaf5566d271028429ac7b562cb59053c9d78b8ae14708c35fac835108d1b1", "schema": { @@ -28325,7 +22590,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:245" + "packages/experimental/agent-team/src/types.ts:236" ] }, { @@ -31088,2875 +25353,6 @@ "names": [], "sources": [] }, - { - "digest": "139bcc0c4019840db40b45e3e23dbcf44d93821ff5ebc064b8934a0a51d8b1b2", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "union", - "types": [ - 1, - 33, - 197, - 198, - 200 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "isError", - "type": 30, - "optional": true - }, - { - "name": "role", - "type": 31, - "optional": false - }, - { - "name": "source", - "type": 32, - "optional": false - }, - { - "name": "toolCallId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "union", - "types": [ - 4, - 7, - 9, - 12, - 14, - 16, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 10, - "optional": true - }, - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 5, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 17, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 31, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 34, - "optional": false - }, - { - "name": "source", - "type": 35, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 32, - 36, - 39, - 41, - 43, - 45, - 47, - 49, - 51, - 53, - 55, - 57, - 60, - 62, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 118, - 120, - 123, - 124, - 125, - 126, - 127, - 129, - 130, - 131, - 132, - 134, - 135, - 136, - 137, - 138, - 140, - 142, - 143, - 145, - 146, - 154, - 155, - 157, - 159, - 163, - 165, - 172, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 190, - 192, - 194, - 195, - 196 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - }, - { - "name": "revision", - "type": 18, - "optional": false - }, - { - "name": "round", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 119, - "optional": false - }, - { - "name": "messageId", - "type": 5, - "optional": false - }, - { - "name": "senderId", - "type": 5, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "teamId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 121, - "optional": false - }, - { - "name": "model", - "type": 5, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "replayState", - "type": 122, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 128, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 133, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 139, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 141, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 144, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 5, - "optional": true - }, - { - "name": "changes", - "type": 147, - "optional": false - }, - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 153, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 148 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 149, - "optional": false - }, - { - "name": "digest", - "type": 5, - "optional": true - }, - { - "name": "path", - "type": 5, - "optional": false - }, - { - "name": "scope", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 150, - 151, - 152 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 5, - "optional": true - }, - { - "name": "kind", - "type": 141, - "optional": false - }, - { - "name": "rpcId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 5, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 5, - "optional": false - }, - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 158, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "ruleId", - "type": 5, - "optional": false - }, - { - "name": "source", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 160, - "optional": false - }, - { - "name": "form", - "type": 103, - "optional": false - }, - { - "name": "kind", - "type": 162, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 161 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 164, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 75, - "optional": false - }, - { - "name": "kind", - "type": 166, - "optional": false - }, - { - "name": "references", - "type": 167, - "optional": false - }, - { - "name": "version", - "type": 171, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 168 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 18, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 169, - "optional": false - }, - { - "name": "compacted", - "type": 30, - "optional": false - }, - { - "name": "inputIndex", - "type": 18, - "optional": false - }, - { - "name": "label", - "type": 5, - "optional": false - }, - { - "name": "omittedBytes", - "type": 18, - "optional": false - }, - { - "name": "omittedMessages", - "type": 18, - "optional": false - }, - { - "name": "originalMessages", - "type": 18, - "optional": false - }, - { - "name": "retainedMessages", - "type": 18, - "optional": false - }, - { - "name": "sessionId", - "type": 5, - "optional": false - }, - { - "name": "truncated", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 18, - 170 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 175 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 173, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 174, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 189, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 191, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 89, - "optional": false - }, - { - "name": "kind", - "type": 193, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 141, - "optional": false - }, - { - "name": "source", - "type": 35, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 199, - "optional": false - }, - { - "name": "source", - "type": 120, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "assistant" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 201, - "optional": false - }, - { - "name": "source", - "type": 132, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system" - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#Message" - ], - "sources": [ - "packages/llm/llm/src/message.ts:196" - ] - }, { "digest": "13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176", "schema": { @@ -34083,6 +25479,2781 @@ "names": [], "sources": [] }, + { + "digest": "1506a9b8224986c83015ae99d2cb5ede705538c58c063d6a48ef6d761a31ba6c", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 27, + "optional": true + }, + { + "name": "seq", + "type": 20, + "optional": false + }, + { + "name": "time", + "type": 20, + "optional": false + }, + { + "name": "type", + "type": 199, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "inserted", + "type": 2, + "optional": false + }, + { + "name": "outcome", + "type": 195, + "optional": true + }, + { + "name": "removedCount", + "type": 20, + "optional": true + }, + { + "name": "start", + "type": 20, + "optional": false + }, + { + "name": "target", + "type": 196, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "role", + "type": 32, + "optional": false + }, + { + "name": "source", + "type": 33, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 9, + 11, + 14, + 16, + 18, + 29 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 12, + "optional": true + }, + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "type", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 19, + "optional": false + }, + { + "name": "offloaded", + "type": 27, + "optional": true + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 20, + "optional": false + }, + { + "name": "height", + "type": 20, + "optional": false + }, + { + "name": "mediaType", + "type": 21, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": true + }, + { + "name": "originalDimensions", + "type": 26, + "optional": true + }, + { + "name": "width", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 22, + 23, + 24, + 25 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 20, + "optional": false + }, + { + "name": "width", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 30, + "optional": false + }, + { + "name": "type", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 7, + "optional": false + }, + { + "name": "bytes", + "type": 20, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 34, + 37, + 39, + 41, + 43, + 45, + 47, + 50, + 52, + 54, + 56, + 58, + 60, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 112, + 114, + 117, + 118, + 119, + 120, + 121, + 123, + 124, + 125, + 126, + 128, + 129, + 130, + 131, + 132, + 134, + 135, + 136, + 138, + 139, + 147, + 149, + 150, + 152, + 154, + 158, + 160, + 168, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 186, + 188, + 189, + 190, + 191, + 192, + 193, + 194 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 111, + "optional": false + }, + { + "name": "revision", + "type": 20, + "optional": false + }, + { + "name": "round", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 113, + "optional": false + }, + { + "name": "messageId", + "type": 7, + "optional": false + }, + { + "name": "senderId", + "type": 7, + "optional": false + }, + { + "name": "senderName", + "type": 7, + "optional": false + }, + { + "name": "teamId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 115, + "optional": false + }, + { + "name": "model", + "type": 7, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "replayState", + "type": 116, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 122, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 127, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 133, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 32, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 137, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 27, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 7, + "optional": true + }, + { + "name": "changes", + "type": 140, + "optional": false + }, + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 146, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 141 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 142, + "optional": false + }, + { + "name": "digest", + "type": 7, + "optional": true + }, + { + "name": "path", + "type": 7, + "optional": false + }, + { + "name": "scope", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 143, + 144, + 145 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 148, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 7, + "optional": true + }, + { + "name": "kind", + "type": 32, + "optional": false + }, + { + "name": "rpcId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 7, + "optional": false + }, + { + "name": "kind", + "type": 151, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 7, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 7, + "optional": false + }, + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 153, + "optional": false + }, + { + "name": "provider", + "type": 7, + "optional": false + }, + { + "name": "ruleId", + "type": 7, + "optional": false + }, + { + "name": "source", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 155, + "optional": false + }, + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 157, + "optional": false + }, + { + "name": "update", + "type": 27, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 156 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 7, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 48, + "optional": false + }, + { + "name": "kind", + "type": 159, + "optional": false + }, + { + "name": "name", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 69, + "optional": false + }, + { + "name": "kind", + "type": 161, + "optional": false + }, + { + "name": "references", + "type": 162, + "optional": false + }, + { + "name": "version", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 163 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 20, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 164, + "optional": false + }, + { + "name": "compacted", + "type": 166, + "optional": false + }, + { + "name": "inputIndex", + "type": 20, + "optional": false + }, + { + "name": "label", + "type": 7, + "optional": false + }, + { + "name": "omittedBytes", + "type": 20, + "optional": false + }, + { + "name": "omittedMessages", + "type": 20, + "optional": false + }, + { + "name": "originalMessages", + "type": 20, + "optional": false + }, + { + "name": "retainedMessages", + "type": 20, + "optional": false + }, + { + "name": "sessionId", + "type": 7, + "optional": false + }, + { + "name": "truncated", + "type": 166, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 20, + 165 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 171 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 7, + "optional": false + }, + { + "name": "text", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 169, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 170, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 185, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 187, + "optional": false + }, + { + "name": "senderSessionId", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "canceled" + }, + { + "kind": "union", + "types": [ + 197, + 198 + ] + }, + { + "kind": "literal", + "value": "next-step" + }, + { + "kind": "literal", + "value": "next-turn" + }, + { + "kind": "literal", + "value": "agent/inbox/spliced" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "15196447222782e773eb943c92b18316ce96b9af0f0cfddb6e57ba8274ecc5ff", "schema": { @@ -38089,2728 +32260,6 @@ "names": [], "sources": [] }, - { - "digest": "2424473dd6f2b538034fbb91c9e07af863fdf550c0d2fe4c75119e6e0872ce47", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 1, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "role", - "type": 29, - "optional": false - }, - { - "name": "source", - "type": 30, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "union", - "types": [ - 3, - 6, - 8, - 11, - 13, - 15, - 26 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 9, - "optional": true - }, - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 14, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 16, - "optional": false - }, - { - "name": "offloaded", - "type": 24, - "optional": true - }, - { - "name": "type", - "type": 25, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "mediaType", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": true - }, - { - "name": "originalDimensions", - "type": 23, - "optional": true - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 19, - 20, - 21, - 22 - ] - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 27, - "optional": false - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 31, - 34, - 36, - 39, - 41, - 43, - 45, - 47, - 49, - 51, - 53, - 55, - 57, - 59, - 60, - 61, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 105, - 107, - 110, - 111, - 112, - 113, - 115, - 116, - 117, - 118, - 120, - 121, - 122, - 123, - 124, - 126, - 127, - 129, - 130, - 131, - 132, - 140, - 142, - 143, - 145, - 147, - 151, - 153, - 161, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 179, - 181, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - }, - { - "name": "revision", - "type": 17, - "optional": false - }, - { - "name": "round", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 106, - "optional": false - }, - { - "name": "messageId", - "type": 4, - "optional": false - }, - { - "name": "senderId", - "type": 4, - "optional": false - }, - { - "name": "senderName", - "type": 4, - "optional": false - }, - { - "name": "teamId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "model", - "type": 4, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "replayState", - "type": 109, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 114, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 119, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 125, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 128, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 24, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 4, - "optional": true - }, - { - "name": "changes", - "type": 133, - "optional": false - }, - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 139, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 134 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 135, - "optional": false - }, - { - "name": "digest", - "type": 4, - "optional": true - }, - { - "name": "path", - "type": 4, - "optional": false - }, - { - "name": "scope", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 136, - 137, - 138 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 141, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 4, - "optional": true - }, - { - "name": "kind", - "type": 29, - "optional": false - }, - { - "name": "rpcId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 144, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 4, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 4, - "optional": false - }, - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 146, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "ruleId", - "type": 4, - "optional": false - }, - { - "name": "source", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 148, - "optional": false - }, - { - "name": "form", - "type": 90, - "optional": false - }, - { - "name": "kind", - "type": 150, - "optional": false - }, - { - "name": "update", - "type": 24, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 149 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 37, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 62, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "references", - "type": 155, - "optional": false - }, - { - "name": "version", - "type": 160, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 156 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 17, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 157, - "optional": false - }, - { - "name": "compacted", - "type": 159, - "optional": false - }, - { - "name": "inputIndex", - "type": 17, - "optional": false - }, - { - "name": "label", - "type": 4, - "optional": false - }, - { - "name": "omittedBytes", - "type": 17, - "optional": false - }, - { - "name": "omittedMessages", - "type": 17, - "optional": false - }, - { - "name": "originalMessages", - "type": 17, - "optional": false - }, - { - "name": "retainedMessages", - "type": 17, - "optional": false - }, - { - "name": "sessionId", - "type": 4, - "optional": false - }, - { - "name": "truncated", - "type": 159, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 17, - 158 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 164 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "text", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 162, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "sections", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 178, - "optional": false - }, - { - "name": "senderName", - "type": 4, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 180, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 76, - "optional": false - }, - { - "name": "kind", - "type": 182, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#UserMessage" - ], - "sources": [ - "packages/llm/llm/src/message.ts:162" - ] - }, { "digest": "24b10f7cdae64928f89c49afc2eca0af9eb4a2f135e16f3416e6b8461fef1748", "schema": { @@ -44018,2835 +35467,6 @@ "packages/llm/llm/src/assistant-stream.ts:35" ] }, - { - "digest": "3891652446c8d1e35ba97bf0205f5f8d60a08b9e4bc3213665a4921ae9c6484e", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 26, - "optional": true - }, - { - "name": "seq", - "type": 2, - "optional": false - }, - { - "name": "sourceEventSeqs", - "type": 197, - "optional": true - }, - { - "name": "surfaceOp", - "type": 198, - "optional": false - }, - { - "name": "time", - "type": 2, - "optional": false - }, - { - "name": "type", - "type": 201, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "headerSeq", - "type": 2, - "optional": true - }, - { - "name": "message", - "type": 3, - "optional": false - }, - { - "name": "step", - "type": 2, - "optional": false - }, - { - "name": "turn", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "role", - "type": 31, - "optional": false - }, - { - "name": "source", - "type": 32, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 9, - 11, - 14, - 16, - 18, - 28 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 12, - "optional": true - }, - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "type", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 19, - "optional": false - }, - { - "name": "offloaded", - "type": 26, - "optional": true - }, - { - "name": "type", - "type": 27, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "mediaType", - "type": 20, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": true - }, - { - "name": "originalDimensions", - "type": 25, - "optional": true - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 21, - 22, - 23, - 24 - ] - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 2, - "optional": false - }, - { - "name": "width", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 29, - "optional": false - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 7, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 33, - 36, - 38, - 40, - 42, - 44, - 46, - 48, - 50, - 52, - 55, - 57, - 59, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 114, - 116, - 119, - 120, - 121, - 122, - 123, - 125, - 126, - 127, - 128, - 130, - 131, - 132, - 133, - 134, - 136, - 138, - 139, - 141, - 142, - 150, - 152, - 153, - 155, - 157, - 161, - 163, - 171, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 189, - 191, - 193, - 194, - 195, - 196 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 113, - "optional": false - }, - { - "name": "revision", - "type": 2, - "optional": false - }, - { - "name": "round", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 115, - "optional": false - }, - { - "name": "messageId", - "type": 7, - "optional": false - }, - { - "name": "senderId", - "type": 7, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "teamId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 117, - "optional": false - }, - { - "name": "model", - "type": 7, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "replayState", - "type": 118, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 60, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 124, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 39, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 129, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 135, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 137, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 140, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 26, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 7, - "optional": true - }, - { - "name": "changes", - "type": 143, - "optional": false - }, - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 149, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 144 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 145, - "optional": false - }, - { - "name": "digest", - "type": 7, - "optional": true - }, - { - "name": "path", - "type": 7, - "optional": false - }, - { - "name": "scope", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 146, - 147, - 148 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 151, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 7, - "optional": true - }, - { - "name": "kind", - "type": 137, - "optional": false - }, - { - "name": "rpcId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 7, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 7, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 7, - "optional": false - }, - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "provider", - "type": 7, - "optional": false - }, - { - "name": "ruleId", - "type": 7, - "optional": false - }, - { - "name": "source", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 158, - "optional": false - }, - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 160, - "optional": false - }, - { - "name": "update", - "type": 26, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 159 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 7, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 53, - "optional": false - }, - { - "name": "kind", - "type": 162, - "optional": false - }, - { - "name": "name", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 71, - "optional": false - }, - { - "name": "kind", - "type": 164, - "optional": false - }, - { - "name": "references", - "type": 165, - "optional": false - }, - { - "name": "version", - "type": 170, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 166 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 2, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 167, - "optional": false - }, - { - "name": "compacted", - "type": 169, - "optional": false - }, - { - "name": "inputIndex", - "type": 2, - "optional": false - }, - { - "name": "label", - "type": 7, - "optional": false - }, - { - "name": "omittedBytes", - "type": 2, - "optional": false - }, - { - "name": "omittedMessages", - "type": 2, - "optional": false - }, - { - "name": "originalMessages", - "type": 2, - "optional": false - }, - { - "name": "retainedMessages", - "type": 2, - "optional": false - }, - { - "name": "sessionId", - "type": 7, - "optional": false - }, - { - "name": "truncated", - "type": 169, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 2, - 168 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 174 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 7, - "optional": false - }, - { - "name": "text", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 39, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 172, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 173, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 188, - "optional": false - }, - { - "name": "senderName", - "type": 7, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 190, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 192, - "optional": false - }, - { - "name": "senderSessionId", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 34, - "optional": false - }, - { - "name": "kind", - "type": 60, - "optional": false - }, - { - "name": "summary", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "union", - "types": [ - 199, - 200 - ] - }, - { - "kind": "literal", - "value": "append" - }, - { - "kind": "object", - "properties": [ - { - "name": "endSeq", - "type": 2, - "optional": false - }, - { - "name": "op", - "type": 147, - "optional": false - }, - { - "name": "startSeq", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer/message" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2", "schema": { @@ -47867,6 +36487,2773 @@ "names": [], "sources": [] }, + { + "digest": "3f72db3d87a0c5c43e68be467b4cca728eaf5adc1d5d2b6975ff42bfbd961761", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 25, + "optional": true + }, + { + "name": "seq", + "type": 18, + "optional": false + }, + { + "name": "sourceEventSeqs", + "type": 193, + "optional": true + }, + { + "name": "surfaceOp", + "type": 194, + "optional": false + }, + { + "name": "time", + "type": 18, + "optional": false + }, + { + "name": "type", + "type": 197, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 30, + "optional": false + }, + { + "name": "source", + "type": 31, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "union", + "types": [ + 4, + 7, + 9, + 12, + 14, + 16, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 10, + "optional": true + }, + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 5, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 17, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 32, + 35, + 37, + 39, + 41, + 43, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 61, + 62, + 63, + 64, + 65, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 109, + 111, + 114, + 115, + 116, + 117, + 118, + 120, + 121, + 122, + 123, + 125, + 126, + 127, + 128, + 129, + 131, + 132, + 133, + 135, + 136, + 144, + 146, + 147, + 149, + 151, + 155, + 157, + 165, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 183, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "revision", + "type": 18, + "optional": false + }, + { + "name": "round", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "messageId", + "type": 5, + "optional": false + }, + { + "name": "senderId", + "type": 5, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "teamId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 112, + "optional": false + }, + { + "name": "model", + "type": 5, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "replayState", + "type": 113, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 119, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 124, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 134, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 5, + "optional": true + }, + { + "name": "changes", + "type": 137, + "optional": false + }, + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 143, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 138 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 139, + "optional": false + }, + { + "name": "digest", + "type": 5, + "optional": true + }, + { + "name": "path", + "type": 5, + "optional": false + }, + { + "name": "scope", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 140, + 141, + 142 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 145, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 5, + "optional": true + }, + { + "name": "kind", + "type": 30, + "optional": false + }, + { + "name": "rpcId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 148, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 5, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 5, + "optional": false + }, + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "ruleId", + "type": 5, + "optional": false + }, + { + "name": "source", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 152, + "optional": false + }, + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 153 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 44, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 158, + "optional": false + }, + { + "name": "references", + "type": 159, + "optional": false + }, + { + "name": "version", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 160 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 18, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 161, + "optional": false + }, + { + "name": "compacted", + "type": 163, + "optional": false + }, + { + "name": "inputIndex", + "type": 18, + "optional": false + }, + { + "name": "label", + "type": 5, + "optional": false + }, + { + "name": "omittedBytes", + "type": 18, + "optional": false + }, + { + "name": "omittedMessages", + "type": 18, + "optional": false + }, + { + "name": "originalMessages", + "type": 18, + "optional": false + }, + { + "name": "retainedMessages", + "type": 18, + "optional": false + }, + { + "name": "sessionId", + "type": 5, + "optional": false + }, + { + "name": "truncated", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 18, + 162 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 168 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 182, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 18 + }, + { + "kind": "union", + "types": [ + 195, + 196 + ] + }, + { + "kind": "literal", + "value": "append" + }, + { + "kind": "object", + "properties": [ + { + "name": "endSeq", + "type": 18, + "optional": false + }, + { + "name": "op", + "type": 141, + "optional": false + }, + { + "name": "startSeq", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user/message" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "3f74ba74acd10644c1ed6947a411d8088bd2cfac74f61bb8540f96d68e31f004", "schema": { @@ -47977,6 +39364,2377 @@ "names": [], "sources": [] }, + { + "digest": "40e314bd88730b4bff04a2083cc540ef8659ee2240eeaae0132cac974784b945", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "union", + "types": [ + 1, + 4, + 6, + 8, + 10, + 12, + 14, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 53, + 55, + 58, + 59, + 60, + 62, + 63, + 64, + 65, + 67, + 68, + 69, + 70, + 71, + 73, + 75, + 76, + 78, + 79, + 80, + 81, + 91, + 93, + 94, + 96, + 99, + 103, + 105, + 113, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 131, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 50, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "revision", + "type": 52, + "optional": false + }, + { + "name": "round", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "messageId", + "type": 50, + "optional": false + }, + { + "name": "senderId", + "type": 50, + "optional": false + }, + { + "name": "senderName", + "type": 50, + "optional": false + }, + { + "name": "teamId", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "model", + "type": 50, + "optional": false + }, + { + "name": "provider", + "type": 50, + "optional": false + }, + { + "name": "replayState", + "type": 57, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 66, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 72, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 74, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 77, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 82, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 50, + "optional": true + }, + { + "name": "changes", + "type": 83, + "optional": false + }, + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 90, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "array", + "element": 84 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 85, + "optional": false + }, + { + "name": "digest", + "type": 50, + "optional": true + }, + { + "name": "path", + "type": 50, + "optional": false + }, + { + "name": "scope", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 86, + 87, + 88 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 50, + "optional": false + }, + { + "name": "kind", + "type": 92, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 50, + "optional": true + }, + { + "name": "kind", + "type": 74, + "optional": false + }, + { + "name": "rpcId", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 50, + "optional": false + }, + { + "name": "kind", + "type": 95, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 50, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 50, + "optional": false + }, + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 98, + "optional": false + }, + { + "name": "provider", + "type": 50, + "optional": false + }, + { + "name": "ruleId", + "type": 50, + "optional": false + }, + { + "name": "source", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 100, + "optional": false + }, + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + }, + { + "name": "update", + "type": 82, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 101 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 50, + "optional": false + }, + { + "name": "name", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + }, + { + "name": "name", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 106, + "optional": false + }, + { + "name": "references", + "type": 107, + "optional": false + }, + { + "name": "version", + "type": 112, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 108 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 52, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 109, + "optional": false + }, + { + "name": "compacted", + "type": 111, + "optional": false + }, + { + "name": "inputIndex", + "type": 52, + "optional": false + }, + { + "name": "label", + "type": 50, + "optional": false + }, + { + "name": "omittedBytes", + "type": 52, + "optional": false + }, + { + "name": "omittedMessages", + "type": 52, + "optional": false + }, + { + "name": "originalMessages", + "type": 52, + "optional": false + }, + { + "name": "retainedMessages", + "type": 52, + "optional": false + }, + { + "name": "sessionId", + "type": 50, + "optional": false + }, + { + "name": "truncated", + "type": 111, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 52, + 110 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 16, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 116 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 50, + "optional": false + }, + { + "name": "text", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 18, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 114, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + }, + { + "name": "sections", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 130, + "optional": false + }, + { + "name": "senderSessionId", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 15, + "optional": false + }, + { + "name": "kind", + "type": 132, + "optional": false + }, + { + "name": "senderSessionId", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 16, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 18, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 97, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + }, + { + "name": "summary", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 24, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 2, + "optional": false + }, + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#MessageSource" + ], + "sources": [ + "packages/llm/llm/src/message.ts:136" + ] + }, { "digest": "4208123b50df5006b181481ab45fcf1cde807b88d3fd4d340090bc2e202fac41", "schema": { @@ -48494,2732 +42252,6 @@ "packages/interaction/user-approval/src/types.ts:44" ] }, - { - "digest": "46a72c9e650cc0179669cc826b3fa02a98be6152cd2fc626b0ba6eccd6440fba", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 1, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "role", - "type": 29, - "optional": false - }, - { - "name": "source", - "type": 30, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 - }, - { - "kind": "union", - "types": [ - 3, - 6, - 8, - 11, - 13, - 15, - 26 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 9, - "optional": true - }, - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 4, - "optional": false - }, - { - "name": "id", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 14, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 16, - "optional": false - }, - { - "name": "offloaded", - "type": 24, - "optional": true - }, - { - "name": "type", - "type": 25, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "mediaType", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": true - }, - { - "name": "originalDimensions", - "type": 23, - "optional": true - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 19, - 20, - 21, - 22 - ] - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 17, - "optional": false - }, - { - "name": "width", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 27, - "optional": false - }, - { - "name": "type", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 4, - "optional": false - }, - { - "name": "bytes", - "type": 17, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 31, - 34, - 36, - 38, - 41, - 43, - 45, - 47, - 49, - 51, - 53, - 55, - 57, - 59, - 60, - 61, - 62, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 106, - 108, - 111, - 112, - 113, - 114, - 115, - 117, - 118, - 119, - 120, - 122, - 123, - 124, - 125, - 126, - 128, - 130, - 132, - 133, - 134, - 142, - 144, - 145, - 147, - 149, - 153, - 155, - 163, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 181, - 183, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 105, - "optional": false - }, - { - "name": "revision", - "type": 17, - "optional": false - }, - { - "name": "round", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 107, - "optional": false - }, - { - "name": "messageId", - "type": 4, - "optional": false - }, - { - "name": "senderId", - "type": 4, - "optional": false - }, - { - "name": "senderName", - "type": 4, - "optional": false - }, - { - "name": "teamId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 109, - "optional": false - }, - { - "name": "model", - "type": 4, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "replayState", - "type": 110, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 40, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 42, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 116, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 121, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 127, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 129, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 131, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 37, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 24, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 4, - "optional": true - }, - { - "name": "changes", - "type": 135, - "optional": false - }, - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 141, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 136 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 137, - "optional": false - }, - { - "name": "digest", - "type": 4, - "optional": true - }, - { - "name": "path", - "type": 4, - "optional": false - }, - { - "name": "scope", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 138, - 139, - 140 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 143, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 4, - "optional": true - }, - { - "name": "kind", - "type": 131, - "optional": false - }, - { - "name": "rpcId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 4, - "optional": false - }, - { - "name": "kind", - "type": 146, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 4, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 4, - "optional": false - }, - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 148, - "optional": false - }, - { - "name": "provider", - "type": 4, - "optional": false - }, - { - "name": "ruleId", - "type": 4, - "optional": false - }, - { - "name": "source", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 150, - "optional": false - }, - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "update", - "type": 24, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 151 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 4, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 39, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "name", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 63, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "references", - "type": 157, - "optional": false - }, - { - "name": "version", - "type": 162, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 158 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 17, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 159, - "optional": false - }, - { - "name": "compacted", - "type": 161, - "optional": false - }, - { - "name": "inputIndex", - "type": 17, - "optional": false - }, - { - "name": "label", - "type": 4, - "optional": false - }, - { - "name": "omittedBytes", - "type": 17, - "optional": false - }, - { - "name": "omittedMessages", - "type": 17, - "optional": false - }, - { - "name": "originalMessages", - "type": 17, - "optional": false - }, - { - "name": "retainedMessages", - "type": 17, - "optional": false - }, - { - "name": "sessionId", - "type": 4, - "optional": false - }, - { - "name": "truncated", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 17, - 160 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 166 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 4, - "optional": false - }, - { - "name": "text", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 33, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 37, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 180, - "optional": false - }, - { - "name": "senderName", - "type": 4, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 182, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderSessionId", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 40, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 54, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 32, - "optional": false - }, - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "summary", - "type": 4, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#DeveloperMessage" - ], - "sources": [ - "packages/llm/llm/src/message.ts:157" - ] - }, { "digest": "477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028", "schema": { @@ -53022,2935 +44054,6 @@ "packages/subagent/subagent/src/continuation-messages.ts:15" ] }, - { - "digest": "4acc335429a47b513bcd92c688cc856459b90a344d27fbaccb2a524560113407", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "maxTokens", - "type": 1, - "optional": false - }, - { - "name": "messageSeqs", - "type": 2, - "optional": false - }, - { - "name": "messages", - "type": 3, - "optional": false - }, - { - "name": "route", - "type": 205, - "optional": false - }, - { - "name": "system", - "type": 9, - "optional": false - }, - { - "name": "titleProvider", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "array", - "element": 1 - }, - { - "kind": "array", - "element": 4 - }, - { - "kind": "union", - "types": [ - 5, - 36, - 200, - 201, - 203 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 9, - "optional": false - }, - { - "name": "isError", - "type": 33, - "optional": true - }, - { - "name": "role", - "type": 34, - "optional": false - }, - { - "name": "source", - "type": 35, - "optional": false - }, - { - "name": "toolCallId", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 7 - }, - { - "kind": "union", - "types": [ - 8, - 11, - 13, - 16, - 18, - 20, - 30 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 9, - "optional": false - }, - { - "name": "type", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 9, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 14, - "optional": true - }, - { - "name": "toolName", - "type": 9, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 9, - "optional": false - }, - { - "name": "type", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 9, - "optional": false - }, - { - "name": "id", - "type": 9, - "optional": false - }, - { - "name": "name", - "type": 9, - "optional": false - }, - { - "name": "type", - "type": 19, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 21, - "optional": false - }, - { - "name": "offloaded", - "type": 28, - "optional": true - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 9, - "optional": false - }, - { - "name": "bytes", - "type": 1, - "optional": false - }, - { - "name": "height", - "type": 1, - "optional": false - }, - { - "name": "mediaType", - "type": 22, - "optional": false - }, - { - "name": "name", - "type": 9, - "optional": true - }, - { - "name": "originalDimensions", - "type": 27, - "optional": true - }, - { - "name": "width", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 23, - 24, - 25, - 26 - ] - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 1, - "optional": false - }, - { - "name": "width", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 31, - "optional": false - }, - { - "name": "type", - "type": 32, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 9, - "optional": false - }, - { - "name": "bytes", - "type": 1, - "optional": false - }, - { - "name": "name", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 9, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 9, - "optional": false - }, - { - "name": "role", - "type": 37, - "optional": false - }, - { - "name": "source", - "type": 38, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 35, - 39, - 42, - 44, - 46, - 48, - 50, - 52, - 54, - 56, - 58, - 60, - 69, - 71, - 73, - 75, - 77, - 82, - 84, - 86, - 94, - 99, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 175, - 176, - 178, - 181, - 182, - 183, - 184, - 185, - 187, - 188, - 189, - 190, - 191, - 193, - 194, - 195, - 196, - 197, - 199 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 28, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 9, - "optional": true - }, - { - "name": "changes", - "type": 61, - "optional": false - }, - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 68, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 62 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 63, - "optional": false - }, - { - "name": "digest", - "type": 9, - "optional": true - }, - { - "name": "path", - "type": 9, - "optional": false - }, - { - "name": "scope", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 64, - 65, - 66 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 9, - "optional": true - }, - { - "name": "kind", - "type": 70, - "optional": false - }, - { - "name": "rpcId", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 9, - "optional": false - }, - { - "name": "kind", - "type": 72, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 9, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 74, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 9, - "optional": false - }, - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 76, - "optional": false - }, - { - "name": "provider", - "type": 9, - "optional": false - }, - { - "name": "ruleId", - "type": 9, - "optional": false - }, - { - "name": "source", - "type": 9, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 78, - "optional": false - }, - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 81, - "optional": false - }, - { - "name": "update", - "type": 28, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 79 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 9, - "optional": false - }, - { - "name": "name", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "name", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 88, - "optional": false - }, - { - "name": "references", - "type": 89, - "optional": false - }, - { - "name": "version", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 90 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 1, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 91, - "optional": false - }, - { - "name": "compacted", - "type": 33, - "optional": false - }, - { - "name": "inputIndex", - "type": 1, - "optional": false - }, - { - "name": "label", - "type": 9, - "optional": false - }, - { - "name": "omittedBytes", - "type": 1, - "optional": false - }, - { - "name": "omittedMessages", - "type": 1, - "optional": false - }, - { - "name": "originalMessages", - "type": 1, - "optional": false - }, - { - "name": "retainedMessages", - "type": 1, - "optional": false - }, - { - "name": "sessionId", - "type": 9, - "optional": false - }, - { - "name": "truncated", - "type": 33, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 1, - 92 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 96, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "array", - "element": 98 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 9, - "optional": false - }, - { - "name": "text", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 74, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 95, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 97, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 96, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 74, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 67, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 96, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 132, - "optional": false - }, - { - "name": "senderName", - "type": 9, - "optional": false - }, - { - "name": "senderSessionId", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 74, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 143, - "optional": false - }, - { - "name": "senderSessionId", - "type": 9, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 87, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 96, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 74, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 96, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 131, - "optional": false - }, - { - "name": "kind", - "type": 163, - "optional": false - }, - { - "name": "senderSessionId", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 74, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 80, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 9, - "optional": false - }, - { - "name": "kind", - "type": 174, - "optional": false - }, - { - "name": "revision", - "type": 1, - "optional": false - }, - { - "name": "round", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 96, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 177, - "optional": false - }, - { - "name": "messageId", - "type": 9, - "optional": false - }, - { - "name": "senderId", - "type": 9, - "optional": false - }, - { - "name": "senderName", - "type": 9, - "optional": false - }, - { - "name": "teamId", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 179, - "optional": false - }, - { - "name": "model", - "type": 9, - "optional": false - }, - { - "name": "provider", - "type": 9, - "optional": false - }, - { - "name": "replayState", - "type": 180, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 96, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 100, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 186, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - }, - { - "name": "summary", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 192, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 74, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 83, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 198, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 70, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 9, - "optional": false - }, - { - "name": "role", - "type": 70, - "optional": false - }, - { - "name": "source", - "type": 38, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 9, - "optional": false - }, - { - "name": "role", - "type": 202, - "optional": false - }, - { - "name": "source", - "type": 178, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "assistant" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 9, - "optional": false - }, - { - "name": "role", - "type": 204, - "optional": false - }, - { - "name": "source", - "type": 191, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system" - }, - { - "kind": "object", - "properties": [ - { - "name": "model", - "type": 9, - "optional": false - }, - { - "name": "provider", - "type": 9, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [ - "packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData" - ], - "sources": [ - "packages/session/session-title-llm/src/index.ts:34" - ] - }, { "digest": "4ae007ed190a72c92138b22d059b83208079c7551ca13fb59ae8cf5e23693964", "schema": { @@ -57208,6 +45311,2724 @@ "names": [], "sources": [] }, + { + "digest": "51c78ccc9023ce6642d07fb9a10cbf942ff7e313d5b304ddc77218df71da708f", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "headerSeq", + "type": 1, + "optional": true + }, + { + "name": "message", + "type": 2, + "optional": false + }, + { + "name": "step", + "type": 1, + "optional": false + }, + { + "name": "turn", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 30, + "optional": false + }, + { + "name": "source", + "type": 31, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 4 + }, + { + "kind": "union", + "types": [ + 5, + 8, + 10, + 13, + 15, + 17, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 11, + "optional": true + }, + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 18, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 1, + "optional": false + }, + { + "name": "height", + "type": 1, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 1, + "optional": false + }, + { + "name": "width", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 1, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 32, + 35, + 38, + 40, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 61, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 110, + 111, + 112, + 113, + 114, + 116, + 117, + 118, + 119, + 121, + 122, + 123, + 124, + 125, + 127, + 129, + 131, + 132, + 133, + 141, + 143, + 144, + 146, + 148, + 152, + 154, + 162, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 180, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + }, + { + "name": "revision", + "type": 1, + "optional": false + }, + { + "name": "round", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 106, + "optional": false + }, + { + "name": "messageId", + "type": 6, + "optional": false + }, + { + "name": "senderId", + "type": 6, + "optional": false + }, + { + "name": "senderName", + "type": 6, + "optional": false + }, + { + "name": "teamId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "model", + "type": 6, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "replayState", + "type": 109, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 115, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 120, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 126, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 128, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 6, + "optional": true + }, + { + "name": "changes", + "type": 134, + "optional": false + }, + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 140, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 135 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 136, + "optional": false + }, + { + "name": "digest", + "type": 6, + "optional": true + }, + { + "name": "path", + "type": 6, + "optional": false + }, + { + "name": "scope", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 137, + 138, + 139 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 142, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 6, + "optional": true + }, + { + "name": "kind", + "type": 128, + "optional": false + }, + { + "name": "rpcId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 145, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 6, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 6, + "optional": false + }, + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 147, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "ruleId", + "type": 6, + "optional": false + }, + { + "name": "source", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 149, + "optional": false + }, + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 151, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 150 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 153, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 155, + "optional": false + }, + { + "name": "references", + "type": 156, + "optional": false + }, + { + "name": "version", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 157 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 1, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 158, + "optional": false + }, + { + "name": "compacted", + "type": 160, + "optional": false + }, + { + "name": "inputIndex", + "type": 1, + "optional": false + }, + { + "name": "label", + "type": 6, + "optional": false + }, + { + "name": "omittedBytes", + "type": 1, + "optional": false + }, + { + "name": "omittedMessages", + "type": 1, + "optional": false + }, + { + "name": "originalMessages", + "type": 1, + "optional": false + }, + { + "name": "retainedMessages", + "type": 1, + "optional": false + }, + { + "name": "sessionId", + "type": 6, + "optional": false + }, + { + "name": "truncated", + "type": 160, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 1, + 159 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 165 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "text", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 163, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "sections", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 179, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 181, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [], + "sources": [ + "packages/core/session/src/types.ts:311" + ] + }, { "digest": "51edec100659da3a9bd9c3f6ba1180f5e64ec9a1585e5057080df45c180bd357", "schema": { @@ -60964,6 +51785,2696 @@ "packages/subagent/subagent/src/descriptor.ts:72" ] }, + { + "digest": "64ea5653002834c44f29bea4620e9c42aeb6024ae5b1d58d69f95158006b2586", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 1, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "role", + "type": 29, + "optional": false + }, + { + "name": "source", + "type": 30, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "union", + "types": [ + 3, + 6, + 8, + 11, + 13, + 15, + 26 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 9, + "optional": true + }, + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 16, + "optional": false + }, + { + "name": "offloaded", + "type": 24, + "optional": true + }, + { + "name": "type", + "type": 25, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "mediaType", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "originalDimensions", + "type": 23, + "optional": true + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 19, + 20, + 21, + 22 + ] + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 27, + "optional": false + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 31, + 34, + 36, + 38, + 40, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 102, + 104, + 107, + 108, + 109, + 110, + 112, + 113, + 114, + 115, + 117, + 118, + 119, + 120, + 121, + 123, + 124, + 125, + 127, + 128, + 129, + 137, + 139, + 140, + 142, + 145, + 149, + 151, + 159, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 177, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + }, + { + "name": "revision", + "type": 17, + "optional": false + }, + { + "name": "round", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 103, + "optional": false + }, + { + "name": "messageId", + "type": 4, + "optional": false + }, + { + "name": "senderId", + "type": 4, + "optional": false + }, + { + "name": "senderName", + "type": 4, + "optional": false + }, + { + "name": "teamId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 105, + "optional": false + }, + { + "name": "model", + "type": 4, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "replayState", + "type": 106, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 111, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 116, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 122, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 126, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 24, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 4, + "optional": true + }, + { + "name": "changes", + "type": 130, + "optional": false + }, + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 136, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 131 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 132, + "optional": false + }, + { + "name": "digest", + "type": 4, + "optional": true + }, + { + "name": "path", + "type": 4, + "optional": false + }, + { + "name": "scope", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 133, + 134, + 135 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 138, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 4, + "optional": true + }, + { + "name": "kind", + "type": 29, + "optional": false + }, + { + "name": "rpcId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 4, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 4, + "optional": false + }, + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 144, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "ruleId", + "type": 4, + "optional": false + }, + { + "name": "source", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 146, + "optional": false + }, + { + "name": "form", + "type": 87, + "optional": false + }, + { + "name": "kind", + "type": 148, + "optional": false + }, + { + "name": "update", + "type": 24, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 147 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 59, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "references", + "type": 153, + "optional": false + }, + { + "name": "version", + "type": 158, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 154 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 17, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 155, + "optional": false + }, + { + "name": "compacted", + "type": 157, + "optional": false + }, + { + "name": "inputIndex", + "type": 17, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": false + }, + { + "name": "omittedBytes", + "type": 17, + "optional": false + }, + { + "name": "omittedMessages", + "type": 17, + "optional": false + }, + { + "name": "originalMessages", + "type": 17, + "optional": false + }, + { + "name": "retainedMessages", + "type": 17, + "optional": false + }, + { + "name": "sessionId", + "type": 4, + "optional": false + }, + { + "name": "truncated", + "type": 157, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 17, + 156 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 162 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "text", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 160, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 161, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 176, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 178, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 143, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#UserMessage" + ], + "sources": [ + "packages/llm/llm/src/message.ts:162" + ] + }, { "digest": "6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25", "schema": { @@ -61756,6 +55267,2842 @@ "names": [], "sources": [] }, + { + "digest": "691c0f641cd3e8072fdacd6fa8c400253cf75a0ce9285d8ce89141bbb24f2fb6", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "union", + "types": [ + 1, + 33, + 195, + 196, + 198 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "isError", + "type": 30, + "optional": true + }, + { + "name": "role", + "type": 31, + "optional": false + }, + { + "name": "source", + "type": 32, + "optional": false + }, + { + "name": "toolCallId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 3 + }, + { + "kind": "union", + "types": [ + 4, + 7, + 9, + 12, + 14, + 16, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 10, + "optional": true + }, + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 5, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "type", + "type": 15, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 17, + "optional": false + }, + { + "name": "offloaded", + "type": 25, + "optional": true + }, + { + "name": "type", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "mediaType", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": true + }, + { + "name": "originalDimensions", + "type": 24, + "optional": true + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 18, + "optional": false + }, + { + "name": "width", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 28, + "optional": false + }, + { + "name": "type", + "type": 29, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 5, + "optional": false + }, + { + "name": "bytes", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 34, + "optional": false + }, + { + "name": "source", + "type": 35, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 32, + 36, + 39, + 41, + 43, + 45, + 47, + 49, + 51, + 54, + 56, + 58, + 60, + 62, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 115, + 117, + 120, + 121, + 122, + 123, + 124, + 126, + 127, + 128, + 129, + 131, + 132, + 133, + 134, + 135, + 137, + 139, + 140, + 142, + 143, + 151, + 152, + 154, + 156, + 160, + 162, + 169, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 187, + 189, + 190, + 191, + 192, + 193, + 194 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 114, + "optional": false + }, + { + "name": "revision", + "type": 18, + "optional": false + }, + { + "name": "round", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 116, + "optional": false + }, + { + "name": "messageId", + "type": 5, + "optional": false + }, + { + "name": "senderId", + "type": 5, + "optional": false + }, + { + "name": "senderName", + "type": 5, + "optional": false + }, + { + "name": "teamId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 118, + "optional": false + }, + { + "name": "model", + "type": 5, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "replayState", + "type": 119, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 125, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 63, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 136, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 138, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 141, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 5, + "optional": true + }, + { + "name": "changes", + "type": 144, + "optional": false + }, + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 145 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 146, + "optional": false + }, + { + "name": "digest", + "type": 5, + "optional": true + }, + { + "name": "path", + "type": 5, + "optional": false + }, + { + "name": "scope", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 147, + 148, + 149 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 5, + "optional": true + }, + { + "name": "kind", + "type": 138, + "optional": false + }, + { + "name": "rpcId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 153, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 5, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 5, + "optional": false + }, + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 155, + "optional": false + }, + { + "name": "provider", + "type": 5, + "optional": false + }, + { + "name": "ruleId", + "type": 5, + "optional": false + }, + { + "name": "source", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 157, + "optional": false + }, + { + "name": "form", + "type": 100, + "optional": false + }, + { + "name": "kind", + "type": 159, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 158 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 52, + "optional": false + }, + { + "name": "kind", + "type": 161, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 72, + "optional": false + }, + { + "name": "kind", + "type": 163, + "optional": false + }, + { + "name": "references", + "type": 164, + "optional": false + }, + { + "name": "version", + "type": 168, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 165 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 18, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 166, + "optional": false + }, + { + "name": "compacted", + "type": 30, + "optional": false + }, + { + "name": "inputIndex", + "type": 18, + "optional": false + }, + { + "name": "label", + "type": 5, + "optional": false + }, + { + "name": "omittedBytes", + "type": 18, + "optional": false + }, + { + "name": "omittedMessages", + "type": 18, + "optional": false + }, + { + "name": "originalMessages", + "type": 18, + "optional": false + }, + { + "name": "retainedMessages", + "type": 18, + "optional": false + }, + { + "name": "sessionId", + "type": 5, + "optional": false + }, + { + "name": "truncated", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 18, + 167 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 172 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 170, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 171, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 186, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 86, + "optional": false + }, + { + "name": "kind", + "type": 188, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 37, + "optional": false + }, + { + "name": "kind", + "type": 63, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 138, + "optional": false + }, + { + "name": "source", + "type": 35, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 197, + "optional": false + }, + { + "name": "source", + "type": 117, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "assistant" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 2, + "optional": false + }, + { + "name": "id", + "type": 5, + "optional": false + }, + { + "name": "role", + "type": 199, + "optional": false + }, + { + "name": "source", + "type": 129, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system" + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#Message" + ], + "sources": [ + "packages/llm/llm/src/message.ts:196" + ] + }, { "digest": "693f4952fb5565da96c06bace8924b098ac2fbc915fde0ff8019701183abc057", "schema": { @@ -63389,2756 +59736,6 @@ "names": [], "sources": [] }, - { - "digest": "766237c2b1b772edd4cad02080938565b64dbf317899e3268e32ff67aded0194", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "headerSeq", - "type": 1, - "optional": true - }, - { - "name": "message", - "type": 2, - "optional": false - }, - { - "name": "step", - "type": 1, - "optional": false - }, - { - "name": "turn", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "role", - "type": 30, - "optional": false - }, - { - "name": "source", - "type": 31, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 4 - }, - { - "kind": "union", - "types": [ - 5, - 8, - 10, - 13, - 15, - 17, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 11, - "optional": true - }, - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 12, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 14, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 6, - "optional": false - }, - { - "name": "id", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 18, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 1, - "optional": false - }, - { - "name": "height", - "type": 1, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 1, - "optional": false - }, - { - "name": "width", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 6, - "optional": false - }, - { - "name": "bytes", - "type": 1, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "developer" - }, - { - "kind": "union", - "types": [ - 32, - 35, - 37, - 39, - 42, - 44, - 46, - 48, - 50, - 52, - 54, - 56, - 58, - 60, - 61, - 62, - 63, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 107, - 109, - 112, - 113, - 114, - 115, - 116, - 118, - 119, - 120, - 121, - 123, - 124, - 125, - 126, - 127, - 129, - 131, - 133, - 134, - 135, - 143, - 145, - 146, - 148, - 150, - 154, - 156, - 164, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 182, - 184, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 106, - "optional": false - }, - { - "name": "revision", - "type": 1, - "optional": false - }, - { - "name": "round", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "messageId", - "type": 6, - "optional": false - }, - { - "name": "senderId", - "type": 6, - "optional": false - }, - { - "name": "senderName", - "type": 6, - "optional": false - }, - { - "name": "teamId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "model", - "type": 6, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "replayState", - "type": 111, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 122, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 128, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 132, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 6, - "optional": true - }, - { - "name": "changes", - "type": 136, - "optional": false - }, - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 142, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 137 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 138, - "optional": false - }, - { - "name": "digest", - "type": 6, - "optional": true - }, - { - "name": "path", - "type": 6, - "optional": false - }, - { - "name": "scope", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 139, - 140, - 141 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 144, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 6, - "optional": true - }, - { - "name": "kind", - "type": 132, - "optional": false - }, - { - "name": "rpcId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 6, - "optional": false - }, - { - "name": "kind", - "type": 147, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 6, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 6, - "optional": false - }, - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 149, - "optional": false - }, - { - "name": "provider", - "type": 6, - "optional": false - }, - { - "name": "ruleId", - "type": 6, - "optional": false - }, - { - "name": "source", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 151, - "optional": false - }, - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 153, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 152 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 6, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 155, - "optional": false - }, - { - "name": "name", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 157, - "optional": false - }, - { - "name": "references", - "type": 158, - "optional": false - }, - { - "name": "version", - "type": 163, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 159 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 1, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 160, - "optional": false - }, - { - "name": "compacted", - "type": 162, - "optional": false - }, - { - "name": "inputIndex", - "type": 1, - "optional": false - }, - { - "name": "label", - "type": 6, - "optional": false - }, - { - "name": "omittedBytes", - "type": 1, - "optional": false - }, - { - "name": "omittedMessages", - "type": 1, - "optional": false - }, - { - "name": "originalMessages", - "type": 1, - "optional": false - }, - { - "name": "retainedMessages", - "type": 1, - "optional": false - }, - { - "name": "sessionId", - "type": 6, - "optional": false - }, - { - "name": "truncated", - "type": 162, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 1, - 161 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 167 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 6, - "optional": false - }, - { - "name": "text", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 165, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 166, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 181, - "optional": false - }, - { - "name": "senderName", - "type": 6, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 183, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 185, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [], - "sources": [ - "packages/core/session/src/types.ts:311" - ] - }, { "digest": "76632533f67879dcb346fcae640540dbc89b2472b0bce88c59f7e48fc5c0e668", "schema": { @@ -71821,19 +65418,63 @@ "sources": [] }, { - "digest": "9bc19580d3abd950c7e00aa4d1885c4de20c1a56e8a65df721ae88a11437211f", + "digest": "9bc85364d1f37d9c837db6a3bdd3d1d007d923cdc7401a3322be9f12fdc225fd", "schema": { "root": 0, "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "maxTokens", + "type": 1, + "optional": false + }, + { + "name": "messageSeqs", + "type": 2, + "optional": false + }, + { + "name": "messages", + "type": 3, + "optional": false + }, + { + "name": "route", + "type": 203, + "optional": false + }, + { + "name": "system", + "type": 10, + "optional": false + }, + { + "name": "titleProvider", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, { "kind": "array", "element": 1 }, + { + "kind": "array", + "element": 4 + }, { "kind": "union", "types": [ - 2, - 34, + 5, + 36, 198, 199, 201 @@ -71844,32 +65485,32 @@ "properties": [ { "name": "content", - "type": 3, + "type": 6, "optional": false }, { "name": "id", - "type": 6, + "type": 10, "optional": false }, { "name": "isError", - "type": 31, + "type": 33, "optional": true }, { "name": "role", - "type": 32, + "type": 34, "optional": false }, { "name": "source", - "type": 33, + "type": 35, "optional": false }, { "name": "toolCallId", - "type": 6, + "type": 10, "optional": false } ], @@ -71877,40 +65518,69 @@ }, { "kind": "array", - "element": 4 + "element": 7 }, { "kind": "union", "types": [ - 5, 8, - 10, - 21, - 24, + 12, + 14, + 16, 26, - 28 + 29, + 31 ] }, { "kind": "object", "properties": [ + { + "name": "tool", + "type": 9, + "optional": true + }, { "name": "toolName", - "type": 6, + "type": 10, "optional": false }, { "name": "type", - "type": 7, + "type": 11, "optional": false } ], "indices": [] }, + { + "kind": "primitive", + "type": "never" + }, { "kind": "primitive", "type": "string" }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, { "kind": "literal", "value": "tool-removal" @@ -71920,22 +65590,22 @@ "properties": [ { "name": "arguments", - "type": 6, + "type": 10, "optional": false }, { "name": "id", - "type": 6, + "type": 10, "optional": false }, { "name": "name", - "type": 6, + "type": 10, "optional": false }, { "name": "type", - "type": 9, + "type": 15, "optional": false } ], @@ -71950,17 +65620,17 @@ "properties": [ { "name": "attachment", - "type": 11, + "type": 17, "optional": false }, { "name": "offloaded", - "type": 19, + "type": 24, "optional": true }, { "name": "type", - "type": 20, + "type": 25, "optional": false } ], @@ -71971,62 +65641,58 @@ "properties": [ { "name": "attachmentId", - "type": 6, + "type": 10, "optional": false }, { "name": "bytes", - "type": 12, + "type": 1, "optional": false }, { "name": "height", - "type": 12, + "type": 1, "optional": false }, { "name": "mediaType", - "type": 13, + "type": 18, "optional": false }, { "name": "name", - "type": 6, + "type": 10, "optional": true }, { "name": "originalDimensions", - "type": 18, + "type": 23, "optional": true }, { "name": "width", - "type": 12, + "type": 1, "optional": false } ], "indices": [] }, - { - "kind": "primitive", - "type": "number" - }, { "kind": "union", "types": [ - 14, - 15, - 16, - 17 + 19, + 20, + 21, + 22 ] }, { "kind": "literal", - "value": "image/jpeg" + "value": "image/gif" }, { "kind": "literal", - "value": "image/gif" + "value": "image/jpeg" }, { "kind": "literal", @@ -72041,12 +65707,12 @@ "properties": [ { "name": "height", - "type": 12, + "type": 1, "optional": false }, { "name": "width", - "type": 12, + "type": 1, "optional": false } ], @@ -72065,12 +65731,12 @@ "properties": [ { "name": "attachment", - "type": 22, + "type": 27, "optional": false }, { "name": "type", - "type": 23, + "type": 28, "optional": false } ], @@ -72081,17 +65747,17 @@ "properties": [ { "name": "attachmentId", - "type": 6, + "type": 10, "optional": false }, { "name": "bytes", - "type": 12, + "type": 1, "optional": false }, { "name": "name", - "type": 6, + "type": 10, "optional": false } ], @@ -72106,12 +65772,12 @@ "properties": [ { "name": "text", - "type": 6, + "type": 10, "optional": false }, { "name": "type", - "type": 25, + "type": 30, "optional": false } ], @@ -72126,12 +65792,12 @@ "properties": [ { "name": "text", - "type": 6, + "type": 10, "optional": false }, { "name": "type", - "type": 27, + "type": 32, "optional": false } ], @@ -72141,35 +65807,6 @@ "kind": "literal", "value": "text" }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 29, - "optional": true - }, - { - "name": "toolName", - "type": 6, - "optional": false - }, - { - "name": "type", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, { "kind": "primitive", "type": "boolean" @@ -72183,12 +65820,12 @@ "properties": [ { "name": "callId", - "type": 6, + "type": 10, "optional": false }, { "name": "kind", - "type": 32, + "type": 34, "optional": false } ], @@ -72199,22 +65836,22 @@ "properties": [ { "name": "content", - "type": 3, - "optional": false - }, - { - "name": "id", "type": 6, "optional": false }, + { + "name": "id", + "type": 10, + "optional": false + }, { "name": "role", - "type": 35, + "type": 37, "optional": false }, { "name": "source", - "type": 36, + "type": 38, "optional": false, "compatibility": { "version": 1, @@ -72223,7 +65860,6 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -72238,11 +65874,10 @@ { "kind": "union", "types": [ - 33, - 37, - 40, + 35, + 39, 42, - 44, + 45, 47, 49, 51, @@ -72260,17 +65895,17 @@ 90, 91, 92, - 94, + 93, + 95, 96, 98, - 99, - 101, - 103, + 100, + 102, 104, - 105, 106, + 107, 109, - 111, + 112, 113, 114, 115, @@ -72333,7 +65968,7 @@ 176, 177, 178, - 179, + 180, 181, 182, 183, @@ -72355,17 +65990,17 @@ "properties": [ { "name": "form", - "type": 38, + "type": 40, "optional": false }, { "name": "kind", - "type": 39, + "type": 41, "optional": false }, { "name": "summary", - "type": 6, + "type": 10, "optional": false } ], @@ -72375,56 +66010,6 @@ "kind": "literal", "value": "notice" }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "dsh-session-title-llm" @@ -72434,12 +66019,12 @@ "properties": [ { "name": "form", - "type": 45, + "type": 43, "optional": false }, { "name": "kind", - "type": 46, + "type": 44, "optional": false } ], @@ -72458,12 +66043,12 @@ "properties": [ { "name": "form", - "type": 45, + "type": 43, "optional": false }, { "name": "kind", - "type": 48, + "type": 46, "optional": false } ], @@ -72478,12 +66063,12 @@ "properties": [ { "name": "form", - "type": 45, + "type": 43, "optional": false }, { "name": "kind", - "type": 50, + "type": 48, "optional": false } ], @@ -72493,17 +66078,37 @@ "kind": "literal", "value": "model-selection" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, { "kind": "object", "properties": [ { "name": "baseline", - "type": 19, + "type": 24, "optional": true }, { "name": "baselineIdentity", - "type": 6, + "type": 10, "optional": true }, { @@ -72513,7 +66118,7 @@ }, { "name": "form", - "type": 45, + "type": 43, "optional": false }, { @@ -72538,17 +66143,17 @@ }, { "name": "digest", - "type": 6, + "type": 10, "optional": true }, { "name": "path", - "type": 6, + "type": 10, "optional": false }, { "name": "scope", - "type": 6, + "type": 10, "optional": false } ], @@ -72583,7 +66188,7 @@ "properties": [ { "name": "clientTimeZone", - "type": 6, + "type": 10, "optional": true }, { @@ -72593,7 +66198,7 @@ }, { "name": "rpcId", - "type": 6, + "type": 10, "optional": false } ], @@ -72608,7 +66213,7 @@ "properties": [ { "name": "compactionId", - "type": 6, + "type": 10, "optional": false }, { @@ -72618,7 +66223,7 @@ }, { "name": "sourceCommandId", - "type": 6, + "type": 10, "optional": true } ], @@ -72633,7 +66238,7 @@ "properties": [ { "name": "form", - "type": 45, + "type": 43, "optional": false }, { @@ -72646,19 +66251,19 @@ }, { "kind": "literal", - "value": "plan-mode" + "value": "repeat-tool-reminder" }, { "kind": "object", "properties": [ { "name": "deliveryId", - "type": 6, + "type": 10, "optional": false }, { "name": "form", - "type": 38, + "type": 40, "optional": false }, { @@ -72668,22 +66273,22 @@ }, { "name": "provider", - "type": 6, + "type": 10, "optional": false }, { "name": "ruleId", - "type": 6, + "type": 10, "optional": false }, { "name": "source", - "type": 6, + "type": 10, "optional": false }, { "name": "summary", - "type": 6, + "type": 10, "optional": false } ], @@ -72713,7 +66318,7 @@ }, { "name": "update", - "type": 19, + "type": 24, "optional": true } ], @@ -72728,12 +66333,12 @@ "properties": [ { "name": "description", - "type": 6, + "type": 10, "optional": false }, { "name": "name", - "type": 6, + "type": 10, "optional": false } ], @@ -72752,17 +66357,37 @@ "properties": [ { "name": "form", - "type": 45, + "type": 43, "optional": false }, { "name": "kind", "type": 73, "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false }, { "name": "name", - "type": 6, + "type": 10, "optional": false } ], @@ -72772,26 +66397,6 @@ "kind": "literal", "value": "skill-invocation" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 45, - "optional": false - }, - { - "name": "kind", - "type": 75, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, { "kind": "object", "properties": [ @@ -72835,7 +66440,7 @@ "properties": [ { "name": "capturedFormatVersion", - "type": 12, + "type": 1, "optional": true }, { @@ -72845,47 +66450,47 @@ }, { "name": "compacted", - "type": 31, + "type": 33, "optional": false }, { "name": "inputIndex", - "type": 12, + "type": 1, "optional": false }, { "name": "label", - "type": 6, + "type": 10, "optional": false }, { "name": "omittedBytes", - "type": 12, + "type": 1, "optional": false }, { "name": "omittedMessages", - "type": 12, + "type": 1, "optional": false }, { "name": "originalMessages", - "type": 12, + "type": 1, "optional": false }, { "name": "retainedMessages", - "type": 12, + "type": 1, "optional": false }, { "name": "sessionId", - "type": 6, + "type": 10, "optional": false }, { "name": "truncated", - "type": 31, + "type": 33, "optional": false } ], @@ -72894,7 +66499,7 @@ { "kind": "union", "types": [ - 12, + 1, 82 ] }, @@ -72916,7 +66521,7 @@ }, { "name": "kind", - "type": 46, + "type": 44, "optional": false }, { @@ -72940,12 +66545,33 @@ "properties": [ { "name": "name", - "type": 6, + "type": 10, "optional": false }, { "name": "text", - "type": 6, + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 86, "optional": false } ], @@ -73024,7 +66650,7 @@ }, { "name": "kind", - "type": 75, + "type": 73, "optional": false }, { @@ -73045,32 +66671,7 @@ }, { "name": "kind", - "type": 93, - "optional": false - }, - { - "name": "sections", - "type": 86, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 95, + "type": 94, "optional": false }, { @@ -73085,6 +66686,22 @@ "kind": "literal", "value": "schedule" }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 94, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -73110,22 +66727,6 @@ "kind": "literal", "value": "time-context" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 45, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -73136,7 +66737,7 @@ }, { "name": "kind", - "type": 100, + "type": 99, "optional": false }, { @@ -73161,7 +66762,7 @@ }, { "name": "kind", - "type": 102, + "type": 101, "optional": false }, { @@ -73186,7 +66787,7 @@ }, { "name": "kind", - "type": 39, + "type": 103, "optional": false }, { @@ -73197,6 +66798,35 @@ ], "indices": [] }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 85, + "optional": false + }, + { + "name": "kind", + "type": 105, + "optional": false + }, + { + "name": "sections", + "type": 86, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, { "kind": "object", "properties": [ @@ -73223,28 +66853,7 @@ "properties": [ { "name": "form", - "type": 85, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 86, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 107, + "type": 40, "optional": false }, { @@ -73252,48 +66861,14 @@ "type": 108, "optional": false }, - { - "name": "senderName", - "type": 6, - "optional": false - }, { "name": "senderSessionId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, + "type": 10, "optional": false }, { "name": "summary", - "type": 6, + "type": 10, "optional": false } ], @@ -73308,22 +66883,26 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { "name": "kind", - "type": 112, + "type": 111, "optional": false }, { "name": "senderSessionId", - "type": 6, + "type": 10, "optional": false } ], "indices": [] }, + { + "kind": "literal", + "value": "relay" + }, { "kind": "literal", "value": "agent-message" @@ -73333,33 +66912,17 @@ "properties": [ { "name": "form", - "type": 45, + "type": 40, "optional": false }, { "name": "kind", - "type": 95, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 46, + "type": 44, "optional": false }, { "name": "summary", - "type": 6, + "type": 10, "optional": false } ], @@ -73370,49 +66933,7 @@ "properties": [ { "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 48, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 45, + "type": 43, "optional": false }, { @@ -73428,12 +66949,17 @@ "properties": [ { "name": "form", - "type": 45, + "type": 40, "optional": false }, { "name": "kind", - "type": 100, + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -73444,12 +66970,17 @@ "properties": [ { "name": "form", - "type": 45, + "type": 40, "optional": false }, { "name": "kind", - "type": 102, + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -73460,12 +66991,17 @@ "properties": [ { "name": "form", - "type": 45, + "type": 40, "optional": false }, { "name": "kind", - "type": 39, + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -73476,7 +67012,92 @@ "properties": [ { "name": "form", - "type": 45, + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 64, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 99, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 103, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, "optional": false }, { @@ -73492,12 +67113,12 @@ "properties": [ { "name": "form", - "type": 45, + "type": 77, "optional": false }, { "name": "kind", - "type": 43, + "type": 44, "optional": false } ], @@ -73540,17 +67161,17 @@ "properties": [ { "name": "form", - "type": 38, + "type": 40, "optional": false }, { "name": "kind", - "type": 64, + "type": 73, "optional": false }, { "name": "summary", - "type": 6, + "type": 10, "optional": false } ], @@ -73598,7 +67219,7 @@ }, { "name": "kind", - "type": 75, + "type": 73, "optional": false } ], @@ -73614,23 +67235,7 @@ }, { "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 77, - "optional": false - }, - { - "name": "kind", - "type": 95, + "type": 94, "optional": false } ], @@ -73662,7 +67267,7 @@ }, { "name": "kind", - "type": 100, + "type": 99, "optional": false } ], @@ -73678,7 +67283,7 @@ }, { "name": "kind", - "type": 102, + "type": 101, "optional": false } ], @@ -73694,7 +67299,7 @@ }, { "name": "kind", - "type": 39, + "type": 103, "optional": false } ], @@ -73705,17 +67310,33 @@ "properties": [ { "name": "form", - "type": 38, + "type": 77, "optional": false }, { "name": "kind", - "type": 75, + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, + { + "name": "kind", + "type": 94, "optional": false }, { "name": "summary", - "type": 6, + "type": 10, "optional": false } ], @@ -73742,12 +67363,12 @@ "properties": [ { "name": "form", - "type": 77, + "type": 110, "optional": false }, { "name": "kind", - "type": 43, + "type": 44, "optional": false } ], @@ -73758,7 +67379,7 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { @@ -73774,7 +67395,7 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { @@ -73790,7 +67411,7 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { @@ -73806,7 +67427,7 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { @@ -73822,12 +67443,12 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { "name": "kind", - "type": 75, + "type": 73, "optional": false } ], @@ -73838,12 +67459,12 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { "name": "kind", - "type": 93, + "type": 94, "optional": false } ], @@ -73854,44 +67475,7 @@ "properties": [ { "name": "form", - "type": 107, - "optional": false - }, - { - "name": "kind", - "type": 95, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 93, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 107, + "type": 110, "optional": false }, { @@ -73907,12 +67491,17 @@ "properties": [ { "name": "form", - "type": 107, + "type": 40, "optional": false }, { "name": "kind", - "type": 100, + "type": 97, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -73923,12 +67512,12 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { "name": "kind", - "type": 102, + "type": 99, "optional": false } ], @@ -73939,12 +67528,12 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, "optional": false }, { "name": "kind", - "type": 39, + "type": 101, "optional": false } ], @@ -73955,7 +67544,39 @@ "properties": [ { "name": "form", - "type": 107, + "type": 110, + "optional": false + }, + { + "name": "kind", + "type": 103, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 110, + "optional": false + }, + { + "name": "kind", + "type": 105, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 110, "optional": false }, { @@ -73971,12 +67592,12 @@ "properties": [ { "name": "form", - "type": 107, + "type": 70, "optional": false }, { "name": "kind", - "type": 43, + "type": 44, "optional": false } ], @@ -74035,17 +67656,17 @@ "properties": [ { "name": "form", - "type": 38, + "type": 40, "optional": false }, { "name": "kind", - "type": 95, + "type": 99, "optional": false }, { "name": "summary", - "type": 6, + "type": 10, "optional": false } ], @@ -74077,7 +67698,7 @@ }, { "name": "kind", - "type": 75, + "type": 73, "optional": false } ], @@ -74093,23 +67714,7 @@ }, { "name": "kind", - "type": 93, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 70, - "optional": false - }, - { - "name": "kind", - "type": 95, + "type": 94, "optional": false } ], @@ -74141,7 +67746,7 @@ }, { "name": "kind", - "type": 100, + "type": 99, "optional": false } ], @@ -74157,7 +67762,7 @@ }, { "name": "kind", - "type": 102, + "type": 101, "optional": false } ], @@ -74173,7 +67778,23 @@ }, { "name": "kind", - "type": 39, + "type": 103, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 70, + "optional": false + }, + { + "name": "kind", + "type": 105, "optional": false } ], @@ -74200,33 +67821,17 @@ "properties": [ { "name": "form", - "type": 38, + "type": 40, "optional": false }, { "name": "kind", - "type": 97, + "type": 101, "optional": false }, { "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 70, - "optional": false - }, - { - "name": "kind", - "type": 43, + "type": 10, "optional": false } ], @@ -74237,7 +67842,7 @@ "properties": [ { "name": "goalId", - "type": 6, + "type": 10, "optional": false }, { @@ -74247,12 +67852,12 @@ }, { "name": "revision", - "type": 12, + "type": 1, "optional": false }, { "name": "round", - "type": 12, + "type": 1, "optional": false } ], @@ -74272,22 +67877,22 @@ }, { "name": "messageId", - "type": 6, + "type": 10, "optional": false }, { "name": "senderId", - "type": 6, + "type": 10, "optional": false }, { "name": "senderName", - "type": 6, + "type": 10, "optional": false }, { "name": "teamId", - "type": 6, + "type": 10, "optional": false } ], @@ -74307,12 +67912,12 @@ }, { "name": "model", - "type": 6, + "type": 10, "optional": false }, { "name": "provider", - "type": 6, + "type": 10, "optional": false }, { @@ -74331,6 +67936,17 @@ "kind": "opaque", "reason": "unknown" }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, { "kind": "object", "properties": [ @@ -74369,39 +67985,7 @@ "properties": [ { "name": "kind", - "type": 64, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 180, + "type": 179, "optional": false } ], @@ -74414,9 +67998,19 @@ { "kind": "object", "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, { "name": "kind", - "type": 75, + "type": 103, + "optional": false + }, + { + "name": "summary", + "type": 10, "optional": false } ], @@ -74427,7 +68021,7 @@ "properties": [ { "name": "kind", - "type": 93, + "type": 64, "optional": false } ], @@ -74438,7 +68032,18 @@ "properties": [ { "name": "kind", - "type": 95, + "type": 73, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 94, "optional": false } ], @@ -74475,7 +68080,7 @@ "properties": [ { "name": "kind", - "type": 100, + "type": 99, "optional": false } ], @@ -74486,7 +68091,7 @@ "properties": [ { "name": "kind", - "type": 102, + "type": 101, "optional": false } ], @@ -74497,7 +68102,7 @@ "properties": [ { "name": "kind", - "type": 39, + "type": 103, "optional": false } ], @@ -74518,27 +68123,6 @@ "kind": "literal", "value": "tool-registry" }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 102, - "optional": false - }, - { - "name": "summary", - "type": 6, - "optional": false - } - ], - "indices": [] - }, { "kind": "object", "properties": [ @@ -74553,9 +68137,30 @@ { "kind": "object", "properties": [ + { + "name": "form", + "type": 40, + "optional": false + }, { "name": "kind", - "type": 41, + "type": 105, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 105, "optional": false } ], @@ -74581,7 +68186,7 @@ "properties": [ { "name": "kind", - "type": 43, + "type": 41, "optional": false } ], @@ -74592,12 +68197,12 @@ "properties": [ { "name": "content", - "type": 3, + "type": 6, "optional": false }, { "name": "id", - "type": 6, + "type": 10, "optional": false }, { @@ -74607,7 +68212,7 @@ }, { "name": "source", - "type": 36, + "type": 38, "optional": false, "compatibility": { "version": 1, @@ -74616,7 +68221,6 @@ "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -74629,12 +68233,12 @@ "properties": [ { "name": "content", - "type": 3, + "type": 6, "optional": false }, { "name": "id", - "type": 6, + "type": 10, "optional": false }, { @@ -74659,12 +68263,12 @@ "properties": [ { "name": "content", - "type": 3, + "type": 6, "optional": false }, { "name": "id", - "type": 6, + "type": 10, "optional": false }, { @@ -74683,11 +68287,31 @@ { "kind": "literal", "value": "system" + }, + { + "kind": "object", + "properties": [ + { + "name": "model", + "type": 10, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + } + ], + "indices": [] } ] }, - "names": [], - "sources": [] + "names": [ + "packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData" + ], + "sources": [ + "packages/session/session-title-llm/src/index.ts:34" + ] }, { "digest": "9d80129e13edfb6feb03ed327e6085c6ef60b97ad074244b2f5fd4667424a6a4", @@ -74887,56 +68511,6 @@ "names": [], "sources": [] }, - { - "digest": "a005283d8ee3046e3f7dadfc1364813834802abae0551fc9bf72c352381f7bfe", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 1, - "optional": false - }, - { - "name": "kind", - "type": 2, - "optional": false - }, - { - "name": "senderName", - "type": 3, - "optional": false - }, - { - "name": "senderSessionId", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "primitive", - "type": "string" - } - ] - }, - "names": [], - "sources": [ - "packages/experimental/agent-team/src/types.ts:151" - ] - }, { "digest": "a0a2e5c42e1c929445ecd1cd70f49be6b66441894ec72c08e8ae332821d4a3cb", "schema": { @@ -75941,7 +69515,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:241" + "packages/experimental/agent-team/src/types.ts:232" ] }, { @@ -77985,7 +71559,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:239" + "packages/experimental/agent-team/src/types.ts:230" ] }, { @@ -80117,2408 +73691,6 @@ "names": [], "sources": [] }, - { - "digest": "bc01b8b489de8b58fd355dae5ff5d74f8a9a852a0f3c8e569781cf75d8dc4624", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "union", - "types": [ - 1, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 21, - 23, - 25, - 27, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 55, - 57, - 60, - 61, - 62, - 64, - 65, - 66, - 67, - 69, - 70, - 71, - 72, - 73, - 75, - 77, - 78, - 80, - 81, - 82, - 83, - 93, - 95, - 96, - 98, - 101, - 105, - 107, - 115, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 133, - 135, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "revision", - "type": 54, - "optional": false - }, - { - "name": "round", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "messageId", - "type": 52, - "optional": false - }, - { - "name": "senderId", - "type": 52, - "optional": false - }, - { - "name": "senderName", - "type": 52, - "optional": false - }, - { - "name": "teamId", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 58, - "optional": false - }, - { - "name": "model", - "type": 52, - "optional": false - }, - { - "name": "provider", - "type": 52, - "optional": false - }, - { - "name": "replayState", - "type": 59, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 68, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 74, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 76, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 79, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 84, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 52, - "optional": true - }, - { - "name": "changes", - "type": 85, - "optional": false - }, - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 92, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "array", - "element": 86 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 87, - "optional": false - }, - { - "name": "digest", - "type": 52, - "optional": true - }, - { - "name": "path", - "type": 52, - "optional": false - }, - { - "name": "scope", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 88, - 89, - 90 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 94, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 52, - "optional": true - }, - { - "name": "kind", - "type": 76, - "optional": false - }, - { - "name": "rpcId", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 52, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 52, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 52, - "optional": false - }, - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 100, - "optional": false - }, - { - "name": "provider", - "type": 52, - "optional": false - }, - { - "name": "ruleId", - "type": 52, - "optional": false - }, - { - "name": "source", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 102, - "optional": false - }, - { - "name": "form", - "type": 38, - "optional": false - }, - { - "name": "kind", - "type": 104, - "optional": false - }, - { - "name": "update", - "type": 84, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 103 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 52, - "optional": false - }, - { - "name": "name", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 106, - "optional": false - }, - { - "name": "name", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "references", - "type": 109, - "optional": false - }, - { - "name": "version", - "type": 114, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 110 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 54, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 111, - "optional": false - }, - { - "name": "compacted", - "type": 113, - "optional": false - }, - { - "name": "inputIndex", - "type": 54, - "optional": false - }, - { - "name": "label", - "type": 52, - "optional": false - }, - { - "name": "omittedBytes", - "type": 54, - "optional": false - }, - { - "name": "omittedMessages", - "type": 54, - "optional": false - }, - { - "name": "originalMessages", - "type": 54, - "optional": false - }, - { - "name": "retainedMessages", - "type": 54, - "optional": false - }, - { - "name": "sessionId", - "type": 52, - "optional": false - }, - { - "name": "truncated", - "type": 113, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 54, - 112 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 118 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 52, - "optional": false - }, - { - "name": "text", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 15, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 116, - "optional": false - }, - { - "name": "kind", - "type": 17, - "optional": false - }, - { - "name": "sections", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 132, - "optional": false - }, - { - "name": "senderName", - "type": 52, - "optional": false - }, - { - "name": "senderSessionId", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 134, - "optional": false - }, - { - "name": "senderSessionId", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 19, - "optional": false - }, - { - "name": "kind", - "type": 136, - "optional": false - }, - { - "name": "senderSessionId", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 15, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 99, - "optional": false - }, - { - "name": "kind", - "type": 17, - "optional": false - }, - { - "name": "summary", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 7, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 9, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 17, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 24, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 2, - "optional": false - }, - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [ - "packages/llm/llm/src/message.ts#MessageSource" - ], - "sources": [ - "packages/llm/llm/src/message.ts:136" - ] - }, { "digest": "bcf0caf62d964b2fcf5404bd5c909cfa9a21c3f3c96e6b7e36d9e33565223825", "schema": { @@ -83208,20 +74380,6 @@ "names": [], "sources": [] }, - { - "digest": "c91852e53038618e7869f3e436acdb3f319c4f31b516c71a4b816e7387e3df2f", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "literal", - "value": "team-relay" - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "c99e20441bf15341e9db54385e558e5c03d21dff2eb1ac08ccbf47c2d8747954", "schema": { @@ -83841,163 +74999,64 @@ "sources": [] }, { - "digest": "d28765f87d6b6ab408e0b2f3e7e297791b004b806d8e302c49903ebae815feb2", + "digest": "d1f27cf1650e5f59d5d6e95ce6dfd92b31757af076a8ab6418a70b6dbdd53621", "schema": { "root": 0, "nodes": [ - { - "kind": "literal", - "value": "one-shot" - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "d36d44ef7e257e6fb64aa4fcda3b106b5e3d4afdca5227e5b6a8b721f1f2bbb7", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 29, - "optional": true - }, - { - "name": "seq", - "type": 2, - "optional": false - }, - { - "name": "time", - "type": 2, - "optional": false - }, - { - "name": "type", - "type": 207, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "maxTokens", - "type": 2, - "optional": false - }, - { - "name": "messageSeqs", - "type": 3, - "optional": false - }, - { - "name": "messages", - "type": 4, - "optional": false - }, - { - "name": "route", - "type": 206, - "optional": false - }, - { - "name": "system", - "type": 10, - "optional": false - }, - { - "name": "titleProvider", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, { "kind": "array", - "element": 2 - }, - { - "kind": "array", - "element": 5 - }, - { - "kind": "union", - "types": [ - 6, - 37, - 201, - 202, - 204 - ] + "element": 1 }, { "kind": "object", "properties": [ { "name": "content", - "type": 7, + "type": 2, "optional": false }, { "name": "id", - "type": 10, + "type": 5, "optional": false }, - { - "name": "isError", - "type": 34, - "optional": true - }, { "name": "role", - "type": 35, + "type": 30, "optional": false }, { "name": "source", - "type": 36, - "optional": false - }, - { - "name": "toolCallId", - "type": 10, - "optional": false + "type": 31, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } } ], "indices": [] }, { "kind": "array", - "element": 8 + "element": 3 }, { "kind": "union", "types": [ + 4, + 7, 9, 12, 14, - 17, - 19, - 21, - 31 + 16, + 27 ] }, { @@ -84005,12 +75064,12 @@ "properties": [ { "name": "text", - "type": 10, + "type": 5, "optional": false }, { "name": "type", - "type": 11, + "type": 6, "optional": false } ], @@ -84029,12 +75088,12 @@ "properties": [ { "name": "text", - "type": 10, + "type": 5, "optional": false }, { "name": "type", - "type": 13, + "type": 8, "optional": false } ], @@ -84049,17 +75108,17 @@ "properties": [ { "name": "tool", - "type": 15, + "type": 10, "optional": true }, { "name": "toolName", - "type": 10, + "type": 5, "optional": false }, { "name": "type", - "type": 16, + "type": 11, "optional": false } ], @@ -84078,12 +75137,12 @@ "properties": [ { "name": "toolName", - "type": 10, + "type": 5, "optional": false }, { "name": "type", - "type": 18, + "type": 13, "optional": false } ], @@ -84098,22 +75157,22 @@ "properties": [ { "name": "arguments", - "type": 10, + "type": 5, "optional": false }, { "name": "id", - "type": 10, + "type": 5, "optional": false }, { "name": "name", - "type": 10, + "type": 5, "optional": false }, { "name": "type", - "type": 20, + "type": 15, "optional": false } ], @@ -84128,17 +75187,17 @@ "properties": [ { "name": "attachment", - "type": 22, + "type": 17, "optional": false }, { "name": "offloaded", - "type": 29, + "type": 25, "optional": true }, { "name": "type", - "type": 30, + "type": 26, "optional": false } ], @@ -84149,54 +75208,54 @@ "properties": [ { "name": "attachmentId", - "type": 10, + "type": 5, "optional": false }, { "name": "bytes", - "type": 2, + "type": 18, "optional": false }, { "name": "height", - "type": 2, + "type": 18, "optional": false }, { "name": "mediaType", - "type": 23, + "type": 19, "optional": false }, { "name": "name", - "type": 10, + "type": 5, "optional": true }, { "name": "originalDimensions", - "type": 28, + "type": 24, "optional": true }, { "name": "width", - "type": 2, + "type": 18, "optional": false } ], "indices": [] }, { - "kind": "union", - "types": [ - 24, - 25, - 26, - 27 - ] + "kind": "primitive", + "type": "number" }, { - "kind": "literal", - "value": "image/gif" + "kind": "union", + "types": [ + 20, + 21, + 22, + 23 + ] }, { "kind": "literal", @@ -84210,17 +75269,21 @@ "kind": "literal", "value": "image/webp" }, + { + "kind": "literal", + "value": "image/gif" + }, { "kind": "object", "properties": [ { "name": "height", - "type": 2, + "type": 18, "optional": false }, { "name": "width", - "type": 2, + "type": 18, "optional": false } ], @@ -84239,12 +75302,12 @@ "properties": [ { "name": "attachment", - "type": 32, + "type": 28, "optional": false }, { "name": "type", - "type": 33, + "type": 29, "optional": false } ], @@ -84255,17 +75318,17 @@ "properties": [ { "name": "attachmentId", - "type": 10, + "type": 5, "optional": false }, { "name": "bytes", - "type": 2, + "type": 18, "optional": false }, { "name": "name", - "type": 10, + "type": 5, "optional": false } ], @@ -84275,155 +75338,96 @@ "kind": "literal", "value": "file" }, - { - "kind": "primitive", - "type": "boolean" - }, { "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 35, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 7, - "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 38, - "optional": false - }, - { - "name": "source", - "type": 39, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.developer-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "developer" + "value": "user" }, { "kind": "union", "types": [ - 36, + 32, + 35, + 38, 40, - 43, - 45, - 47, - 49, - 51, - 53, - 55, - 57, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, 60, - 62, + 61, + 63, 64, + 65, 66, + 67, 68, + 69, 70, + 71, 72, + 73, + 74, + 75, + 77, + 78, + 79, + 80, 81, 82, + 83, 84, + 85, 86, + 87, 88, + 89, + 91, + 92, 93, + 94, 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, 103, + 105, 107, - 109, 110, 111, 112, 113, - 114, 115, 116, + 117, 118, - 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, - 129, 130, 131, 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, 140, - 141, 142, 143, - 144, 145, - 146, 147, - 148, - 149, - 150, 151, - 152, 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, 161, - 162, - 163, - 164, 165, 166, 167, @@ -84437,22 +75441,19 @@ 175, 176, 177, - 178, 179, 181, + 182, 183, + 184, + 185, 186, 187, 188, + 189, 190, 191, - 192, - 194, - 195, - 196, - 197, - 199, - 200 + 192 ] }, { @@ -84460,22 +75461,17 @@ "properties": [ { "name": "form", - "type": 41, + "type": 33, "optional": false }, { "name": "kind", - "type": 42, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, + "type": 34, "optional": false }, { "name": "summary", - "type": 10, + "type": 5, "optional": false } ], @@ -84485,165 +75481,6 @@ "kind": "literal", "value": "notice" }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 48, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 50, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 54, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, { "kind": "literal", "value": "hooks-claude-code" @@ -84653,22 +75490,21 @@ "properties": [ { "name": "form", - "type": 41, + "type": 36, "optional": false }, { "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 37, "optional": false } ], "indices": [] }, + { + "kind": "literal", + "value": "instructions" + }, { "kind": "literal", "value": "hooks-codex" @@ -84678,17 +75514,12 @@ "properties": [ { "name": "form", - "type": 41, + "type": 36, "optional": false }, { "name": "kind", - "type": 65, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 39, "optional": false } ], @@ -84703,17 +75534,12 @@ "properties": [ { "name": "form", - "type": 41, + "type": 36, "optional": false }, { "name": "kind", - "type": 67, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 41, "optional": false } ], @@ -84728,17 +75554,12 @@ "properties": [ { "name": "form", - "type": 41, + "type": 36, "optional": false }, { "name": "kind", - "type": 69, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 43, "optional": false } ], @@ -84753,17 +75574,12 @@ "properties": [ { "name": "form", - "type": 41, + "type": 36, "optional": false }, { "name": "kind", - "type": 71, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 45, "optional": false } ], @@ -84776,154 +75592,14 @@ { "kind": "object", "properties": [ - { - "name": "baseline", - "type": 29, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 10, - "optional": true - }, - { - "name": "changes", - "type": 73, - "optional": false - }, { "name": "form", - "type": 79, + "type": 36, "optional": false }, { "name": "kind", - "type": 80, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 74 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 75, - "optional": false - }, - { - "name": "digest", - "type": 10, - "optional": true - }, - { - "name": "path", - "type": 10, - "optional": false - }, - { - "name": "scope", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 76, - 77, - 78 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 10, - "optional": true - }, - { - "name": "kind", - "type": 50, - "optional": false - }, - { - "name": "rpcId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 83, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 10, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 47, "optional": false } ], @@ -84936,302 +75612,14 @@ { "kind": "object", "properties": [ - { - "name": "deliveryId", - "type": 10, - "optional": false - }, { "name": "form", - "type": 41, + "type": 36, "optional": false }, { "name": "kind", - "type": 87, - "optional": false - }, - { - "name": "provider", - "type": 10, - "optional": false - }, - { - "name": "ruleId", - "type": 10, - "optional": false - }, - { - "name": "source", - "type": 10, - "optional": false - }, - { - "name": "summary", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 89, - "optional": false - }, - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 92, - "optional": false - }, - { - "name": "update", - "type": 29, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 90 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 10, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 94, - "optional": false - }, - { - "name": "name", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 97, - "optional": false - }, - { - "name": "references", - "type": 98, - "optional": false - }, - { - "name": "version", - "type": 102, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 99 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 2, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 100, - "optional": false - }, - { - "name": "compacted", - "type": 34, - "optional": false - }, - { - "name": "inputIndex", - "type": 2, - "optional": false - }, - { - "name": "label", - "type": 10, - "optional": false - }, - { - "name": "omittedBytes", - "type": 2, - "optional": false - }, - { - "name": "omittedMessages", - "type": 2, - "optional": false - }, - { - "name": "originalMessages", - "type": 2, - "optional": false - }, - { - "name": "retainedMessages", - "type": 2, - "optional": false - }, - { - "name": "sessionId", - "type": 10, - "optional": false - }, - { - "name": "truncated", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 2, - 101 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 106 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 10, - "optional": false - }, - { - "name": "text", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 41, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 49, "optional": false } ], @@ -85246,164 +75634,12 @@ "properties": [ { "name": "form", - "type": 104, + "type": 36, "optional": false }, { "name": "kind", - "type": 63, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - }, - { - "name": "sections", - "type": 105, + "type": 51, "optional": false } ], @@ -85418,17 +75654,160 @@ "properties": [ { "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", "type": 41, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ { - "name": "kind", - "type": 117, + "name": "form", + "type": 62, "optional": false }, { - "name": "summary", - "type": 10, + "name": "kind", + "type": 43, "optional": false } ], @@ -85439,17 +75818,208 @@ "properties": [ { "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", "type": 41, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ { - "name": "kind", - "type": 44, + "name": "form", + "type": 76, "optional": false }, { - "name": "summary", - "type": 10, + "name": "kind", + "type": 43, "optional": false } ], @@ -85460,17 +76030,208 @@ "properties": [ { "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", "type": 41, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ { - "name": "kind", - "type": 46, + "name": "form", + "type": 90, "optional": false }, { - "name": "summary", - "type": 10, + "name": "kind", + "type": 43, "optional": false } ], @@ -85481,17 +76242,12 @@ "properties": [ { "name": "form", - "type": 41, + "type": 90, "optional": false }, { "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 45, "optional": false } ], @@ -85502,17 +76258,12 @@ "properties": [ { "name": "form", - "type": 41, + "type": 90, "optional": false }, { "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "summary", - "type": 10, + "type": 47, "optional": false } ], @@ -85523,12 +76274,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 90, "optional": false }, { "name": "kind", - "type": 61, + "type": 49, "optional": false } ], @@ -85539,12 +76290,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 90, "optional": false }, { "name": "kind", - "type": 63, + "type": 51, "optional": false } ], @@ -85555,12 +76306,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 90, "optional": false }, { "name": "kind", - "type": 65, + "type": 53, "optional": false } ], @@ -85571,12 +76322,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 90, "optional": false }, { "name": "kind", - "type": 67, + "type": 55, "optional": false } ], @@ -85587,12 +76338,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 90, "optional": false }, { "name": "kind", - "type": 69, + "type": 57, "optional": false } ], @@ -85603,12 +76354,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 90, "optional": false }, { "name": "kind", - "type": 71, + "type": 59, "optional": false } ], @@ -85619,816 +76370,12 @@ "properties": [ { "name": "form", - "type": 79, + "type": 90, "optional": false }, { "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 79, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 96, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 104, - "optional": false - }, - { - "name": "kind", - "type": 56, - "optional": false - }, - { - "name": "sections", - "type": 105, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 61, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 65, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 67, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 69, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 71, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 85, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 108, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 117, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 44, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 46, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 52, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 91, - "optional": false - }, - { - "name": "kind", - "type": 56, + "type": 34, "optional": false } ], @@ -86439,22 +76386,22 @@ "properties": [ { "name": "goalId", - "type": 10, + "type": 5, "optional": false }, { "name": "kind", - "type": 180, + "type": 104, "optional": false }, { "name": "revision", - "type": 2, + "type": 18, "optional": false }, { "name": "round", - "type": 2, + "type": 18, "optional": false } ], @@ -86469,27 +76416,27 @@ "properties": [ { "name": "kind", - "type": 182, + "type": 106, "optional": false }, { "name": "messageId", - "type": 10, + "type": 5, "optional": false }, { "name": "senderId", - "type": 10, + "type": 5, "optional": false }, { "name": "senderName", - "type": 10, + "type": 5, "optional": false }, { "name": "teamId", - "type": 10, + "type": 5, "optional": false } ], @@ -86504,22 +76451,22 @@ "properties": [ { "name": "kind", - "type": 184, + "type": 108, "optional": false }, { "name": "model", - "type": 10, + "type": 5, "optional": false }, { "name": "provider", - "type": 10, + "type": 5, "optional": false }, { "name": "replayState", - "type": 185, + "type": 109, "optional": true } ], @@ -86538,7 +76485,7 @@ "properties": [ { "name": "kind", - "type": 61, + "type": 37, "optional": false } ], @@ -86549,48 +76496,7 @@ "properties": [ { "name": "kind", - "type": 63, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 58, - "optional": false - }, - { - "name": "kind", - "type": 189, - "optional": false - }, - { - "name": "senderName", - "type": 10, - "optional": false - }, - { - "name": "senderSessionId", - "type": 10, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 65, + "type": 39, "optional": false } ], @@ -86601,7 +76507,7 @@ "properties": [ { "name": "kind", - "type": 67, + "type": 41, "optional": false } ], @@ -86612,7 +76518,7 @@ "properties": [ { "name": "kind", - "type": 193, + "type": 114, "optional": false } ], @@ -86627,7 +76533,7 @@ "properties": [ { "name": "kind", - "type": 69, + "type": 43, "optional": false } ], @@ -86638,7 +76544,7 @@ "properties": [ { "name": "kind", - "type": 71, + "type": 45, "optional": false } ], @@ -86649,7 +76555,7 @@ "properties": [ { "name": "kind", - "type": 85, + "type": 47, "optional": false } ], @@ -86660,7 +76566,7 @@ "properties": [ { "name": "kind", - "type": 198, + "type": 119, "optional": false } ], @@ -86675,7 +76581,7 @@ "properties": [ { "name": "kind", - "type": 108, + "type": 49, "optional": false } ], @@ -86686,7 +76592,7 @@ "properties": [ { "name": "kind", - "type": 117, + "type": 51, "optional": false } ], @@ -86696,35 +76602,9 @@ "kind": "object", "properties": [ { - "name": "content", - "type": 7, + "name": "kind", + "type": 53, "optional": false - }, - { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 50, - "optional": false - }, - { - "name": "source", - "type": 39, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } } ], "indices": [] @@ -86733,23 +76613,19 @@ "kind": "object", "properties": [ { - "name": "content", - "type": 7, + "name": "kind", + "type": 55, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ { - "name": "id", - "type": 10, - "optional": false - }, - { - "name": "role", - "type": 203, - "optional": false - }, - { - "name": "source", - "type": 183, + "name": "kind", + "type": 125, "optional": false } ], @@ -86757,29 +76633,36 @@ }, { "kind": "literal", - "value": "assistant" + "value": "tool-registry" }, { "kind": "object", "properties": [ { - "name": "content", - "type": 7, + "name": "kind", + "type": 30, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ { - "name": "id", - "type": 10, + "name": "kind", + "type": 57, "optional": false - }, + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ { - "name": "role", - "type": 205, - "optional": false - }, - { - "name": "source", - "type": 197, + "name": "kind", + "type": 129, "optional": false } ], @@ -86787,19 +76670,217 @@ }, { "kind": "literal", - "value": "system" + "value": "cordis-host-runner" }, { "kind": "object", "properties": [ { - "name": "model", - "type": 10, + "name": "kind", + "type": 59, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 25, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 5, + "optional": true + }, + { + "name": "changes", + "type": 133, + "optional": false + }, + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 139, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 134 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 135, + "optional": false + }, + { + "name": "digest", + "type": 5, + "optional": true + }, + { + "name": "path", + "type": 5, + "optional": false + }, + { + "name": "scope", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 136, + 137, + 138 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 5, + "optional": true + }, + { + "name": "kind", + "type": 30, + "optional": false + }, + { + "name": "rpcId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 5, + "optional": false + }, + { + "name": "kind", + "type": 144, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 5, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 5, + "optional": false + }, + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 146, "optional": false }, { "name": "provider", - "type": 10, + "type": 5, + "optional": false + }, + { + "name": "ruleId", + "type": 5, + "optional": false + }, + { + "name": "source", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, "optional": false } ], @@ -86807,7 +76888,814 @@ }, { "kind": "literal", - "value": "session/title-llm-request" + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 148, + "optional": false + }, + { + "name": "form", + "type": 90, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "update", + "type": 25, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 149 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 5, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 36, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "name", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 62, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "references", + "type": 155, + "optional": false + }, + { + "name": "version", + "type": 160, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 156 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 18, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 157, + "optional": false + }, + { + "name": "compacted", + "type": 159, + "optional": false + }, + { + "name": "inputIndex", + "type": 18, + "optional": false + }, + { + "name": "label", + "type": 5, + "optional": false + }, + { + "name": "omittedBytes", + "type": 18, + "optional": false + }, + { + "name": "omittedMessages", + "type": 18, + "optional": false + }, + { + "name": "originalMessages", + "type": 18, + "optional": false + }, + { + "name": "retainedMessages", + "type": 18, + "optional": false + }, + { + "name": "sessionId", + "type": 5, + "optional": false + }, + { + "name": "truncated", + "type": 159, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 18, + 158 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 164 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 34, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 178, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 76, + "optional": false + }, + { + "name": "kind", + "type": 180, + "optional": false + }, + { + "name": "senderSessionId", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 49, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 51, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 53, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 33, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "summary", + "type": 5, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "d28765f87d6b6ab408e0b2f3e7e297791b004b806d8e302c49903ebae815feb2", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "literal", + "value": "one-shot" } ] }, @@ -87726,6 +78614,2748 @@ "names": [], "sources": [] }, + { + "digest": "dc4bd7ac827f4b1f9236f9a157a4b4cc171a0588064a611e43edd95f62c68130", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "inserted", + "type": 1, + "optional": false + }, + { + "name": "outcome", + "type": 194, + "optional": true + }, + { + "name": "removedCount", + "type": 19, + "optional": true + }, + { + "name": "start", + "type": 19, + "optional": false + }, + { + "name": "target", + "type": 195, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 31, + "optional": false + }, + { + "name": "source", + "type": 32, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 4 + }, + { + "kind": "union", + "types": [ + 5, + 8, + 10, + 13, + 15, + 17, + 28 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 9, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 11, + "optional": true + }, + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 18, + "optional": false + }, + { + "name": "offloaded", + "type": 26, + "optional": true + }, + { + "name": "type", + "type": 27, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 19, + "optional": false + }, + { + "name": "height", + "type": 19, + "optional": false + }, + { + "name": "mediaType", + "type": 20, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": true + }, + { + "name": "originalDimensions", + "type": 25, + "optional": true + }, + { + "name": "width", + "type": 19, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 21, + 22, + 23, + 24 + ] + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 19, + "optional": false + }, + { + "name": "width", + "type": 19, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 29, + "optional": false + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 19, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "union", + "types": [ + 33, + 36, + 38, + 40, + 42, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 59, + 61, + 62, + 63, + 64, + 65, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 109, + 111, + 114, + 115, + 116, + 117, + 118, + 120, + 121, + 122, + 123, + 125, + 126, + 127, + 128, + 129, + 131, + 132, + 133, + 135, + 136, + 144, + 146, + 147, + 149, + 151, + 155, + 157, + 165, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 183, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 108, + "optional": false + }, + { + "name": "revision", + "type": 19, + "optional": false + }, + { + "name": "round", + "type": 19, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 110, + "optional": false + }, + { + "name": "messageId", + "type": 6, + "optional": false + }, + { + "name": "senderId", + "type": 6, + "optional": false + }, + { + "name": "senderName", + "type": 6, + "optional": false + }, + { + "name": "teamId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 112, + "optional": false + }, + { + "name": "model", + "type": 6, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "replayState", + "type": 113, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 119, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 124, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 37, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 130, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 134, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 26, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 6, + "optional": true + }, + { + "name": "changes", + "type": 137, + "optional": false + }, + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 143, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 138 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 139, + "optional": false + }, + { + "name": "digest", + "type": 6, + "optional": true + }, + { + "name": "path", + "type": 6, + "optional": false + }, + { + "name": "scope", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 140, + 141, + 142 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 145, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 6, + "optional": true + }, + { + "name": "kind", + "type": 31, + "optional": false + }, + { + "name": "rpcId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 148, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 6, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 6, + "optional": false + }, + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "ruleId", + "type": 6, + "optional": false + }, + { + "name": "source", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 152, + "optional": false + }, + { + "name": "form", + "type": 94, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "update", + "type": 26, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 153 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 43, + "optional": false + }, + { + "name": "kind", + "type": 156, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 66, + "optional": false + }, + { + "name": "kind", + "type": 158, + "optional": false + }, + { + "name": "references", + "type": 159, + "optional": false + }, + { + "name": "version", + "type": 164, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 160 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 19, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 161, + "optional": false + }, + { + "name": "compacted", + "type": 163, + "optional": false + }, + { + "name": "inputIndex", + "type": 19, + "optional": false + }, + { + "name": "label", + "type": 6, + "optional": false + }, + { + "name": "omittedBytes", + "type": 19, + "optional": false + }, + { + "name": "omittedMessages", + "type": 19, + "optional": false + }, + { + "name": "originalMessages", + "type": 19, + "optional": false + }, + { + "name": "retainedMessages", + "type": 19, + "optional": false + }, + { + "name": "sessionId", + "type": 6, + "optional": false + }, + { + "name": "truncated", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 19, + 162 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 168 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "text", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 37, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 166, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 167, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 182, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 80, + "optional": false + }, + { + "name": "kind", + "type": 184, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 34, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "canceled" + }, + { + "kind": "union", + "types": [ + 196, + 197 + ] + }, + { + "kind": "literal", + "value": "next-step" + }, + { + "kind": "literal", + "value": "next-turn" + } + ] + }, + "names": [], + "sources": [ + "packages/core/agent/src/types.ts:96" + ] + }, { "digest": "dd2780e7e07684332f7a9ab047237798d260e7eaffb1321cb38eca695d184c3d", "schema": { @@ -88156,2728 +81786,6 @@ "names": [], "sources": [] }, - { - "digest": "e2f0d22d8ab1e6f72ab1c373cc6298cb264a48c7a669e6b9e3fb583dbc15274f", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "array", - "element": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "content", - "type": 2, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "role", - "type": 30, - "optional": false - }, - { - "name": "source", - "type": 31, - "optional": false, - "compatibility": { - "version": 1, - "policy": "session-source-attribution", - "binding": "session.user-message.source", - "discriminator": "kind", - "unknownKinds": "preserve", - "attributionKinds": [ - "team-relay", - "tmux-context" - ] - } - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 3 - }, - { - "kind": "union", - "types": [ - 4, - 7, - 9, - 12, - 14, - 16, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "literal", - "value": "reasoning" - }, - { - "kind": "object", - "properties": [ - { - "name": "text", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "text" - }, - { - "kind": "object", - "properties": [ - { - "name": "tool", - "type": 10, - "optional": true - }, - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "never" - }, - { - "kind": "literal", - "value": "tool-addition" - }, - { - "kind": "object", - "properties": [ - { - "name": "toolName", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-removal" - }, - { - "kind": "object", - "properties": [ - { - "name": "arguments", - "type": 5, - "optional": false - }, - { - "name": "id", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "type", - "type": 15, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-call" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 17, - "optional": false - }, - { - "name": "offloaded", - "type": 25, - "optional": true - }, - { - "name": "type", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "mediaType", - "type": 19, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": true - }, - { - "name": "originalDimensions", - "type": 24, - "optional": true - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "union", - "types": [ - 20, - 21, - 22, - 23 - ] - }, - { - "kind": "literal", - "value": "image/jpeg" - }, - { - "kind": "literal", - "value": "image/png" - }, - { - "kind": "literal", - "value": "image/webp" - }, - { - "kind": "literal", - "value": "image/gif" - }, - { - "kind": "object", - "properties": [ - { - "name": "height", - "type": 18, - "optional": false - }, - { - "name": "width", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "literal", - "value": "image" - }, - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 28, - "optional": false - }, - { - "name": "type", - "type": 29, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 5, - "optional": false - }, - { - "name": "bytes", - "type": 18, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "file" - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "union", - "types": [ - 32, - 35, - 37, - 39, - 42, - 44, - 46, - 48, - 50, - 52, - 54, - 56, - 58, - 60, - 61, - 62, - 63, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 107, - 109, - 112, - 113, - 114, - 115, - 117, - 118, - 119, - 120, - 122, - 123, - 124, - 125, - 126, - 128, - 129, - 131, - 132, - 133, - 134, - 142, - 144, - 145, - 147, - 149, - 153, - 155, - 163, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 181, - 183, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "notice" - }, - { - "kind": "literal", - "value": "user-approval" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "dsh-session-title-llm" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hooks-claude-code" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "instructions" - }, - { - "kind": "literal", - "value": "hooks-codex" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model-selection" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "plan-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "repeat-tool-reminder" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "runtime-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tmux-context" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-jobs" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "recall" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "goalId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 106, - "optional": false - }, - { - "name": "revision", - "type": 18, - "optional": false - }, - { - "name": "round", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "goal" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 108, - "optional": false - }, - { - "name": "messageId", - "type": 5, - "optional": false - }, - { - "name": "senderId", - "type": 5, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "teamId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 110, - "optional": false - }, - { - "name": "model", - "type": 5, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "replayState", - "type": 111, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "model" - }, - { - "kind": "opaque", - "reason": "unknown" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 41, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 43, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 45, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 116, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "ptc-mode" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 47, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 49, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 51, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 121, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "system-prompt" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 53, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 55, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 57, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 59, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 127, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool-registry" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 30, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 130, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "cordis-host-runner" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 34, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 36, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 38, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "baseline", - "type": 25, - "optional": true - }, - { - "name": "baselineIdentity", - "type": 5, - "optional": true - }, - { - "name": "changes", - "type": 135, - "optional": false - }, - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 141, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 136 - }, - { - "kind": "object", - "properties": [ - { - "name": "action", - "type": 137, - "optional": false - }, - { - "name": "digest", - "type": 5, - "optional": true - }, - { - "name": "path", - "type": 5, - "optional": false - }, - { - "name": "scope", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 138, - 139, - 140 - ] - }, - { - "kind": "literal", - "value": "remove" - }, - { - "kind": "literal", - "value": "replace" - }, - { - "kind": "literal", - "value": "set" - }, - { - "kind": "literal", - "value": "agent-instructions" - }, - { - "kind": "object", - "properties": [ - { - "name": "callId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 143, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "tool" - }, - { - "kind": "object", - "properties": [ - { - "name": "clientTimeZone", - "type": 5, - "optional": true - }, - { - "name": "kind", - "type": 30, - "optional": false - }, - { - "name": "rpcId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "compactionId", - "type": 5, - "optional": false - }, - { - "name": "kind", - "type": 146, - "optional": false - }, - { - "name": "sourceCommandId", - "type": 5, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "compact-checkpoint" - }, - { - "kind": "object", - "properties": [ - { - "name": "deliveryId", - "type": 5, - "optional": false - }, - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 148, - "optional": false - }, - { - "name": "provider", - "type": 5, - "optional": false - }, - { - "name": "ruleId", - "type": 5, - "optional": false - }, - { - "name": "source", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "webhook" - }, - { - "kind": "object", - "properties": [ - { - "name": "entries", - "type": 150, - "optional": false - }, - { - "name": "form", - "type": 92, - "optional": false - }, - { - "name": "kind", - "type": 152, - "optional": false - }, - { - "name": "update", - "type": 25, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 151 - }, - { - "kind": "object", - "properties": [ - { - "name": "description", - "type": 5, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-catalog" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 40, - "optional": false - }, - { - "name": "kind", - "type": 154, - "optional": false - }, - { - "name": "name", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "skill-invocation" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 64, - "optional": false - }, - { - "name": "kind", - "type": 156, - "optional": false - }, - { - "name": "references", - "type": 157, - "optional": false - }, - { - "name": "version", - "type": 162, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "session-reference" - }, - { - "kind": "array", - "element": 158 - }, - { - "kind": "object", - "properties": [ - { - "name": "capturedFormatVersion", - "type": 18, - "optional": true - }, - { - "name": "capturedThroughSeq", - "type": 159, - "optional": false - }, - { - "name": "compacted", - "type": 161, - "optional": false - }, - { - "name": "inputIndex", - "type": 18, - "optional": false - }, - { - "name": "label", - "type": 5, - "optional": false - }, - { - "name": "omittedBytes", - "type": 18, - "optional": false - }, - { - "name": "omittedMessages", - "type": 18, - "optional": false - }, - { - "name": "originalMessages", - "type": 18, - "optional": false - }, - { - "name": "retainedMessages", - "type": 18, - "optional": false - }, - { - "name": "sessionId", - "type": 5, - "optional": false - }, - { - "name": "truncated", - "type": 161, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "union", - "types": [ - 18, - 160 - ] - }, - { - "kind": "primitive", - "type": "null" - }, - { - "kind": "primitive", - "type": "boolean" - }, - { - "kind": "literal", - "value": 1 - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "array", - "element": 166 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 34, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 36, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 164, - "optional": false - }, - { - "name": "kind", - "type": 38, - "optional": false - }, - { - "name": "sections", - "type": 165, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 180, - "optional": false - }, - { - "name": "senderName", - "type": 5, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 182, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "subagent-settled" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 78, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderSessionId", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "agent-message" - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 41, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 43, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 45, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 47, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 49, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 51, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 53, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 55, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 57, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 33, - "optional": false - }, - { - "name": "kind", - "type": 59, - "optional": false - }, - { - "name": "summary", - "type": 5, - "optional": false - } - ], - "indices": [] - } - ] - }, - "names": [], - "sources": [] - }, { "digest": "e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602", "schema": { @@ -92601,7 +83509,7 @@ }, "names": [], "sources": [ - "packages/experimental/agent-team/src/types.ts:243" + "packages/experimental/agent-team/src/types.ts:234" ] }, { @@ -93025,21 +83933,7 @@ ] }, { - "digest": "eefbea819caeeea91ccb02dfafc16c68dd7f961cf9c1b2be25a2084509cf5c5a", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "literal", - "value": "block-end" - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545", + "digest": "eef4ef54dc7a133d47448a4ee822e45a351314923ef5f66db34c8b24e4b32d80", "schema": { "root": 0, "nodes": [ @@ -93047,13 +83941,64 @@ "kind": "object", "properties": [ { - "name": "step", + "name": "data", "type": 1, "optional": false }, + { + "name": "ignorable", + "type": 26, + "optional": true + }, + { + "name": "seq", + "type": 2, + "optional": false + }, + { + "name": "sourceEventSeqs", + "type": 195, + "optional": true + }, + { + "name": "surfaceOp", + "type": 196, + "optional": false + }, + { + "name": "time", + "type": 2, + "optional": false + }, + { + "name": "type", + "type": 199, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "headerSeq", + "type": 2, + "optional": true + }, + { + "name": "message", + "type": 3, + "optional": false + }, + { + "name": "step", + "type": 2, + "optional": false + }, { "name": "turn", - "type": 1, + "type": 2, "optional": false } ], @@ -93062,706 +84007,18 @@ { "kind": "primitive", "type": "number" - } - ] - }, - "names": [], - "sources": [ - "packages/core/session/src/types.ts:299", - "packages/core/session/src/types.ts:301" - ] - }, - { - "digest": "ef4f00923b9edbae15c7ef05320280bf61147ca17146cf59690359bfd5e5da45", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "literal", - "value": "compaction/summary" - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "f05fb85e715af4ab4de0b6ba111166dd0435bd8bb74a0fa0f32b9d174113fc7c", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "literal", - "value": "task-result" - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "model", - "type": 1, - "optional": false - }, - { - "name": "provider", - "type": 1, - "optional": false - }, - { - "name": "reasoningEffort", - "type": 1, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - } - ] - }, - "names": [ - "packages/api/session-controller/src/types.ts#ModelSelection" - ], - "sources": [ - "packages/api/session-controller/src/types.ts:100" - ] - }, - { - "digest": "f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "union", - "types": [ - 1, - 3, - 5, - 7, - 9, - 14, - 27 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "completed" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "forked" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "interrupted" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 8, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "max-tokens" - }, - { - "kind": "object", - "properties": [ - { - "name": "error", - "type": 10, - "optional": false - }, - { - "name": "kind", - "type": 13, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "code", - "type": 11, - "optional": false - }, - { - "name": "message", - "type": 11, - "optional": false - }, - { - "name": "offloadImages", - "type": 12, - "optional": true - }, - { - "name": "providerRetryAfterMs", - "type": 12, - "optional": true - }, - { - "name": "requestId", - "type": 11, - "optional": true - }, - { - "name": "status", - "type": 12, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "literal", - "value": "error" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 15, - "optional": false - }, - { - "name": "reason", - "type": 16, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "aborted" - }, - { - "kind": "union", - "types": [ - 17, - 19, - 21, - 23, - 25 - ] - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 18, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "user" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 20, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "disposed" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 22, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "legacy" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 24, - "optional": false - }, - { - "name": "reason", - "type": 11, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "hook" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 26, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "parent" - }, - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 28, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "blocked" - } - ] - }, - "names": [ - "packages/core/session/src/types.ts#TurnEndReason" - ], - "sources": [ - "packages/core/session/src/types.ts:232" - ] - }, - { - "digest": "f1996af2602e6f62b5ab179ca5c4af00d8753938b74cc6ef102de09e99e74a7e", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "literal", - "value": "command/run" - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 1, - "optional": false - }, - { - "name": "bytes", - "type": 2, - "optional": false - }, - { - "name": "name", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "primitive", - "type": "number" - } - ] - }, - "names": [ - "packages/attachment/attachment/src/types.ts#FileAttachmentRef" - ], - "sources": [ - "packages/attachment/attachment/src/types.ts:39" - ] - }, - { - "digest": "f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "type", - "type": 1, - "optional": false - }, - { - "name": "usage", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "usage" - }, - { - "kind": "object", - "properties": [ - { - "name": "cacheReadTokens", - "type": 3, - "optional": true - }, - { - "name": "cacheWriteTokens", - "type": 3, - "optional": true - }, - { - "name": "inputTokens", - "type": 3, - "optional": false - }, - { - "name": "outputTokens", - "type": 3, - "optional": false - }, - { - "name": "reasoningTokens", - "type": 3, - "optional": true - }, - { - "name": "totalTokens", - "type": 3, - "optional": true - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "number" - } - ] - }, - "names": [], - "sources": [ - "packages/llm/llm/src/types.ts:458" - ] - }, - { - "digest": "f230c0b583e23b25ee0a61dbe4c05e95c1e2ae44b27939501eb9e03696f0c278", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 1, - "optional": false - }, - { - "name": "kind", - "type": 2, - "optional": false - }, - { - "name": "sections", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "snapshot" - }, - { - "kind": "literal", - "value": "time-context" - }, - { - "kind": "array", - "element": 4 - }, - { - "kind": "object", - "properties": [ - { - "name": "name", - "type": 5, - "optional": false - }, - { - "name": "text", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "f29d63336e8266d80dd7baeab219436db86341304f6be1cd0edb36f5134c4a47", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "kind", - "type": 1, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "schedule" - } - ] - }, - "names": [], - "sources": [] - }, - { - "digest": "f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "attachment", - "type": 1, - "optional": false - }, - { - "name": "type", - "type": 4, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "attachmentId", - "type": 2, - "optional": false - }, - { - "name": "bytes", - "type": 3, - "optional": false - }, - { - "name": "name", - "type": 2, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "literal", - "value": "file" - } - ] - }, - "names": [ - "packages/llm/llm/src/types.ts#FileBlock" - ], - "sources": [ - "packages/llm/llm/src/types.ts:98" - ] - }, - { - "digest": "f311671e07bc7fa645a0b6597de9966b97147956565296ba76a36543801b66c5", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "literal", - "value": "in-history" - } - ] - }, - "names": [ - "packages/llm/llm/src/types.ts#SystemPromptUpdate" - ], - "sources": [ - "packages/llm/llm/src/types.ts:396" - ] - }, - { - "digest": "f38b6f0dd53606c1b2ba04a4bb91224c55d2000c0e8c969476d197e28a920283", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "inserted", - "type": 1, - "optional": false - }, - { - "name": "outcome", - "type": 196, - "optional": true - }, - { - "name": "removedCount", - "type": 19, - "optional": true - }, - { - "name": "start", - "type": 19, - "optional": false - }, - { - "name": "target", - "type": 197, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "array", - "element": 2 }, { "kind": "object", "properties": [ { "name": "content", - "type": 3, + "type": 4, "optional": false }, { "name": "id", - "type": 6, + "type": 7, "optional": false }, { @@ -93776,11 +84033,10 @@ "compatibility": { "version": 1, "policy": "session-source-attribution", - "binding": "session.user-message.source", + "binding": "session.developer-message.source", "discriminator": "kind", "unknownKinds": "preserve", "attributionKinds": [ - "team-relay", "tmux-context" ] } @@ -93790,17 +84046,17 @@ }, { "kind": "array", - "element": 4 + "element": 5 }, { "kind": "union", "types": [ - 5, - 8, - 10, - 13, - 15, - 17, + 6, + 9, + 11, + 14, + 16, + 18, 28 ] }, @@ -93809,12 +84065,12 @@ "properties": [ { "name": "text", - "type": 6, + "type": 7, "optional": false }, { "name": "type", - "type": 7, + "type": 8, "optional": false } ], @@ -93833,12 +84089,12 @@ "properties": [ { "name": "text", - "type": 6, + "type": 7, "optional": false }, { "name": "type", - "type": 9, + "type": 10, "optional": false } ], @@ -93853,17 +84109,17 @@ "properties": [ { "name": "tool", - "type": 11, + "type": 12, "optional": true }, { "name": "toolName", - "type": 6, + "type": 7, "optional": false }, { "name": "type", - "type": 12, + "type": 13, "optional": false } ], @@ -93882,12 +84138,12 @@ "properties": [ { "name": "toolName", - "type": 6, + "type": 7, "optional": false }, { "name": "type", - "type": 14, + "type": 15, "optional": false } ], @@ -93902,22 +84158,22 @@ "properties": [ { "name": "arguments", - "type": 6, + "type": 7, "optional": false }, { "name": "id", - "type": 6, + "type": 7, "optional": false }, { "name": "name", - "type": 6, + "type": 7, "optional": false }, { "name": "type", - "type": 16, + "type": 17, "optional": false } ], @@ -93932,7 +84188,7 @@ "properties": [ { "name": "attachment", - "type": 18, + "type": 19, "optional": false }, { @@ -93953,17 +84209,17 @@ "properties": [ { "name": "attachmentId", - "type": 6, + "type": 7, "optional": false }, { "name": "bytes", - "type": 19, + "type": 2, "optional": false }, { "name": "height", - "type": 19, + "type": 2, "optional": false }, { @@ -93973,7 +84229,7 @@ }, { "name": "name", - "type": 6, + "type": 7, "optional": true }, { @@ -93983,16 +84239,12 @@ }, { "name": "width", - "type": 19, + "type": 2, "optional": false } ], "indices": [] }, - { - "kind": "primitive", - "type": "number" - }, { "kind": "union", "types": [ @@ -94023,12 +84275,12 @@ "properties": [ { "name": "height", - "type": 19, + "type": 2, "optional": false }, { "name": "width", - "type": 19, + "type": 2, "optional": false } ], @@ -94063,17 +84315,17 @@ "properties": [ { "name": "attachmentId", - "type": 6, + "type": 7, "optional": false }, { "name": "bytes", - "type": 19, + "type": 2, "optional": false }, { "name": "name", - "type": 6, + "type": 7, "optional": false } ], @@ -94085,7 +84337,7 @@ }, { "kind": "literal", - "value": "user" + "value": "developer" }, { "kind": "union", @@ -94166,19 +84418,18 @@ 130, 131, 133, - 134, 135, - 137, + 136, 138, - 146, - 148, + 139, + 147, 149, - 151, - 153, - 157, - 159, - 167, - 171, + 150, + 152, + 154, + 158, + 160, + 168, 172, 173, 174, @@ -94191,15 +84442,15 @@ 181, 182, 183, - 185, - 187, + 184, + 186, + 188, 189, 190, 191, 192, 193, - 194, - 195 + 194 ] }, { @@ -94217,7 +84468,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -94246,7 +84497,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -94271,7 +84522,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -94296,7 +84547,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -94321,7 +84572,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -94346,7 +84597,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -95237,7 +85488,7 @@ "properties": [ { "name": "goalId", - "type": 6, + "type": 7, "optional": false }, { @@ -95247,12 +85498,12 @@ }, { "name": "revision", - "type": 19, + "type": 2, "optional": false }, { "name": "round", - "type": 19, + "type": 2, "optional": false } ], @@ -95272,22 +85523,22 @@ }, { "name": "messageId", - "type": 6, + "type": 7, "optional": false }, { "name": "senderId", - "type": 6, + "type": 7, "optional": false }, { "name": "senderName", - "type": 6, + "type": 7, "optional": false }, { "name": "teamId", - "type": 6, + "type": 7, "optional": false } ], @@ -95307,12 +85558,12 @@ }, { "name": "model", - "type": 6, + "type": 7, "optional": false }, { "name": "provider", - "type": 6, + "type": 7, "optional": false }, { @@ -95502,12 +85753,16 @@ "properties": [ { "name": "kind", - "type": 31, + "type": 134, "optional": false } ], "indices": [] }, + { + "kind": "literal", + "value": "user" + }, { "kind": "object", "properties": [ @@ -95524,7 +85779,7 @@ "properties": [ { "name": "kind", - "type": 136, + "type": 137, "optional": false } ], @@ -95555,12 +85810,12 @@ }, { "name": "baselineIdentity", - "type": 6, + "type": 7, "optional": true }, { "name": "changes", - "type": 139, + "type": 140, "optional": false }, { @@ -95570,7 +85825,7 @@ }, { "name": "kind", - "type": 145, + "type": 146, "optional": false } ], @@ -95578,29 +85833,29 @@ }, { "kind": "array", - "element": 140 + "element": 141 }, { "kind": "object", "properties": [ { "name": "action", - "type": 141, + "type": 142, "optional": false }, { "name": "digest", - "type": 6, + "type": 7, "optional": true }, { "name": "path", - "type": 6, + "type": 7, "optional": false }, { "name": "scope", - "type": 6, + "type": 7, "optional": false } ], @@ -95609,9 +85864,9 @@ { "kind": "union", "types": [ - 142, 143, - 144 + 144, + 145 ] }, { @@ -95635,12 +85890,12 @@ "properties": [ { "name": "callId", - "type": 6, + "type": 7, "optional": false }, { "name": "kind", - "type": 147, + "type": 148, "optional": false } ], @@ -95655,17 +85910,17 @@ "properties": [ { "name": "clientTimeZone", - "type": 6, + "type": 7, "optional": true }, { "name": "kind", - "type": 31, + "type": 134, "optional": false }, { "name": "rpcId", - "type": 6, + "type": 7, "optional": false } ], @@ -95676,17 +85931,17 @@ "properties": [ { "name": "compactionId", - "type": 6, + "type": 7, "optional": false }, { "name": "kind", - "type": 150, + "type": 151, "optional": false }, { "name": "sourceCommandId", - "type": 6, + "type": 7, "optional": true } ], @@ -95701,7 +85956,7 @@ "properties": [ { "name": "deliveryId", - "type": 6, + "type": 7, "optional": false }, { @@ -95711,27 +85966,27 @@ }, { "name": "kind", - "type": 152, + "type": 153, "optional": false }, { "name": "provider", - "type": 6, + "type": 7, "optional": false }, { "name": "ruleId", - "type": 6, + "type": 7, "optional": false }, { "name": "source", - "type": 6, + "type": 7, "optional": false }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -95746,7 +86001,7 @@ "properties": [ { "name": "entries", - "type": 154, + "type": 155, "optional": false }, { @@ -95756,7 +86011,7 @@ }, { "name": "kind", - "type": 156, + "type": 157, "optional": false }, { @@ -95769,19 +86024,19 @@ }, { "kind": "array", - "element": 155 + "element": 156 }, { "kind": "object", "properties": [ { "name": "description", - "type": 6, + "type": 7, "optional": false }, { "name": "name", - "type": 6, + "type": 7, "optional": false } ], @@ -95801,12 +86056,12 @@ }, { "name": "kind", - "type": 158, + "type": 159, "optional": false }, { "name": "name", - "type": 6, + "type": 7, "optional": false } ], @@ -95826,17 +86081,17 @@ }, { "name": "kind", - "type": 160, - "optional": false - }, - { - "name": "references", "type": 161, "optional": false }, + { + "name": "references", + "type": 162, + "optional": false + }, { "name": "version", - "type": 166, + "type": 167, "optional": false } ], @@ -95848,64 +86103,64 @@ }, { "kind": "array", - "element": 162 + "element": 163 }, { "kind": "object", "properties": [ { "name": "capturedFormatVersion", - "type": 19, + "type": 2, "optional": true }, { "name": "capturedThroughSeq", - "type": 163, + "type": 164, "optional": false }, { "name": "compacted", - "type": 165, + "type": 166, "optional": false }, { "name": "inputIndex", - "type": 19, + "type": 2, "optional": false }, { "name": "label", - "type": 6, + "type": 7, "optional": false }, { "name": "omittedBytes", - "type": 19, + "type": 2, "optional": false }, { "name": "omittedMessages", - "type": 19, + "type": 2, "optional": false }, { "name": "originalMessages", - "type": 19, + "type": 2, "optional": false }, { "name": "retainedMessages", - "type": 19, + "type": 2, "optional": false }, { "name": "sessionId", - "type": 6, + "type": 7, "optional": false }, { "name": "truncated", - "type": 165, + "type": 166, "optional": false } ], @@ -95914,8 +86169,8 @@ { "kind": "union", "types": [ - 19, - 164 + 2, + 165 ] }, { @@ -95935,7 +86190,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -95945,7 +86200,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -95957,19 +86212,19 @@ }, { "kind": "array", - "element": 170 + "element": 171 }, { "kind": "object", "properties": [ { "name": "name", - "type": 6, + "type": 7, "optional": false }, { "name": "text", - "type": 6, + "type": 7, "optional": false } ], @@ -95980,7 +86235,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -95990,7 +86245,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96001,7 +86256,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96011,7 +86266,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96022,7 +86277,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96032,7 +86287,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96043,7 +86298,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96053,7 +86308,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96064,7 +86319,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96074,7 +86329,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96085,7 +86340,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96095,7 +86350,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96106,7 +86361,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96116,7 +86371,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96127,7 +86382,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96137,7 +86392,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96148,7 +86403,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96158,7 +86413,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96169,7 +86424,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96179,7 +86434,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96190,7 +86445,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96200,7 +86455,7 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], @@ -96211,7 +86466,7 @@ "properties": [ { "name": "form", - "type": 168, + "type": 169, "optional": false }, { @@ -96221,42 +86476,12 @@ }, { "name": "sections", - "type": 169, + "type": 170, "optional": false } ], "indices": [] }, - { - "kind": "object", - "properties": [ - { - "name": "form", - "type": 82, - "optional": false - }, - { - "name": "kind", - "type": 184, - "optional": false - }, - { - "name": "senderName", - "type": 6, - "optional": false - }, - { - "name": "senderSessionId", - "type": 6, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": "team-relay" - }, { "kind": "object", "properties": [ @@ -96267,17 +86492,17 @@ }, { "name": "kind", - "type": 186, + "type": 185, "optional": false }, { "name": "senderSessionId", - "type": 6, + "type": 7, "optional": false }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -96297,12 +86522,12 @@ }, { "name": "kind", - "type": 188, + "type": 187, "optional": false }, { "name": "senderSessionId", - "type": 6, + "type": 7, "optional": false } ], @@ -96327,7 +86552,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -96348,7 +86573,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -96369,7 +86594,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -96390,7 +86615,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -96411,7 +86636,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -96432,7 +86657,7 @@ }, { "name": "summary", - "type": 6, + "type": 7, "optional": false } ], @@ -96453,6 +86678,223 @@ }, { "name": "summary", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "union", + "types": [ + 197, + 198 + ] + }, + { + "kind": "literal", + "value": "append" + }, + { + "kind": "object", + "properties": [ + { + "name": "endSeq", + "type": 2, + "optional": false + }, + { + "name": "op", + "type": 144, + "optional": false + }, + { + "name": "startSeq", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer/message" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "eefbea819caeeea91ccb02dfafc16c68dd7f961cf9c1b2be25a2084509cf5c5a", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "literal", + "value": "block-end" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "step", + "type": 1, + "optional": false + }, + { + "name": "turn", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + } + ] + }, + "names": [], + "sources": [ + "packages/core/session/src/types.ts:299", + "packages/core/session/src/types.ts:301" + ] + }, + { + "digest": "ef4f00923b9edbae15c7ef05320280bf61147ca17146cf59690359bfd5e5da45", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "literal", + "value": "compaction/summary" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "f05fb85e715af4ab4de0b6ba111166dd0435bd8bb74a0fa0f32b9d174113fc7c", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "literal", + "value": "task-result" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "model", + "type": 1, + "optional": false + }, + { + "name": "provider", + "type": 1, + "optional": false + }, + { + "name": "reasoningEffort", + "type": 1, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + } + ] + }, + "names": [ + "packages/api/session-controller/src/types.ts#ModelSelection" + ], + "sources": [ + "packages/api/session-controller/src/types.ts:100" + ] + }, + { + "digest": "f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "union", + "types": [ + 1, + 3, + 5, + 7, + 9, + 14, + 27 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "completed" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "forked" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", "type": 6, "optional": false } @@ -96461,28 +86903,517 @@ }, { "kind": "literal", - "value": "canceled" + "value": "interrupted" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 8, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "max-tokens" + }, + { + "kind": "object", + "properties": [ + { + "name": "error", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "code", + "type": 11, + "optional": false + }, + { + "name": "message", + "type": 11, + "optional": false + }, + { + "name": "offloadImages", + "type": 12, + "optional": true + }, + { + "name": "providerRetryAfterMs", + "type": 12, + "optional": true + }, + { + "name": "requestId", + "type": 11, + "optional": true + }, + { + "name": "status", + "type": 12, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "literal", + "value": "error" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 15, + "optional": false + }, + { + "name": "reason", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "aborted" }, { "kind": "union", "types": [ - 198, - 199 + 17, + 19, + 21, + 23, + 25 ] }, { - "kind": "literal", - "value": "next-step" + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 18, + "optional": false + } + ], + "indices": [] }, { "kind": "literal", - "value": "next-turn" + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "disposed" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 22, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "legacy" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 24, + "optional": false + }, + { + "name": "reason", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hook" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 26, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "parent" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "blocked" + } + ] + }, + "names": [ + "packages/core/session/src/types.ts#TurnEndReason" + ], + "sources": [ + "packages/core/session/src/types.ts:232" + ] + }, + { + "digest": "f1996af2602e6f62b5ab179ca5c4af00d8753938b74cc6ef102de09e99e74a7e", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "literal", + "value": "command/run" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "f19bee84bf3d20904553cdcd57465232bc1c2a194f54c4d195292ba0487223a6", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 1, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "name", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "number" + } + ] + }, + "names": [ + "packages/attachment/attachment/src/types.ts#FileAttachmentRef" + ], + "sources": [ + "packages/attachment/attachment/src/types.ts:39" + ] + }, + { + "digest": "f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "type", + "type": 1, + "optional": false + }, + { + "name": "usage", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "usage" + }, + { + "kind": "object", + "properties": [ + { + "name": "cacheReadTokens", + "type": 3, + "optional": true + }, + { + "name": "cacheWriteTokens", + "type": 3, + "optional": true + }, + { + "name": "inputTokens", + "type": 3, + "optional": false + }, + { + "name": "outputTokens", + "type": 3, + "optional": false + }, + { + "name": "reasoningTokens", + "type": 3, + "optional": true + }, + { + "name": "totalTokens", + "type": 3, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" } ] }, "names": [], "sources": [ - "packages/core/agent/src/types.ts:96" + "packages/llm/llm/src/types.ts:458" + ] + }, + { + "digest": "f230c0b583e23b25ee0a61dbe4c05e95c1e2ae44b27939501eb9e03696f0c278", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 1, + "optional": false + }, + { + "name": "kind", + "type": 2, + "optional": false + }, + { + "name": "sections", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "array", + "element": 4 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 5, + "optional": false + }, + { + "name": "text", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "f29d63336e8266d80dd7baeab219436db86341304f6be1cd0edb36f5134c4a47", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 1, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + } + ] + }, + "names": [], + "sources": [] + }, + { + "digest": "f2da0f27c1e6add59982c37b15e4a4912c5b33466859cce3b13d503600e24aef", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 1, + "optional": false + }, + { + "name": "type", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 2, + "optional": false + }, + { + "name": "bytes", + "type": 3, + "optional": false + }, + { + "name": "name", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "literal", + "value": "file" + } + ] + }, + "names": [ + "packages/llm/llm/src/types.ts#FileBlock" + ], + "sources": [ + "packages/llm/llm/src/types.ts:98" + ] + }, + { + "digest": "f311671e07bc7fa645a0b6597de9966b97147956565296ba76a36543801b66c5", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "literal", + "value": "in-history" + } + ] + }, + "names": [ + "packages/llm/llm/src/types.ts#SystemPromptUpdate" + ], + "sources": [ + "packages/llm/llm/src/types.ts:396" ] }, { @@ -96650,6 +87581,2700 @@ "packages/context/session-reference/src/types.ts:13" ] }, + { + "digest": "f61313bd96ed95b72eb16a4a5a77ad94a0da1756d428d3d660ff6e23c9e6342b", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 1, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "role", + "type": 29, + "optional": false + }, + { + "name": "source", + "type": 30, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "union", + "types": [ + 3, + 6, + 8, + 11, + 13, + 15, + 26 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 9, + "optional": true + }, + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 12, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 4, + "optional": false + }, + { + "name": "id", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 14, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 16, + "optional": false + }, + { + "name": "offloaded", + "type": 24, + "optional": true + }, + { + "name": "type", + "type": 25, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "mediaType", + "type": 18, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": true + }, + { + "name": "originalDimensions", + "type": 23, + "optional": true + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 19, + 20, + 21, + 22 + ] + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 17, + "optional": false + }, + { + "name": "width", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 27, + "optional": false + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 4, + "optional": false + }, + { + "name": "bytes", + "type": 17, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 31, + 34, + 37, + 39, + 41, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 59, + 60, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 104, + 106, + 109, + 110, + 111, + 112, + 113, + 115, + 116, + 117, + 118, + 120, + 121, + 122, + 123, + 124, + 126, + 128, + 130, + 131, + 132, + 140, + 142, + 143, + 145, + 147, + 151, + 153, + 161, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 179, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 103, + "optional": false + }, + { + "name": "revision", + "type": 17, + "optional": false + }, + { + "name": "round", + "type": 17, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 105, + "optional": false + }, + { + "name": "messageId", + "type": 4, + "optional": false + }, + { + "name": "senderId", + "type": 4, + "optional": false + }, + { + "name": "senderName", + "type": 4, + "optional": false + }, + { + "name": "teamId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 107, + "optional": false + }, + { + "name": "model", + "type": 4, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "replayState", + "type": 108, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 36, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 38, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 40, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 114, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 119, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 125, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 127, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 129, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 24, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 4, + "optional": true + }, + { + "name": "changes", + "type": 133, + "optional": false + }, + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 139, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 134 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 135, + "optional": false + }, + { + "name": "digest", + "type": 4, + "optional": true + }, + { + "name": "path", + "type": 4, + "optional": false + }, + { + "name": "scope", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 136, + 137, + 138 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 4, + "optional": true + }, + { + "name": "kind", + "type": 127, + "optional": false + }, + { + "name": "rpcId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 4, + "optional": false + }, + { + "name": "kind", + "type": 144, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 4, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 4, + "optional": false + }, + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 146, + "optional": false + }, + { + "name": "provider", + "type": 4, + "optional": false + }, + { + "name": "ruleId", + "type": 4, + "optional": false + }, + { + "name": "source", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 148, + "optional": false + }, + { + "name": "form", + "type": 89, + "optional": false + }, + { + "name": "kind", + "type": 150, + "optional": false + }, + { + "name": "update", + "type": 24, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 149 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 4, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 35, + "optional": false + }, + { + "name": "kind", + "type": 152, + "optional": false + }, + { + "name": "name", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 61, + "optional": false + }, + { + "name": "kind", + "type": 154, + "optional": false + }, + { + "name": "references", + "type": 155, + "optional": false + }, + { + "name": "version", + "type": 160, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 156 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 17, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 157, + "optional": false + }, + { + "name": "compacted", + "type": 159, + "optional": false + }, + { + "name": "inputIndex", + "type": 17, + "optional": false + }, + { + "name": "label", + "type": 4, + "optional": false + }, + { + "name": "omittedBytes", + "type": 17, + "optional": false + }, + { + "name": "omittedMessages", + "type": 17, + "optional": false + }, + { + "name": "originalMessages", + "type": 17, + "optional": false + }, + { + "name": "retainedMessages", + "type": 17, + "optional": false + }, + { + "name": "sessionId", + "type": 4, + "optional": false + }, + { + "name": "truncated", + "type": 159, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 17, + 158 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 164 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 4, + "optional": false + }, + { + "name": "text", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 162, + "optional": false + }, + { + "name": "kind", + "type": 33, + "optional": false + }, + { + "name": "sections", + "type": 163, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 178, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 75, + "optional": false + }, + { + "name": "kind", + "type": 180, + "optional": false + }, + { + "name": "senderSessionId", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 36, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 38, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 40, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 46, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 32, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 4, + "optional": false + } + ], + "indices": [] + } + ] + }, + "names": [ + "packages/llm/llm/src/message.ts#DeveloperMessage" + ], + "sources": [ + "packages/llm/llm/src/message.ts:157" + ] + }, { "digest": "f6329fb30c7ea8013e8975ca5e78284fb7685cc6bd620e8aa4e9a99bc81d45eb", "schema": { @@ -97296,6 +90921,2933 @@ "packages/llm/llm/src/message.ts:167" ] }, + { + "digest": "fa8f7d3ebf08a76c7f7a8b0781873c4d819b964da5dbb52cd3cdfa5da34f452d", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 29, + "optional": true + }, + { + "name": "seq", + "type": 2, + "optional": false + }, + { + "name": "time", + "type": 2, + "optional": false + }, + { + "name": "type", + "type": 205, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "maxTokens", + "type": 2, + "optional": false + }, + { + "name": "messageSeqs", + "type": 3, + "optional": false + }, + { + "name": "messages", + "type": 4, + "optional": false + }, + { + "name": "route", + "type": 204, + "optional": false + }, + { + "name": "system", + "type": 10, + "optional": false + }, + { + "name": "titleProvider", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "array", + "element": 2 + }, + { + "kind": "array", + "element": 5 + }, + { + "kind": "union", + "types": [ + 6, + 37, + 199, + 200, + 202 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "isError", + "type": 34, + "optional": true + }, + { + "name": "role", + "type": 35, + "optional": false + }, + { + "name": "source", + "type": 36, + "optional": false + }, + { + "name": "toolCallId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 8 + }, + { + "kind": "union", + "types": [ + 9, + 12, + 14, + 17, + 19, + 21, + 31 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 11, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 13, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 15, + "optional": true + }, + { + "name": "toolName", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 16, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 10, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + }, + { + "name": "type", + "type": 20, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 22, + "optional": false + }, + { + "name": "offloaded", + "type": 29, + "optional": true + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 10, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "mediaType", + "type": 23, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": true + }, + { + "name": "originalDimensions", + "type": 28, + "optional": true + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 24, + 25, + 26, + 27 + ] + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 2, + "optional": false + }, + { + "name": "width", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 32, + "optional": false + }, + { + "name": "type", + "type": 33, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 10, + "optional": false + }, + { + "name": "bytes", + "type": 2, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 35, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 38, + "optional": false + }, + { + "name": "source", + "type": 39, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 36, + 40, + 43, + 45, + 47, + 49, + 51, + 53, + 55, + 57, + 59, + 61, + 70, + 72, + 74, + 76, + 78, + 80, + 85, + 87, + 95, + 100, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 142, + 143, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 174, + 175, + 177, + 180, + 181, + 182, + 183, + 184, + 186, + 187, + 188, + 189, + 190, + 192, + 193, + 194, + 195, + 196, + 198 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 46, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 29, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 10, + "optional": true + }, + { + "name": "changes", + "type": 62, + "optional": false + }, + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 63 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 64, + "optional": false + }, + { + "name": "digest", + "type": 10, + "optional": true + }, + { + "name": "path", + "type": 10, + "optional": false + }, + { + "name": "scope", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 65, + 66, + 67 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 10, + "optional": true + }, + { + "name": "kind", + "type": 71, + "optional": false + }, + { + "name": "rpcId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 73, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 10, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 10, + "optional": false + }, + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 77, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + }, + { + "name": "ruleId", + "type": 10, + "optional": false + }, + { + "name": "source", + "type": 10, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 81, + "optional": false + }, + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 84, + "optional": false + }, + { + "name": "update", + "type": 29, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 82 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 10, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 86, + "optional": false + }, + { + "name": "name", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 89, + "optional": false + }, + { + "name": "references", + "type": 90, + "optional": false + }, + { + "name": "version", + "type": 94, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 91 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 2, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 92, + "optional": false + }, + { + "name": "compacted", + "type": 34, + "optional": false + }, + { + "name": "inputIndex", + "type": 2, + "optional": false + }, + { + "name": "label", + "type": 10, + "optional": false + }, + { + "name": "omittedBytes", + "type": 2, + "optional": false + }, + { + "name": "omittedMessages", + "type": 2, + "optional": false + }, + { + "name": "originalMessages", + "type": 2, + "optional": false + }, + { + "name": "retainedMessages", + "type": 2, + "optional": false + }, + { + "name": "sessionId", + "type": 10, + "optional": false + }, + { + "name": "truncated", + "type": 34, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 2, + 93 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "array", + "element": 99 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 10, + "optional": false + }, + { + "name": "text", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 96, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + }, + { + "name": "sections", + "type": 98, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 141, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 88, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 144, + "optional": false + }, + { + "name": "kind", + "type": 162, + "optional": false + }, + { + "name": "senderSessionId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 44, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 83, + "optional": false + }, + { + "name": "kind", + "type": 48, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 10, + "optional": false + }, + { + "name": "kind", + "type": 173, + "optional": false + }, + { + "name": "revision", + "type": 2, + "optional": false + }, + { + "name": "round", + "type": 2, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 176, + "optional": false + }, + { + "name": "messageId", + "type": 10, + "optional": false + }, + { + "name": "senderId", + "type": 10, + "optional": false + }, + { + "name": "senderName", + "type": 10, + "optional": false + }, + { + "name": "teamId", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 178, + "optional": false + }, + { + "name": "model", + "type": 10, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + }, + { + "name": "replayState", + "type": 179, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 101, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 42, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 50, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 185, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 52, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 41, + "optional": false + }, + { + "name": "kind", + "type": 101, + "optional": false + }, + { + "name": "summary", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 54, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 56, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 191, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 58, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 60, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 75, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 197, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 71, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 71, + "optional": false + }, + { + "name": "source", + "type": 39, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 201, + "optional": false + }, + { + "name": "source", + "type": 177, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "assistant" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 7, + "optional": false + }, + { + "name": "id", + "type": 10, + "optional": false + }, + { + "name": "role", + "type": 203, + "optional": false + }, + { + "name": "source", + "type": 190, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system" + }, + { + "kind": "object", + "properties": [ + { + "name": "model", + "type": 10, + "optional": false + }, + { + "name": "provider", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "session/title-llm-request" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd", "schema": { @@ -97462,6 +94014,2842 @@ "packages/skill/tool-skill/src/index.ts:34" ] }, + { + "digest": "fc8242857caf7450d7f68a1f509dce83e237bd21571666006895124cb2246a83", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "array", + "element": 1 + }, + { + "kind": "union", + "types": [ + 2, + 34, + 196, + 197, + 199 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "isError", + "type": 31, + "optional": true + }, + { + "name": "role", + "type": 32, + "optional": false + }, + { + "name": "source", + "type": 33, + "optional": false + }, + { + "name": "toolCallId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 4 + }, + { + "kind": "union", + "types": [ + 5, + 8, + 19, + 22, + 24, + 26, + 29 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "arguments", + "type": 6, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 7, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "literal", + "value": "tool-call" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 9, + "optional": false + }, + { + "name": "offloaded", + "type": 17, + "optional": true + }, + { + "name": "type", + "type": 18, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 10, + "optional": false + }, + { + "name": "height", + "type": 10, + "optional": false + }, + { + "name": "mediaType", + "type": 11, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": true + }, + { + "name": "originalDimensions", + "type": 16, + "optional": true + }, + { + "name": "width", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "union", + "types": [ + 12, + 13, + 14, + 15 + ] + }, + { + "kind": "literal", + "value": "image/jpeg" + }, + { + "kind": "literal", + "value": "image/gif" + }, + { + "kind": "literal", + "value": "image/png" + }, + { + "kind": "literal", + "value": "image/webp" + }, + { + "kind": "object", + "properties": [ + { + "name": "height", + "type": 10, + "optional": false + }, + { + "name": "width", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "literal", + "value": "image" + }, + { + "kind": "object", + "properties": [ + { + "name": "attachment", + "type": 20, + "optional": false + }, + { + "name": "type", + "type": 21, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "attachmentId", + "type": 6, + "optional": false + }, + { + "name": "bytes", + "type": 10, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "file" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 23, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "reasoning" + }, + { + "kind": "object", + "properties": [ + { + "name": "text", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 25, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "text" + }, + { + "kind": "object", + "properties": [ + { + "name": "tool", + "type": 27, + "optional": true + }, + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 28, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "primitive", + "type": "never" + }, + { + "kind": "literal", + "value": "tool-addition" + }, + { + "kind": "object", + "properties": [ + { + "name": "toolName", + "type": 6, + "optional": false + }, + { + "name": "type", + "type": 30, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-removal" + }, + { + "kind": "primitive", + "type": "boolean" + }, + { + "kind": "literal", + "value": "tool" + }, + { + "kind": "object", + "properties": [ + { + "name": "callId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 32, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 35, + "optional": false + }, + { + "name": "source", + "type": 36, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.developer-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "developer" + }, + { + "kind": "union", + "types": [ + 33, + 37, + 40, + 42, + 44, + 46, + 48, + 56, + 58, + 60, + 62, + 65, + 70, + 72, + 80, + 84, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 94, + 96, + 98, + 100, + 101, + 103, + 105, + 107, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 166, + 167, + 169, + 172, + 173, + 174, + 175, + 176, + 178, + 179, + 180, + 181, + 182, + 184, + 185, + 186, + 187, + 188, + 190, + 191, + 192, + 193, + 195 + ] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "instructions" + }, + { + "kind": "literal", + "value": "hooks-claude-code" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "hooks-codex" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model-selection" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "plan-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "repeat-tool-reminder" + }, + { + "kind": "object", + "properties": [ + { + "name": "baseline", + "type": 17, + "optional": true + }, + { + "name": "baselineIdentity", + "type": 6, + "optional": true + }, + { + "name": "changes", + "type": 49, + "optional": false + }, + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 55, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 50 + }, + { + "kind": "object", + "properties": [ + { + "name": "action", + "type": 51, + "optional": false + }, + { + "name": "digest", + "type": 6, + "optional": true + }, + { + "name": "path", + "type": 6, + "optional": false + }, + { + "name": "scope", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 52, + 53, + 54 + ] + }, + { + "kind": "literal", + "value": "remove" + }, + { + "kind": "literal", + "value": "replace" + }, + { + "kind": "literal", + "value": "set" + }, + { + "kind": "literal", + "value": "agent-instructions" + }, + { + "kind": "object", + "properties": [ + { + "name": "clientTimeZone", + "type": 6, + "optional": true + }, + { + "name": "kind", + "type": 57, + "optional": false + }, + { + "name": "rpcId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user" + }, + { + "kind": "object", + "properties": [ + { + "name": "compactionId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 59, + "optional": false + }, + { + "name": "sourceCommandId", + "type": 6, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "compact-checkpoint" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "runtime-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "deliveryId", + "type": 6, + "optional": false + }, + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 64, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "ruleId", + "type": 6, + "optional": false + }, + { + "name": "source", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "notice" + }, + { + "kind": "literal", + "value": "webhook" + }, + { + "kind": "object", + "properties": [ + { + "name": "entries", + "type": 66, + "optional": false + }, + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 69, + "optional": false + }, + { + "name": "update", + "type": 17, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "array", + "element": 67 + }, + { + "kind": "object", + "properties": [ + { + "name": "description", + "type": 6, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "catalog" + }, + { + "kind": "literal", + "value": "skill-catalog" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 71, + "optional": false + }, + { + "name": "name", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "skill-invocation" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 74, + "optional": false + }, + { + "name": "references", + "type": 75, + "optional": false + }, + { + "name": "version", + "type": 79, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "recall" + }, + { + "kind": "literal", + "value": "session-reference" + }, + { + "kind": "array", + "element": 76 + }, + { + "kind": "object", + "properties": [ + { + "name": "capturedFormatVersion", + "type": 10, + "optional": true + }, + { + "name": "capturedThroughSeq", + "type": 77, + "optional": false + }, + { + "name": "compacted", + "type": 31, + "optional": false + }, + { + "name": "inputIndex", + "type": 10, + "optional": false + }, + { + "name": "label", + "type": 6, + "optional": false + }, + { + "name": "omittedBytes", + "type": 10, + "optional": false + }, + { + "name": "omittedMessages", + "type": 10, + "optional": false + }, + { + "name": "originalMessages", + "type": 10, + "optional": false + }, + { + "name": "retainedMessages", + "type": 10, + "optional": false + }, + { + "name": "sessionId", + "type": 6, + "optional": false + }, + { + "name": "truncated", + "type": 31, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "union", + "types": [ + 10, + 78 + ] + }, + { + "kind": "primitive", + "type": "null" + }, + { + "kind": "literal", + "value": 1 + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "snapshot" + }, + { + "kind": "array", + "element": 83 + }, + { + "kind": "object", + "properties": [ + { + "name": "name", + "type": 6, + "optional": false + }, + { + "name": "text", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "schedule" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 93, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "time-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 95, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tmux-context" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 99, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-jobs" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "user-approval" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 81, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + }, + { + "name": "sections", + "type": 82, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "dsh-session-title-llm" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 106, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "subagent-settled" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 109, + "optional": false + }, + { + "name": "senderSessionId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "relay" + }, + { + "kind": "literal", + "value": "agent-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 95, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 99, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 38, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 95, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 99, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 73, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 93, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 95, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 95, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 99, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 108, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 95, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 99, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 68, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "goalId", + "type": 6, + "optional": false + }, + { + "name": "kind", + "type": 165, + "optional": false + }, + { + "name": "revision", + "type": 10, + "optional": false + }, + { + "name": "round", + "type": 10, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "goal" + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 99, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 168, + "optional": false + }, + { + "name": "messageId", + "type": 6, + "optional": false + }, + { + "name": "senderId", + "type": 6, + "optional": false + }, + { + "name": "senderName", + "type": 6, + "optional": false + }, + { + "name": "teamId", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "team-message" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 170, + "optional": false + }, + { + "name": "model", + "type": 6, + "optional": false + }, + { + "name": "provider", + "type": 6, + "optional": false + }, + { + "name": "replayState", + "type": 171, + "optional": true + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "model" + }, + { + "kind": "opaque", + "reason": "unknown" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 39, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 41, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 43, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 45, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 177, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "ptc-mode" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 47, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 102, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 61, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 85, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 183, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system-prompt" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 93, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 95, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 97, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 99, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 189, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "tool-registry" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 57, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 102, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "form", + "type": 63, + "optional": false + }, + { + "name": "kind", + "type": 104, + "optional": false + }, + { + "name": "summary", + "type": 6, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 194, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "cordis-host-runner" + }, + { + "kind": "object", + "properties": [ + { + "name": "kind", + "type": 104, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 57, + "optional": false + }, + { + "name": "source", + "type": 36, + "optional": false, + "compatibility": { + "version": 1, + "policy": "session-source-attribution", + "binding": "session.user-message.source", + "discriminator": "kind", + "unknownKinds": "preserve", + "attributionKinds": [ + "tmux-context" + ] + } + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 198, + "optional": false + }, + { + "name": "source", + "type": 169, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "assistant" + }, + { + "kind": "object", + "properties": [ + { + "name": "content", + "type": 3, + "optional": false + }, + { + "name": "id", + "type": 6, + "optional": false + }, + { + "name": "role", + "type": 200, + "optional": false + }, + { + "name": "source", + "type": 182, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": "system" + } + ] + }, + "names": [], + "sources": [] + }, { "digest": "fcf427290c6213c2a7feb57492d832ce324f5b9737a759f424dab69e6bd101a0", "schema": { diff --git a/docs/subsystems/agent-team.i18n.yaml b/docs/subsystems/agent-team.i18n.yaml index 554be14048..a4c599562f 100644 --- a/docs/subsystems/agent-team.i18n.yaml +++ b/docs/subsystems/agent-team.i18n.yaml @@ -9,8 +9,8 @@ en: df72d9409b89714d zh: 982934dd18864ca2 /agent-teams/messages-and-historical-mailbox: - en: 31add73bb0520fd4 - zh: 18c92eaadb3607fd + en: 2aed7dd369f47747 + zh: 4f080e50c584ad37 /agent-teams/shared-task-dag: en: 4515005d07e4d2a3 zh: 26811b31f69009d6 diff --git a/docs/subsystems/agent-team.md b/docs/subsystems/agent-team.md index 20b33da9e0..c5c6a0f775 100644 --- a/docs/subsystems/agent-team.md +++ b/docs/subsystems/agent-team.md @@ -25,7 +25,7 @@ Every member starts in `provisioning` and reaches exactly one terminal roster ph ## Messages and historical mailbox -New sends return inbox acceptance or reject. The target stores Team-owned `team-relay` source with the real sender Session id and member name. The content prefix also names the sender for the model. Team has no new-message outbox or resend deduplication. The [package contract](../../packages/experimental/agent-team/README.md#understand-the-implementation) defines persistence. The following mailbox types remain readable so historical Lead logs still replay; Team does not deliver their pending records. +New sends return inbox acceptance or reject. The target stores the existing `agent-message` source with the real sender Session id and a sender-name content prefix. Team has no new-message outbox or resend deduplication. The [package contract](../../packages/experimental/agent-team/README.md#understand-the-implementation) defines persistence. The following mailbox types remain readable so historical Lead logs still replay; Team does not deliver their pending records. ```ts type-equiv /** One peer message recorded by the historical Team mailbox. */ diff --git a/docs/subsystems/agent-team.zh.md b/docs/subsystems/agent-team.zh.md index f129b417b2..2e3c0b040e 100644 --- a/docs/subsystems/agent-team.zh.md +++ b/docs/subsystems/agent-team.zh.md @@ -25,7 +25,7 @@ interface TeamMemberSnapshot { ## 消息与历史 mailbox -新发送返回 inbox 接收结果或拒绝。目标保存 Team 所属的 `team-relay` source,包含真实发送者 Session id 和成员名称。正文前缀也向模型标明发送者。Team 不为新消息提供 outbox 或重发去重。[包约定](../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义持久化。以下 mailbox 类型继续可读,以便历史 Lead 日志仍能回放;Team 不投递其中的 pending 记录。 +新发送返回 inbox 接收结果或拒绝。目标保存现有 `agent-message` source,包含真实发送者 Session id 和发送者名称正文前缀。Team 不为新消息提供 outbox 或重发去重。[包约定](../../packages/experimental/agent-team/README.zh.md#understand-the-implementation)定义持久化。以下 mailbox 类型继续可读,以便历史 Lead 日志仍能回放;Team 不投递其中的 pending 记录。 ```ts type-equiv /** One peer message recorded by the historical Team mailbox. */ diff --git a/packages/client/ui-chat/src/client/chat/turn-trigger.ts b/packages/client/ui-chat/src/client/chat/turn-trigger.ts index 95c271193d..d4912668ea 100644 --- a/packages/client/ui-chat/src/client/chat/turn-trigger.ts +++ b/packages/client/ui-chat/src/client/chat/turn-trigger.ts @@ -37,7 +37,6 @@ export function turnTriggerDetails(node: ContextMessageNode): { icon = 'agent' break case 'team-message': - case 'team-relay': title = 'message.trigger.team' icon = 'team' break diff --git a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx index bc4dd84334..c45672dac5 100644 --- a/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx +++ b/packages/client/ui-chat/tests/turn-trigger.client.spec.tsx @@ -31,7 +31,6 @@ describe('Turn trigger notices', () => { [{ kind: 'goal' }, 'goal', 'Continuing goal'], [{ kind: 'agent-message' }, 'agent', 'Task message received'], [{ kind: 'team-message' }, 'team', 'Team message received'], - [{ kind: 'team-relay' }, 'team', 'Team message received'], [{ kind: 'subagent-settled' }, 'subagent', 'Subtask status updated'], [{ kind: 'webhook', provider: 'github' }, 'github', 'GitHub event received'], [{ kind: 'webhook', provider: 'custom' }, 'webhook', 'External event received'], @@ -48,24 +47,18 @@ describe('Turn trigger notices', () => { }) it.each([ - [en, 'Team message received'], - [zh, '收到团队消息'], - ])('presents Team relays from their recorded source while retaining the sender name', (locale, title) => { - const node = trigger({ kind: 'team-relay', form: 'relay', senderSessionId: 'sender', senderName: 'reviewer-2' }) + [en, 'Task message received'], + [zh, '收到任务消息'], + ])('presents Team relays as Agent messages while retaining the sender name', (locale, title) => { + const node = trigger({ kind: 'agent-message', form: 'relay', senderSessionId: 'sender' }) node.data.content = [{ type: 'text', text: 'Team message from reviewer-2:' }, { type: 'text', text: 'Ready.' }] - expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.team', icon: 'team' }) + expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.agent', icon: 'agent' }) const view = render() expect(view.getByRole('button').textContent).toContain(title) fireEvent.click(view.getByRole('button')) expect(view.container.querySelector('[data-context-text]')?.textContent).toContain('Team message from reviewer-2:') }) - it('does not classify Agent messages by Team-looking content', () => { - const node = trigger({ kind: 'agent-message', form: 'relay', senderSessionId: 'sender' }) - node.data.content = [{ type: 'text', text: 'Team message from reviewer-2:' }] - expect(turnTriggerDetails(node.data)).toEqual({ title: 'message.trigger.agent', icon: 'agent' }) - }) - it.each([ { locale: en, title: 'Automation task' }, { locale: zh, title: '自动化任务' }, diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index 05bf066d15..880ee75bf4 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -51,8 +51,8 @@ en: 2389048c1a494ed3 zh: 7e72acd6b83ea248 /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/direct-messages-and-historical-compatibility: - en: 634f799f560f58c3 - zh: beec22b4100ac53c + en: 67cc4e92adda8baa + zh: 5abdb2415e414b9d /deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/shared-task-board: en: 2dc37ba97a8a7178 zh: 96bd24033030e19d diff --git a/packages/experimental/agent-team/README.md b/packages/experimental/agent-team/README.md index 3953817291..9e0777b747 100644 --- a/packages/experimental/agent-team/README.md +++ b/packages/experimental/agent-team/README.md @@ -128,7 +128,7 @@ Every ordinary runtime root is the implicit Lead of a Team whose `TeamId` equals ### Direct messages and historical compatibility -`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores Team-owned `team-relay` source with the actual `senderSessionId` and `senderName`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering; delivery order belongs to the target inbox. The client selects the Team title and icon from `source.kind`; the message body retains the sender name. +`sendMessage()` checks exact caller membership, rejects self-messaging, and bounds the complete sender-framed UTF-8 content. It returns the existing inbox identity and emits Team activity only after acceptance. The target stores `agent-message` source with the actual `senderSessionId`; the first content block is `Team message from :`. No new `team/message/queued` or `team/message/delivered` records are written for these sends. Team adds no per-target send ordering; delivery order belongs to the target inbox. The client presents these messages with the ordinary Agent title and icon; the message body retains the sender name. Lead delivery calls `Agent.steer()` directly. Teammate delivery uses the continuation owner's host-only Steer path, which preserves the Team sender source while authorizing the Lead-to-child edge and cold-resuming inactive targets. Sibling messages never impersonate the Lead through the public adjacent-Agent messaging operation. diff --git a/packages/experimental/agent-team/README.zh.md b/packages/experimental/agent-team/README.zh.md index d8ba61f0fb..e4f7a46381 100644 --- a/packages/experimental/agent-team/README.zh.md +++ b/packages/experimental/agent-team/README.zh.md @@ -128,7 +128,7 @@ Lead 可以停止 teammate 的当前轮次,而不会删除其排队的消息 ### 直接消息与历史兼容 -`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存 Team 所属的 `team-relay` source,包含真实 `senderSessionId` 和 `senderName`;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序;投递顺序由目标 inbox 管理。客户端依据 `source.kind` 选择 Team 标题和图标;正文保留发送者名称。 +`sendMessage()` 检查确切调用方的成员身份,拒绝自发消息,并限制包含发送者前缀的完整 UTF-8 内容大小。它返回现有 inbox 身份,并仅在接收后发出 Team activity。目标保存带真实 `senderSessionId` 的 `agent-message` source;首个内容块为 `Team message from :`。这些发送不写入新的 `team/message/queued` 或 `team/message/delivered` 记录。Team 不额外保证同目标发送顺序;投递顺序由目标 inbox 管理。客户端使用普通 Agent 消息标题和图标展示这些消息;正文保留发送者名称。 投递给 Lead 时直接调用 `Agent.steer()`。投递给 teammate 时使用 continuation owner 的 host-only Steer 路径;该路径会保留 Team 发送者 source,同时授权 Lead-to-child edge 并冷恢复 inactive target。sibling 消息绝不会通过公开的相邻 Agent 消息操作伪装成 Lead。 diff --git a/packages/experimental/agent-team/src/index.ts b/packages/experimental/agent-team/src/index.ts index 3dd49c05c2..2d35933776 100644 --- a/packages/experimental/agent-team/src/index.ts +++ b/packages/experimental/agent-team/src/index.ts @@ -234,12 +234,7 @@ export class TeamService extends Service { if (Buffer.byteLength(JSON.stringify(content), 'utf8') > this.config.maxMessageBytes) { throw new TeamError(`team message exceeds ${this.config.maxMessageBytes} bytes`, 'TEAM_MESSAGE_TOO_LARGE') } - const source = { - kind: 'team-relay' as const, - form: 'relay' as const, - senderSessionId: caller.id, - senderName: membership.name, - } + const source = { kind: 'agent-message' as const, form: 'relay' as const, senderSessionId: caller.id } let messageId if (target.id === root.id) { const input = createUserMessage({ content, source }) diff --git a/packages/experimental/agent-team/src/types.ts b/packages/experimental/agent-team/src/types.ts index 73cfca058e..465f6bbf12 100644 --- a/packages/experimental/agent-team/src/types.ts +++ b/packages/experimental/agent-team/src/types.ts @@ -145,15 +145,6 @@ export interface TeamMessageSource { declare module '@deepseek-ai/dsh-llm' { interface MessageSourceMap { - /** Sender attribution survives reading without the Team producer. - * @persistenceAttribution - */ - 'team-relay': { - readonly kind: 'team-relay' - readonly form: 'relay' - readonly senderSessionId: SessionId - readonly senderName: string - } 'team-message': TeamMessageSource } } diff --git a/packages/experimental/agent-team/tests/persistence.spec.ts b/packages/experimental/agent-team/tests/persistence.spec.ts index e75cb4e8b0..c72ff4c437 100644 --- a/packages/experimental/agent-team/tests/persistence.spec.ts +++ b/packages/experimental/agent-team/tests/persistence.spec.ts @@ -106,13 +106,12 @@ async function stack( await ctx.plugin(AgentLoop, { agents: [] }) await ctx.plugin(SubagentService) await ctx.plugin(SubagentSpawn, { providerName: 'spawn' }) - const teamFiber = await ctx.plugin(TeamService) + await ctx.plugin(TeamService) const adapter = new MockAdapter(script) ctx.llm.registerAdapter(['mock'], adapter) return { ctx, adapter, - teamFiber, dispose: async () => { await disposeContext(ctx) }, } } @@ -160,7 +159,7 @@ async function persistedChild( for (const backend of backends) { describe(`${backend.name} Agent Teams recovery`, () => { - it('restores a directly accepted target inbox and sender attribution without the Team producer', async () => { + it('restores a directly accepted target inbox from its flushed crash prefix without Team intent', async () => { const liveRoot = mkdtempSync(join(tmpdir(), 'dsh-team-live-')) const crashRoot = mkdtempSync(join(tmpdir(), 'dsh-team-crash-')) roots.push(liveRoot, crashRoot) @@ -181,14 +180,13 @@ for (const backend of backends) { expect(lead.session.snapshotEvents().some(event => event.type.startsWith('team/message/'))).toBe(false) await first.dispose() const second = await stack(backend, crashRoot, [textResponse('recovered')]) - await second.teamFiber.dispose() const writer = await second.ctx.sessionPersistence.create(prefix.header) try { await writer.append(prefix.events) } finally { await writer.close() } const resumed = await second.ctx.agents.resume({ resumeSessionId: child.id, agentOptions: { provider: 'mock', model: 'mock' }, }) expect(resumed.agent.inbox.nextStep.find(message => message.id === receipt.messageId)).toMatchObject({ - source: { kind: 'team-relay', form: 'relay', senderSessionId: lead.id, senderName: 'lead' }, + source: { kind: 'agent-message', form: 'relay', senderSessionId: lead.id }, content: [{ type: 'text', text: 'Team message from lead:' }, { type: 'text', text: 'accepted before crash' }], }) await resumed.dispose() diff --git a/packages/experimental/agent-team/tests/team.spec.ts b/packages/experimental/agent-team/tests/team.spec.ts index 915a3619df..937fd7fc8c 100644 --- a/packages/experimental/agent-team/tests/team.spec.ts +++ b/packages/experimental/agent-team/tests/team.spec.ts @@ -890,7 +890,7 @@ describe('Team direct messages and waiting', () => { expect(Object.keys(result)).toEqual(['messageId']) expect(result.messageId).toBeTypeOf('string') expect(agent.inbox.nextStep.find(message => message.id === result.messageId)).toMatchObject({ - source: { kind: 'team-relay', form: 'relay', senderSessionId: alpha.id, senderName: 'alpha' }, + source: { kind: 'agent-message', form: 'relay', senderSessionId: alpha.id }, content: [{ type: 'text', text: 'Team message from alpha:' }, { type: 'text', text: 'update' }], }) } @@ -913,7 +913,7 @@ describe('Team direct messages and waiting', () => { for (const [id, receipt] of [[lead.id, leadResult], [beta.member.id, peerResult]] as const) { const messages = (await storedEvents(ctx, id)).flatMap(event => event.type === 'user/message' ? [event.data] : []) expect(messages.find(message => message.id === receipt.messageId)).toMatchObject({ - source: { kind: 'team-relay', senderSessionId: alpha.id, senderName: 'alpha' }, + source: { kind: 'agent-message', senderSessionId: alpha.id }, }) } }) diff --git a/snapshots/session/team-direct-inbox/session.1.v4.jsonl b/snapshots/session/team-direct-inbox/session.1.v4.jsonl index f682118c87..7316d89461 100644 --- a/snapshots/session/team-direct-inbox/session.1.v4.jsonl +++ b/snapshots/session/team-direct-inbox/session.1.v4.jsonl @@ -15,7 +15,7 @@ {"type":"session/title","data":{"title":" You are teammate \"revi","messageSeqs":[9],"source":{"kind":"fallback"}}} {"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"tool-call","id":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}],"source":{"kind":"model","provider":"deepseek-official","model":"deepseek-v4-flash"},"id":"{{message:16}}"},"usage":{"inputTokens":3,"outputTokens":3},"stream":[{"type":"chunk","time":1790429365968,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}},{"type":"tool-call-chunks","time0":1790429365968,"index":0,"dt":[],"id":"direct-1","name":"bash","args":["{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"]},{"type":"chunk","time":1790429365968,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}}},{"type":"chunk","time":1790429365968,"chunk":{"type":"usage","usage":{"inputTokens":3,"outputTokens":3}}},{"type":"chunk","time":1790429365969,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}]},"surfaceOp":"append"} {"type":"tool/call","data":{"turn":1,"step":1,"callId":"direct-1","name":"bash","arguments":"{\"command\":\"touch team-ready; while :; do sleep 1; done\",\"description\":\"Signal readiness and wait for interruption\",\"timeoutMs\":60000}"}} -{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Team message from lead:"},{"type":"text","text":"Review the direct inbox delivery."}],"source":{"kind":"team-relay","form":"relay","senderSessionId":"{{session:1}}","senderName":"lead"},"role":"user","id":"{{message:17}}"}]}} +{"type":"agent/inbox/spliced","data":{"target":"next-step","start":0,"inserted":[{"content":[{"type":"text","text":"Team message from lead:"},{"type":"text","text":"Review the direct inbox delivery."}],"source":{"kind":"agent-message","form":"relay","senderSessionId":"{{session:1}}"},"role":"user","id":"{{message:17}}"}]}} {"type":"tool/result","data":{"turn":1,"step":1,"message":{"role":"tool","source":{"kind":"tool","callId":"direct-1"},"toolCallId":"direct-1","content":[{"type":"text","text":"Error: tool call aborted"}],"isError":true,"id":"{{message:18}}"},"error":{"name":"AbortError","code":"ABORTED"}},"sourceEventSeqs":[15],"surfaceOp":"append"} {"type":"step/end","data":{"turn":1,"step":1}} {"type":"turn/end","data":{"turn":1,"reason":{"kind":"aborted","reason":{"kind":"parent"}}}} From 92b23cb7924ad41481f39edf192f261394dd9821 Mon Sep 17 00:00:00 2001 From: Yichen Jiang Date: Tue, 29 Sep 2026 17:11:02 +0800 Subject: [PATCH 013/155] fix(web): stop claim token decoration from looping on boundary input Typing at the end of the highlighted command token lands in the styled node. The decoration split the overflow back out, but splitText copied the token style onto it, so Lexical's normalization merged the halves again and the transform looped until Lexical aborted the update. The DOM kept the native insertion while the editor state rolled back, which left the composer desynchronized for every later keystroke. Clear the overflow style in the same transform pass. Refs #4490 --- .../src/client/input/editor/claim-decor.ts | 9 +++++-- .../tests/input-scenarios.client.spec.tsx | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/client/ui-conversation/src/client/input/editor/claim-decor.ts b/packages/client/ui-conversation/src/client/input/editor/claim-decor.ts index 7e28273305..e0ed9d3e57 100644 --- a/packages/client/ui-conversation/src/client/input/editor/claim-decor.ts +++ b/packages/client/ui-conversation/src/client/input/editor/claim-decor.ts @@ -43,9 +43,14 @@ export function registerClaimDecoration(editor: LexicalEditor, activeToken: () = } if (text.length > token.length) { // Typing at the token boundary lands in the styled node; split the - // overflow back out so only the token itself carries the color. - const [tokenNode] = node.splitText(token.length) + // overflow back out so only the token itself carries the color. The + // split copies the token style onto the overflow; it is cleared in this + // pass because Lexical's normalization merges same-style neighbours + // before the overflow's own transform runs, which would rejoin the two + // halves and loop until Lexical aborts the update. + const [tokenNode, overflow] = node.splitText(token.length) if (tokenNode !== undefined && tokenNode.getStyle() !== TOKEN_STYLE) tokenNode.setStyle(TOKEN_STYLE) + overflow?.setStyle('') return } if (node.getStyle() !== TOKEN_STYLE) node.setStyle(TOKEN_STYLE) diff --git a/packages/client/ui-conversation/tests/input-scenarios.client.spec.tsx b/packages/client/ui-conversation/tests/input-scenarios.client.spec.tsx index c4df0217e8..00b7cb2971 100644 --- a/packages/client/ui-conversation/tests/input-scenarios.client.spec.tsx +++ b/packages/client/ui-conversation/tests/input-scenarios.client.spec.tsx @@ -12,6 +12,7 @@ import './control-row-dom.ts' import type { GlobalStandardProps } from '@deepseek-ai/dsh-client-ui-slots' import { afterEach, describe, expect, it, onTestFinished, vi } from 'vitest' import { act, cleanup, fireEvent, render } from '@testing-library/react' +import { $getRoot, $isElementNode, $isTextNode } from 'lexical' import type { SessionSnapshot } from '@deepseek-ai/dsh-api-session-controller/client' import { createSnapshotStore } from '@deepseek-ai/dsh-client-store' import { InputTriggerService } from '@deepseek-ai/dsh-client-ui-input-trigger/client' @@ -340,6 +341,31 @@ describe('scenario H: backspace breaks the token', () => { expect(b.shell.snapshot.phase).toBe('plain') }) + it('keeps text typed at the end of the claimed token when the browser inserts it natively', async () => { + const b = await bench() + b.type('/goal') + await vi.waitFor(() => { expect(b.controller.menu.getSnapshot().open).toBe(true) }) + fireEvent.keyDown(b.textarea, { key: ' ', keyCode: 32 }) + expect(b.shell.snapshot.phase).toBe('claimed') + b.type('/goal 发布') + // A caret at the token/argument boundary sits at the end of the styled + // token node; native insertion writes there and Lexical syncs the DOM + // text with setTextContent plus a caret select. + act(() => { + b.shell.editor.update(() => { + const paragraph = $getRoot().getFirstChild() + const token = $isElementNode(paragraph) ? paragraph.getFirstChild() : null + if (!$isTextNode(token)) throw new Error('missing token node') + token.setTextContent('/goal 立即') + token.select(8, 8) + }, { discrete: true }) + }) + expect(b.shell.snapshot.draft).toBe('/goal 立即发布') + expect(b.shell.snapshot.phase).toBe('claimed') + act(() => { b.shell.editor.update(() => {}, { discrete: true }) }) + expect(b.view.container.querySelector('[data-lexical-text][style*="business-primary"]')?.textContent).toBe('/goal ') + }) + it('claim releases automatically; the enter after that goes through adjudication again', async () => { const b = await bench() b.type('/goal') From 98de8c0925913d247d6e9005fa0acf586417a118 Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 30 Sep 2026 13:37:58 +0800 Subject: [PATCH 014/155] refactor(desktop): share bundled primary-runtime pnpm --- apps/desktop/README.i18n.yaml | 4 +- apps/desktop/README.md | 2 +- apps/desktop/README.zh.md | 2 +- apps/desktop/scripts/prepare-dsh.ts | 2 +- apps/desktop/scripts/prepare-runtime.ts | 23 ++----- apps/desktop/scripts/smoke-runtime.ts | 49 +++++++++++-- apps/desktop/src/main.ts | 2 +- apps/desktop/tests/fixtures/pnpm-smoke.mjs | 69 +++++++++++++++++++ .../tests/fixtures/runtime-payload-smoke.mjs | 30 +------- apps/desktop/tests/macos-signature.spec.ts | 2 +- apps/desktop/tests/main-startup.spec.ts | 15 ++++ .../desktop/tests/runtime-preparation.spec.ts | 58 ++++++++++++++++ 12 files changed, 200 insertions(+), 58 deletions(-) create mode 100644 apps/desktop/tests/fixtures/pnpm-smoke.mjs create mode 100644 apps/desktop/tests/runtime-preparation.spec.ts diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index f412464ae6..403837df9f 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -3,8 +3,8 @@ # After editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write apps/desktop/README.md /deepseek-harness-desktop: - en: eccac345d51428fa - zh: 4a448b3d63cb8117 + en: 65db3a3bc4473b62 + zh: 1e52f5889f72575b /deepseek-harness-desktop/terminal-command: en: bef92953c237363f zh: d21d6effd21b8c00 diff --git a/apps/desktop/README.md b/apps/desktop/README.md index fa00c27e08..1b71ef8861 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -10,7 +10,7 @@ The first application-menu command, **About DeepSeek Harness**, opens Electron's Desktop’s local native directory flow opens an Electron folder dialog attached to the application window, restoring, showing, and focusing that window first. Concurrent requests share one dialog; cancellation returns no path and failures remain retryable. Ordinary Web uses the Host chooser. Browse mode lists Host directories. On Linux without zenity or kdialog, automatic selection uses browse instead of the Electron dialog. -Creator and the Web Plugin Manager use Desktop’s bundled pnpm under Electron Node mode without requiring pnpm on PATH. The private Node launcher environment applies only to package operations. +Desktop ships one pnpm distribution at `resources/runtime/primary-runtime/dependencies/pnpm`. Build-time production installation, Creator and the Web Plugin Manager execute its `bin/pnpm.mjs` with Electron Node mode; package operations do not require pnpm on PATH. The private Node launcher environment applies only to package operations. Agent workspace dependencies copy the same self-contained primary-runtime payload into the Harness home and execute pnpm with its standalone Node. Embedded Platform documents use a persistent WebContentsView partition keyed by a hash of the Platform origin and stable account ID. localStorage preferences, including dismissed notices, survive view closure and application restart; different accounts and origins use separate storage. The Host supplies the account ID from its latest successful profile read; while no ID is known, the document opens in a disposable partition that keeps no preference across opens. Opening a persistent partition clears cookies, filesystem, IndexedDB, Cache Storage, the HTTP and shader caches, service workers, and HTTP authentication before the document loads; a disposable partition clears all of its storage. Closing a view destroys the document, removes its request interceptors, and schedules the same cleanup, so authentication left by an unclean exit is cleared before the next document loads. The next open and application shutdown await that cleanup, and an update install waits for it before the installer takes over the exit. A failed cleanup rejects that open and blocks the same account until a later cleanup succeeds; other accounts keep opening. Sign-out destroys the document but retains account-scoped preferences for the next sign-in. A document already open in a disposable partition stays mounted when the account ID arrives for the same credential; the next open uses the account-scoped partition. The [storage decision](../../.agents/notes/implemented/architecture/2026-09-22-platform-browser-storage.md) describes the retention policy. Host sends account credentials through private Node IPC; account RPC and the Harness renderer receive no token. Before page scripts execute, the Platform preload performs one synchronous IPC to read the prepared main-process credential. It exposes displayMode, synchronous getAuthToken() and getLocale() getters, and onLocaleChange(listener), which returns an unsubscribe function. Both getters read preload memory without further IPC. The bootstrap includes the resolved Desktop language (`zh_CN` or `en_US`); Settings language changes update the preload cache and notify the open Platform document without reloading. Platform applies this language before its first render and does not persist it as a browser preference. The main-process handler performs only sender validation and an in-memory read; it never waits for Host, disk, or network. Trusted-page initialization failures retain embedded mode and make the getter throw, preventing browser-credential fallback. Only the owned Platform main frame on the configured issuer origin can initialize. Sign-out, credential replacement, Host shutdown, and view closure destroy the document. Cross-origin document navigation is blocked. HTTPS links requesting a new window open in the system browser without the embedded session or token; other schemes and URL credentials are rejected. Native views occupy the viewport below the Account feature’s return bar. diff --git a/apps/desktop/README.zh.md b/apps/desktop/README.zh.md index 61caaf038d..8877edf9e5 100644 --- a/apps/desktop/README.zh.md +++ b/apps/desktop/README.zh.md @@ -10,7 +10,7 @@ Desktop 的本地原生目录流程打开绑定应用窗口的 Electron 文件夹对话框,并先恢复、显示和聚焦该窗口。并发请求共用一个对话框;取消不返回路径,失败后可以重试。普通 Web 使用 Host 选择器。浏览模式列出 Host 目录。Linux 缺少 zenity 或 kdialog 时,自动选择使用浏览模式,不使用 Electron 对话框。 -Creator 和 Web Plugin Manager 在 Electron Node 模式下使用 Desktop 内置 pnpm,无需 PATH 中存在 pnpm。私有 Node 启动器环境仅应用于包操作。 +Desktop 在 `resources/runtime/primary-runtime/dependencies/pnpm` 中携带一份 pnpm 分发包。构建时的生产依赖安装、Creator 和 Web 插件管理器通过 Electron Node 模式执行其中的 `bin/pnpm.mjs`;包操作不要求 PATH 上存在 pnpm。私有 Node 启动器环境仅用于包操作。agent(智能体)的工作区依赖将同一份完整 primary-runtime 复制到 Harness 主目录,并使用其中的独立 Node 执行 pnpm。 Platform 内嵌文档使用持久化 WebContentsView 分区,分区名由 Platform 来源和稳定账号 ID 的哈希决定。localStorage 中的页面偏好(包括已关闭的通知)在关闭视图和重启应用后保留;不同账号和来源使用独立存储。账号 ID 来自 Host 最近一次成功的资料读取;尚无该 ID 时,文档在一次性分区中打开,该分区不跨次保留偏好。打开持久分区会先清理 Cookie、文件系统、IndexedDB、Cache Storage、HTTP 与着色器缓存、Service Worker 及 HTTP 认证状态;一次性分区则清理其全部存储。关闭视图会销毁文档、移除请求拦截器并安排相同的清理,因此异常退出遗留的认证会在下一个文档加载前被清除。下次打开和应用退出都会等待该清理完成,更新安装也会在安装器接管退出前等待。清理失败会使该次打开失败,并在后续清理成功前阻止同一账号打开;其他账号不受影响。退出登录会销毁文档,但保留账号偏好供下次登录使用。同一凭证下账号 ID 迟到时,已以一次性分区打开的文档保持挂载;下次打开使用账号分区。[存储决策](../../.agents/notes/implemented/architecture/2026-09-22-platform-browser-storage.zh.md)说明保留策略。Host 通过私有 Node IPC 发送账号凭证;账号 RPC 和 Harness 渲染进程不接收 token。Platform preload 在页面脚本执行前通过一次同步 IPC 读取主进程中已准备的凭证。它暴露 displayMode、同步的 getAuthToken() 和 getLocale() getter,以及返回取消订阅函数的 onLocaleChange(listener)。两个 getter 都只读取 preload 内存,不再调用 IPC。bootstrap 包含 Desktop 已解析的语言(`zh_CN` 或 `en_US`);Settings 语言变更会更新 preload 缓存并通知已打开的 Platform 文档,无需重载。Platform 在首屏渲染前应用该语言,且不将其持久化为浏览器偏好。主进程处理器仅校验调用来源并读取内存,不等待 Host、磁盘或网络。可信页面初始化失败时保留内嵌模式,由 getter 抛错,避免回退到浏览器凭证。只有受控 Platform 页面中、位于所配置签发来源的主 frame 能完成初始化。退登、凭证替换、Host 关闭及视图关闭都会销毁文档。跨来源文档导航被阻止。请求新窗口的 HTTPS 链接在系统浏览器中打开,不携带内嵌会话或 token;其他协议及带 URL 凭证的链接被拒绝。原生视图占据 Account 功能返回栏下方的视口。 diff --git a/apps/desktop/scripts/prepare-dsh.ts b/apps/desktop/scripts/prepare-dsh.ts index 442e01757e..3fdfc03200 100644 --- a/apps/desktop/scripts/prepare-dsh.ts +++ b/apps/desktop/scripts/prepare-dsh.ts @@ -42,7 +42,7 @@ const RUNTIME_ROOT = BUILD_PATHS.runtime const PNPM_BUILD_STATE = BUILD_PATHS.dshPnpm const PACKAGE_SET_ROOT = BUILD_PATHS.packageSet const NODE = join(BUILD_PATHS.electron, process.platform === 'win32' ? 'electron.exe' : 'Electron.app/Contents/MacOS/Electron') -const PNPM = join(RUNTIME_ROOT, 'pnpm', 'bin', 'pnpm.mjs') +const PNPM = join(RUNTIME_ROOT, 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs') function manifestVersion(path: string, subject: string): string { const manifest = JSON.parse(readFileSync(path, 'utf8')) as { version?: unknown } diff --git a/apps/desktop/scripts/prepare-runtime.ts b/apps/desktop/scripts/prepare-runtime.ts index 1b88f091bc..0f81a05a22 100644 --- a/apps/desktop/scripts/prepare-runtime.ts +++ b/apps/desktop/scripts/prepare-runtime.ts @@ -4,7 +4,7 @@ import { packagingStep } from './packaging-step.mjs' import { execFileSync } from 'node:child_process' import { chmodSync, cpSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { createRequire } from 'node:module' -import { dirname, join } from 'node:path' +import { join } from 'node:path' import { parseArgs } from 'node:util' import { downloadArtifact } from '@electron/get' import extractZip from 'extract-zip' @@ -16,18 +16,6 @@ import { prepareCommandLink } from './prepare-command-link.ts' const BUILD_PATHS = resolveDesktopTargetBuildPaths() const RUNTIME_ROOT = BUILD_PATHS.runtime -function preparePnpm(): string { - const require = createRequire(import.meta.url) - const manifestPath = require.resolve('pnpm') - const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as { version?: unknown } - if (typeof manifest.version !== 'string') throw new Error('desktop runtime: pnpm manifest has no version') - const packageDir = dirname(manifestPath) - const destination = join(RUNTIME_ROOT, 'pnpm') - rmSync(destination, { recursive: true, force: true }) - cpSync(packageDir, destination, { recursive: true }) - return manifest.version -} - async function main(): Promise { const { values } = parseArgs({ options: { 'defer-primary-runtime-smoke': { type: 'boolean', default: false } } }) const target = resolveDesktopBuildTarget() @@ -47,21 +35,22 @@ async function main(): Promise { ['-c', 'Print LSMinimumSystemVersion', join(BUILD_PATHS.electron, 'Electron.app', 'Contents', 'Info.plist')], { encoding: 'utf8' }).trim() : undefined rmSync(RUNTIME_ROOT, { recursive: true, force: true }) mkdirSync(RUNTIME_ROOT, { recursive: true }) - const pnpmVersion = preparePnpm() + await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'prepare:primary-runtime', + () => preparePrimaryRuntime({ deferSmoke: values['defer-primary-runtime-smoke'] })) + const manifest = JSON.parse(readFileSync(join(RUNTIME_ROOT, 'primary-runtime', 'runtime.json'), 'utf8')) as { pnpm?: unknown } + if (typeof manifest.pnpm !== 'string') throw new Error('desktop runtime: primary-runtime manifest has no pnpm version') cpSync(join(import.meta.dirname, 'node-bin'), join(RUNTIME_ROOT, 'bin'), { recursive: true }) chmodSync(join(RUNTIME_ROOT, 'bin', 'node'), 0o755) writeFileSync(join(RUNTIME_ROOT, 'versions.json'), `${JSON.stringify({ schemaVersion: 1, node: nodeVersion, - pnpm: pnpmVersion, + pnpm: manifest.pnpm, }, undefined, 2)}\n`) await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'prepare:cli', async () => prepareDesktopCli(join(RUNTIME_ROOT, 'cli'), platform)) if (macosMinimumVersion !== undefined) prepareCommandLink(join(RUNTIME_ROOT, 'cli'), arch, macosMinimumVersion) cpSync(join(import.meta.dirname, '..', 'lib', 'command-manager-entry.js'), join(RUNTIME_ROOT, 'cli', 'command-manager.js')) cpSync(join(import.meta.dirname, 'command-path.ps1'), join(RUNTIME_ROOT, 'cli', 'command-path.ps1')) - await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'prepare:primary-runtime', - () => preparePrimaryRuntime({ deferSmoke: values['defer-primary-runtime-smoke'] })) } await main() diff --git a/apps/desktop/scripts/smoke-runtime.ts b/apps/desktop/scripts/smoke-runtime.ts index f15f10a928..f968a9c21b 100644 --- a/apps/desktop/scripts/smoke-runtime.ts +++ b/apps/desktop/scripts/smoke-runtime.ts @@ -1,6 +1,6 @@ /** Boot the materialized target runtime without access to a user's Harness profile. */ -import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { cpSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { execFile } from 'node:child_process' @@ -25,15 +25,34 @@ export async function smokeDesktopRuntime( ): Promise { const home = mkdtempSync(join(tmpdir(), 'dsh-desktop-smoke-')) const profile = join(home, 'profiles', 'desktop') - const host = new DesktopHostProcess(node, root, profile, undefined, { ...environment, DSH_HOME: home }, + const hostEnvironment = { + ...Object.fromEntries(Object.entries(environment).filter(([name]) => !/^(?:npm|pnpm|corepack)_/iu.test(name))), + DSH_HOME: home, HOME: home, USERPROFILE: home, + XDG_CONFIG_HOME: home, XDG_CACHE_HOME: home, XDG_STATE_HOME: home, + } + const host = new DesktopHostProcess(node, root, profile, undefined, hostEnvironment, undefined, join(resourcesRuntime, 'primary-runtime'), - { pnpm: join(resourcesRuntime, 'pnpm', 'bin', 'pnpm.cjs'), nodeBin: join(resourcesRuntime, 'bin') }) + { pnpm: join(resourcesRuntime, 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs'), nodeBin: join(resourcesRuntime, 'bin') }) let timer: ReturnType | undefined try { createPluginProfile(profile) const pluginName = 'desktop-runtime-smoke-plugin' - const plugin = join(profile, 'node_modules', pluginName) + const plugin = join(home, pluginName) mkdirSync(plugin, { recursive: true }) + const installedName = 'desktop-installed-smoke-plugin' + const installedPlugin = join(home, installedName) + mkdirSync(installedPlugin) + writeFileSync(join(installedPlugin, 'package.json'), JSON.stringify({ + name: installedName, version: '1.0.0', type: 'module', exports: './index.js', dsh: { bundle: { patch: './bundle.yml' } }, + })) + writeFileSync(join(installedPlugin, 'index.js'), ` +export function apply(ctx) { + ctx.effect(() => ctx.webServer.register({ kind: 'exact', path: '/desktop-smoke-installed', + handler(_request, response) { response.end('installed plugin ready') } })) +} +`) + writeFileSync(join(installedPlugin, 'bundle.yml'), `- insert:\n - id: ${installedName}\n name: ${installedName}\n inject: [webServer]\n`) + writeFileSync(join(profile, 'pnpm-workspace.yaml'), 'nodeLinker: hoisted\nautoInstallPeers: false\noffline: true\nupdateNotifier: false\n') const primary = join(resourcesRuntime, 'primary-runtime') const dependencies = workspaceDependencyPaths(primary, await readPrimaryRuntime(primary)) await promisify(execFile)(dependencies.python, ['-I', '-B', @@ -56,6 +75,15 @@ export function apply(ctx) { if (!(ctx instanceof Context)) throw new Error('desktop runtime: external plugin loaded another Cordis instance') ctx.effect(() => ctx.webServer.register({ kind: 'exact', path: '/desktop-smoke', handler(_request, response) { response.end('plugin route ready') } })) + ctx.effect(() => ctx.webServer.register({ kind: 'exact', path: '/desktop-smoke-install', + async handler(_request, response) { + try { + response.end(JSON.stringify(await ctx.pluginManager.installBundle(${JSON.stringify(installedPlugin)}))) + } catch (error) { + response.statusCode = 500 + response.end(inspect(error, { depth: 5 })) + } + } })) ctx.effect(() => ctx.webServer.register({ kind: 'exact', path: '/desktop-smoke-office-cli', async handler(_request, response) { try { @@ -90,12 +118,13 @@ export function apply(ctx) { } } `) - writeFileSync(join(plugin, 'bundle.yml'), '- insert:\n - id: desktop-runtime-smoke-plugin\n name: desktop-runtime-smoke-plugin\n inject: [webServer, officeToPdf, skills]\n') + writeFileSync(join(plugin, 'bundle.yml'), '- insert:\n - id: desktop-runtime-smoke-plugin\n name: desktop-runtime-smoke-plugin\n inject: [webServer, officeToPdf, skills, pluginManager]\n') + cpSync(plugin, join(profile, 'node_modules', pluginName), { recursive: true }) const manifest = JSON.parse(readFileSync(join(profile, 'package.json'), 'utf8')) as { dependencies: Record dsh: { profile: { bundles: string[] } } } - manifest.dependencies[pluginName] = '1.0.0' + manifest.dependencies[pluginName] = `file:${plugin}` manifest.dsh.profile.bundles.push(pluginName) writeFileSync(join(profile, 'package.json'), JSON.stringify(manifest)) writeFileSync(join(profile, 'cordis.patch.yml'), '- id: webserver\n config:\n host: 127.0.0.1\n port: 0\n') @@ -111,6 +140,14 @@ export function apply(ctx) { } const pluginResponse = await fetch(new URL('/desktop-smoke', ready.url), { headers: { cookie } }) if (await pluginResponse.text() !== 'plugin route ready') throw new Error('desktop runtime: plugin HTTP route failed') + const installation = await fetch(new URL('/desktop-smoke-install', ready.url), { + headers: { cookie }, signal: AbortSignal.timeout(120_000), + }) + const installationResult = await installation.text() + const installed = await fetch(new URL('/desktop-smoke-installed', ready.url), { headers: { cookie } }) + if (!installation.ok || !installed.ok || await installed.text() !== 'installed plugin ready') { + throw new Error(`desktop runtime: bundled pnpm plugin installation failed: ${installationResult}`) + } for (const { extension } of inputs) { const converted = await fetch(new URL(`/desktop-smoke-office/${extension}`, ready.url), { headers: { cookie }, signal: AbortSignal.timeout(120_000), diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index b4b8153b7f..bf42a41005 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -154,7 +154,7 @@ function runtimeResources(): RuntimeResources { const nodeBin = development ? join(app.getAppPath(), 'scripts', 'node-bin') : join(process.resourcesPath, 'runtime', 'bin') const pnpm = (development ? process.env.DSH_DESKTOP_PNPM_ENTRY : undefined) ?? (development ? join(app.getAppPath(), 'node_modules', 'pnpm', 'bin', 'pnpm.mjs') - : join(process.resourcesPath, 'runtime', 'pnpm', 'bin', 'pnpm.mjs')) + : join(process.resourcesPath, 'runtime', 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs')) const dsh = (development ? process.env.DSH_DESKTOP_DSH_DIR : undefined) ?? (development ? join(app.getAppPath(), '.desktop-build', 'development', 'project') : join(app.getAppPath(), 'dsh')) return { node, nodeBin, pnpm, dsh } diff --git a/apps/desktop/tests/fixtures/pnpm-smoke.mjs b/apps/desktop/tests/fixtures/pnpm-smoke.mjs new file mode 100644 index 0000000000..5d16769ab4 --- /dev/null +++ b/apps/desktop/tests/fixtures/pnpm-smoke.mjs @@ -0,0 +1,69 @@ +/** Install and use a local dependency with the packaged pnpm and Electron Node launcher. */ + +import assert from 'node:assert/strict' +import { execFileSync } from 'node:child_process' +import { existsSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs' +import { rm } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { delimiter, join } from 'node:path' + +/** + * Exercise offline installation and package scripts without a system pnpm or Node installation. + * @param {string} resourcesRuntime - Packaged runtime directory outside ASAR. + * @returns {Promise} Resolves after execution and removal of the private installation. + */ +export async function checkPnpm(resourcesRuntime) { + assert.ok(process.versions.electron, 'Run the package-manager smoke with Electron Node mode') + assert.equal(existsSync(join(resourcesRuntime, 'pnpm')), false, 'Desktop must ship only primary-runtime pnpm') + const primary = join(resourcesRuntime, 'primary-runtime') + const pnpm = join(primary, 'dependencies', 'pnpm', 'bin', 'pnpm.mjs') + const versions = JSON.parse(readFileSync(join(resourcesRuntime, 'versions.json'), 'utf8')) + const manifest = JSON.parse(readFileSync(join(primary, 'runtime.json'), 'utf8')) + assert.equal(versions.pnpm, manifest.pnpm) + const scratch = mkdtempSync(join(tmpdir(), 'desktop-pnpm-smoke-')) + try { + mkdirSync(join(scratch, 'dependency')) + writeFileSync(join(scratch, 'dependency', 'package.json'), JSON.stringify({ + name: 'desktop-pnpm-smoke-dependency', version: '1.0.0', main: 'index.cjs', + })) + writeFileSync(join(scratch, 'dependency', 'index.cjs'), 'exports.answer = 42\n') + writeFileSync(join(scratch, 'package.json'), JSON.stringify({ + name: 'desktop-node-script-smoke', private: true, + dependencies: { 'desktop-pnpm-smoke-dependency': 'file:./dependency' }, scripts: { check: 'node check.cjs' }, + })) + writeFileSync(join(scratch, 'npmrc'), '') + writeFileSync(join(scratch, 'check.cjs'), ` +const assert = require('node:assert/strict') +assert.equal(require('desktop-pnpm-smoke-dependency').answer, 42) +assert.equal(process.execPath, ${JSON.stringify(process.execPath)}) +assert.ok(process.versions.electron) +assert.ok(process.execArgv.includes('--expose-internals')) +assert.equal(typeof require('internal/modules/esm/loader').getOrInitializeCascadedLoader, 'function') +console.log('desktop-node-script-ok') +`) + const environment = Object.fromEntries(Object.entries(process.env).filter(([name]) => /^(?:systemroot|windir|comspec|LD_LIBRARY_PATH)$/iu.test(name))) + const systemBin = process.platform === 'win32' ? join(process.env.SystemRoot, 'System32') : '/usr/bin:/bin' + const run = args => execFileSync(process.execPath, ['--expose-internals', pnpm, ...args], { + cwd: scratch, encoding: 'utf8', timeout: 45_000, windowsHide: true, + env: { ...environment, pnpm_config_verify_deps_before_run: 'false', + ELECTRON_RUN_AS_NODE: '1', DSH_DESKTOP_NODE_EXECUTABLE: process.execPath, + PATH: `${join(resourcesRuntime, 'bin')}${delimiter}${systemBin}`, + HOME: scratch, USERPROFILE: scratch, TMP: scratch, TEMP: scratch, TMPDIR: scratch, + XDG_CONFIG_HOME: scratch, XDG_CACHE_HOME: scratch, XDG_STATE_HOME: scratch, + npm_config_userconfig: join(scratch, 'npmrc'), npm_config_globalconfig: join(scratch, 'npmrc'), + npm_config_store_dir: join(scratch, 'store'), npm_config_enable_global_virtual_store: 'false', + npm_config_update_notifier: 'false' }, + }) + assert.equal(run(['--version']).trim(), versions.pnpm) + run(['install', '--offline', '--ignore-scripts']) + assert.match(run(['run', 'check']), /desktop-node-script-ok/u) + } finally { + await rm(scratch, { recursive: true, force: true, maxRetries: 20, retryDelay: 50 }) + } +} + +if (import.meta.main) { + assert.ok(process.argv[2], 'Pass the packaged runtime directory') + await checkPnpm(process.argv[2]) + console.log('desktop pnpm: offline installation and Electron Node package script passed') +} diff --git a/apps/desktop/tests/fixtures/runtime-payload-smoke.mjs b/apps/desktop/tests/fixtures/runtime-payload-smoke.mjs index d0d7bb94f6..442303243c 100644 --- a/apps/desktop/tests/fixtures/runtime-payload-smoke.mjs +++ b/apps/desktop/tests/fixtures/runtime-payload-smoke.mjs @@ -8,6 +8,7 @@ import { createRequire } from 'node:module' import { tmpdir } from 'node:os' import { delimiter, dirname, join, resolve } from 'node:path' import { pathToFileURL } from 'node:url' +import { checkPnpm } from './pnpm-smoke.mjs' const runtime = process.argv[2] assert.ok(runtime, 'Pass the filtered resources/dsh directory') @@ -20,33 +21,6 @@ const resourcesRuntime = process.argv[3] ?? join(dirname(root), 'runtime') const requireRuntime = createRequire(join(root, 'package.json')) const scratch = mkdtempSync(join(tmpdir(), 'dsh-runtime-payload-')) -/** Run a package script with only the shipped node launcher available on PATH. */ -function checkPnpm() { - const bin = join(resourcesRuntime, 'bin') - const pnpm = join(resourcesRuntime, 'pnpm', 'bin', 'pnpm.mjs') - writeFileSync(join(scratch, 'package.json'), JSON.stringify({ - name: 'desktop-node-script-smoke', private: true, scripts: { check: 'node check.cjs' }, - })) - writeFileSync(join(scratch, 'check.cjs'), ` -const assert = require('node:assert/strict') -assert.equal(process.execPath, ${JSON.stringify(process.execPath)}) -assert.ok(process.versions.electron) -assert.ok(process.execArgv.includes('--expose-internals')) -assert.equal(typeof require('internal/modules/esm/loader').getOrInitializeCascadedLoader, 'function') -console.log('desktop-node-script-ok') -`) - const environment = Object.fromEntries(Object.entries(process.env).filter(([name]) => /^(?:systemroot|windir|comspec)$/iu.test(name))) - const systemBin = process.platform === 'win32' ? join(process.env.SystemRoot, 'System32') : '/usr/bin:/bin' - // This dependency-free fixture checks script launch, without pnpm's implicit install and update-network check. - const output = execFileSync(process.execPath, ['--expose-internals', pnpm, 'run', 'check'], { - cwd: scratch, encoding: 'utf8', timeout: 45_000, - env: { ...environment, pnpm_config_verify_deps_before_run: 'false', - ELECTRON_RUN_AS_NODE: '1', DSH_DESKTOP_NODE_EXECUTABLE: process.execPath, - PATH: `${bin}${delimiter}${systemBin}`, HOME: scratch, USERPROFILE: scratch, TMP: scratch, TEMP: scratch, TMPDIR: scratch }, - }) - assert.match(output, /desktop-node-script-ok/u) -} - /** Spawn only a fixed Node program and await the terminal's drained exit event. */ async function checkPty() { const pty = requireRuntime('node-pty') @@ -157,7 +131,7 @@ function checkHtml() { try { const builtin = requireRuntime('node-addon-require-builtin') assert.equal(typeof builtin.requireBuiltin('internal/modules/esm/loader').getOrInitializeCascadedLoader, 'function') - checkPnpm() + await checkPnpm(resourcesRuntime) checkKoffi() await checkSharp() checkHtml() diff --git a/apps/desktop/tests/macos-signature.spec.ts b/apps/desktop/tests/macos-signature.spec.ts index c8d9f859af..da3f43e0eb 100644 --- a/apps/desktop/tests/macos-signature.spec.ts +++ b/apps/desktop/tests/macos-signature.spec.ts @@ -93,9 +93,9 @@ describe('desktop macOS release signature', () => { const ignored = (path: string): boolean => config.mac.signIgnore.some(pattern => new RegExp(pattern).test(path)) expect(ignored('/App.app/Contents/Frameworks/Electron.framework/Versions/A/Resources/en.lproj/locale.pak')).toBe(true) expect(ignored('/App.app/Contents/Frameworks/Electron.framework/Versions/A/Resources/resources.pak')).toBe(true) + expect(ignored('/App.app/Contents/Resources/runtime/primary-runtime/dependencies/pnpm/addon.node')).toBe(true) for (const path of [ '/App.app/Contents/Resources/runtime/node/node', - '/App.app/Contents/Resources/runtime/pnpm/addon.node', '/App.app/Contents/Frameworks/Electron.framework/Versions/A/library.dylib', '/App.app/Contents/Frameworks/Electron.framework', '/App.app', diff --git a/apps/desktop/tests/main-startup.spec.ts b/apps/desktop/tests/main-startup.spec.ts index b6b6fd476f..5ff9cad693 100644 --- a/apps/desktop/tests/main-startup.spec.ts +++ b/apps/desktop/tests/main-startup.spec.ts @@ -437,6 +437,21 @@ afterEach(async () => { }) describe('desktop main startup', () => { + it.each([true, false])('selects the package manager before Host startup (packaged=%s)', async (packaged) => { + harness.app.isPackaged = packaged + await readyForUpdate() + const host = harness.hosts[0]! + expect(host.node).toBe(process.execPath) + expect(host.primaryRuntime).toBe(packaged + ? join('desktop-test-resources', 'runtime', 'primary-runtime') : 'test-primary-runtime') + expect(host.packageManager).toMatchObject({ + pnpm: packaged + ? join('desktop-test-resources', 'runtime', 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs') + : 'test-pnpm', + nodeBin: packaged ? join('desktop-test-resources', 'runtime', 'bin') : join('desktop-test-app', 'scripts', 'node-bin'), + }) + }) + it('routes shell update documents and assets through the registered main protocol handler', async () => { const root = join(import.meta.dirname, '..') vi.spyOn(harness.app, 'getAppPath').mockReturnValue(root) diff --git a/apps/desktop/tests/runtime-preparation.spec.ts b/apps/desktop/tests/runtime-preparation.spec.ts new file mode 100644 index 0000000000..6a4b25a493 --- /dev/null +++ b/apps/desktop/tests/runtime-preparation.spec.ts @@ -0,0 +1,58 @@ +/** Desktop preparation publishes one package manager alongside its private Node launchers. */ + +import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { afterEach, expect, it, vi } from 'vitest' + +const state = vi.hoisted(() => ({ root: '' })) +vi.mock('../scripts/desktop-build-paths.mjs', () => ({ + resolveDesktopBuildTarget: () => 'mac-arm64', + resolveDesktopTargetBuildPaths: () => ({ + runtime: join(state.root, 'runtime'), electron: join(state.root, 'electron'), downloads: join(state.root, 'downloads'), + }), +})) +vi.mock('@electron/get', () => ({ downloadArtifact: async () => 'electron.zip' })) +vi.mock('extract-zip', () => ({ default: async () => {} })) +vi.mock('node:child_process', () => ({ execFileSync: () => '24.18.1\n' })) +vi.mock('../scripts/prepare-command-link.ts', () => ({ prepareCommandLink: () => {} })) +// The source-plane preparation spec supplies the one compiled CLI input; other copies use real files. +vi.mock('node:fs', async (importOriginal) => { + const actual = await importOriginal() + return { ...actual, cpSync: (...args: Parameters) => { + if (String(args[0]).endsWith(join('lib', 'command-manager-entry.js'))) actual.writeFileSync(args[1], '') + else actual.cpSync(...args) + } } +}) +vi.mock('../scripts/prepare-primary-runtime.ts', () => ({ + preparePrimaryRuntime: async () => { + const root = join(state.root, 'runtime', 'primary-runtime') + const pnpm = join(root, 'dependencies', 'pnpm', 'bin') + mkdirSync(pnpm, { recursive: true }) + writeFileSync(join(pnpm, 'pnpm.mjs'), '') + writeFileSync(join(root, 'runtime.json'), JSON.stringify({ pnpm: '11.7.0' })) + }, +})) + +afterEach(() => { + vi.unstubAllGlobals() + vi.unstubAllEnvs() + rmSync(state.root, { recursive: true, force: true }) +}) + +it('replaces stale resources with one pnpm distribution and records its version', async () => { + state.root = mkdtempSync(join(tmpdir(), 'desktop-runtime-preparation-')) + const runtime = join(state.root, 'runtime') + mkdirSync(join(runtime, 'pnpm'), { recursive: true }) + vi.stubGlobal('process', { ...process, argv: [process.execPath, 'prepare-runtime.ts'] }) + vi.stubEnv('DSH_DESKTOP_PACKAGING_RUN_DIR', undefined) + await import('../scripts/prepare-runtime.ts') + expect(existsSync(join(runtime, 'pnpm'))).toBe(false) + expect(existsSync(join(runtime, 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs'))).toBe(true) + expect(existsSync(join(runtime, 'bin', 'node'))).toBe(true) + expect(existsSync(join(runtime, 'cli', 'bin', 'dsh'))).toBe(true) + expect(existsSync(join(runtime, 'cli', 'command-manager.js'))).toBe(true) + expect(JSON.parse(readFileSync(join(runtime, 'versions.json'), 'utf8'))).toEqual({ + schemaVersion: 1, node: '24.18.1', pnpm: '11.7.0', + }) +}) From 6b261009956584e382c8462b6f7ab5d12982bc6d Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 30 Sep 2026 14:09:56 +0800 Subject: [PATCH 015/155] refactor(desktop): clarify runtime preparation stages --- apps/desktop/README.i18n.yaml | 4 +- apps/desktop/README.md | 2 +- apps/desktop/README.zh.md | 2 +- apps/desktop/scripts/prepare-runtime.ts | 61 +++++---- .../desktop/tests/runtime-preparation.spec.ts | 116 ++++++++++++++---- 5 files changed, 130 insertions(+), 55 deletions(-) diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index 403837df9f..9ec049b6a7 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -57,8 +57,8 @@ en: f176a8b1c7de3064 zh: 6ea2dbe6bb808c34 /deepseek-harness-desktop/package/windows-ev-signing: - en: 8efe3498dbe8686d - zh: a88c16f20a9430f3 + en: 5b85747ac1af43bc + zh: d5598c33c22c0806 /deepseek-harness-desktop/updates: en: d0df867b69cbffa4 zh: eeb47b79b86fe5ee diff --git a/apps/desktop/README.md b/apps/desktop/README.md index 1b71ef8861..0445d6208a 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -390,7 +390,7 @@ pnpm run prepare:desktop This diagnostic command is an alternative stopping point, not the first half of a two-command build. A later `package:desktop*` command repeats the official build and preparation so it cannot consume stale dsh packages, runtime files, or dsh content. -Every package command builds the repository, packs the first-party production closures rooted at dsh and the private Desktop Host, and prepares the target Electron distribution and pnpm CLI. `prepare:dsh` installs the production graph once at build time, prepares materialized packages for electron-builder to archive under `app.asar/dsh`, removes package-manager metadata, and writes `desktop-runtime.json` with shared package versions and final file hashes. On macOS it signs and verifies native files before inventory generation; electron-builder excludes this already-signed tree from nested re-signing. Resource mappings explicitly include `dsh/node_modules`, which the default root-directory filter omits; the prepared runtime inventory is checked after native signing. Native executables and libraries are unpacked beside ASAR; Python, standalone Node and pnpm remain in external runtime resources. Windows packaging checks every prepared PE against its ASAR unpacked entry and byte-identical disk copy, including unsigned builds. Builder glob rules match braces in PE filenames as single-character wildcards, so a matching neighboring file may also be unpacked. Prepared runtime smoke uses the verified target descriptor rather than the build host architecture. Signed installer, notarization, installed upgrade, and target-specific native-module qualification require the release environment. +Every package command builds the repository, packs the first-party production closures rooted at dsh and the private Desktop Host, and prepares the target Electron distribution and pnpm CLI. Runtime preparation clears stale resources and writes `runtime/versions.json` after Electron, the primary runtime and CLI resources are ready. `prepare:dsh` installs the production graph once at build time, prepares materialized packages for electron-builder to archive under `app.asar/dsh`, removes package-manager metadata, and writes `desktop-runtime.json` with shared package versions and final file hashes. On macOS it signs and verifies native files before inventory generation; electron-builder excludes this already-signed tree from nested re-signing. Resource mappings explicitly include `dsh/node_modules`, which the default root-directory filter omits; the prepared runtime inventory is checked after native signing. Native executables and libraries are unpacked beside ASAR; Python, standalone Node and pnpm remain in external runtime resources. Windows packaging checks every prepared PE against its ASAR unpacked entry and byte-identical disk copy, including unsigned builds. Builder glob rules match braces in PE filenames as single-character wildcards, so a matching neighboring file may also be unpacked. Prepared runtime smoke uses the verified target descriptor rather than the build host architecture. Signed installer, notarization, installed upgrade, and target-specific native-module qualification require the release environment. macOS packaging writes `Contents/Resources/app-update.yml` while assembling the App and before code signing, including the directory build that feeds the parallel ZIP and DMG lanes. The signing hook verifies the exact feed and updater cache directory. Both lane copies and the promoted App are checked again before the release completion record is written; a missing or mismatched configuration prevents artifact promotion and therefore prevents upload. diff --git a/apps/desktop/README.zh.md b/apps/desktop/README.zh.md index 8877edf9e5..965cf4c2b3 100644 --- a/apps/desktop/README.zh.md +++ b/apps/desktop/README.zh.md @@ -392,7 +392,7 @@ pnpm run prepare:desktop 这条诊断命令是另一种停止位置,并非两条命令构建流程的前半段。之后执行 `package:desktop*` 时仍会重新完成正式构建与准备,避免使用陈旧的 dsh 包、运行时文件或 dsh 内容。 -每条打包命令都会构建仓库,打包以 dsh 和私有 Desktop Host 为根的第一方生产依赖闭包,并准备目标专用的 Electron 分发包与 pnpm CLI。`prepare:dsh` 在构建时安装一次生产依赖图,准备物化包供 electron-builder 归档到 `app.asar/dsh`,移除包管理器元数据,并生成包含共享包版本和最终文件哈希的 `desktop-runtime.json`。在 macOS 上,它先签名并验证原生文件,再生成清单;electron-builder 不对已签名的此目录重复进行嵌套签名。资源映射明确包含默认根目录过滤器会忽略的 `dsh/node_modules`;准备完成的运行时清单在原生签名后检查。原生可执行文件及库解包到 ASAR 旁;Python、独立 Node 和 pnpm 保留在外部 runtime 资源中。Windows 打包逐项检查准备好的 PE,确认其 ASAR 条目已标记为解包,且磁盘副本字节一致;未签名构建也执行此检查。Builder glob 规则用单字符通配符匹配 PE 文件名中的花括号,因此同目录中名称匹配的文件也可能被解包。准备好的运行时 smoke 沿用已验证的目标描述符,不使用构建宿主的架构。签名安装包、公证、已安装应用升级和各目标原生模块的验收需要发布环境。 +每条打包命令都会构建仓库,打包以 dsh 和私有 Desktop Host 为根的第一方生产依赖闭包,并准备目标专用的 Electron 分发包与 pnpm CLI。运行时准备会清除旧资源,并在 Electron、primary-runtime 和 CLI 资源全部就绪后写入 `runtime/versions.json`。`prepare:dsh` 在构建时安装一次生产依赖图,准备物化包供 electron-builder 归档到 `app.asar/dsh`,移除包管理器元数据,并生成包含共享包版本和最终文件哈希的 `desktop-runtime.json`。在 macOS 上,它先签名并验证原生文件,再生成清单;electron-builder 不对已签名的此目录重复进行嵌套签名。资源映射明确包含默认根目录过滤器会忽略的 `dsh/node_modules`;准备完成的运行时清单在原生签名后检查。原生可执行文件及库解包到 ASAR 旁;Python、独立 Node 和 pnpm 保留在外部 runtime 资源中。Windows 打包逐项检查准备好的 PE,确认其 ASAR 条目已标记为解包,且磁盘副本字节一致;未签名构建也执行此检查。Builder glob 规则用单字符通配符匹配 PE 文件名中的花括号,因此同目录中名称匹配的文件也可能被解包。准备好的运行时 smoke 沿用已验证的目标描述符,不使用构建宿主的架构。签名安装包、公证、已安装应用升级和各目标原生模块的验收需要发布环境。 macOS 打包在组装 App 时、代码签名前写入 `Contents/Resources/app-update.yml`,供并行 ZIP 与 DMG 路线使用的目录构建也执行此操作。签名钩子验证准确的更新源和 updater 缓存目录。写入发布完成记录前,流程会再次检查两条路线的副本和最终移入的 App;配置缺失或不匹配会阻止移入产物,因而也会阻止上传。 diff --git a/apps/desktop/scripts/prepare-runtime.ts b/apps/desktop/scripts/prepare-runtime.ts index 0f81a05a22..ba92fef0e6 100644 --- a/apps/desktop/scripts/prepare-runtime.ts +++ b/apps/desktop/scripts/prepare-runtime.ts @@ -1,14 +1,15 @@ -/** Prepare the target Electron distribution and pinned pnpm CLI. */ +/** Prepare Desktop resources and publish their versions after every preparation stage succeeds. */ -import { packagingStep } from './packaging-step.mjs' import { execFileSync } from 'node:child_process' -import { chmodSync, cpSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { chmodSync, cpSync, mkdirSync, rmSync, writeFileSync } from 'node:fs' import { createRequire } from 'node:module' import { join } from 'node:path' import { parseArgs } from 'node:util' import { downloadArtifact } from '@electron/get' import extractZip from 'extract-zip' -import { resolveDesktopBuildTarget, resolveDesktopTargetBuildPaths } from './desktop-build-paths.mjs' +import { readPrimaryRuntime } from '../../../packages/skill/tool-workspace-dependencies/src/index.ts' +import { desktopTargetPlatform, resolveDesktopBuildTarget, resolveDesktopTargetBuildPaths } from './desktop-build-paths.mjs' +import { packagingStep } from './packaging-step.mjs' import { preparePrimaryRuntime } from './prepare-primary-runtime.ts' import { prepareDesktopCli } from './prepare-cli.ts' import { prepareCommandLink } from './prepare-command-link.ts' @@ -16,11 +17,10 @@ import { prepareCommandLink } from './prepare-command-link.ts' const BUILD_PATHS = resolveDesktopTargetBuildPaths() const RUNTIME_ROOT = BUILD_PATHS.runtime -async function main(): Promise { - const { values } = parseArgs({ options: { 'defer-primary-runtime-smoke': { type: 'boolean', default: false } } }) - const target = resolveDesktopBuildTarget() - const platform = target.startsWith('mac-') ? 'darwin' : 'win32' - const arch = target.endsWith('arm64') ? 'arm64' : 'x64' +type DesktopTarget = ReturnType + +/** Extract the target Electron distribution and return its embedded Node version. */ +async function prepareElectron({ platform, arch }: DesktopTarget): Promise { const require = createRequire(import.meta.url) const { version } = require('electron/package.json') as { version: string } const archive = await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'download:electron', @@ -28,29 +28,42 @@ async function main(): Promise { rmSync(BUILD_PATHS.electron, { recursive: true, force: true }) await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'extract:electron', () => extractZip(archive, { dir: BUILD_PATHS.electron })) const executable = join(BUILD_PATHS.electron, platform === 'win32' ? 'electron.exe' : 'Electron.app/Contents/MacOS/Electron') - const nodeVersion = execFileSync(executable, ['-p', 'process.versions.node'], { + return execFileSync(executable, ['-p', 'process.versions.node'], { encoding: 'utf8', env: { ...process.env, ELECTRON_RUN_AS_NODE: '1' }, }).trim() - const macosMinimumVersion = platform === 'darwin' ? execFileSync('/usr/libexec/PlistBuddy', - ['-c', 'Print LSMinimumSystemVersion', join(BUILD_PATHS.electron, 'Electron.app', 'Contents', 'Info.plist')], { encoding: 'utf8' }).trim() : undefined - rmSync(RUNTIME_ROOT, { recursive: true, force: true }) - mkdirSync(RUNTIME_ROOT, { recursive: true }) - await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'prepare:primary-runtime', - () => preparePrimaryRuntime({ deferSmoke: values['defer-primary-runtime-smoke'] })) - const manifest = JSON.parse(readFileSync(join(RUNTIME_ROOT, 'primary-runtime', 'runtime.json'), 'utf8')) as { pnpm?: unknown } - if (typeof manifest.pnpm !== 'string') throw new Error('desktop runtime: primary-runtime manifest has no pnpm version') +} + +function prepareCli({ platform, arch }: DesktopTarget): void { cpSync(join(import.meta.dirname, 'node-bin'), join(RUNTIME_ROOT, 'bin'), { recursive: true }) chmodSync(join(RUNTIME_ROOT, 'bin', 'node'), 0o755) + const cli = join(RUNTIME_ROOT, 'cli') + prepareDesktopCli(cli, platform) + if (platform === 'darwin') { + const minimumVersion = execFileSync('/usr/libexec/PlistBuddy', [ + '-c', 'Print LSMinimumSystemVersion', join(BUILD_PATHS.electron, 'Electron.app', 'Contents', 'Info.plist'), + ], { encoding: 'utf8' }).trim() + prepareCommandLink(cli, arch, minimumVersion) + } + cpSync(join(import.meta.dirname, '..', 'lib', 'command-manager-entry.js'), join(cli, 'command-manager.js')) + cpSync(join(import.meta.dirname, 'command-path.ps1'), join(cli, 'command-path.ps1')) +} + +async function main(): Promise { + const { values } = parseArgs({ options: { 'defer-primary-runtime-smoke': { type: 'boolean', default: false } } }) + const target = desktopTargetPlatform(resolveDesktopBuildTarget()) + rmSync(RUNTIME_ROOT, { recursive: true, force: true }) + mkdirSync(RUNTIME_ROOT, { recursive: true }) + const nodeVersion = await prepareElectron(target) + await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'prepare:primary-runtime', + () => preparePrimaryRuntime({ deferSmoke: values['defer-primary-runtime-smoke'] })) + const { pnpm } = await readPrimaryRuntime(join(RUNTIME_ROOT, 'primary-runtime')) + if (pnpm === undefined) throw new Error('desktop runtime: primary-runtime manifest has no pnpm version') + await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'prepare:cli', async () => { prepareCli(target) }) writeFileSync(join(RUNTIME_ROOT, 'versions.json'), `${JSON.stringify({ schemaVersion: 1, node: nodeVersion, - pnpm: manifest.pnpm, + pnpm, }, undefined, 2)}\n`) - await packagingStep(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR, 'prepare:cli', - async () => prepareDesktopCli(join(RUNTIME_ROOT, 'cli'), platform)) - if (macosMinimumVersion !== undefined) prepareCommandLink(join(RUNTIME_ROOT, 'cli'), arch, macosMinimumVersion) - cpSync(join(import.meta.dirname, '..', 'lib', 'command-manager-entry.js'), join(RUNTIME_ROOT, 'cli', 'command-manager.js')) - cpSync(join(import.meta.dirname, 'command-path.ps1'), join(RUNTIME_ROOT, 'cli', 'command-path.ps1')) } await main() diff --git a/apps/desktop/tests/runtime-preparation.spec.ts b/apps/desktop/tests/runtime-preparation.spec.ts index 6a4b25a493..d16dd592c2 100644 --- a/apps/desktop/tests/runtime-preparation.spec.ts +++ b/apps/desktop/tests/runtime-preparation.spec.ts @@ -1,58 +1,120 @@ -/** Desktop preparation publishes one package manager alongside its private Node launchers. */ +/** Desktop resource preparation publishes versions only for complete resources. */ -import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { existsSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs' +import { rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { afterEach, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, expect, it, vi } from 'vitest' -const state = vi.hoisted(() => ({ root: '' })) -vi.mock('../scripts/desktop-build-paths.mjs', () => ({ - resolveDesktopBuildTarget: () => 'mac-arm64', +const state = vi.hoisted(() => ({ + root: '', + target: 'mac-arm64' as 'mac-arm64' | 'mac-x64' | 'win-x64', + pnpm: '11.7.0' as string | undefined, + failure: undefined as 'electron' | 'primary' | 'cli' | undefined, + preparePrimary: vi.fn(), + commandLink: vi.fn(), +})) +vi.mock('../scripts/desktop-build-paths.mjs', async importOriginal => ({ + ...await importOriginal(), + resolveDesktopBuildTarget: () => state.target, resolveDesktopTargetBuildPaths: () => ({ runtime: join(state.root, 'runtime'), electron: join(state.root, 'electron'), downloads: join(state.root, 'downloads'), }), })) vi.mock('@electron/get', () => ({ downloadArtifact: async () => 'electron.zip' })) -vi.mock('extract-zip', () => ({ default: async () => {} })) -vi.mock('node:child_process', () => ({ execFileSync: () => '24.18.1\n' })) -vi.mock('../scripts/prepare-command-link.ts', () => ({ prepareCommandLink: () => {} })) -// The source-plane preparation spec supplies the one compiled CLI input; other copies use real files. +vi.mock('extract-zip', () => ({ default: async () => { + if (state.failure === 'electron') throw new Error('Electron extraction failed') +} })) +vi.mock('node:child_process', async importOriginal => ({ + ...await importOriginal(), + execFileSync: (file: string) => file === '/usr/libexec/PlistBuddy' ? '12.0\n' : '24.18.1\n', +})) +vi.mock('../scripts/prepare-command-link.ts', () => ({ prepareCommandLink: state.commandLink })) +// The compiled command manager is a build input; all source resource copies use real files. vi.mock('node:fs', async (importOriginal) => { const actual = await importOriginal() return { ...actual, cpSync: (...args: Parameters) => { - if (String(args[0]).endsWith(join('lib', 'command-manager-entry.js'))) actual.writeFileSync(args[1], '') - else actual.cpSync(...args) + if (String(args[0]).endsWith(join('lib', 'command-manager-entry.js'))) { + if (state.failure === 'cli') throw new Error('command manager copy failed') + actual.writeFileSync(args[1], 'command manager fixture') + } else actual.cpSync(...args) } } }) vi.mock('../scripts/prepare-primary-runtime.ts', () => ({ - preparePrimaryRuntime: async () => { + preparePrimaryRuntime: state.preparePrimary, +})) + +const originalArgv = process.argv +beforeEach(() => { + vi.resetModules() + vi.clearAllMocks() + state.root = mkdtempSync(join(tmpdir(), 'desktop-runtime-preparation-')) + state.target = 'mac-arm64' + state.pnpm = '11.7.0' + state.failure = undefined + process.argv = [process.execPath, 'prepare-runtime.ts'] + vi.stubEnv('DSH_DESKTOP_PACKAGING_RUN_DIR', undefined) + state.preparePrimary.mockImplementation(async () => { + if (state.failure === 'primary') throw new Error('primary preparation failed') const root = join(state.root, 'runtime', 'primary-runtime') const pnpm = join(root, 'dependencies', 'pnpm', 'bin') mkdirSync(pnpm, { recursive: true }) writeFileSync(join(pnpm, 'pnpm.mjs'), '') - writeFileSync(join(root, 'runtime.json'), JSON.stringify({ pnpm: '11.7.0' })) - }, -})) - -afterEach(() => { - vi.unstubAllGlobals() - vi.unstubAllEnvs() - rmSync(state.root, { recursive: true, force: true }) + writeFileSync(join(root, 'runtime.json'), JSON.stringify({ + desktopVersion: '1.0.0', platform: state.target === 'win-x64' ? 'win32' : 'darwin', + arch: state.target === 'mac-arm64' ? 'arm64' : 'x64', + python: '3.12.14', node: '24.17.0', pnpm: state.pnpm, pythonPackages: { numpy: '2.3.5' }, + })) + }) }) -it('replaces stale resources with one pnpm distribution and records its version', async () => { - state.root = mkdtempSync(join(tmpdir(), 'desktop-runtime-preparation-')) +afterEach(async () => { + process.argv = originalArgv + vi.unstubAllEnvs() + await rm(state.root, { recursive: true, force: true, maxRetries: 20, retryDelay: 50 }) +}) + +it.each(['mac-arm64', 'mac-x64', 'win-x64'] as const)('prepares %s with one pnpm distribution and its CLI resources', async (target) => { + state.target = target + const windows = target === 'win-x64' + if (windows) process.argv.push('--defer-primary-runtime-smoke') const runtime = join(state.root, 'runtime') mkdirSync(join(runtime, 'pnpm'), { recursive: true }) - vi.stubGlobal('process', { ...process, argv: [process.execPath, 'prepare-runtime.ts'] }) - vi.stubEnv('DSH_DESKTOP_PACKAGING_RUN_DIR', undefined) await import('../scripts/prepare-runtime.ts') expect(existsSync(join(runtime, 'pnpm'))).toBe(false) expect(existsSync(join(runtime, 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs'))).toBe(true) expect(existsSync(join(runtime, 'bin', 'node'))).toBe(true) - expect(existsSync(join(runtime, 'cli', 'bin', 'dsh'))).toBe(true) - expect(existsSync(join(runtime, 'cli', 'command-manager.js'))).toBe(true) + expect(existsSync(join(runtime, 'cli', 'bin', windows ? 'dsh.cmd' : 'dsh'))).toBe(true) + expect(readFileSync(join(runtime, 'cli', 'command-manager.js'), 'utf8')).toBe('command manager fixture') + expect(existsSync(join(runtime, 'cli', 'command-path.ps1'))).toBe(true) expect(JSON.parse(readFileSync(join(runtime, 'versions.json'), 'utf8'))).toEqual({ schemaVersion: 1, node: '24.18.1', pnpm: '11.7.0', }) + expect(state.preparePrimary).toHaveBeenCalledWith({ deferSmoke: windows }) + if (windows) expect(state.commandLink).not.toHaveBeenCalled() + else expect(state.commandLink).toHaveBeenCalledWith(join(runtime, 'cli'), target === 'mac-arm64' ? 'arm64' : 'x64', '12.0') +}) + +it.each([ + ['electron', 'Electron extraction failed'], + ['primary', 'primary preparation failed'], + ['cli', 'command manager copy failed'], +] as const)('does not publish versions when %s preparation fails', async (failure, error) => { + state.failure = failure + const runtime = join(state.root, 'runtime') + mkdirSync(runtime) + writeFileSync(join(runtime, 'versions.json'), 'stale versions') + await expect(import('../scripts/prepare-runtime.ts')).rejects.toThrow(error) + expect(existsSync(join(runtime, 'versions.json'))).toBe(false) +}) + +it.each([ + ['not-a-version', 'primary runtime: invalid metadata'], + [undefined, 'primary-runtime manifest has no pnpm version'], +])('rejects pnpm metadata %s even when Windows smoke is deferred', async (pnpm, error) => { + state.target = 'win-x64' + process.argv.push('--defer-primary-runtime-smoke') + state.pnpm = pnpm + await expect(import('../scripts/prepare-runtime.ts')).rejects.toThrow(error) + expect(existsSync(join(state.root, 'runtime', 'versions.json'))).toBe(false) }) From 18f00612c67c6ca0b73d5745eb8f0c4479dc04af Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 30 Sep 2026 19:39:54 +0800 Subject: [PATCH 016/155] fix(desktop): use shared pnpm in the installed CLI --- apps/desktop-host/src/cli.ts | 4 +-- apps/desktop/README.i18n.yaml | 4 +-- apps/desktop/README.md | 2 +- apps/desktop/README.zh.md | 2 +- apps/desktop/scripts/smoke-runtime.ts | 32 +++++++++++++++++----- apps/desktop/tests/desktop-cli.spec.ts | 37 ++++++++++++++++++++++++++ 6 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 apps/desktop/tests/desktop-cli.spec.ts diff --git a/apps/desktop-host/src/cli.ts b/apps/desktop-host/src/cli.ts index 97a23b88a2..6c890f8990 100644 --- a/apps/desktop-host/src/cli.ts +++ b/apps/desktop-host/src/cli.ts @@ -7,7 +7,7 @@ import { installOfficeEngineResolution, runtimeArchivePath } from './office-engi /** * Run the ordinary CLI with Desktop's bundled package manager and reserved-profile plugin access. * @param runtimeDir - Prepared or ASAR-contained production DSH package tree. - * @param supportDir - Physical Desktop runtime directory containing pnpm. + * @param supportDir - Physical Desktop runtime directory containing the primary-runtime payload and Node launchers. * @returns Completion of the selected CLI command; profile plugins own their process lifetime. */ export async function runDesktopCli(runtimeDir: string, supportDir: string): Promise { @@ -16,7 +16,7 @@ export async function runDesktopCli(runtimeDir: string, supportDir: string): Pro manageDesktopProfile: true, packageManager: { command: process.execPath, - args: ['--expose-internals', join(supportDir, 'pnpm', 'bin', 'pnpm.mjs')], + args: ['--expose-internals', join(supportDir, 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs')], env: { ELECTRON_RUN_AS_NODE: '1', DSH_DESKTOP_NODE_EXECUTABLE: process.execPath, diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index 1e5af2cd9a..d547d671d8 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -3,8 +3,8 @@ # After editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write apps/desktop/README.md /deepseek-harness-desktop: - en: ce9e0f6a865f086c - zh: e41fbe521e087f57 + en: 6561db5aa4fedced + zh: 5c6e86f1463f2b1c /deepseek-harness-desktop/terminal-command: en: bef92953c237363f zh: d21d6effd21b8c00 diff --git a/apps/desktop/README.md b/apps/desktop/README.md index 9ed6b94d11..9d87e9894e 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -10,7 +10,7 @@ The first application-menu command, **About DeepSeek Harness**, opens Electron's Desktop’s local native directory flow opens an Electron folder dialog attached to the application window, restoring, showing, and focusing that window first. Concurrent requests share one dialog; cancellation returns no path and failures remain retryable. Ordinary Web uses the Host chooser. Browse mode lists Host directories. On Linux without zenity or kdialog, automatic selection uses browse instead of the Electron dialog. -Desktop ships one pnpm distribution at `resources/runtime/primary-runtime/dependencies/pnpm`. Build-time production installation, Creator and the Web Plugin Manager execute its `bin/pnpm.mjs` with Electron Node mode; package operations do not require pnpm on PATH. The private Node launcher environment applies only to package operations. Agent workspace dependencies copy the same self-contained primary-runtime payload into the Harness home and execute pnpm with its standalone Node. +Desktop ships one pnpm distribution at `resources/runtime/primary-runtime/dependencies/pnpm`. Build-time production installation, the installed `dsh` CLI, Creator and the Web Plugin Manager execute its `bin/pnpm.mjs` with Electron Node mode; package operations do not require pnpm on PATH. The private Node launcher environment applies only to package operations. Agent workspace dependencies copy the same self-contained primary-runtime payload into the Harness home and execute pnpm with its standalone Node. Embedded Platform documents use a persistent WebContentsView partition keyed by a hash of the Platform origin and stable account ID. localStorage preferences, including dismissed notices, survive view closure and application restart; different accounts and origins use separate storage. The Host supplies the account ID from its latest successful profile read; while no ID is known, the document opens in a disposable partition that keeps no preference across opens. Opening a persistent partition clears cookies, filesystem, IndexedDB, Cache Storage, the HTTP and shader caches, service workers, and HTTP authentication before the document loads; a disposable partition clears all of its storage. Closing a view destroys the document, removes its request interceptors, and schedules the same cleanup, so authentication left by an unclean exit is cleared before the next document loads. The next open and application shutdown await that cleanup, and an update install waits for it before the installer takes over the exit. A failed cleanup rejects that open and blocks the same account until a later cleanup succeeds; other accounts keep opening. Sign-out destroys the document but retains account-scoped preferences for the next sign-in. A document already open in a disposable partition stays mounted when the account ID arrives for the same credential; the next open uses the account-scoped partition. The [storage decision](../../.agents/notes/implemented/architecture/2026-09-22-platform-browser-storage.md) describes the retention policy. Host sends account credentials through private Node IPC; account RPC and the Harness renderer receive no token. Before page scripts execute, the Platform preload performs one synchronous IPC to read the prepared main-process credential. It exposes displayMode, synchronous getAuthToken() and getLocale() getters, and onLocaleChange(listener), which returns an unsubscribe function. Both getters read preload memory without further IPC. The bootstrap includes the resolved Desktop language (`zh_CN` or `en_US`); Settings language changes update the preload cache and notify the open Platform document without reloading. Platform applies this language before its first render and does not persist it as a browser preference. The main-process handler performs only sender validation and an in-memory read; it never waits for Host, disk, or network. Trusted-page initialization failures retain embedded mode and make the getter throw, preventing browser-credential fallback. Only the owned Platform main frame on the configured issuer origin can initialize. Sign-out, credential replacement, Host shutdown, and view closure destroy the document. Cross-origin document navigation is blocked. HTTPS links requesting a new window open in the system browser without the embedded session or token; other schemes and URL credentials are rejected. Native views occupy the viewport below the Account feature’s return bar. diff --git a/apps/desktop/README.zh.md b/apps/desktop/README.zh.md index df9ade6b31..76a8cbd528 100644 --- a/apps/desktop/README.zh.md +++ b/apps/desktop/README.zh.md @@ -10,7 +10,7 @@ Desktop 的本地原生目录流程打开绑定应用窗口的 Electron 文件夹对话框,并先恢复、显示和聚焦该窗口。并发请求共用一个对话框;取消不返回路径,失败后可以重试。普通 Web 使用 Host 选择器。浏览模式列出 Host 目录。Linux 缺少 zenity 或 kdialog 时,自动选择使用浏览模式,不使用 Electron 对话框。 -Desktop 在 `resources/runtime/primary-runtime/dependencies/pnpm` 中携带一份 pnpm 分发包。构建时的生产依赖安装、Creator 和 Web 插件管理器通过 Electron Node 模式执行其中的 `bin/pnpm.mjs`;包操作不要求 PATH 上存在 pnpm。私有 Node 启动器环境仅用于包操作。agent(智能体)的工作区依赖将同一份完整 primary-runtime 复制到 Harness 主目录,并使用其中的独立 Node 执行 pnpm。 +Desktop 在 `resources/runtime/primary-runtime/dependencies/pnpm` 中携带一份 pnpm 分发包。构建时的生产依赖安装、安装版 `dsh` CLI、Creator 和 Web 插件管理器通过 Electron Node 模式执行其中的 `bin/pnpm.mjs`;包操作不要求 PATH 上存在 pnpm。私有 Node 启动器环境仅用于包操作。agent(智能体)的工作区依赖将同一份完整 primary-runtime 复制到 Harness 主目录,并使用其中的独立 Node 执行 pnpm。 Platform 内嵌文档使用持久化 WebContentsView 分区,分区名由 Platform 来源和稳定账号 ID 的哈希决定。localStorage 中的页面偏好(包括已关闭的通知)在关闭视图和重启应用后保留;不同账号和来源使用独立存储。账号 ID 来自 Host 最近一次成功的资料读取;尚无该 ID 时,文档在一次性分区中打开,该分区不跨次保留偏好。打开持久分区会先清理 Cookie、文件系统、IndexedDB、Cache Storage、HTTP 与着色器缓存、Service Worker 及 HTTP 认证状态;一次性分区则清理其全部存储。关闭视图会销毁文档、移除请求拦截器并安排相同的清理,因此异常退出遗留的认证会在下一个文档加载前被清除。下次打开和应用退出都会等待该清理完成,更新安装也会在安装器接管退出前等待。清理失败会使该次打开失败,并在后续清理成功前阻止同一账号打开;其他账号不受影响。退出登录会销毁文档,但保留账号偏好供下次登录使用。同一凭证下账号 ID 迟到时,已以一次性分区打开的文档保持挂载;下次打开使用账号分区。[存储决策](../../.agents/notes/implemented/architecture/2026-09-22-platform-browser-storage.zh.md)说明保留策略。Host 通过私有 Node IPC 发送账号凭证;账号 RPC 和 Harness 渲染进程不接收 token。Platform preload 在页面脚本执行前通过一次同步 IPC 读取主进程中已准备的凭证。它暴露 displayMode、同步的 getAuthToken() 和 getLocale() getter,以及返回取消订阅函数的 onLocaleChange(listener)。两个 getter 都只读取 preload 内存,不再调用 IPC。bootstrap 包含 Desktop 已解析的语言(`zh_CN` 或 `en_US`);Settings 语言变更会更新 preload 缓存并通知已打开的 Platform 文档,无需重载。Platform 在首屏渲染前应用该语言,且不将其持久化为浏览器偏好。主进程处理器仅校验调用来源并读取内存,不等待 Host、磁盘或网络。可信页面初始化失败时保留内嵌模式,由 getter 抛错,避免回退到浏览器凭证。只有受控 Platform 页面中、位于所配置签发来源的主 frame 能完成初始化。退登、凭证替换、Host 关闭及视图关闭都会销毁文档。跨来源文档导航被阻止。请求新窗口的 HTTPS 链接在系统浏览器中打开,不携带内嵌会话或 token;其他协议及带 URL 凭证的链接被拒绝。原生视图占据 Account 功能返回栏下方的视口。 diff --git a/apps/desktop/scripts/smoke-runtime.ts b/apps/desktop/scripts/smoke-runtime.ts index f968a9c21b..dec4f8fbc6 100644 --- a/apps/desktop/scripts/smoke-runtime.ts +++ b/apps/desktop/scripts/smoke-runtime.ts @@ -1,6 +1,7 @@ /** Boot the materialized target runtime without access to a user's Harness profile. */ -import { cpSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { appendFileSync, cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs' +import { rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { execFile } from 'node:child_process' @@ -12,7 +13,7 @@ import { createPluginProfile } from '../src/project-manager.ts' import type { DesktopRuntimeDescriptor } from '../src/runtime-tree.ts' /** - * Check Host startup, its matching frontend, external plugins and real Office-to-PDF conversion. + * Check CLI package operations, Host startup, its frontend, external plugins and real Office-to-PDF conversion. * @param root - Materialized dsh resources. * @param node - Prepared target Electron executable. * @param runtime - Verified resource descriptor. @@ -29,12 +30,16 @@ export async function smokeDesktopRuntime( ...Object.fromEntries(Object.entries(environment).filter(([name]) => !/^(?:npm|pnpm|corepack)_/iu.test(name))), DSH_HOME: home, HOME: home, USERPROFILE: home, XDG_CONFIG_HOME: home, XDG_CACHE_HOME: home, XDG_STATE_HOME: home, + APPDATA: home, LOCALAPPDATA: home, + npm_config_userconfig: join(home, 'npmrc'), npm_config_globalconfig: join(home, 'npmrc'), + npm_config_store_dir: join(home, 'store'), npm_config_enable_global_virtual_store: 'false', } const host = new DesktopHostProcess(node, root, profile, undefined, hostEnvironment, undefined, join(resourcesRuntime, 'primary-runtime'), { pnpm: join(resourcesRuntime, 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs'), nodeBin: join(resourcesRuntime, 'bin') }) let timer: ReturnType | undefined try { + writeFileSync(join(home, 'npmrc'), '') createPluginProfile(profile) const pluginName = 'desktop-runtime-smoke-plugin' const plugin = join(home, pluginName) @@ -52,7 +57,19 @@ export function apply(ctx) { } `) writeFileSync(join(installedPlugin, 'bundle.yml'), `- insert:\n - id: ${installedName}\n name: ${installedName}\n inject: [webServer]\n`) - writeFileSync(join(profile, 'pnpm-workspace.yaml'), 'nodeLinker: hoisted\nautoInstallPeers: false\noffline: true\nupdateNotifier: false\n') + appendFileSync(join(profile, 'pnpm-workspace.yaml'), 'offline: true\nupdateNotifier: false\n') + const cli = join(root, 'node_modules', '@deepseek-ai', 'dsh-desktop-host', 'lib', 'cli.js') + const runCli = (args: string[]) => promisify(execFile)(node, + ['--expose-internals', cli, 'plugin', '--profile', 'desktop', ...args], + { cwd: home, env: { ...hostEnvironment, ELECTRON_RUN_AS_NODE: '1' }, timeout: 120_000, windowsHide: true }) + await runCli(['add', `file:${installedPlugin}`, '--offline', '--ignore-scripts']) + const installedEntry = join(profile, 'node_modules', installedName, 'index.js') + if (readFileSync(installedEntry, 'utf8') !== readFileSync(join(installedPlugin, 'index.js'), 'utf8')) { + throw new Error('desktop runtime: CLI did not install the local plugin') + } + await runCli(['remove', installedName]) + if (existsSync(installedEntry)) throw new Error('desktop runtime: CLI did not remove the local plugin') + console.log('desktop runtime: CLI offline plugin installation and removal passed') const primary = join(resourcesRuntime, 'primary-runtime') const dependencies = workspaceDependencyPaths(primary, await readPrimaryRuntime(primary)) await promisify(execFile)(dependencies.python, ['-I', '-B', @@ -121,10 +138,10 @@ export function apply(ctx) { writeFileSync(join(plugin, 'bundle.yml'), '- insert:\n - id: desktop-runtime-smoke-plugin\n name: desktop-runtime-smoke-plugin\n inject: [webServer, officeToPdf, skills, pluginManager]\n') cpSync(plugin, join(profile, 'node_modules', pluginName), { recursive: true }) const manifest = JSON.parse(readFileSync(join(profile, 'package.json'), 'utf8')) as { - dependencies: Record + dependencies?: Record dsh: { profile: { bundles: string[] } } } - manifest.dependencies[pluginName] = `file:${plugin}` + manifest.dependencies = { ...manifest.dependencies, [pluginName]: `file:${plugin}` } manifest.dsh.profile.bundles.push(pluginName) writeFileSync(join(profile, 'package.json'), JSON.stringify(manifest)) writeFileSync(join(profile, 'cordis.patch.yml'), '- id: webserver\n config:\n host: 127.0.0.1\n port: 0\n') @@ -170,7 +187,8 @@ export function apply(ctx) { console.log('desktop runtime: DOCX, XLSX, PPTX to PDF and skill CLI discovery passed') } finally { clearTimeout(timer) - await host.stop() - rmSync(home, { recursive: true, force: true }) + try { await host.stop() } finally { + await rm(home, { recursive: true, force: true, maxRetries: 20, retryDelay: 50 }) + } } } diff --git a/apps/desktop/tests/desktop-cli.spec.ts b/apps/desktop/tests/desktop-cli.spec.ts new file mode 100644 index 0000000000..e358df8657 --- /dev/null +++ b/apps/desktop/tests/desktop-cli.spec.ts @@ -0,0 +1,37 @@ +/** The installed CLI uses the shared pnpm distribution with Electron's package-operation environment. */ + +import { delimiter, join } from 'node:path' +import { afterEach, expect, it, vi } from 'vitest' +import { runCli } from '@deepseek-ai/dsh/lib/bin.js' +import { runDesktopCli } from '../../desktop-host/src/cli.ts' +import { installOfficeEngineResolution } from '../../desktop-host/src/office-engine.ts' + +vi.mock('@deepseek-ai/dsh/lib/bin.js', () => ({ runCli: vi.fn() })) +vi.mock('../../desktop-host/src/office-engine.ts', () => ({ installOfficeEngineResolution: vi.fn() })) + +afterEach(() => { + vi.unstubAllEnvs() + vi.clearAllMocks() +}) + +it.each(['system-bin', undefined])('dispatches with bundled pnpm when PATH is %s', async (path) => { + vi.stubEnv('PATH', path) + const runtime = join('Application 中文 with spaces', 'resources', 'app.asar', 'dsh') + const support = join('Application 中文 with spaces', 'resources', 'runtime') + + await runDesktopCli(runtime, support) + + expect(installOfficeEngineResolution).toHaveBeenCalledExactlyOnceWith(runtime) + expect(runCli).toHaveBeenCalledExactlyOnceWith({ + manageDesktopProfile: true, + packageManager: { + command: process.execPath, + args: ['--expose-internals', join(support, 'primary-runtime', 'dependencies', 'pnpm', 'bin', 'pnpm.mjs')], + env: { + ELECTRON_RUN_AS_NODE: '1', + DSH_DESKTOP_NODE_EXECUTABLE: process.execPath, + PATH: `${join(support, 'bin')}${delimiter}${path ?? ''}`, + }, + }, + }) +}) From a4af361ed79ad3134c45ea442bfb8872513cb5d1 Mon Sep 17 00:00:00 2001 From: Turtle Date: Sat, 3 Oct 2026 02:16:21 +0800 Subject: [PATCH 017/155] fix(workflow): keep background workflow runs running after their step closes A background workflow run outlives the Tool Step that started it, so the Web workflow node inferred interruption as soon as that Step closed and showed live members as interrupted. Mark background runs on tool-workflow/run-start and infer interruption only for foreground runs. Refs #5638 --- docs/persistence-catalog.i18n.yaml | 44 +++++----- docs/persistence-catalog.md | 29 ++++--- docs/persistence-catalog.zh.md | 29 ++++--- ...26-10-03-workflow-run-background.i18n.yaml | 28 ++++++ .../2026-10-03-workflow-run-background.md | 48 +++++++++++ ...-10-03-workflow-run-background.schema.json | 86 +++++++++++++++++++ .../2026-10-03-workflow-run-background.zh.md | 48 +++++++++++ docs/persistence-schema.json | 55 ++++++------ .../client/ui-workflow-run/README.i18n.yaml | 8 +- packages/client/ui-workflow-run/README.md | 3 +- packages/client/ui-workflow-run/README.zh.md | 3 +- .../src/client/workflow-definition.ts | 5 +- .../tests/workflow-run.client.spec.tsx | 21 +++++ .../workflow/tool-workflow/README.i18n.yaml | 4 +- packages/workflow/tool-workflow/README.md | 2 +- packages/workflow/tool-workflow/README.zh.md | 2 +- packages/workflow/tool-workflow/src/index.ts | 15 ++-- packages/workflow/tool-workflow/src/types.ts | 4 +- .../tool-workflow/tests/tool-workflow.spec.ts | 1 + 19 files changed, 343 insertions(+), 92 deletions(-) create mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml create mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.md create mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.schema.json create mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.zh.md diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index 0797c29333..9c8f98adfd 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -9,8 +9,8 @@ en: e7c80d1de4d328b4 zh: d9f368c27fd9f998 /session-persistence-event-catalog/persistence-type-fingerprints: - en: 33dd28b1c768cd8b - zh: 7256442baf2faed1 + en: 8501cdd466c329a3 + zh: 1fecdaa5349ce427 /session-persistence-event-catalog/event-envelope: en: 7ebb1a2e0dd1f916 zh: 8946f415dda5c1b8 @@ -252,17 +252,17 @@ en: 1eac7deac6af15f3 zh: 1eac7deac6af15f3 /session-persistence-event-catalog/events/tool-workflow/tool-workflow-agent-end-log-only: - en: 77bc3650fec776c4 - zh: 423c11a52cb11e1a + en: 24d01a19ee065fdf + zh: c433d504c2b5d830 /session-persistence-event-catalog/events/tool-workflow/tool-workflow-agent-start-log-only: - en: 8e131e9c8210d334 - zh: 65059ec0c2f5dc95 + en: a96412f6e5621c77 + zh: 9bd265eb39e18428 /session-persistence-event-catalog/events/tool-workflow/tool-workflow-run-end-log-only: - en: 7d4f9675b83814d3 - zh: 5bfd2fdd82b2f85d + en: 1d6bcf016a6af399 + zh: 710a56368a33c717 /session-persistence-event-catalog/events/tool-workflow/tool-workflow-run-start-log-only: - en: b96c096b5ff3e03c - zh: ec6b06357cbc3398 + en: b510118291f55b51 + zh: 26e9b29ed0c0114b /session-persistence-event-catalog/events/turn: en: d7e8c999a0851a0c zh: d7e8c999a0851a0c @@ -1236,17 +1236,17 @@ en: 12c14727bb7834e2 zh: b0f3c877873c36db /session-persistence-event-catalog/resolved-persistence-types/toolworkflowagentenddata: - en: ac394442db02e075 - zh: 3782191860f095f1 + en: 8f327cc1f9f2474c + zh: 812e74404c278beb /session-persistence-event-catalog/resolved-persistence-types/toolworkflowagentstartdata: - en: b30d7b45639c4d48 - zh: 97cca691e6952c88 + en: debf65304f3ef434 + zh: a3e3d46bdbbf5bca /session-persistence-event-catalog/resolved-persistence-types/toolworkflowrunenddata: - en: 4905fd20255fab76 - zh: 46ebc17868537607 + en: 586c57bf172e73d1 + zh: 5d02fcf3992a7011 /session-persistence-event-catalog/resolved-persistence-types/toolworkflowrunstartdata: - en: 54090e169899c573 - zh: 530ea8d0d0f8cf68 + en: 727900992b451c68 + zh: 3c977315869a0a51 /session-persistence-event-catalog/resolved-persistence-types/turnendcancelcause: en: 544292eddeff5faa zh: 4e36e575a5030fb2 @@ -2019,11 +2019,11 @@ en: 557cbf925d0d118a zh: cdea625fa2ad1c33 /session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-run-end: - en: bb5da0ee7d289b9c - zh: 2e6703d11142f065 + en: 5ed112e5ea7334c4 + zh: 15d0b1188a96fdda /session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-run-start: - en: 939c100f8a590003 - zh: b372827fffc17b1c + en: dbaeaf21e1d3cd05 + zh: e7c6da48921f3dad /session-persistence-event-catalog/resolved-persistence-types/type-tool-call: en: 2dc168f9f2bd25d6 zh: d75bd24319468403 diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index 989987d5df..2f6dbfd966 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -69,7 +69,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`{ type: "tool-workflow/agent-end" }`](#persistence-type-sha256-babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7) | | `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`{ type: "tool-workflow/agent-start" }`](#persistence-type-sha256-5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627) | | `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`{ type: "tool-workflow/run-end" }`](#persistence-type-sha256-42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f) | -| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058) | +| `event:tool-workflow/run-start` | event | `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc) | | `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`{ type: "tool/call" }`](#persistence-type-sha256-3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48) | | `event:tool/ptc-dispatch` | event | `100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163` | [`{ type: "tool/ptc-dispatch" }`](#persistence-type-sha256-100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163) | | `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`{ type: "tool/ptc-dispatch-start" }`](#persistence-type-sha256-ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93) | @@ -1150,7 +1150,7 @@ Source: [`packages/core/session/src/types.ts:375`](../packages/core/session/src/ 'tool-workflow/agent-end': ToolWorkflowAgentEndData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:57`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:59`](../packages/workflow/tool-workflow/src/types.ts) @@ -1164,7 +1164,7 @@ Source: [`packages/workflow/tool-workflow/src/types.ts:57`](../packages/workflow 'tool-workflow/agent-start': ToolWorkflowAgentStartData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:52`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:54`](../packages/workflow/tool-workflow/src/types.ts) @@ -1178,7 +1178,7 @@ Source: [`packages/workflow/tool-workflow/src/types.ts:52`](../packages/workflow 'tool-workflow/run-end': ToolWorkflowRunEndData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:62`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:64`](../packages/workflow/tool-workflow/src/types.ts) @@ -1187,12 +1187,12 @@ Source: [`packages/workflow/tool-workflow/src/types.ts:62`](../packages/workflow ```ts persistence-catalog /** * Opens one top-level workflow record. - * @param data - stable run identity and display name. + * @param data - stable run identity, display name, and background marker. */ 'tool-workflow/run-start': ToolWorkflowRunStartData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:47`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:49`](../packages/workflow/tool-workflow/src/types.ts) ### `turn/*` @@ -5014,7 +5014,7 @@ Array of [`ToolSchema`](#persistence-type-sha256-66ba70f6f068da443f969a0b947a013 SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7` -Sources: [`packages/workflow/tool-workflow/src/types.ts:29`](../packages/workflow/tool-workflow/src/types.ts) +Sources: [`packages/workflow/tool-workflow/src/types.ts:31`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -5032,7 +5032,7 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:29`](../packages/workflo SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc` -Sources: [`packages/workflow/tool-workflow/src/types.ts:20`](../packages/workflow/tool-workflow/src/types.ts) +Sources: [`packages/workflow/tool-workflow/src/types.ts:22`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -5052,14 +5052,14 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:20`](../packages/workflo SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462` -Sources: [`packages/workflow/tool-workflow/src/types.ts:36`](../packages/workflow/tool-workflow/src/types.ts) +Sources: [`packages/workflow/tool-workflow/src/types.ts:38`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| | `runId` | required | `string` | | `stopReason` | required | [`WorkflowStopReason`](#persistence-type-sha256-8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15) | - + @@ -5067,12 +5067,13 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:36`](../packages/workflo ### `ToolWorkflowRunStartData` -SHA-256: `a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c` +SHA-256: `3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376` Sources: [`packages/workflow/tool-workflow/src/types.ts:14`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| +| `background` | optional | `true` | | `name` | required | `string` | | `runId` | required | `string` | @@ -8566,17 +8567,17 @@ SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | `time` | required | `number` | | `type` | required | `"tool-workflow/run-end"` | - + ### `{ type: "tool-workflow/run-start" }` -SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` +SHA-256: `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` | Property | Presence | Type | |---|---|---| -| `data` | required | [`ToolWorkflowRunStartData`](#persistence-type-sha256-a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c) | +| `data` | required | [`ToolWorkflowRunStartData`](#persistence-type-sha256-3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index 295160c5d0..75ea865720 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -71,7 +71,7 @@ | `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`{ type: "tool-workflow/agent-end" }`](#persistence-type-sha256-babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7) | | `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`{ type: "tool-workflow/agent-start" }`](#persistence-type-sha256-5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627) | | `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`{ type: "tool-workflow/run-end" }`](#persistence-type-sha256-42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f) | -| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058) | +| `event:tool-workflow/run-start` | event | `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc) | | `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`{ type: "tool/call" }`](#persistence-type-sha256-3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48) | | `event:tool/ptc-dispatch` | event | `100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163` | [`{ type: "tool/ptc-dispatch" }`](#persistence-type-sha256-100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163) | | `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`{ type: "tool/ptc-dispatch-start" }`](#persistence-type-sha256-ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93) | @@ -1152,7 +1152,7 @@ export type SessionEvent = { 'tool-workflow/agent-end': ToolWorkflowAgentEndData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:57`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:59`](../packages/workflow/tool-workflow/src/types.ts) @@ -1166,7 +1166,7 @@ export type SessionEvent = { 'tool-workflow/agent-start': ToolWorkflowAgentStartData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:52`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:54`](../packages/workflow/tool-workflow/src/types.ts) @@ -1180,7 +1180,7 @@ export type SessionEvent = { 'tool-workflow/run-end': ToolWorkflowRunEndData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:62`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:64`](../packages/workflow/tool-workflow/src/types.ts) @@ -1189,12 +1189,12 @@ export type SessionEvent = { ```ts persistence-catalog /** * Opens one top-level workflow record. - * @param data - stable run identity and display name. + * @param data - stable run identity, display name, and background marker. */ 'tool-workflow/run-start': ToolWorkflowRunStartData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:47`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:49`](../packages/workflow/tool-workflow/src/types.ts) ### `turn/*` @@ -5016,7 +5016,7 @@ SHA-256: `a0baff42eb900561f91032b6950a3925cf19c5c8d9ba33948ac69e4ac7dee573` SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7` -来源:[`packages/workflow/tool-workflow/src/types.ts:29`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:31`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -5034,7 +5034,7 @@ SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7` SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc` -来源:[`packages/workflow/tool-workflow/src/types.ts:20`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:22`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -5054,14 +5054,14 @@ SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc` SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462` -来源:[`packages/workflow/tool-workflow/src/types.ts:36`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:38`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| | `runId` | 必需 | `string` | | `stopReason` | 必需 | [`WorkflowStopReason`](#persistence-type-sha256-8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15) | - + @@ -5069,12 +5069,13 @@ SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462` ### `ToolWorkflowRunStartData` -SHA-256: `a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c` +SHA-256: `3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376` 来源:[`packages/workflow/tool-workflow/src/types.ts:14`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| +| `background` | 可选 | `true` | | `name` | 必需 | `string` | | `runId` | 必需 | `string` | @@ -8568,17 +8569,17 @@ SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | `time` | 必需 | `number` | | `type` | 必需 | `"tool-workflow/run-end"` | - + ### `{ type: "tool-workflow/run-start" }` -SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` +SHA-256: `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`ToolWorkflowRunStartData`](#persistence-type-sha256-a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c) | +| `data` | 必需 | [`ToolWorkflowRunStartData`](#persistence-type-sha256-3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml b/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml new file mode 100644 index 0000000000..90cd340290 --- /dev/null +++ b/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml @@ -0,0 +1,28 @@ +# Bilingual-pair consistency record for 2026-10-03-workflow-run-background.md (docs/i18n/README.md): per heading +# section, a hash of its English and Chinese blocks outside code blocks and generated regions. +# After editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write docs/persistence-changes/2026-10-03-workflow-run-background.md +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/2026-10-03-workflow-run-background: + en: 990aebebf4796f71 + zh: 9ae52c345e6c5537 +/2026-10-03-workflow-run-background/summary: + en: bffd445af628f905 + zh: 6207efcc06c2768d +/2026-10-03-workflow-run-background/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/2026-10-03-workflow-run-background/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/2026-10-03-workflow-run-background/compatibility: + en: cf2c2afecf21a46c + zh: 5a4279a82ba51d10 +/2026-10-03-workflow-run-background/verification: + en: 0539b2ac90f058bf + zh: 6ead6a707c3b3121 +/2026-10-03-workflow-run-background/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.md b/docs/persistence-changes/2026-10-03-workflow-run-background.md new file mode 100644 index 0000000000..1757d3f560 --- /dev/null +++ b/docs/persistence-changes/2026-10-03-workflow-run-background.md @@ -0,0 +1,48 @@ +--- +description: "Records a persistence type transition and its compatibility acknowledgement." +kind: persistence-change +--- + +# 2026-10-03-workflow-run-background + +English | [中文](2026-10-03-workflow-run-background.zh.md) + +## Summary + +Adds an optional background marker to tool-workflow/run-start. + +## Table of Contents + +- [Declaration](#declaration) +- [Compatibility](#compatibility) +- [Verification](#verification) +- [Dev Note](#dev-note) + + +## Declaration + +```yaml persistence-change +schemaVersion: 1 +id: 2026-10-03-workflow-run-background +baseline: false +changes: + - root: "event:tool-workflow/run-start" + previous: "2026-09-11-initial" + after: "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc" + decision: same-version +``` + + +## Compatibility + +Existing records remain valid. Absence means a foreground run, which matches every record written before background runs and every foreground run. The Web workflow node uses the marker to stop inferring interruption from the closed Tool Step of a run that belongs to a background job. + + +## Verification + +pnpm exec vitest run packages/workflow/tool-workflow/tests packages/client/ui-workflow-run/tests: 70 tests passed. + + +## Dev Note + +None. diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.schema.json b/docs/persistence-changes/2026-10-03-workflow-run-background.schema.json new file mode 100644 index 0000000000..31699b93a7 --- /dev/null +++ b/docs/persistence-changes/2026-10-03-workflow-run-background.schema.json @@ -0,0 +1,86 @@ +{ + "formatVersion": 2, + "roots": [ + { + "key": "event:tool-workflow/run-start", + "kind": "event", + "event": "tool-workflow/run-start", + "surface": false, + "digest": "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc", + "schema": { + "root": 0, + "nodes": [ + { + "kind": "object", + "properties": [ + { + "name": "data", + "type": 1, + "optional": false + }, + { + "name": "ignorable", + "type": 2, + "optional": true + }, + { + "name": "seq", + "type": 4, + "optional": false + }, + { + "name": "time", + "type": 4, + "optional": false + }, + { + "name": "type", + "type": 5, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "object", + "properties": [ + { + "name": "background", + "type": 2, + "optional": true + }, + { + "name": "name", + "type": 3, + "optional": false + }, + { + "name": "runId", + "type": 3, + "optional": false + } + ], + "indices": [] + }, + { + "kind": "literal", + "value": true + }, + { + "kind": "primitive", + "type": "string" + }, + { + "kind": "primitive", + "type": "number" + }, + { + "kind": "literal", + "value": "tool-workflow/run-start" + } + ] + } + } + ], + "types": [] +} diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md b/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md new file mode 100644 index 0000000000..0529bc13bb --- /dev/null +++ b/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md @@ -0,0 +1,48 @@ +--- +description: "记录持久化类型更改及其兼容性确认。" +kind: persistence-change +--- + +# 2026-10-03-workflow-run-background + +[English](2026-10-03-workflow-run-background.md) | 中文 + +## 概述 + +为 tool-workflow/run-start 增加可选的后台标记。 + +## 目录 + +- [声明](#declaration) +- [兼容性](#compatibility) +- [验证](#verification) +- [开发备注](#dev-note) + + +## 声明 + +```yaml persistence-change +schemaVersion: 1 +id: 2026-10-03-workflow-run-background +baseline: false +changes: + - root: "event:tool-workflow/run-start" + previous: "2026-09-11-initial" + after: "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc" + decision: same-version +``` + + +## 兼容性 + +已有记录仍然有效。缺失表示前台运行,与后台运行出现之前写入的记录以及所有前台运行一致。Web 工作流节点使用该标记,不再根据已关闭的工具 Step 推断后台作业所属运行已中断。 + + +## 验证 + +pnpm exec vitest run packages/workflow/tool-workflow/tests packages/client/ui-workflow-run/tests:70 个测试通过。 + + +## 开发备注 + +无。 diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index f29dde8245..fd2c22b524 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -17123,7 +17123,7 @@ "kind": "event", "event": "tool-workflow/run-start", "surface": false, - "digest": "c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058", + "digest": "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc", "schema": { "root": 0, "nodes": [ @@ -17137,7 +17137,7 @@ }, { "name": "ignorable", - "type": 3, + "type": 2, "optional": true }, { @@ -17162,26 +17162,31 @@ "kind": "object", "properties": [ { - "name": "name", + "name": "background", "type": 2, + "optional": true + }, + { + "name": "name", + "type": 3, "optional": false }, { "name": "runId", - "type": 2, + "type": 3, "optional": false } ], "indices": [] }, - { - "kind": "primitive", - "type": "string" - }, { "kind": "literal", "value": true }, + { + "kind": "primitive", + "type": "string" + }, { "kind": "primitive", "type": "number" @@ -21954,6 +21959,11 @@ "packages/subagent/tool-subagent/src/model-selection-state.ts:17" ] }, + { + "digest": "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc", + "names": [], + "sources": [] + }, { "digest": "0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd", "names": [], @@ -22702,6 +22712,15 @@ "names": [], "sources": [] }, + { + "digest": "3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376", + "names": [ + "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData" + ], + "sources": [ + "packages/workflow/tool-workflow/src/types.ts:14" + ] + }, { "digest": "3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f", "names": [ @@ -23650,7 +23669,7 @@ "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunEndData" ], "sources": [ - "packages/workflow/tool-workflow/src/types.ts:36" + "packages/workflow/tool-workflow/src/types.ts:38" ] }, { @@ -24051,7 +24070,7 @@ "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentStartData" ], "sources": [ - "packages/workflow/tool-workflow/src/types.ts:20" + "packages/workflow/tool-workflow/src/types.ts:22" ] }, { @@ -24213,15 +24232,6 @@ "packages/hooks/hook-protocol/src/types.ts:48" ] }, - { - "digest": "a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c", - "names": [ - "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData" - ], - "sources": [ - "packages/workflow/tool-workflow/src/types.ts:14" - ] - }, { "digest": "a720757f704a2512e9d2f20da4a093e582472176236a75ab8b8eb7aaff17d85a", "names": [], @@ -24669,7 +24679,7 @@ "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentEndData" ], "sources": [ - "packages/workflow/tool-workflow/src/types.ts:29" + "packages/workflow/tool-workflow/src/types.ts:31" ] }, { @@ -24690,11 +24700,6 @@ "packages/llm/llm/src/types.ts:105" ] }, - { - "digest": "c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058", - "names": [], - "sources": [] - }, { "digest": "c219efbdfd53b836786202ab4532913d555798f0a8615a4e9629736e3799fb70", "names": [], diff --git a/packages/client/ui-workflow-run/README.i18n.yaml b/packages/client/ui-workflow-run/README.i18n.yaml index 7120209b83..cde179d413 100644 --- a/packages/client/ui-workflow-run/README.i18n.yaml +++ b/packages/client/ui-workflow-run/README.i18n.yaml @@ -21,8 +21,8 @@ en: 99b67c86b6cf2031 zh: b3c5e998600525cb /deepseek-ai-dsh-client-ui-workflow-run/use-this-package/state-and-completion: - en: 03784e501ae8f70a - zh: 90b32daccf577780 + en: d7b7c401ea53e2ca + zh: 8d3cdbff168d796d /deepseek-ai-dsh-client-ui-workflow-run/understand-the-implementation: en: d41b996f3fb6727b zh: 6b40fdf1db894fff @@ -42,8 +42,8 @@ en: ca75c51c89c2c9b0 zh: de54f3467ef3b9be /deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work: - en: 3c5afa2d75f50eb0 - zh: 84f2e93d6dcb0ada + en: a422da4780d6a379 + zh: 928d28951773e477 /deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work/dev-note: en: e67f633dc6fe7773 zh: 3bb0c20c93f16f98 diff --git a/packages/client/ui-workflow-run/README.md b/packages/client/ui-workflow-run/README.md index 46d0190df5..7629f16b05 100644 --- a/packages/client/ui-workflow-run/README.md +++ b/packages/client/ui-workflow-run/README.md @@ -33,7 +33,7 @@ Run and phase headers keep 6px gaps between their title, count, and status field ### State and completion -Completion updates the visible status immediately but delays its automatic close while focus remains inside the content. A closed Turn or Step with missing terminal events presents the affected run or members as interrupted without changing the tool result. +Completion updates the visible status immediately but delays its automatic close while focus remains inside the content. For a foreground run, a closed Turn or Step with missing terminal events presents the affected run or members as interrupted without changing the tool result. A background run outlives its Tool Step, so it stays running until its terminal events arrive. ----- @@ -86,6 +86,7 @@ None; this package neither assembles nor sends a provider request. These limits define which runs produce records and what the node exposes; they are current package constraints. - **Only top-level calls through `dsh-tool-workflow` produce these records** — nested PTC mode calls and direct `WorkflowEngine` consumers do not. +- **A background run lost without terminal events stays running** — its Step closure carries no liveness fact, and the session log records no job loss after a process crash. - **Navigation is intentionally live-only** — terminal members remain visible for review but never expose a cold-session opener from this node. - **The node shows run, phase, member identity, and status only** — scripts, outputs, errors, logs, usage, static topology, and controls remain outside this surface. diff --git a/packages/client/ui-workflow-run/README.zh.md b/packages/client/ui-workflow-run/README.zh.md index 9cac24f953..40ab8d92ac 100644 --- a/packages/client/ui-workflow-run/README.zh.md +++ b/packages/client/ui-workflow-run/README.zh.md @@ -33,7 +33,7 @@ kind: "package-reference" ### 状态与完成 -完成状态会立即更新,但只要焦点仍位于展开内容内,自动折叠就会等待焦点离开。若所属轮次或步骤已关闭但终点事件缺失,界面把相应运行或成员显示为已中断,而不改写工具结果。 +完成状态会立即更新,但只要焦点仍位于展开内容内,自动折叠就会等待焦点离开。对前台运行,若所属轮次或步骤已关闭但终点事件缺失,界面把相应运行或成员显示为已中断,而不改写工具结果。后台运行的生命周期长于其工具 Step,因此在终点事件到达前保持运行中。 ----- @@ -86,6 +86,7 @@ kind: "package-reference" 这些限制定义哪些运行会产生记录、节点暴露什么;它们是当前包约束。 - **只有经 `dsh-tool-workflow` 发起的顶层调用会生成这些记录**:嵌套 PTC mode 调用和直接 `WorkflowEngine` 消费方不会生成。 +- **未写终点事件就丢失的后台运行保持运行中**:其 Step 关闭不表示存活状态,进程崩溃后会话日志也不记录作业丢失。 - **导航刻意只面向实时运行**:终态成员继续保留供复盘,但本节点永不为其提供冷会话入口。 - **节点只显示运行、阶段、成员身份与状态**:脚本、输出、错误、日志、用量、静态拓扑与控制操作都不属于本界面。 diff --git a/packages/client/ui-workflow-run/src/client/workflow-definition.ts b/packages/client/ui-workflow-run/src/client/workflow-definition.ts index 7f1eba7708..2f7adb6ee5 100644 --- a/packages/client/ui-workflow-run/src/client/workflow-definition.ts +++ b/packages/client/ui-workflow-run/src/client/workflow-definition.ts @@ -47,6 +47,8 @@ interface WorkflowMemberState extends Omit interface WorkflowState { readonly name: string + /** A background run outlives its Tool Step, so a closed Location does not imply interruption. */ + readonly background: boolean readonly stopReason?: WorkflowStopReason readonly members: readonly WorkflowMemberState[] } @@ -93,6 +95,7 @@ function projectWorkflow( ): WorkflowRunChatData { const state = context.state as WorkflowState const interrupted = state.stopReason === undefined + && !state.background && locationClosed(location) const phases = new Map() for (const member of state.members) { @@ -162,7 +165,7 @@ export const workflowRunDefinition: ConversationNodeDefinition = if (match.event.type !== 'tool-workflow/run-start') { throw new Error('workflow-run start requires tool-workflow/run-start') } - return { name: match.event.data.name, members: [] } + return { name: match.event.data.name, background: match.event.data.background === true, members: [] } }, update: (context, match) => { if (match.event.type === 'tool-workflow/agent-start') { diff --git a/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx b/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx index f5c428b842..fb27171502 100644 --- a/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx +++ b/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx @@ -192,6 +192,27 @@ describe('workflow-run Conversation Definition', () => { }) }) + it('keeps a background run running after its Tool Step and Turn close', () => { + const value = assembler([ + at(1, 'turn/start', { turn: 1 }), + at(2, 'step/start', { turn: 1, step: 1 }), + at(3, 'tool-workflow/run-start', { runId: 'run-1', name: 'audit', background: true }), + at(4, 'step/end', { turn: 1, step: 1 }), + at(5, 'turn/end', { turn: 1, reason: { kind: 'completed' } }), + at(6, 'tool-workflow/agent-start', { + runId: 'run-1', seq: 1, label: 'worker', childId: 'child-1', + }), + ]) + expect(workflowData(value)).toMatchObject({ + status: 'running', + phases: [{ members: [{ status: 'running' }] }], + }) + value.append(at(7, 'tool-workflow/agent-end', { runId: 'run-1', seq: 1, outcome: 'completed' })) + value.append(at(8, 'tool-workflow/run-end', { runId: 'run-1', stopReason: 'completed' })) + value.flush() + expect(workflowData(value)?.status).toBe('completed') + }) + it('retains a zero-member run as its own completed node', () => { const value = assembler([ at(1, 'turn/start', { turn: 1 }), diff --git a/packages/workflow/tool-workflow/README.i18n.yaml b/packages/workflow/tool-workflow/README.i18n.yaml index 8f307582b3..b75bc93863 100644 --- a/packages/workflow/tool-workflow/README.i18n.yaml +++ b/packages/workflow/tool-workflow/README.i18n.yaml @@ -42,8 +42,8 @@ en: 35950b2015800ec5 zh: 5ae6f5a5e53dc585 /deepseek-ai-dsh-tool-workflow/understand-the-implementation/durable-session-records: - en: e5bbbb7788d6dcdf - zh: aa035f074f7ac021 + en: f067ab6fc9a052cd + zh: a5087dc3cd44aae9 /deepseek-ai-dsh-tool-workflow/understand-the-implementation/render-intent: en: 389b3740ec1f5ac2 zh: 78430014f5e270e2 diff --git a/packages/workflow/tool-workflow/README.md b/packages/workflow/tool-workflow/README.md index 5cdadb9ab5..abeb6411dc 100644 --- a/packages/workflow/tool-workflow/README.md +++ b/packages/workflow/tool-workflow/README.md @@ -75,7 +75,7 @@ A background call registers the run through `jobs.start` inside the job starter, ### Durable session records -For a root transport execution (`exec.parent` absent), the tool projects the run into the calling Agent's Session with four log-only events: run-start after `start()` returns, member starts and endings filtered by `run.id`, then run-end only after the result is available and disposal reaches quiescence. Nested transport calls execute normally but write no record. The first failed Session append disables later recording for that run with one warning, leaving either no record or a legal continuous prefix without changing the tool result or cleanup. +For a root transport execution (`exec.parent` absent), the tool projects the run into the calling Agent's Session with four log-only events: run-start after `start()` returns, carrying `background: true` for a background run, member starts and endings filtered by `run.id`, then run-end only after the result is available and disposal reaches quiescence. Nested transport calls execute normally but write no record. The first failed Session append disables later recording for that run with one warning, leaving either no record or a legal continuous prefix without changing the tool result or cleanup. The engine's `workflow/phase` and `workflow/log` events have no per-line durable surface from this tool: the session log deliberately records run and member lifecycle only, and the Web transcript derives from those records. A background run's lines reach a human through the job observation record instead, which is transient by design. diff --git a/packages/workflow/tool-workflow/README.zh.md b/packages/workflow/tool-workflow/README.zh.md index dcc92b352c..f73cff56c6 100644 --- a/packages/workflow/tool-workflow/README.zh.md +++ b/packages/workflow/tool-workflow/README.zh.md @@ -75,7 +75,7 @@ kind: "package-reference" ### 持久会话记录 -对于根 transport 执行(`exec.parent` 缺省),工具会用四个 log-only 事件把运行投影到调用方 agent 的会话:`start()` 返回后写 run-start,只记录 `run.id` 匹配的成员开始与结束,并且只在结果可用且 dispose 完全停稳后写 run-end。嵌套 transport 调用照常执行,但不写任何记录。会话追加操作首次失败后,本运行会停止后续记录并只告警一次,留下空记录或合法连续前缀,同时不改变工具结果和清理。 +对于根 transport 执行(`exec.parent` 缺省),工具会用四个 log-only 事件把运行投影到调用方 agent 的会话:`start()` 返回后写 run-start(后台运行带 `background: true`),只记录 `run.id` 匹配的成员开始与结束,并且只在结果可用且 dispose 完全停稳后写 run-end。嵌套 transport 调用照常执行,但不写任何记录。会话追加操作首次失败后,本运行会停止后续记录并只告警一次,留下空记录或合法连续前缀,同时不改变工具结果和清理。 引擎的 `workflow/phase` 与 `workflow/log` 事件在本工具没有逐行的持久面:会话日志刻意只记录 run 与成员生命周期,Web transcript 由这些记录派生。后台运行的这些行改经任务观察 record 抵达人类,而 record 的瞬态是设计使然。 diff --git a/packages/workflow/tool-workflow/src/index.ts b/packages/workflow/tool-workflow/src/index.ts index d6ca7140ec..40df3ea61e 100644 --- a/packages/workflow/tool-workflow/src/index.ts +++ b/packages/workflow/tool-workflow/src/index.ts @@ -65,7 +65,7 @@ export const Config: z = z.object({ type ResolvedConfig = Required interface WorkflowRecorder { - start(session: Session, run: WorkflowRun): void + start(session: Session, run: WorkflowRun, background: boolean): void finish(runId: WorkflowRunId, stopReason: WorkflowStopReason): void abandon(runId: WorkflowRunId): void } @@ -136,8 +136,13 @@ function createWorkflowRecorder(ctx: Context): WorkflowRecorder { }) return { - start(session, run) { - if (append(session, 'tool-workflow/run-start', { runId: run.id, name: run.meta.name })) { + start(session, run, background) { + const data: ToolWorkflowRunStartData = { + runId: run.id, + name: run.meta.name, + ...background ? { background: true } : {}, + } + if (append(session, 'tool-workflow/run-start', data)) { active.set(run.id, session) } }, @@ -286,7 +291,7 @@ function startBackgroundRun( parent, }) deps.mirror.start(run.id, job) - if (recordsRun) deps.recorder.start(parent.session, run) + if (recordsRun) deps.recorder.start(parent.session, run, true) const done = run.result.then(async (result): Promise => { try { // Keep member listeners alive through disposal: an engine may @@ -439,7 +444,7 @@ export function apply(ctx: Context, config: Config): void { }) const recordsRun = exec.parent === undefined // The engine publishes member events after start() returns and this run record is active. - if (recordsRun) recorder.start(parent.session, run) + if (recordsRun) recorder.start(parent.session, run, false) // Bridge the tool's abort signal to the run: if the parent step is aborted while the // script is in flight, cancel the whole run. The signal also enters the engine directly, but diff --git a/packages/workflow/tool-workflow/src/types.ts b/packages/workflow/tool-workflow/src/types.ts index c184404939..723bdc2906 100644 --- a/packages/workflow/tool-workflow/src/types.ts +++ b/packages/workflow/tool-workflow/src/types.ts @@ -14,6 +14,8 @@ import type { export interface ToolWorkflowRunStartData { readonly runId: WorkflowRunId readonly name: string + /** Present when the run belongs to a background job and outlives its Tool Step. */ + readonly background?: true } /** Records one workflow member after its child Session is published. */ @@ -42,7 +44,7 @@ declare module '@deepseek-ai/dsh-session/types' { interface SessionEventMap { /** * Opens one top-level workflow record. - * @param data - stable run identity and display name. + * @param data - stable run identity, display name, and background marker. */ 'tool-workflow/run-start': ToolWorkflowRunStartData /** diff --git a/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts b/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts index a0fbed76df..de6a38aaf9 100644 --- a/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts +++ b/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts @@ -517,6 +517,7 @@ describe('dsh-tool-workflow', () => { expect(session.snapshotEvents().map(event => event.type)).toEqual([ 'tool-workflow/run-start', 'tool-workflow/agent-start', 'tool-workflow/agent-end', 'tool-workflow/run-end', ]) + expect(session.snapshotEvents()[0]!.data).toEqual({ runId: 'run-1', name: 'audit', background: true }) // A straggling event after settlement finds no tracked run and is dropped. engine.phase(runId, 'Late') expect(retained(ctx, job.id, parent)).not.toContain('Late') From 34aef8c140caad3fc7bf76f85d9decb114183ed8 Mon Sep 17 00:00:00 2001 From: Turtle Date: Sat, 3 Oct 2026 02:32:09 +0800 Subject: [PATCH 018/155] docs(workflow): state forward-only background marker and lost-run limits --- .../2026-10-03-workflow-run-background.i18n.yaml | 4 ++-- .../persistence-changes/2026-10-03-workflow-run-background.md | 2 +- .../2026-10-03-workflow-run-background.zh.md | 2 +- packages/client/ui-workflow-run/README.i18n.yaml | 4 ++-- packages/client/ui-workflow-run/README.md | 3 ++- packages/client/ui-workflow-run/README.zh.md | 3 ++- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml b/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml index 90cd340290..a8a2816af3 100644 --- a/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml +++ b/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml @@ -18,8 +18,8 @@ en: 6907136f28e48c90 zh: 02f8298485f3d8e7 /2026-10-03-workflow-run-background/compatibility: - en: cf2c2afecf21a46c - zh: 5a4279a82ba51d10 + en: cdcfa251bd45ee28 + zh: 593c290c4ee9b868 /2026-10-03-workflow-run-background/verification: en: 0539b2ac90f058bf zh: 6ead6a707c3b3121 diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.md b/docs/persistence-changes/2026-10-03-workflow-run-background.md index 1757d3f560..7800ebbb7c 100644 --- a/docs/persistence-changes/2026-10-03-workflow-run-background.md +++ b/docs/persistence-changes/2026-10-03-workflow-run-background.md @@ -35,7 +35,7 @@ changes: ## Compatibility -Existing records remain valid. Absence means a foreground run, which matches every record written before background runs and every foreground run. The Web workflow node uses the marker to stop inferring interruption from the closed Tool Step of a run that belongs to a background job. +Existing records remain valid. Writers add the marker only from this change onward: in new records, absence means a foreground run, while background runs recorded earlier also lack it and keep their interrupted presentation after the Tool Step closes. The Web workflow node uses the marker to stop inferring interruption from the closed Tool Step of a run that belongs to a background job. ## Verification diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md b/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md index 0529bc13bb..131a087b45 100644 --- a/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md +++ b/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md @@ -35,7 +35,7 @@ changes: ## 兼容性 -已有记录仍然有效。缺失表示前台运行,与后台运行出现之前写入的记录以及所有前台运行一致。Web 工作流节点使用该标记,不再根据已关闭的工具 Step 推断后台作业所属运行已中断。 +已有记录仍然有效。写入方从本变更起才写入该标记:新记录中缺失表示前台运行;此前记录的后台运行同样缺少该标记,工具 Step 关闭后仍显示为已中断。Web 工作流节点使用该标记,不再根据已关闭的工具 Step 推断后台作业所属运行已中断。 ## 验证 diff --git a/packages/client/ui-workflow-run/README.i18n.yaml b/packages/client/ui-workflow-run/README.i18n.yaml index cde179d413..923d4a48a7 100644 --- a/packages/client/ui-workflow-run/README.i18n.yaml +++ b/packages/client/ui-workflow-run/README.i18n.yaml @@ -42,8 +42,8 @@ en: ca75c51c89c2c9b0 zh: de54f3467ef3b9be /deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work: - en: a422da4780d6a379 - zh: 928d28951773e477 + en: c7346285846dd51a + zh: 56d8171fcc6b1d80 /deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work/dev-note: en: e67f633dc6fe7773 zh: 3bb0c20c93f16f98 diff --git a/packages/client/ui-workflow-run/README.md b/packages/client/ui-workflow-run/README.md index 7629f16b05..1e14c011f7 100644 --- a/packages/client/ui-workflow-run/README.md +++ b/packages/client/ui-workflow-run/README.md @@ -86,7 +86,8 @@ None; this package neither assembles nor sends a provider request. These limits define which runs produce records and what the node exposes; they are current package constraints. - **Only top-level calls through `dsh-tool-workflow` produce these records** — nested PTC mode calls and direct `WorkflowEngine` consumers do not. -- **A background run lost without terminal events stays running** — its Step closure carries no liveness fact, and the session log records no job loss after a process crash. +- **A background run lost without terminal events stays running** — its Step closure carries no liveness fact, and the session log records no job loss after a process crash or after a failed append disables recording for that run. +- **Background runs recorded before the background marker still show as interrupted** — their `tool-workflow/run-start` lacks the marker, so the node treats them as foreground runs. - **Navigation is intentionally live-only** — terminal members remain visible for review but never expose a cold-session opener from this node. - **The node shows run, phase, member identity, and status only** — scripts, outputs, errors, logs, usage, static topology, and controls remain outside this surface. diff --git a/packages/client/ui-workflow-run/README.zh.md b/packages/client/ui-workflow-run/README.zh.md index 40ab8d92ac..46385ecfee 100644 --- a/packages/client/ui-workflow-run/README.zh.md +++ b/packages/client/ui-workflow-run/README.zh.md @@ -86,7 +86,8 @@ kind: "package-reference" 这些限制定义哪些运行会产生记录、节点暴露什么;它们是当前包约束。 - **只有经 `dsh-tool-workflow` 发起的顶层调用会生成这些记录**:嵌套 PTC mode 调用和直接 `WorkflowEngine` 消费方不会生成。 -- **未写终点事件就丢失的后台运行保持运行中**:其 Step 关闭不表示存活状态,进程崩溃后会话日志也不记录作业丢失。 +- **未写终点事件就丢失的后台运行保持运行中**:其 Step 关闭不表示存活状态,进程崩溃或追加失败停止该运行的记录后,会话日志也不记录作业丢失。 +- **后台标记出现之前记录的后台运行仍显示为已中断**:其 `tool-workflow/run-start` 缺少该标记,节点把它们视为前台运行。 - **导航刻意只面向实时运行**:终态成员继续保留供复盘,但本节点永不为其提供冷会话入口。 - **节点只显示运行、阶段、成员身份与状态**:脚本、输出、错误、日志、用量、静态拓扑与控制操作都不属于本界面。 From d3c2b3e642fc16eb99405d336ec34aa4e37e57f7 Mon Sep 17 00:00:00 2001 From: Turtle Date: Sat, 3 Oct 2026 10:16:11 +0800 Subject: [PATCH 019/155] fix(workflow-run): infer interruption only from crash or fork closers Replace the persisted background marker with a client-only rule. A foreground run writes run-end before its Tool Step ends and a background run outlives that Step, so only a Turn closed after a crash or at a fork boundary shows a run without run-end as interrupted. --- docs/persistence-catalog.i18n.yaml | 44 +++++----- docs/persistence-catalog.md | 29 +++---- docs/persistence-catalog.zh.md | 29 +++---- ...26-10-03-workflow-run-background.i18n.yaml | 28 ------ .../2026-10-03-workflow-run-background.md | 48 ----------- ...-10-03-workflow-run-background.schema.json | 86 ------------------- .../2026-10-03-workflow-run-background.zh.md | 48 ----------- docs/persistence-schema.json | 55 ++++++------ .../client/ui-workflow-run/README.i18n.yaml | 8 +- packages/client/ui-workflow-run/README.md | 5 +- packages/client/ui-workflow-run/README.zh.md | 5 +- .../src/client/workflow-definition.ts | 22 ++--- .../tests/workflow-run.client.spec.tsx | 45 +++++----- .../workflow/tool-workflow/README.i18n.yaml | 4 +- packages/workflow/tool-workflow/README.md | 2 +- packages/workflow/tool-workflow/README.zh.md | 2 +- packages/workflow/tool-workflow/src/index.ts | 15 ++-- packages/workflow/tool-workflow/src/types.ts | 4 +- .../tool-workflow/tests/tool-workflow.spec.ts | 1 - 19 files changed, 129 insertions(+), 351 deletions(-) delete mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml delete mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.md delete mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.schema.json delete mode 100644 docs/persistence-changes/2026-10-03-workflow-run-background.zh.md diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index 9c8f98adfd..0797c29333 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -9,8 +9,8 @@ en: e7c80d1de4d328b4 zh: d9f368c27fd9f998 /session-persistence-event-catalog/persistence-type-fingerprints: - en: 8501cdd466c329a3 - zh: 1fecdaa5349ce427 + en: 33dd28b1c768cd8b + zh: 7256442baf2faed1 /session-persistence-event-catalog/event-envelope: en: 7ebb1a2e0dd1f916 zh: 8946f415dda5c1b8 @@ -252,17 +252,17 @@ en: 1eac7deac6af15f3 zh: 1eac7deac6af15f3 /session-persistence-event-catalog/events/tool-workflow/tool-workflow-agent-end-log-only: - en: 24d01a19ee065fdf - zh: c433d504c2b5d830 + en: 77bc3650fec776c4 + zh: 423c11a52cb11e1a /session-persistence-event-catalog/events/tool-workflow/tool-workflow-agent-start-log-only: - en: a96412f6e5621c77 - zh: 9bd265eb39e18428 + en: 8e131e9c8210d334 + zh: 65059ec0c2f5dc95 /session-persistence-event-catalog/events/tool-workflow/tool-workflow-run-end-log-only: - en: 1d6bcf016a6af399 - zh: 710a56368a33c717 + en: 7d4f9675b83814d3 + zh: 5bfd2fdd82b2f85d /session-persistence-event-catalog/events/tool-workflow/tool-workflow-run-start-log-only: - en: b510118291f55b51 - zh: 26e9b29ed0c0114b + en: b96c096b5ff3e03c + zh: ec6b06357cbc3398 /session-persistence-event-catalog/events/turn: en: d7e8c999a0851a0c zh: d7e8c999a0851a0c @@ -1236,17 +1236,17 @@ en: 12c14727bb7834e2 zh: b0f3c877873c36db /session-persistence-event-catalog/resolved-persistence-types/toolworkflowagentenddata: - en: 8f327cc1f9f2474c - zh: 812e74404c278beb + en: ac394442db02e075 + zh: 3782191860f095f1 /session-persistence-event-catalog/resolved-persistence-types/toolworkflowagentstartdata: - en: debf65304f3ef434 - zh: a3e3d46bdbbf5bca + en: b30d7b45639c4d48 + zh: 97cca691e6952c88 /session-persistence-event-catalog/resolved-persistence-types/toolworkflowrunenddata: - en: 586c57bf172e73d1 - zh: 5d02fcf3992a7011 + en: 4905fd20255fab76 + zh: 46ebc17868537607 /session-persistence-event-catalog/resolved-persistence-types/toolworkflowrunstartdata: - en: 727900992b451c68 - zh: 3c977315869a0a51 + en: 54090e169899c573 + zh: 530ea8d0d0f8cf68 /session-persistence-event-catalog/resolved-persistence-types/turnendcancelcause: en: 544292eddeff5faa zh: 4e36e575a5030fb2 @@ -2019,11 +2019,11 @@ en: 557cbf925d0d118a zh: cdea625fa2ad1c33 /session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-run-end: - en: 5ed112e5ea7334c4 - zh: 15d0b1188a96fdda + en: bb5da0ee7d289b9c + zh: 2e6703d11142f065 /session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-run-start: - en: dbaeaf21e1d3cd05 - zh: e7c6da48921f3dad + en: 939c100f8a590003 + zh: b372827fffc17b1c /session-persistence-event-catalog/resolved-persistence-types/type-tool-call: en: 2dc168f9f2bd25d6 zh: d75bd24319468403 diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index 2f6dbfd966..989987d5df 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -69,7 +69,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover | `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`{ type: "tool-workflow/agent-end" }`](#persistence-type-sha256-babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7) | | `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`{ type: "tool-workflow/agent-start" }`](#persistence-type-sha256-5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627) | | `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`{ type: "tool-workflow/run-end" }`](#persistence-type-sha256-42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f) | -| `event:tool-workflow/run-start` | event | `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc) | +| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058) | | `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`{ type: "tool/call" }`](#persistence-type-sha256-3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48) | | `event:tool/ptc-dispatch` | event | `100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163` | [`{ type: "tool/ptc-dispatch" }`](#persistence-type-sha256-100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163) | | `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`{ type: "tool/ptc-dispatch-start" }`](#persistence-type-sha256-ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93) | @@ -1150,7 +1150,7 @@ Source: [`packages/core/session/src/types.ts:375`](../packages/core/session/src/ 'tool-workflow/agent-end': ToolWorkflowAgentEndData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:59`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:57`](../packages/workflow/tool-workflow/src/types.ts) @@ -1164,7 +1164,7 @@ Source: [`packages/workflow/tool-workflow/src/types.ts:59`](../packages/workflow 'tool-workflow/agent-start': ToolWorkflowAgentStartData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:54`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:52`](../packages/workflow/tool-workflow/src/types.ts) @@ -1178,7 +1178,7 @@ Source: [`packages/workflow/tool-workflow/src/types.ts:54`](../packages/workflow 'tool-workflow/run-end': ToolWorkflowRunEndData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:64`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:62`](../packages/workflow/tool-workflow/src/types.ts) @@ -1187,12 +1187,12 @@ Source: [`packages/workflow/tool-workflow/src/types.ts:64`](../packages/workflow ```ts persistence-catalog /** * Opens one top-level workflow record. - * @param data - stable run identity, display name, and background marker. + * @param data - stable run identity and display name. */ 'tool-workflow/run-start': ToolWorkflowRunStartData ``` -Source: [`packages/workflow/tool-workflow/src/types.ts:49`](../packages/workflow/tool-workflow/src/types.ts) +Source: [`packages/workflow/tool-workflow/src/types.ts:47`](../packages/workflow/tool-workflow/src/types.ts) ### `turn/*` @@ -5014,7 +5014,7 @@ Array of [`ToolSchema`](#persistence-type-sha256-66ba70f6f068da443f969a0b947a013 SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7` -Sources: [`packages/workflow/tool-workflow/src/types.ts:31`](../packages/workflow/tool-workflow/src/types.ts) +Sources: [`packages/workflow/tool-workflow/src/types.ts:29`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -5032,7 +5032,7 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:31`](../packages/workflo SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc` -Sources: [`packages/workflow/tool-workflow/src/types.ts:22`](../packages/workflow/tool-workflow/src/types.ts) +Sources: [`packages/workflow/tool-workflow/src/types.ts:20`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -5052,14 +5052,14 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:22`](../packages/workflo SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462` -Sources: [`packages/workflow/tool-workflow/src/types.ts:38`](../packages/workflow/tool-workflow/src/types.ts) +Sources: [`packages/workflow/tool-workflow/src/types.ts:36`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| | `runId` | required | `string` | | `stopReason` | required | [`WorkflowStopReason`](#persistence-type-sha256-8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15) | - + @@ -5067,13 +5067,12 @@ Sources: [`packages/workflow/tool-workflow/src/types.ts:38`](../packages/workflo ### `ToolWorkflowRunStartData` -SHA-256: `3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376` +SHA-256: `a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c` Sources: [`packages/workflow/tool-workflow/src/types.ts:14`](../packages/workflow/tool-workflow/src/types.ts) | Property | Presence | Type | |---|---|---| -| `background` | optional | `true` | | `name` | required | `string` | | `runId` | required | `string` | @@ -8567,17 +8566,17 @@ SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | `time` | required | `number` | | `type` | required | `"tool-workflow/run-end"` | - + ### `{ type: "tool-workflow/run-start" }` -SHA-256: `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` +SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | Property | Presence | Type | |---|---|---| -| `data` | required | [`ToolWorkflowRunStartData`](#persistence-type-sha256-3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376) | +| `data` | required | [`ToolWorkflowRunStartData`](#persistence-type-sha256-a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index 75ea865720..295160c5d0 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -71,7 +71,7 @@ | `event:tool-workflow/agent-end` | event | `babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7` | [`{ type: "tool-workflow/agent-end" }`](#persistence-type-sha256-babf9ee4d1af62bf6c3a8103737f7a5e4e78ce179be835ce05a38803e15884b7) | | `event:tool-workflow/agent-start` | event | `5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627` | [`{ type: "tool-workflow/agent-start" }`](#persistence-type-sha256-5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627) | | `event:tool-workflow/run-end` | event | `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | [`{ type: "tool-workflow/run-end" }`](#persistence-type-sha256-42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f) | -| `event:tool-workflow/run-start` | event | `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc) | +| `event:tool-workflow/run-start` | event | `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | [`{ type: "tool-workflow/run-start" }`](#persistence-type-sha256-c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058) | | `event:tool/call` | event | `3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48` | [`{ type: "tool/call" }`](#persistence-type-sha256-3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48) | | `event:tool/ptc-dispatch` | event | `100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163` | [`{ type: "tool/ptc-dispatch" }`](#persistence-type-sha256-100f6dca1468538239522cde3533e5bd721d0f1a7b50bea8b0eb533ea6c96163) | | `event:tool/ptc-dispatch-start` | event | `ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93` | [`{ type: "tool/ptc-dispatch-start" }`](#persistence-type-sha256-ec38b5949af8eacaf00df002f4acbe344f934f8a061e9cdc65a52a48e5f6dd93) | @@ -1152,7 +1152,7 @@ export type SessionEvent = { 'tool-workflow/agent-end': ToolWorkflowAgentEndData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:59`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:57`](../packages/workflow/tool-workflow/src/types.ts) @@ -1166,7 +1166,7 @@ export type SessionEvent = { 'tool-workflow/agent-start': ToolWorkflowAgentStartData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:54`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:52`](../packages/workflow/tool-workflow/src/types.ts) @@ -1180,7 +1180,7 @@ export type SessionEvent = { 'tool-workflow/run-end': ToolWorkflowRunEndData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:64`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:62`](../packages/workflow/tool-workflow/src/types.ts) @@ -1189,12 +1189,12 @@ export type SessionEvent = { ```ts persistence-catalog /** * Opens one top-level workflow record. - * @param data - stable run identity, display name, and background marker. + * @param data - stable run identity and display name. */ 'tool-workflow/run-start': ToolWorkflowRunStartData ``` -来源:[`packages/workflow/tool-workflow/src/types.ts:49`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:47`](../packages/workflow/tool-workflow/src/types.ts) ### `turn/*` @@ -5016,7 +5016,7 @@ SHA-256: `a0baff42eb900561f91032b6950a3925cf19c5c8d9ba33948ac69e4ac7dee573` SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7` -来源:[`packages/workflow/tool-workflow/src/types.ts:31`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:29`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -5034,7 +5034,7 @@ SHA-256: `c0ea97bc89dfc46fa94eab956f5c3ee6af2f964aa7db6327cb18b451f207bef7` SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc` -来源:[`packages/workflow/tool-workflow/src/types.ts:22`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:20`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -5054,14 +5054,14 @@ SHA-256: `9a410ddf56792b2b7cd4a224a2e54dc4dee30a8e8e6b1c2b9a1d19992b217adc` SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462` -来源:[`packages/workflow/tool-workflow/src/types.ts:38`](../packages/workflow/tool-workflow/src/types.ts) +来源:[`packages/workflow/tool-workflow/src/types.ts:36`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| | `runId` | 必需 | `string` | | `stopReason` | 必需 | [`WorkflowStopReason`](#persistence-type-sha256-8465ece5e9d9007c038b357015d849c15262cb0bc25abc59e47692d87ee01a15) | - + @@ -5069,13 +5069,12 @@ SHA-256: `7f9365bae9fcb73e1e34061a1acfe0422c1a5fd351848cace9bebbe806f28462` ### `ToolWorkflowRunStartData` -SHA-256: `3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376` +SHA-256: `a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c` 来源:[`packages/workflow/tool-workflow/src/types.ts:14`](../packages/workflow/tool-workflow/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| -| `background` | 可选 | `true` | | `name` | 必需 | `string` | | `runId` | 必需 | `string` | @@ -8569,17 +8568,17 @@ SHA-256: `42e0916e0dda5f6d1e7bb05d8514717147c036a79c9f36085683469516c1fd3f` | `time` | 必需 | `number` | | `type` | 必需 | `"tool-workflow/run-end"` | - + ### `{ type: "tool-workflow/run-start" }` -SHA-256: `0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc` +SHA-256: `c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`ToolWorkflowRunStartData`](#persistence-type-sha256-3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376) | +| `data` | 必需 | [`ToolWorkflowRunStartData`](#persistence-type-sha256-a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml b/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml deleted file mode 100644 index a8a2816af3..0000000000 --- a/docs/persistence-changes/2026-10-03-workflow-run-background.i18n.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Bilingual-pair consistency record for 2026-10-03-workflow-run-background.md (docs/i18n/README.md): per heading -# section, a hash of its English and Chinese blocks outside code blocks and generated regions. -# After editing either side, bring the other along and re-record with: -# pnpm run verify-translation-pairing --write docs/persistence-changes/2026-10-03-workflow-run-background.md -/: - en: 3d5a424ae7d7e46b - zh: c22a8e4a62d8cc1a -/2026-10-03-workflow-run-background: - en: 990aebebf4796f71 - zh: 9ae52c345e6c5537 -/2026-10-03-workflow-run-background/summary: - en: bffd445af628f905 - zh: 6207efcc06c2768d -/2026-10-03-workflow-run-background/table-of-contents: - en: 6cf314a069ceb451 - zh: 9adff678e9ecab3b -/2026-10-03-workflow-run-background/declaration: - en: 6907136f28e48c90 - zh: 02f8298485f3d8e7 -/2026-10-03-workflow-run-background/compatibility: - en: cdcfa251bd45ee28 - zh: 593c290c4ee9b868 -/2026-10-03-workflow-run-background/verification: - en: 0539b2ac90f058bf - zh: 6ead6a707c3b3121 -/2026-10-03-workflow-run-background/dev-note: - en: b75c8458928b72b9 - zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.md b/docs/persistence-changes/2026-10-03-workflow-run-background.md deleted file mode 100644 index 7800ebbb7c..0000000000 --- a/docs/persistence-changes/2026-10-03-workflow-run-background.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -description: "Records a persistence type transition and its compatibility acknowledgement." -kind: persistence-change ---- - -# 2026-10-03-workflow-run-background - -English | [中文](2026-10-03-workflow-run-background.zh.md) - -## Summary - -Adds an optional background marker to tool-workflow/run-start. - -## Table of Contents - -- [Declaration](#declaration) -- [Compatibility](#compatibility) -- [Verification](#verification) -- [Dev Note](#dev-note) - - -## Declaration - -```yaml persistence-change -schemaVersion: 1 -id: 2026-10-03-workflow-run-background -baseline: false -changes: - - root: "event:tool-workflow/run-start" - previous: "2026-09-11-initial" - after: "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc" - decision: same-version -``` - - -## Compatibility - -Existing records remain valid. Writers add the marker only from this change onward: in new records, absence means a foreground run, while background runs recorded earlier also lack it and keep their interrupted presentation after the Tool Step closes. The Web workflow node uses the marker to stop inferring interruption from the closed Tool Step of a run that belongs to a background job. - - -## Verification - -pnpm exec vitest run packages/workflow/tool-workflow/tests packages/client/ui-workflow-run/tests: 70 tests passed. - - -## Dev Note - -None. diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.schema.json b/docs/persistence-changes/2026-10-03-workflow-run-background.schema.json deleted file mode 100644 index 31699b93a7..0000000000 --- a/docs/persistence-changes/2026-10-03-workflow-run-background.schema.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "formatVersion": 2, - "roots": [ - { - "key": "event:tool-workflow/run-start", - "kind": "event", - "event": "tool-workflow/run-start", - "surface": false, - "digest": "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc", - "schema": { - "root": 0, - "nodes": [ - { - "kind": "object", - "properties": [ - { - "name": "data", - "type": 1, - "optional": false - }, - { - "name": "ignorable", - "type": 2, - "optional": true - }, - { - "name": "seq", - "type": 4, - "optional": false - }, - { - "name": "time", - "type": 4, - "optional": false - }, - { - "name": "type", - "type": 5, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "object", - "properties": [ - { - "name": "background", - "type": 2, - "optional": true - }, - { - "name": "name", - "type": 3, - "optional": false - }, - { - "name": "runId", - "type": 3, - "optional": false - } - ], - "indices": [] - }, - { - "kind": "literal", - "value": true - }, - { - "kind": "primitive", - "type": "string" - }, - { - "kind": "primitive", - "type": "number" - }, - { - "kind": "literal", - "value": "tool-workflow/run-start" - } - ] - } - } - ], - "types": [] -} diff --git a/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md b/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md deleted file mode 100644 index 131a087b45..0000000000 --- a/docs/persistence-changes/2026-10-03-workflow-run-background.zh.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -description: "记录持久化类型更改及其兼容性确认。" -kind: persistence-change ---- - -# 2026-10-03-workflow-run-background - -[English](2026-10-03-workflow-run-background.md) | 中文 - -## 概述 - -为 tool-workflow/run-start 增加可选的后台标记。 - -## 目录 - -- [声明](#declaration) -- [兼容性](#compatibility) -- [验证](#verification) -- [开发备注](#dev-note) - - -## 声明 - -```yaml persistence-change -schemaVersion: 1 -id: 2026-10-03-workflow-run-background -baseline: false -changes: - - root: "event:tool-workflow/run-start" - previous: "2026-09-11-initial" - after: "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc" - decision: same-version -``` - - -## 兼容性 - -已有记录仍然有效。写入方从本变更起才写入该标记:新记录中缺失表示前台运行;此前记录的后台运行同样缺少该标记,工具 Step 关闭后仍显示为已中断。Web 工作流节点使用该标记,不再根据已关闭的工具 Step 推断后台作业所属运行已中断。 - - -## 验证 - -pnpm exec vitest run packages/workflow/tool-workflow/tests packages/client/ui-workflow-run/tests:70 个测试通过。 - - -## 开发备注 - -无。 diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index fd2c22b524..f29dde8245 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -17123,7 +17123,7 @@ "kind": "event", "event": "tool-workflow/run-start", "surface": false, - "digest": "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc", + "digest": "c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058", "schema": { "root": 0, "nodes": [ @@ -17137,7 +17137,7 @@ }, { "name": "ignorable", - "type": 2, + "type": 3, "optional": true }, { @@ -17161,32 +17161,27 @@ { "kind": "object", "properties": [ - { - "name": "background", - "type": 2, - "optional": true - }, { "name": "name", - "type": 3, + "type": 2, "optional": false }, { "name": "runId", - "type": 3, + "type": 2, "optional": false } ], "indices": [] }, - { - "kind": "literal", - "value": true - }, { "kind": "primitive", "type": "string" }, + { + "kind": "literal", + "value": true + }, { "kind": "primitive", "type": "number" @@ -21959,11 +21954,6 @@ "packages/subagent/tool-subagent/src/model-selection-state.ts:17" ] }, - { - "digest": "0dea366b90e202fdbb1a8d79aef14ffc6716b31000e5116309af6ae65d67cecc", - "names": [], - "sources": [] - }, { "digest": "0e10d7c096b47e61defe372a5fc8bd37d835199410eac44367f95c45082498bd", "names": [], @@ -22712,15 +22702,6 @@ "names": [], "sources": [] }, - { - "digest": "3cc643a957d3f0b1ecb0db5dcb5326939cdb35afe6a98b3261415b7d3c72e376", - "names": [ - "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData" - ], - "sources": [ - "packages/workflow/tool-workflow/src/types.ts:14" - ] - }, { "digest": "3cfc3a56502da1f8c6153c2c56657bab4b749056968634dd0991d325ec1c919f", "names": [ @@ -23669,7 +23650,7 @@ "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunEndData" ], "sources": [ - "packages/workflow/tool-workflow/src/types.ts:38" + "packages/workflow/tool-workflow/src/types.ts:36" ] }, { @@ -24070,7 +24051,7 @@ "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentStartData" ], "sources": [ - "packages/workflow/tool-workflow/src/types.ts:22" + "packages/workflow/tool-workflow/src/types.ts:20" ] }, { @@ -24232,6 +24213,15 @@ "packages/hooks/hook-protocol/src/types.ts:48" ] }, + { + "digest": "a6da9ad5d42ae83a6833a8288b076688e8e0801633ea36cbdd8a30a6d9f3160c", + "names": [ + "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowRunStartData" + ], + "sources": [ + "packages/workflow/tool-workflow/src/types.ts:14" + ] + }, { "digest": "a720757f704a2512e9d2f20da4a093e582472176236a75ab8b8eb7aaff17d85a", "names": [], @@ -24679,7 +24669,7 @@ "packages/workflow/tool-workflow/src/types.ts#ToolWorkflowAgentEndData" ], "sources": [ - "packages/workflow/tool-workflow/src/types.ts:31" + "packages/workflow/tool-workflow/src/types.ts:29" ] }, { @@ -24700,6 +24690,11 @@ "packages/llm/llm/src/types.ts:105" ] }, + { + "digest": "c1f9e0405de6d18cabb9ee70782a027f9bbdc57e5abec9dcccdd56119e2e9058", + "names": [], + "sources": [] + }, { "digest": "c219efbdfd53b836786202ab4532913d555798f0a8615a4e9629736e3799fb70", "names": [], diff --git a/packages/client/ui-workflow-run/README.i18n.yaml b/packages/client/ui-workflow-run/README.i18n.yaml index 923d4a48a7..498bd598e9 100644 --- a/packages/client/ui-workflow-run/README.i18n.yaml +++ b/packages/client/ui-workflow-run/README.i18n.yaml @@ -21,8 +21,8 @@ en: 99b67c86b6cf2031 zh: b3c5e998600525cb /deepseek-ai-dsh-client-ui-workflow-run/use-this-package/state-and-completion: - en: d7b7c401ea53e2ca - zh: 8d3cdbff168d796d + en: de2dbff7df2294ed + zh: 97a03787caf02e2b /deepseek-ai-dsh-client-ui-workflow-run/understand-the-implementation: en: d41b996f3fb6727b zh: 6b40fdf1db894fff @@ -42,8 +42,8 @@ en: ca75c51c89c2c9b0 zh: de54f3467ef3b9be /deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work: - en: c7346285846dd51a - zh: 56d8171fcc6b1d80 + en: d89a3727cfdc9db9 + zh: 42ad9b22bb0c356e /deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work/dev-note: en: e67f633dc6fe7773 zh: 3bb0c20c93f16f98 diff --git a/packages/client/ui-workflow-run/README.md b/packages/client/ui-workflow-run/README.md index 1e14c011f7..0ef9f12cd3 100644 --- a/packages/client/ui-workflow-run/README.md +++ b/packages/client/ui-workflow-run/README.md @@ -33,7 +33,7 @@ Run and phase headers keep 6px gaps between their title, count, and status field ### State and completion -Completion updates the visible status immediately but delays its automatic close while focus remains inside the content. For a foreground run, a closed Turn or Step with missing terminal events presents the affected run or members as interrupted without changing the tool result. A background run outlives its Tool Step, so it stays running until its terminal events arrive. +Completion updates the visible status immediately but delays its automatic close while focus remains inside the content. A run or member without terminal events stays running after its Turn or Step ends normally, because a background run outlives its Tool Step. It is presented as interrupted, without changing the tool result, once its Turn is closed after a crash or at a fork boundary. ----- @@ -86,8 +86,7 @@ None; this package neither assembles nor sends a provider request. These limits define which runs produce records and what the node exposes; they are current package constraints. - **Only top-level calls through `dsh-tool-workflow` produce these records** — nested PTC mode calls and direct `WorkflowEngine` consumers do not. -- **A background run lost without terminal events stays running** — its Step closure carries no liveness fact, and the session log records no job loss after a process crash or after a failed append disables recording for that run. -- **Background runs recorded before the background marker still show as interrupted** — their `tool-workflow/run-start` lacks the marker, so the node treats them as foreground runs. +- **A run lost without terminal events in a normally ended Turn stays running** — for example a background run whose process crashed during a later Turn, or a run whose recording stopped after a failed append; the session log carries no fact that marks it stopped. - **Navigation is intentionally live-only** — terminal members remain visible for review but never expose a cold-session opener from this node. - **The node shows run, phase, member identity, and status only** — scripts, outputs, errors, logs, usage, static topology, and controls remain outside this surface. diff --git a/packages/client/ui-workflow-run/README.zh.md b/packages/client/ui-workflow-run/README.zh.md index 46385ecfee..5c14fe12ad 100644 --- a/packages/client/ui-workflow-run/README.zh.md +++ b/packages/client/ui-workflow-run/README.zh.md @@ -33,7 +33,7 @@ kind: "package-reference" ### 状态与完成 -完成状态会立即更新,但只要焦点仍位于展开内容内,自动折叠就会等待焦点离开。对前台运行,若所属轮次或步骤已关闭但终点事件缺失,界面把相应运行或成员显示为已中断,而不改写工具结果。后台运行的生命周期长于其工具 Step,因此在终点事件到达前保持运行中。 +完成状态会立即更新,但只要焦点仍位于展开内容内,自动折叠就会等待焦点离开。缺少终点事件的运行或成员在所属轮次或步骤正常结束后仍显示为运行中,因为后台运行的生命周期长于其工具 Step。只有当所属轮次在崩溃后或于分叉边界被关闭时,界面才把它们显示为已中断,且不改写工具结果。 ----- @@ -86,8 +86,7 @@ kind: "package-reference" 这些限制定义哪些运行会产生记录、节点暴露什么;它们是当前包约束。 - **只有经 `dsh-tool-workflow` 发起的顶层调用会生成这些记录**:嵌套 PTC mode 调用和直接 `WorkflowEngine` 消费方不会生成。 -- **未写终点事件就丢失的后台运行保持运行中**:其 Step 关闭不表示存活状态,进程崩溃或追加失败停止该运行的记录后,会话日志也不记录作业丢失。 -- **后台标记出现之前记录的后台运行仍显示为已中断**:其 `tool-workflow/run-start` 缺少该标记,节点把它们视为前台运行。 +- **在正常结束的轮次中未写终点事件就丢失的运行保持运行中**:例如进程在之后的轮次中崩溃的后台运行,或追加失败后停止记录的运行;会话日志中没有标记其已停止的事实。 - **导航刻意只面向实时运行**:终态成员继续保留供复盘,但本节点永不为其提供冷会话入口。 - **节点只显示运行、阶段、成员身份与状态**:脚本、输出、错误、日志、用量、静态拓扑与控制操作都不属于本界面。 diff --git a/packages/client/ui-workflow-run/src/client/workflow-definition.ts b/packages/client/ui-workflow-run/src/client/workflow-definition.ts index 2f7adb6ee5..f842cba937 100644 --- a/packages/client/ui-workflow-run/src/client/workflow-definition.ts +++ b/packages/client/ui-workflow-run/src/client/workflow-definition.ts @@ -47,8 +47,6 @@ interface WorkflowMemberState extends Omit interface WorkflowState { readonly name: string - /** A background run outlives its Tool Step, so a closed Location does not imply interruption. */ - readonly background: boolean readonly stopReason?: WorkflowStopReason readonly members: readonly WorkflowMemberState[] } @@ -82,11 +80,16 @@ function statusFromOutcome(outcome: WorkflowAgentOutcome): WorkflowRunStatus { } } -function locationClosed(location: ConversationLocation): boolean { - if (location.kind === 'step') { - return location.step.status === 'closed' || location.turn.status === 'closed' - } - return location.kind === 'turn' && location.turn.status === 'closed' +/** + * A foreground run writes its run-end before its Tool Step ends, and a + * background run outlives that Step, so an ordinary Step or Turn closure says + * nothing about liveness. Only a Turn closed after a crash or at a fork + * boundary proves that a run without run-end stopped. + */ +function turnAbandoned(location: ConversationLocation): boolean { + if (location.kind !== 'step' && location.kind !== 'turn') return false + const reason = location.turn.end?.data.reason.kind + return reason === 'interrupted' || reason === 'forked' } function projectWorkflow( @@ -95,8 +98,7 @@ function projectWorkflow( ): WorkflowRunChatData { const state = context.state as WorkflowState const interrupted = state.stopReason === undefined - && !state.background - && locationClosed(location) + && turnAbandoned(location) const phases = new Map() for (const member of state.members) { const phase = member.phase === undefined ? null : member.phase @@ -165,7 +167,7 @@ export const workflowRunDefinition: ConversationNodeDefinition = if (match.event.type !== 'tool-workflow/run-start') { throw new Error('workflow-run start requires tool-workflow/run-start') } - return { name: match.event.data.name, background: match.event.data.background === true, members: [] } + return { name: match.event.data.name, members: [] } }, update: (context, match) => { if (match.event.type === 'tool-workflow/agent-start') { diff --git a/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx b/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx index fb27171502..2c13b66721 100644 --- a/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx +++ b/packages/client/ui-workflow-run/tests/workflow-run.client.spec.tsx @@ -174,31 +174,13 @@ describe('workflow-run Conversation Definition', () => { expect(workflowData(value)).toEqual(workflowData(assembler(events))) }) - it('shows missing terminal facts as interrupted only after the owning Location closes', () => { + it('keeps a background run running after its Tool Step and Turn end normally', () => { const value = assembler([ at(1, 'turn/start', { turn: 1 }), at(2, 'step/start', { turn: 1, step: 1 }), at(3, 'tool-workflow/run-start', { runId: 'run-1', name: 'audit' }), - at(4, 'tool-workflow/agent-start', { - runId: 'run-1', seq: 1, label: 'worker', childId: 'child-1', - }), - ]) - expect(workflowData(value)?.status).toBe('running') - value.append(at(5, 'step/end', { turn: 1, step: 1 })) - value.flush() - expect(workflowData(value)).toMatchObject({ - status: 'interrupted', - phases: [{ members: [{ status: 'interrupted' }] }], - }) - }) - - it('keeps a background run running after its Tool Step and Turn close', () => { - const value = assembler([ - at(1, 'turn/start', { turn: 1 }), - at(2, 'step/start', { turn: 1, step: 1 }), - at(3, 'tool-workflow/run-start', { runId: 'run-1', name: 'audit', background: true }), at(4, 'step/end', { turn: 1, step: 1 }), - at(5, 'turn/end', { turn: 1, reason: { kind: 'completed' } }), + at(5, 'turn/end', { turn: 1, reason: { kind: 'aborted', reason: { kind: 'user' } } }), at(6, 'tool-workflow/agent-start', { runId: 'run-1', seq: 1, label: 'worker', childId: 'child-1', }), @@ -213,6 +195,27 @@ describe('workflow-run Conversation Definition', () => { expect(workflowData(value)?.status).toBe('completed') }) + it.each(['interrupted', 'forked'] as const)( + 'shows missing terminal facts as interrupted once a %s closer ends the owning Turn', + (kind) => { + const value = assembler([ + at(1, 'turn/start', { turn: 1 }), + at(2, 'step/start', { turn: 1, step: 1 }), + at(3, 'tool-workflow/run-start', { runId: 'run-1', name: 'audit' }), + at(4, 'tool-workflow/agent-start', { + runId: 'run-1', seq: 1, label: 'worker', childId: 'child-1', + }), + ]) + expect(workflowData(value)?.status).toBe('running') + value.append(at(5, 'turn/end', { turn: 1, reason: { kind } })) + value.flush() + expect(workflowData(value)).toMatchObject({ + status: 'interrupted', + phases: [{ members: [{ status: 'interrupted' }] }], + }) + }, + ) + it('retains a zero-member run as its own completed node', () => { const value = assembler([ at(1, 'turn/start', { turn: 1 }), @@ -250,7 +253,7 @@ describe('workflow-run Conversation Definition', () => { at(3, 'tool-workflow/agent-start', { runId: 'turn', seq: 1, label: 'open', childId: 'child-1', }), - at(4, 'turn/end', { turn: 1, reason: { kind: 'completed' } }), + at(4, 'turn/end', { turn: 1, reason: { kind: 'interrupted' } }), ]) expect(workflowData(interruptedTurn)?.status).toBe('interrupted') }) diff --git a/packages/workflow/tool-workflow/README.i18n.yaml b/packages/workflow/tool-workflow/README.i18n.yaml index b75bc93863..8f307582b3 100644 --- a/packages/workflow/tool-workflow/README.i18n.yaml +++ b/packages/workflow/tool-workflow/README.i18n.yaml @@ -42,8 +42,8 @@ en: 35950b2015800ec5 zh: 5ae6f5a5e53dc585 /deepseek-ai-dsh-tool-workflow/understand-the-implementation/durable-session-records: - en: f067ab6fc9a052cd - zh: a5087dc3cd44aae9 + en: e5bbbb7788d6dcdf + zh: aa035f074f7ac021 /deepseek-ai-dsh-tool-workflow/understand-the-implementation/render-intent: en: 389b3740ec1f5ac2 zh: 78430014f5e270e2 diff --git a/packages/workflow/tool-workflow/README.md b/packages/workflow/tool-workflow/README.md index abeb6411dc..5cdadb9ab5 100644 --- a/packages/workflow/tool-workflow/README.md +++ b/packages/workflow/tool-workflow/README.md @@ -75,7 +75,7 @@ A background call registers the run through `jobs.start` inside the job starter, ### Durable session records -For a root transport execution (`exec.parent` absent), the tool projects the run into the calling Agent's Session with four log-only events: run-start after `start()` returns, carrying `background: true` for a background run, member starts and endings filtered by `run.id`, then run-end only after the result is available and disposal reaches quiescence. Nested transport calls execute normally but write no record. The first failed Session append disables later recording for that run with one warning, leaving either no record or a legal continuous prefix without changing the tool result or cleanup. +For a root transport execution (`exec.parent` absent), the tool projects the run into the calling Agent's Session with four log-only events: run-start after `start()` returns, member starts and endings filtered by `run.id`, then run-end only after the result is available and disposal reaches quiescence. Nested transport calls execute normally but write no record. The first failed Session append disables later recording for that run with one warning, leaving either no record or a legal continuous prefix without changing the tool result or cleanup. The engine's `workflow/phase` and `workflow/log` events have no per-line durable surface from this tool: the session log deliberately records run and member lifecycle only, and the Web transcript derives from those records. A background run's lines reach a human through the job observation record instead, which is transient by design. diff --git a/packages/workflow/tool-workflow/README.zh.md b/packages/workflow/tool-workflow/README.zh.md index f73cff56c6..dcc92b352c 100644 --- a/packages/workflow/tool-workflow/README.zh.md +++ b/packages/workflow/tool-workflow/README.zh.md @@ -75,7 +75,7 @@ kind: "package-reference" ### 持久会话记录 -对于根 transport 执行(`exec.parent` 缺省),工具会用四个 log-only 事件把运行投影到调用方 agent 的会话:`start()` 返回后写 run-start(后台运行带 `background: true`),只记录 `run.id` 匹配的成员开始与结束,并且只在结果可用且 dispose 完全停稳后写 run-end。嵌套 transport 调用照常执行,但不写任何记录。会话追加操作首次失败后,本运行会停止后续记录并只告警一次,留下空记录或合法连续前缀,同时不改变工具结果和清理。 +对于根 transport 执行(`exec.parent` 缺省),工具会用四个 log-only 事件把运行投影到调用方 agent 的会话:`start()` 返回后写 run-start,只记录 `run.id` 匹配的成员开始与结束,并且只在结果可用且 dispose 完全停稳后写 run-end。嵌套 transport 调用照常执行,但不写任何记录。会话追加操作首次失败后,本运行会停止后续记录并只告警一次,留下空记录或合法连续前缀,同时不改变工具结果和清理。 引擎的 `workflow/phase` 与 `workflow/log` 事件在本工具没有逐行的持久面:会话日志刻意只记录 run 与成员生命周期,Web transcript 由这些记录派生。后台运行的这些行改经任务观察 record 抵达人类,而 record 的瞬态是设计使然。 diff --git a/packages/workflow/tool-workflow/src/index.ts b/packages/workflow/tool-workflow/src/index.ts index 40df3ea61e..d6ca7140ec 100644 --- a/packages/workflow/tool-workflow/src/index.ts +++ b/packages/workflow/tool-workflow/src/index.ts @@ -65,7 +65,7 @@ export const Config: z = z.object({ type ResolvedConfig = Required interface WorkflowRecorder { - start(session: Session, run: WorkflowRun, background: boolean): void + start(session: Session, run: WorkflowRun): void finish(runId: WorkflowRunId, stopReason: WorkflowStopReason): void abandon(runId: WorkflowRunId): void } @@ -136,13 +136,8 @@ function createWorkflowRecorder(ctx: Context): WorkflowRecorder { }) return { - start(session, run, background) { - const data: ToolWorkflowRunStartData = { - runId: run.id, - name: run.meta.name, - ...background ? { background: true } : {}, - } - if (append(session, 'tool-workflow/run-start', data)) { + start(session, run) { + if (append(session, 'tool-workflow/run-start', { runId: run.id, name: run.meta.name })) { active.set(run.id, session) } }, @@ -291,7 +286,7 @@ function startBackgroundRun( parent, }) deps.mirror.start(run.id, job) - if (recordsRun) deps.recorder.start(parent.session, run, true) + if (recordsRun) deps.recorder.start(parent.session, run) const done = run.result.then(async (result): Promise => { try { // Keep member listeners alive through disposal: an engine may @@ -444,7 +439,7 @@ export function apply(ctx: Context, config: Config): void { }) const recordsRun = exec.parent === undefined // The engine publishes member events after start() returns and this run record is active. - if (recordsRun) recorder.start(parent.session, run, false) + if (recordsRun) recorder.start(parent.session, run) // Bridge the tool's abort signal to the run: if the parent step is aborted while the // script is in flight, cancel the whole run. The signal also enters the engine directly, but diff --git a/packages/workflow/tool-workflow/src/types.ts b/packages/workflow/tool-workflow/src/types.ts index 723bdc2906..c184404939 100644 --- a/packages/workflow/tool-workflow/src/types.ts +++ b/packages/workflow/tool-workflow/src/types.ts @@ -14,8 +14,6 @@ import type { export interface ToolWorkflowRunStartData { readonly runId: WorkflowRunId readonly name: string - /** Present when the run belongs to a background job and outlives its Tool Step. */ - readonly background?: true } /** Records one workflow member after its child Session is published. */ @@ -44,7 +42,7 @@ declare module '@deepseek-ai/dsh-session/types' { interface SessionEventMap { /** * Opens one top-level workflow record. - * @param data - stable run identity, display name, and background marker. + * @param data - stable run identity and display name. */ 'tool-workflow/run-start': ToolWorkflowRunStartData /** diff --git a/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts b/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts index de6a38aaf9..a0fbed76df 100644 --- a/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts +++ b/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts @@ -517,7 +517,6 @@ describe('dsh-tool-workflow', () => { expect(session.snapshotEvents().map(event => event.type)).toEqual([ 'tool-workflow/run-start', 'tool-workflow/agent-start', 'tool-workflow/agent-end', 'tool-workflow/run-end', ]) - expect(session.snapshotEvents()[0]!.data).toEqual({ runId: 'run-1', name: 'audit', background: true }) // A straggling event after settlement finds no tracked run and is dropped. engine.phase(runId, 'Late') expect(retained(ctx, job.id, parent)).not.toContain('Late') From 55261c310b6b03875c434520dbde78a0999cd78c Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Fri, 2 Oct 2026 14:12:35 +0800 Subject: [PATCH 020/155] docs(notes): propose plugin market index format --- ...10-02-plugin-market-index-format.i18n.yaml | 40 ++++ .../2026-10-02-plugin-market-index-format.md | 172 ++++++++++++++++++ ...026-10-02-plugin-market-index-format.zh.md | 172 ++++++++++++++++++ 3 files changed, 384 insertions(+) create mode 100644 .agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml create mode 100644 .agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md create mode 100644 .agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml new file mode 100644 index 0000000000..4dc8e00aad --- /dev/null +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -0,0 +1,40 @@ +# Bilingual-pair consistency record for 2026-10-02-plugin-market-index-format.md (docs/i18n/README.md): per heading +# section, a hash of its English and Chinese blocks outside code blocks and generated regions. +# After editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +/agent-note-plugin-market-index-format: + en: 8da20a8601d7cb29 + zh: 74368eed4d4b8e7c +/agent-note-plugin-market-index-format/problem: + en: 655b61fab8d7dbb2 + zh: 56c0840347ac159f +/agent-note-plugin-market-index-format/proposal: + en: 4639cf45ff00b873 + zh: 1b51054085e2d57e +/agent-note-plugin-market-index-format/proposal/example: + en: cf54551add808913 + zh: 55180dda6db75d53 +/agent-note-plugin-market-index-format/proposal/root-fields: + en: 85fe18cf507b0ca1 + zh: 2b117e7acc907099 +/agent-note-plugin-market-index-format/proposal/entry-fields: + en: 3d9bb67ea136a8d4 + zh: 0ae1aa6c119f7dd2 +/agent-note-plugin-market-index-format/proposal/install-arguments: + en: 7e1f197c5607a732 + zh: 7acb7da2785e27aa +/agent-note-plugin-market-index-format/proposal/generator-obligations: + en: 2c1ad238db970c8c + zh: f929bcbd48bc1fa5 +/agent-note-plugin-market-index-format/proposal/reader-rules: + en: e2d5a290fb7bffa8 + zh: 933d628859c8bea8 +/agent-note-plugin-market-index-format/alternatives-considered: + en: d76bfb409881a925 + zh: b0f3bdbca166e096 +/agent-note-plugin-market-index-format/acceptance-criteria: + en: 013457664b0b4f21 + zh: c87086fab3ae788e +/agent-note-plugin-market-index-format/risks: + en: be9d4e489b431090 + zh: e31fe68ecfde91d1 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md new file mode 100644 index 0000000000..dd9d4e7e24 --- /dev/null +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -0,0 +1,172 @@ +# Agent Note: Plugin market index format + +Status: proposed + +English | [中文](2026-10-02-plugin-market-index-format.zh.md) + +## Problem + +DSH installs third-party bundles only from a spec the user already knows: an npm name, a Git URL, a tarball, or a local path. Nothing lets a user browse installable bundles. No official market exists, and one may be added later, so a market mechanism must work with indexes that third parties publish. + +The smallest possible index is a list of npm names or Git repository URLs, one per line. It identifies every plugin, but a client rendering it must fetch each package's manifest, locale files, and icon before it can show a list. A list page that issues one or more requests per row is slow, fails partially, and puts metadata resolution in every client. + +An index must therefore carry everything a list page displays: localized title and description, icon, version, compatibility, and publish time. Markets also want to publish their own data, such as categories, tags, downloads, and ratings, without DSH knowing what those values mean. + +## Proposal + +Separate the **index** from the **index generator**. DSH defines and reads one JSON index format. How an index is produced, and from which source list, belongs to the generator. DSH's reader, its Discover page, and a reference generator are separate changes that consume this format. + +### Example + +```json +{ + "format": 1, + "title": { "en": "Example Market", "zh": "示例市场" }, + "description": { "en": "Community DSH bundles", "zh": "社区 DSH bundle" }, + "metadata": { + "categories": { + "productivity": { "title": { "en": "Productivity", "zh": "效率" } } + }, + "labels": { + "official": { "title": { "en": "Official", "zh": "官方" } } + }, + "sortKeys": { + "downloads": { "title": { "en": "Downloads", "zh": "下载量" }, "order": "desc" }, + "rating": { "title": { "en": "Rating", "zh": "评分" }, "order": "desc" } + } + }, + "plugins": [ + { + "name": "@deepseek-ai/dsh-experimental-auto-review", + "version": "0.2.0-rc.2", + "publishTimestamp": 1790476800, + "source": { "type": "npm" }, + "peerDependencies": { "@deepseek-ai/dsh-agent": "0.2.0-rc.2" }, + "title": { "en": "Auto Review", "zh": "自动审查" }, + "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, + "icon": "icons/auto-review.svg", + "metadata": { + "category": "productivity", + "labels": ["official"], + "sortKeys": { "downloads": 12034, "rating": 4.6 } + } + }, + { + "name": "dsh-plugin-foo", + "version": "1.0.0", + "publishTimestamp": 1788000000, + "source": { + "type": "git", + "url": "https://github.com/author/dsh-plugins", + "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", + "path": "packages/foo" + }, + "title": "Foo", + "icon": "https://example.com/foo.png" + } + ] +} +``` + +`LocalizedText` below is the `LocalizedText` type of [`dsh-package-manifest`](../../../../packages/util/package-manifest/src/types.ts): either a string, or an object whose keys are lowercase language ids matching `^[a-z]{2,8}(-[a-z0-9]{1,8})*$`, whose members are strings, and which contains `en`. Every string contains at least one non-whitespace character. + +### Root fields + +| Field | Required | Rule | +|---|---|---| +| `format` | yes | Integer `1`. | +| `title` | yes | `LocalizedText` naming the market. | +| `description` | no | `LocalizedText`. | +| `metadata` | no | Object holding the three declaration maps below. | +| `metadata.categories` | no | Object mapping category id → `{ title: LocalizedText }`. | +| `metadata.labels` | no | Object mapping label id → `{ title: LocalizedText }`. | +| `metadata.sortKeys` | no | Object mapping sort-key id → `{ title: LocalizedText, order: "asc" \| "desc" }`; `order` is the initial sort direction. | +| `plugins` | yes | Array of entries, possibly empty; its order is the index's default ordering. | + +Category, label, and sort-key ids are non-empty strings. Readers look ids up as own properties, so ids such as `constructor` have no special meaning. + +### Entry fields + +| Field | Required | Rule | +|---|---|---| +| `name` | yes | Package name matching `^(@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*$`, at most 214 characters, unique within the index. | +| `version` | yes | Exact version in the SemVer 2.0.0 grammar, with optional prerelease and build metadata and without a `v` prefix or whitespace. | +| `publishTimestamp` | yes | Integer Unix timestamp in seconds, in `[0, 10^11)`. | +| `source` | yes | Where `version` is installed from; see below. | +| `peerDependencies` | no | Object mapping a package name that is `@deepseek-ai/dsh` or starts with `@deepseek-ai/dsh-` to a non-empty range string that does not start with `workspace:`. | +| `title` | no | `LocalizedText`; a reader displays `name` when absent. | +| `description` | no | `LocalizedText`. | +| `icon` | no | Either `data:;base64,`, where `` is `image/svg+xml`, `image/png`, `image/jpeg`, or `image/webp`, `` is canonically padded base64, and the decoded payload is at most 256 KiB; or a URL reference whose resolution against the index URL is an `https:` URL or has the index URL's origin. | +| `metadata` | no | Object holding the three values below. | +| `metadata.category` | no | One declared category id. | +| `metadata.labels` | no | Array of distinct declared label ids. | +| `metadata.sortKeys` | no | Object mapping a declared sort-key id → finite number. | + +`source` takes one of two forms, and readers reject any other `type`: + +- `{ "type": "npm", "registry"?: string }`. `registry` is an `http:` or `https:` URL without credentials, query, or fragment. +- `{ "type": "git", "url": string, "commit": string, "path"?: string }`. `url` is a canonical `https:` URL (equal to its WHATWG URL serialization) with at least two non-empty path segments, without credentials, query, or fragment, and not ending in `.tgz` or `.tar.gz`. `commit` is a lowercase 40-hex-digit SHA. `path` is a `/`-separated relative directory whose segments contain only ASCII letters, digits, and `._@+-`, and are neither `.` nor `..`; absent means the repository root. + +### Install arguments + +A client installs an entry with exactly these pnpm arguments: + +- npm: the spec `@`, asking `registry` first when present and the client's configured registry otherwise. A client may fall back to its other configured registries; any of them installs the same exact version. +- git: the spec `git+.git#`, without doubling a trailing `.git`, followed by `&path:/` when `path` is present. The `git+` prefix makes pnpm treat URLs with more than two path segments, such as GitLab subgroups, as Git repositories. + +### Generator obligations + +A reader cannot verify these rules; a generator that violates them publishes a misleading index. + +- `name` and `version` equal the package manifest of the installed source. +- `publishTimestamp` is the registry publish time of `version` for npm sources and the committer time of `commit` for Git sources. +- `peerDependencies` copies the manifest's DSH peer ranges after publication rewriting. A Git source whose manifest keeps a `workspace:` range omits that member, because installation treats such a range as the running DSH version. +- The package declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. +- `title`, `description`, and `icon` come from the package's locale `meta` fields, manifest fields, and icon, using the rules for installed plugin display metadata. + +### Reader rules + +A reader rejects the whole index when the document violates any rule in Root fields, Entry fields, or the `source` forms, including an undeclared category, label, or sort-key reference, a duplicate `name`, or a `format` other than `1`. Each such defect is a generator bug, and dropping entries silently would hide it. Readers may bound the document size. + +A reader ignores members that this note does not define, at every level except `source.type`. Format 1 can then gain optional members without breaking existing readers; a change that existing readers would misinterpret uses a new `format` value. + +Categories, labels, and sort keys are opaque: a reader filters and sorts by them, displays their `title`, and never interprets an id. Readers display declarations in the order of their localized `title`. When sorting entries, an entry without a value for the selected sort key follows all entries with a value in either direction, and equal values keep the index order. + +A reader evaluates compatibility from `peerDependencies` with the same rule as DSH's installation check, so an invalid range makes the entry incompatible. + +## Alternatives considered + +**A plain list of npm names or repository URLs.** It identifies every plugin but forces one or more requests per row before a list renders, which is the cost this format removes. + +**One opaque install spec string per entry.** A reader cannot verify that a free-form spec is pinned. A structured `source` with an exact `version`, or a `commit`, lets the reader verify pinning and lets the client build the spec it installs. + +**Installing the latest version instead of a pinned one.** The installed build could then differ from the metadata the list displayed, and a package release would change what an unchanged index installs. + +**Inline icons only.** A list without extra requests needs inline icons, but 256 KiB of raw bytes is about 341 KiB as base64, so a 100-entry index could reach about 35 MB. URL icons trade extra requests, and disclosure of the user's IP address to the image host, for a small index. + +**`engines.dsh` as the compatibility field.** DSH's installation check reads DSH `peerDependencies`, not `engines.dsh`. A separate field could mark an entry compatible that installation refuses, or the reverse. + +**Opaque sort values for time, including ISO date strings.** Publish time has fixed semantics that clients format and sort, so it is a typed field. Without time, sort values can be numbers only, which needs no per-key value-type rule. + +**Root-level `labels` and `sortKeys`, and an entry field named `sort`.** Grouping market-defined declarations and values under `metadata` at both levels, with matching member names, separates them from fields that clients interpret. + +**Declaration order as display order.** JavaScript reorders integer-like object keys, so declaration order would need either an id pattern or array declarations. Clients sort declarations by their localized title instead. + +**Allowing `workspace:` peer ranges.** Installation maps them to the running DSH version, so every runtime would appear compatible; omitting them states the same result explicitly. + +**Rejecting unknown members.** Every optional addition would then require a new `format` value and break every deployed reader. + +## Acceptance criteria + +- A validator accepts the example above and rejects one violation of each rule in Root fields, Entry fields, and the `source` forms, with a diagnostic naming the JSON path. +- Install arguments built from both example entries are accepted by DSH's install-spec parser and by pnpm. +- A validator ignores unknown members at every level. +- Compatibility computed from `peerDependencies` matches DSH's installation check for the same manifest. + +## Risks + +- An index is unsigned. A market can use a misleading `title`, such as one claiming to be official; clients must show the index URL and each entry's `source`. +- A Git entry's `name`, `version`, and `peerDependencies` are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. +- URL icons disclose the user's IP address to image hosts. +- Pinned versions stay stale until the index is regenerated. +- Market text reaches users, and models through any client tool that lists entries, without review by DSH. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md new file mode 100644 index 0000000000..2da1173f21 --- /dev/null +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -0,0 +1,172 @@ +# Agent Note: 插件市场索引格式 + +Status: proposed + +[English](2026-10-02-plugin-market-index-format.md) | 中文 + +## 问题 + +DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包名、Git URL、tarball 或本地路径。用户无法浏览可安装的组合包。目前没有官方市场,以后可能会增加官方市场,因此市场机制必须支持第三方发布的索引。 + +最小的索引是一份 npm 包名或 Git 仓库 URL 列表,每行一项。它能标识每个插件,但客户端渲染列表前必须为每个包获取 manifest(元数据清单)、语言文件和图标。列表页面每行发出一个或多个请求时,加载慢、可能部分失败,并且每个客户端都要实现元数据解析。 + +因此,索引必须包含列表页面显示的全部内容:本地化标题和描述、图标、版本、兼容性和发布时间。市场还需要发布自己的数据,例如分类、标签、下载量和评分,而 DSH 不需要理解这些值的含义。 + +## 提案 + +将**索引**与**索引生成器**分开。DSH 定义并读取一种 JSON 索引格式。索引如何生成、基于哪份源列表生成,由生成器负责。DSH 的读取器、Discover 页面和参考生成器是使用此格式的独立变更。 + +### 示例 + +```json +{ + "format": 1, + "title": { "en": "Example Market", "zh": "示例市场" }, + "description": { "en": "Community DSH bundles", "zh": "社区 DSH bundle" }, + "metadata": { + "categories": { + "productivity": { "title": { "en": "Productivity", "zh": "效率" } } + }, + "labels": { + "official": { "title": { "en": "Official", "zh": "官方" } } + }, + "sortKeys": { + "downloads": { "title": { "en": "Downloads", "zh": "下载量" }, "order": "desc" }, + "rating": { "title": { "en": "Rating", "zh": "评分" }, "order": "desc" } + } + }, + "plugins": [ + { + "name": "@deepseek-ai/dsh-experimental-auto-review", + "version": "0.2.0-rc.2", + "publishTimestamp": 1790476800, + "source": { "type": "npm" }, + "peerDependencies": { "@deepseek-ai/dsh-agent": "0.2.0-rc.2" }, + "title": { "en": "Auto Review", "zh": "自动审查" }, + "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, + "icon": "icons/auto-review.svg", + "metadata": { + "category": "productivity", + "labels": ["official"], + "sortKeys": { "downloads": 12034, "rating": 4.6 } + } + }, + { + "name": "dsh-plugin-foo", + "version": "1.0.0", + "publishTimestamp": 1788000000, + "source": { + "type": "git", + "url": "https://github.com/author/dsh-plugins", + "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", + "path": "packages/foo" + }, + "title": "Foo", + "icon": "https://example.com/foo.png" + } + ] +} +``` + +下文中的 `LocalizedText` 即 [`dsh-package-manifest`](../../../../packages/util/package-manifest/src/types.ts) 中的 `LocalizedText` 类型:字符串,或者是满足以下条件的对象:键为匹配 `^[a-z]{2,8}(-[a-z0-9]{1,8})*$` 的小写语言 id,成员均为字符串,并且包含 `en`。每个字符串至少包含一个非空白字符。 + +### 根字段 + +| 字段 | 必填 | 规则 | +|---|---|---| +| `format` | 是 | 整数 `1`。 | +| `title` | 是 | 市场名称,类型为 `LocalizedText`。 | +| `description` | 否 | `LocalizedText`。 | +| `metadata` | 否 | 包含下列三个声明映射的对象。 | +| `metadata.categories` | 否 | 对象,将分类 id 映射为 `{ title: LocalizedText }`。 | +| `metadata.labels` | 否 | 对象,将标签 id 映射为 `{ title: LocalizedText }`。 | +| `metadata.sortKeys` | 否 | 对象,将排序键 id 映射为 `{ title: LocalizedText, order: "asc" \| "desc" }`;`order` 是初始排序方向。 | +| `plugins` | 是 | 条目数组,可以为空;数组顺序即索引的默认排序。 | + +分类、标签和排序键的 id 均为非空字符串。读取器按自有属性查找 id,因此 `constructor` 等 id 没有特殊含义。 + +### 条目字段 + +| 字段 | 必填 | 规则 | +|---|---|---| +| `name` | 是 | 匹配 `^(@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*$` 的包名,长度不超过 214 个字符,在索引内唯一。 | +| `version` | 是 | 符合 SemVer 2.0.0 语法的精确版本,可带先行版本号和版本编译信息,不带 `v` 前缀,不含空白字符。 | +| `publishTimestamp` | 是 | 以秒为单位的整数 Unix 时间戳,取值范围为 `[0, 10^11)`。 | +| `source` | 是 | `version` 的安装来源;见下文。 | +| `peerDependencies` | 否 | 对象,将名为 `@deepseek-ai/dsh` 或以 `@deepseek-ai/dsh-` 开头的包名映射为不以 `workspace:` 开头的非空范围字符串。 | +| `title` | 否 | `LocalizedText`;缺省时读取器显示 `name`。 | +| `description` | 否 | `LocalizedText`。 | +| `icon` | 否 | 以下两种形式之一:`data:;base64,`,其中 `` 为 `image/svg+xml`、`image/png`、`image/jpeg` 或 `image/webp`,`` 是按规范填充的 base64,解码后的载荷不超过 256 KiB;或者 URL 引用,它相对于索引 URL 解析的结果是 `https:` URL,或与索引 URL 同源。 | +| `metadata` | 否 | 包含下列三个值的对象。 | +| `metadata.category` | 否 | 一个已声明的分类 id。 | +| `metadata.labels` | 否 | 由互不相同的已声明标签 id 组成的数组。 | +| `metadata.sortKeys` | 否 | 对象,将已声明的排序键 id 映射为有限数值。 | + +`source` 采用以下两种形式之一,读取器拒绝其他任何 `type`: + +- `{ "type": "npm", "registry"?: string }`。`registry` 是不含凭据、查询或片段的 `http:` 或 `https:` URL。 +- `{ "type": "git", "url": string, "commit": string, "path"?: string }`。`url` 是规范的 `https:` URL(等于其 WHATWG URL 序列化结果),至少包含两个非空路径段,不含凭据、查询或片段,且不以 `.tgz` 或 `.tar.gz` 结尾。`commit` 是 40 位小写十六进制 SHA。`path` 是以 `/` 分隔的相对目录,各段只包含 ASCII 字母、数字和 `._@+-`,且不是 `.` 或 `..`;缺省表示仓库根目录。 + +### 安装参数 + +客户端安装条目时恰好使用以下 pnpm 参数: + +- npm:spec 为 `@`;存在 `registry` 时先询问该 registry,否则先询问客户端所配置的 registry。客户端可以回退到它配置的其他 registry;其中任何一个安装的都是同一个精确版本。 +- git:spec 为 `git+.git#`,`url` 已以 `.git` 结尾时不重复添加;存在 `path` 时在其后追加 `&path:/`。`git+` 前缀使 pnpm 将路径段多于两个的 URL(例如 GitLab 子组)视为 Git 仓库。 + +### 生成器义务 + +读取器无法验证以下规则;违反这些规则的生成器会发布误导性的索引。 + +- `name` 和 `version` 与所安装来源中的包 manifest 一致。 +- 对于 npm 来源,`publishTimestamp` 是 `version` 在 registry 中的发布时间;对于 Git 来源,它是 `commit` 的提交者时间。 +- `peerDependencies` 复制 manifest 中经发布改写后的 DSH peer 范围。Git 来源的 manifest 保留 `workspace:` 范围时,生成器省略该成员,因为安装时会将此类范围视为当前运行的 DSH 版本。 +- 包声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 +- `title`、`description` 和 `icon` 来自包语言文件中的 `meta` 字段、manifest 字段和图标,并采用已安装插件显示元数据的规则。 + +### 读取器规则 + +文档违反根字段、条目字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,`name` 重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 + +读取器在除 `source.type` 之外的每一层都忽略本 Agent Note 未定义的成员。这样格式 1 可以增加可选成员而不破坏现有读取器;现有读取器会误解的变更使用新的 `format` 值。 + +分类、标签和排序键对读取器不透明:读取器按它们筛选和排序,显示其 `title`,从不解释 id 的含义。读取器按本地化 `title` 对声明排序后显示。对条目排序时,无论排序方向如何,没有所选排序键值的条目都排在所有有值的条目之后,值相同的条目保持索引顺序。 + +读取器按照与 DSH 安装检查相同的规则,根据 `peerDependencies` 评估兼容性,因此无效范围会使条目不兼容。 + +## 考虑过的替代方案 + +**纯 npm 包名或仓库 URL 列表。** 它能标识每个插件,但列表渲染前每行需要一个或多个请求,而此格式正是为消除这一开销而设计。 + +**每个条目使用一个不透明的安装 spec 字符串。** 读取器无法验证自由格式的 spec 是否固定了版本。结构化的 `source` 配合精确的 `version` 或 `commit`,读取器可以验证版本固定,客户端可以构建要安装的 spec。 + +**安装最新版本而不是固定版本。** 这样安装的构建可能与列表显示的元数据不一致,并且包发布新版本会改变未修改的索引所安装的内容。 + +**只允许内联图标。** 不发额外请求的列表需要内联图标,但 256 KiB 原始字节编码为 base64 后约为 341 KiB,因此 100 个条目的索引可能达到约 35 MB。URL 图标以额外请求和向图片主机暴露用户 IP 地址为代价,换取较小的索引。 + +**使用 `engines.dsh` 作为兼容性字段。** DSH 安装检查读取的是 DSH `peerDependencies`,而不是 `engines.dsh`。单独的字段可能把安装会拒绝的条目标记为兼容,反之亦然。 + +**用不透明排序值表示时间,包括 ISO 日期字符串。** 发布时间具有固定语义,客户端会对其格式化和排序,因此它是一个有类型的字段。排除时间后,排序值可以只用数值,无需为每个键规定值类型。 + +**根级 `labels` 和 `sortKeys`,以及名为 `sort` 的条目字段。** 在两个层级都把市场定义的声明和值归入 `metadata`,并使用对应的成员名,可以将它们与客户端解释的字段区分开。 + +**以声明顺序作为显示顺序。** JavaScript 会重排类整数的对象键,因此要保留声明顺序,就需要限定 id 格式或改用数组声明。客户端改为按本地化标题对声明排序。 + +**允许 `workspace:` peer 范围。** 安装时会将此类范围映射为当前运行的 DSH 版本,因此所有运行时都会显示为兼容;省略这些范围会明确表达同一结果。 + +**拒绝未知成员。** 这样每次增加可选成员都需要新的 `format` 值,并会破坏所有已部署的读取器。 + +## 验收标准 + +- 校验器接受上面的示例,并对根字段、条目字段和 `source` 形式中的每条规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。 +- 根据两个示例条目构建的安装参数可被 DSH 的安装 spec 解析器和 pnpm 接受。 +- 校验器在每一层都忽略未知成员。 +- 根据 `peerDependencies` 计算的兼容性与 DSH 对同一 manifest 的安装检查结果一致。 + +## 风险 + +- 索引没有签名。市场可能使用误导性的 `title`,例如声称自己是官方市场;客户端必须显示索引 URL 以及每个条目的 `source`。 +- Git 条目的 `name`、`version` 和 `peerDependencies` 是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 +- URL 图标会向图片主机暴露用户的 IP 地址。 +- 固定版本在索引重新生成之前一直保持陈旧。 +- 市场文本未经 DSH 审核即到达用户,并通过任何列出条目的客户端工具到达模型。 From 2c073b3e0f520d1eda83669fd50a221675367170 Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Sat, 3 Oct 2026 10:21:09 +0800 Subject: [PATCH 021/155] docs(notes): group market index versions per plugin and use engines.dsh --- ...10-02-plugin-market-index-format.i18n.yaml | 44 ++++--- .../2026-10-02-plugin-market-index-format.md | 119 ++++++++++++------ ...026-10-02-plugin-market-index-format.zh.md | 119 ++++++++++++------ 3 files changed, 183 insertions(+), 99 deletions(-) diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index 4dc8e00aad..b8bf48fc31 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -6,8 +6,8 @@ en: 8da20a8601d7cb29 zh: 74368eed4d4b8e7c /agent-note-plugin-market-index-format/problem: - en: 655b61fab8d7dbb2 - zh: 56c0840347ac159f + en: ce5e4a362f558af6 + zh: 29d93e0655b99217 /agent-note-plugin-market-index-format/proposal: en: 4639cf45ff00b873 zh: 1b51054085e2d57e @@ -15,26 +15,32 @@ en: cf54551add808913 zh: 55180dda6db75d53 /agent-note-plugin-market-index-format/proposal/root-fields: - en: 85fe18cf507b0ca1 - zh: 2b117e7acc907099 -/agent-note-plugin-market-index-format/proposal/entry-fields: - en: 3d9bb67ea136a8d4 - zh: 0ae1aa6c119f7dd2 + en: 4fac5a9b8261342d + zh: f9168a8a4209feab +/agent-note-plugin-market-index-format/proposal/plugin-fields: + en: aa544c156b4592b4 + zh: 69970e21ccb9eebd +/agent-note-plugin-market-index-format/proposal/version-fields: + en: 478af9194d9ba643 + zh: 8236e1447ba34bb4 /agent-note-plugin-market-index-format/proposal/install-arguments: - en: 7e1f197c5607a732 - zh: 7acb7da2785e27aa + en: 8f11735ff597c974 + zh: 70267600d4efcb06 +/agent-note-plugin-market-index-format/proposal/dsh-compatibility: + en: 323c997bccd7cf4a + zh: fd588d37925d3732 /agent-note-plugin-market-index-format/proposal/generator-obligations: - en: 2c1ad238db970c8c - zh: f929bcbd48bc1fa5 + en: ec28104907b9d1bc + zh: c0ee7ee11ec9682f /agent-note-plugin-market-index-format/proposal/reader-rules: - en: e2d5a290fb7bffa8 - zh: 933d628859c8bea8 + en: af82b158f935f4c4 + zh: 3038977221db0883 /agent-note-plugin-market-index-format/alternatives-considered: - en: d76bfb409881a925 - zh: b0f3bdbca166e096 + en: 5e239ebb99f7dda0 + zh: 7d05a3976c9b125f /agent-note-plugin-market-index-format/acceptance-criteria: - en: 013457664b0b4f21 - zh: c87086fab3ae788e + en: f364af5c0343a23e + zh: 8b8c2a3ec3f6a57f /agent-note-plugin-market-index-format/risks: - en: be9d4e489b431090 - zh: e31fe68ecfde91d1 + en: e806fcd791ce33ad + zh: cb8ab9029a531fdd diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index dd9d4e7e24..e5743c500f 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -10,7 +10,7 @@ DSH installs third-party bundles only from a spec the user already knows: an npm The smallest possible index is a list of npm names or Git repository URLs, one per line. It identifies every plugin, but a client rendering it must fetch each package's manifest, locale files, and icon before it can show a list. A list page that issues one or more requests per row is slow, fails partially, and puts metadata resolution in every client. -An index must therefore carry everything a list page displays: localized title and description, icon, version, compatibility, and publish time. Markets also want to publish their own data, such as categories, tags, downloads, and ratings, without DSH knowing what those values mean. +An index must therefore carry everything a list page displays: localized title and description, icon, author, available versions, compatibility, and publish time. Markets also want to publish their own data, such as categories, tags, downloads, and ratings, without DSH knowing what those values mean. ## Proposal @@ -38,31 +38,46 @@ Separate the **index** from the **index generator**. DSH defines and reads one J "plugins": [ { "name": "@deepseek-ai/dsh-experimental-auto-review", - "version": "0.2.0-rc.2", - "publishTimestamp": 1790476800, - "source": { "type": "npm" }, - "peerDependencies": { "@deepseek-ai/dsh-agent": "0.2.0-rc.2" }, "title": { "en": "Auto Review", "zh": "自动审查" }, "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, "icon": "icons/auto-review.svg", + "author": "DeepSeek", "metadata": { "category": "productivity", "labels": ["official"], "sortKeys": { "downloads": 12034, "rating": 4.6 } - } + }, + "versions": [ + { + "version": "0.2.0-rc.2", + "publishTimestamp": 1790476800, + "source": { "type": "npm" }, + "engines": { "dsh": "0.2.0-rc.2" } + }, + { + "version": "0.2.0-rc.1", + "publishTimestamp": 1789872000, + "source": { "type": "npm" }, + "engines": { "dsh": "0.2.0-rc.1" } + } + ] }, { "name": "dsh-plugin-foo", - "version": "1.0.0", - "publishTimestamp": 1788000000, - "source": { - "type": "git", - "url": "https://github.com/author/dsh-plugins", - "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", - "path": "packages/foo" - }, "title": "Foo", - "icon": "https://example.com/foo.png" + "icon": "https://example.com/foo.png", + "versions": [ + { + "version": "1.0.0", + "publishTimestamp": 1788000000, + "source": { + "type": "git", + "url": "https://github.com/author/dsh-plugins", + "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", + "path": "packages/foo" + } + } + ] } ] } @@ -81,26 +96,34 @@ Separate the **index** from the **index generator**. DSH defines and reads one J | `metadata.categories` | no | Object mapping category id → `{ title: LocalizedText }`. | | `metadata.labels` | no | Object mapping label id → `{ title: LocalizedText }`. | | `metadata.sortKeys` | no | Object mapping sort-key id → `{ title: LocalizedText, order: "asc" \| "desc" }`; `order` is the initial sort direction. | -| `plugins` | yes | Array of entries, possibly empty; its order is the index's default ordering. | +| `plugins` | yes | Array of plugins, possibly empty; its order is the index's default ordering. | Category, label, and sort-key ids are non-empty strings. Readers look ids up as own properties, so ids such as `constructor` have no special meaning. -### Entry fields +### Plugin fields | Field | Required | Rule | |---|---|---| | `name` | yes | Package name matching `^(@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*$`, at most 214 characters, unique within the index. | -| `version` | yes | Exact version in the SemVer 2.0.0 grammar, with optional prerelease and build metadata and without a `v` prefix or whitespace. | -| `publishTimestamp` | yes | Integer Unix timestamp in seconds, in `[0, 10^11)`. | -| `source` | yes | Where `version` is installed from; see below. | -| `peerDependencies` | no | Object mapping a package name that is `@deepseek-ai/dsh` or starts with `@deepseek-ai/dsh-` to a non-empty range string that does not start with `workspace:`. | | `title` | no | `LocalizedText`; a reader displays `name` when absent. | | `description` | no | `LocalizedText`. | | `icon` | no | Either `data:;base64,`, where `` is `image/svg+xml`, `image/png`, `image/jpeg`, or `image/webp`, `` is canonically padded base64, and the decoded payload is at most 256 KiB; or a URL reference whose resolution against the index URL is an `https:` URL or has the index URL's origin. | +| `author` | no | String with at least one non-whitespace character. | | `metadata` | no | Object holding the three values below. | | `metadata.category` | no | One declared category id. | | `metadata.labels` | no | Array of distinct declared label ids. | | `metadata.sortKeys` | no | Object mapping a declared sort-key id → finite number. | +| `versions` | yes | Non-empty array of versions; see below. Its order has no meaning. | + +### Version fields + +| Field | Required | Rule | +|---|---|---| +| `version` | yes | Exact version in the SemVer 2.0.0 grammar, with optional prerelease and build metadata and without a `v` prefix or whitespace; unique within the plugin. | +| `publishTimestamp` | yes | Integer Unix timestamp in seconds, in `[0, 10^11)`. | +| `source` | yes | Where `version` is installed from; see below. | +| `engines` | no | Object. | +| `engines.dsh` | no | Non-empty SemVer range string that does not start with `workspace:`; the DSH versions this version runs on. Absent means any DSH version. | `source` takes one of two forms, and readers reject any other `type`: @@ -109,64 +132,80 @@ Category, label, and sort-key ids are non-empty strings. Readers look ids up as ### Install arguments -A client installs an entry with exactly these pnpm arguments: +A client installs one version with exactly these pnpm arguments: - npm: the spec `@`, asking `registry` first when present and the client's configured registry otherwise. A client may fall back to its other configured registries; any of them installs the same exact version. - git: the spec `git+.git#`, without doubling a trailing `.git`, followed by `&path:/` when `path` is present. The `git+` prefix makes pnpm treat URLs with more than two path segments, such as GitLab subgroups, as Git repositories. +### DSH compatibility + +DSH's installation check reads `engines.dsh` from the package manifest. When it is present, the package is compatible exactly when the running DSH version satisfies that range, prereleases included; an invalid range is incompatible. Only a manifest without `engines.dsh` falls back to its `@deepseek-ai/dsh` and `@deepseek-ai/dsh-*` `peerDependencies`. Exact `name@version` exemptions apply to both rules. + +The fallback tests every DSH peer range against the same running DSH version, so their conjunction is one SemVer range with the same result. SemVer ranges have no parentheses, so the conjunction joins one `||` alternative from each range with spaces, for every combination, and joins the combinations with `||`. An index therefore carries a single `engines.dsh`. + ### Generator obligations A reader cannot verify these rules; a generator that violates them publishes a misleading index. -- `name` and `version` equal the package manifest of the installed source. +- `name` and each `version` equal the package manifest of the installed source. - `publishTimestamp` is the registry publish time of `version` for npm sources and the committer time of `commit` for Git sources. -- `peerDependencies` copies the manifest's DSH peer ranges after publication rewriting. A Git source whose manifest keeps a `workspace:` range omits that member, because installation treats such a range as the running DSH version. -- The package declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. -- `title`, `description`, and `icon` come from the package's locale `meta` fields, manifest fields, and icon, using the rules for installed plugin display metadata. +- `engines.dsh` copies the manifest's `engines.dsh`. Without one, it is the conjunction, as defined in DSH compatibility, of the manifest's DSH peer ranges after publication rewriting, omitting `workspace:` ranges, because installation treats them as the running DSH version; with no remaining range, `engines.dsh` is absent. +- Each listed version declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. +- `title`, `description`, `icon`, and `author` come from the highest listed version's locale `meta` fields, manifest fields, and icon, using the rules for installed plugin display metadata. ### Reader rules -A reader rejects the whole index when the document violates any rule in Root fields, Entry fields, or the `source` forms, including an undeclared category, label, or sort-key reference, a duplicate `name`, or a `format` other than `1`. Each such defect is a generator bug, and dropping entries silently would hide it. Readers may bound the document size. +A reader rejects the whole index when the document violates any rule in Root fields, Plugin fields, Version fields, or the `source` forms, including an undeclared category, label, or sort-key reference, a duplicate `name` or `version`, or a `format` other than `1`. Each such defect is a generator bug, and dropping entries silently would hide it. Readers may bound the document size. A reader ignores members that this note does not define, at every level except `source.type`. Format 1 can then gain optional members without breaking existing readers; a change that existing readers would misinterpret uses a new `format` value. -Categories, labels, and sort keys are opaque: a reader filters and sorts by them, displays their `title`, and never interprets an id. Readers display declarations in the order of their localized `title`. When sorting entries, an entry without a value for the selected sort key follows all entries with a value in either direction, and equal values keep the index order. +Categories, labels, and sort keys are opaque: a reader filters and sorts by them, displays their `title`, and never interprets an id. Readers display declarations in the order of their localized `title`. When sorting plugins, a plugin without a value for the selected sort key follows all plugins with a value in either direction, and equal values keep the index order. Sorting by publish time uses a plugin's greatest `publishTimestamp`. -A reader evaluates compatibility from `peerDependencies` with the same rule as DSH's installation check, so an invalid range makes the entry incompatible. +A reader evaluates each version's compatibility from `engines.dsh` with the rule in DSH compatibility. A reader orders versions by SemVer precedence. A plugin's default version is its highest compatible version without a prerelease tag; a plugin with no such version at all uses its highest compatible prerelease. A plugin without a compatible default version displays as incompatible, and a client may still offer its other versions individually. ## Alternatives considered **A plain list of npm names or repository URLs.** It identifies every plugin but forces one or more requests per row before a list renders, which is the cost this format removes. -**One opaque install spec string per entry.** A reader cannot verify that a free-form spec is pinned. A structured `source` with an exact `version`, or a `commit`, lets the reader verify pinning and lets the client build the spec it installs. +**One opaque install spec string per version.** A reader cannot verify that a free-form spec is pinned. A structured `source` with an exact `version`, or a `commit`, lets the reader verify pinning and lets the client build the spec it installs. **Installing the latest version instead of a pinned one.** The installed build could then differ from the metadata the list displayed, and a package release would change what an unchanged index installs. -**Inline icons only.** A list without extra requests needs inline icons, but 256 KiB of raw bytes is about 341 KiB as base64, so a 100-entry index could reach about 35 MB. URL icons trade extra requests, and disclosure of the user's IP address to the image host, for a small index. +**One entry per version.** Every version would repeat the title, description, icon, author, and market metadata, and readers would group entries by `name` to show one plugin. -**`engines.dsh` as the compatibility field.** DSH's installation check reads DSH `peerDependencies`, not `engines.dsh`. A separate field could mark an entry compatible that installation refuses, or the reverse. +**One `source` per plugin, with only the pin per version.** A plugin that moves to another repository, directory, or registry between releases could not list its older versions. + +**Display fields per version.** A list shows one row per plugin, so older display text would cost index size without a reader that shows it. + +**Inline icons only.** A list without extra requests needs inline icons, but 256 KiB of raw bytes is about 341 KiB as base64, so a 100-plugin index could reach about 35 MB. URL icons trade extra requests, and disclosure of the user's IP address to the image host, for a small index. + +**Copying DSH `peerDependencies` into the index.** It maps several package names to ranges that all constrain one DSH version, and names the constraint after npm peer resolution. `engines.dsh` states the same constraint once, and installation reads it first. + +**A structured `author` such as npm's `{ name, email, url }`.** Clients only display an author, and an email member would spread addresses into every index. **Opaque sort values for time, including ISO date strings.** Publish time has fixed semantics that clients format and sort, so it is a typed field. Without time, sort values can be numbers only, which needs no per-key value-type rule. -**Root-level `labels` and `sortKeys`, and an entry field named `sort`.** Grouping market-defined declarations and values under `metadata` at both levels, with matching member names, separates them from fields that clients interpret. +**Root-level `labels` and `sortKeys`, and a plugin field named `sort`.** Grouping market-defined declarations and values under `metadata` at both levels, with matching member names, separates them from fields that clients interpret. **Declaration order as display order.** JavaScript reorders integer-like object keys, so declaration order would need either an id pattern or array declarations. Clients sort declarations by their localized title instead. -**Allowing `workspace:` peer ranges.** Installation maps them to the running DSH version, so every runtime would appear compatible; omitting them states the same result explicitly. +**Allowing `workspace:` ranges.** Installation maps them to the running DSH version, so every runtime would appear compatible; omitting them states the same result explicitly. + +**Prereleases as default versions.** Installation accepts prereleases, but offering a release candidate by default to users of a plugin with stable releases would install untested builds without a choice. **Rejecting unknown members.** Every optional addition would then require a new `format` value and break every deployed reader. ## Acceptance criteria -- A validator accepts the example above and rejects one violation of each rule in Root fields, Entry fields, and the `source` forms, with a diagnostic naming the JSON path. -- Install arguments built from both example entries are accepted by DSH's install-spec parser and by pnpm. +- A validator accepts the example above and rejects one violation of each rule in Root fields, Plugin fields, Version fields, and the `source` forms, with a diagnostic naming the JSON path. +- Install arguments built from every example version are accepted by DSH's install-spec parser and by pnpm. - A validator ignores unknown members at every level. -- Compatibility computed from `peerDependencies` matches DSH's installation check for the same manifest. +- DSH's installation check prefers `engines.dsh` over DSH `peerDependencies`, and compatibility computed from an index version matches it for the same manifest. ## Risks -- An index is unsigned. A market can use a misleading `title`, such as one claiming to be official; clients must show the index URL and each entry's `source`. -- A Git entry's `name`, `version`, and `peerDependencies` are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. +- An index is unsigned. A market can use a misleading `title`, such as one claiming to be official; clients must show the index URL and each version's `source`. +- A Git version's `name`, `version`, and `engines.dsh` are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. - URL icons disclose the user's IP address to image hosts. - Pinned versions stay stale until the index is regenerated. -- Market text reaches users, and models through any client tool that lists entries, without review by DSH. +- Market text reaches users, and models through any client tool that lists plugins, without review by DSH. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index 2da1173f21..0c1da14b22 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -10,7 +10,7 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 最小的索引是一份 npm 包名或 Git 仓库 URL 列表,每行一项。它能标识每个插件,但客户端渲染列表前必须为每个包获取 manifest(元数据清单)、语言文件和图标。列表页面每行发出一个或多个请求时,加载慢、可能部分失败,并且每个客户端都要实现元数据解析。 -因此,索引必须包含列表页面显示的全部内容:本地化标题和描述、图标、版本、兼容性和发布时间。市场还需要发布自己的数据,例如分类、标签、下载量和评分,而 DSH 不需要理解这些值的含义。 +因此,索引必须包含列表页面显示的全部内容:本地化标题和描述、图标、作者、可用版本、兼容性和发布时间。市场还需要发布自己的数据,例如分类、标签、下载量和评分,而 DSH 不需要理解这些值的含义。 ## 提案 @@ -38,31 +38,46 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 "plugins": [ { "name": "@deepseek-ai/dsh-experimental-auto-review", - "version": "0.2.0-rc.2", - "publishTimestamp": 1790476800, - "source": { "type": "npm" }, - "peerDependencies": { "@deepseek-ai/dsh-agent": "0.2.0-rc.2" }, "title": { "en": "Auto Review", "zh": "自动审查" }, "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, "icon": "icons/auto-review.svg", + "author": "DeepSeek", "metadata": { "category": "productivity", "labels": ["official"], "sortKeys": { "downloads": 12034, "rating": 4.6 } - } + }, + "versions": [ + { + "version": "0.2.0-rc.2", + "publishTimestamp": 1790476800, + "source": { "type": "npm" }, + "engines": { "dsh": "0.2.0-rc.2" } + }, + { + "version": "0.2.0-rc.1", + "publishTimestamp": 1789872000, + "source": { "type": "npm" }, + "engines": { "dsh": "0.2.0-rc.1" } + } + ] }, { "name": "dsh-plugin-foo", - "version": "1.0.0", - "publishTimestamp": 1788000000, - "source": { - "type": "git", - "url": "https://github.com/author/dsh-plugins", - "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", - "path": "packages/foo" - }, "title": "Foo", - "icon": "https://example.com/foo.png" + "icon": "https://example.com/foo.png", + "versions": [ + { + "version": "1.0.0", + "publishTimestamp": 1788000000, + "source": { + "type": "git", + "url": "https://github.com/author/dsh-plugins", + "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", + "path": "packages/foo" + } + } + ] } ] } @@ -81,26 +96,34 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 | `metadata.categories` | 否 | 对象,将分类 id 映射为 `{ title: LocalizedText }`。 | | `metadata.labels` | 否 | 对象,将标签 id 映射为 `{ title: LocalizedText }`。 | | `metadata.sortKeys` | 否 | 对象,将排序键 id 映射为 `{ title: LocalizedText, order: "asc" \| "desc" }`;`order` 是初始排序方向。 | -| `plugins` | 是 | 条目数组,可以为空;数组顺序即索引的默认排序。 | +| `plugins` | 是 | 插件数组,可以为空;数组顺序即索引的默认排序。 | 分类、标签和排序键的 id 均为非空字符串。读取器按自有属性查找 id,因此 `constructor` 等 id 没有特殊含义。 -### 条目字段 +### 插件字段 | 字段 | 必填 | 规则 | |---|---|---| | `name` | 是 | 匹配 `^(@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*$` 的包名,长度不超过 214 个字符,在索引内唯一。 | -| `version` | 是 | 符合 SemVer 2.0.0 语法的精确版本,可带先行版本号和版本编译信息,不带 `v` 前缀,不含空白字符。 | -| `publishTimestamp` | 是 | 以秒为单位的整数 Unix 时间戳,取值范围为 `[0, 10^11)`。 | -| `source` | 是 | `version` 的安装来源;见下文。 | -| `peerDependencies` | 否 | 对象,将名为 `@deepseek-ai/dsh` 或以 `@deepseek-ai/dsh-` 开头的包名映射为不以 `workspace:` 开头的非空范围字符串。 | | `title` | 否 | `LocalizedText`;缺省时读取器显示 `name`。 | | `description` | 否 | `LocalizedText`。 | | `icon` | 否 | 以下两种形式之一:`data:;base64,`,其中 `` 为 `image/svg+xml`、`image/png`、`image/jpeg` 或 `image/webp`,`` 是按规范填充的 base64,解码后的载荷不超过 256 KiB;或者 URL 引用,它相对于索引 URL 解析的结果是 `https:` URL,或与索引 URL 同源。 | +| `author` | 否 | 至少包含一个非空白字符的字符串。 | | `metadata` | 否 | 包含下列三个值的对象。 | | `metadata.category` | 否 | 一个已声明的分类 id。 | | `metadata.labels` | 否 | 由互不相同的已声明标签 id 组成的数组。 | | `metadata.sortKeys` | 否 | 对象,将已声明的排序键 id 映射为有限数值。 | +| `versions` | 是 | 非空的版本数组;见下文。数组顺序没有含义。 | + +### 版本字段 + +| 字段 | 必填 | 规则 | +|---|---|---| +| `version` | 是 | 符合 SemVer 2.0.0 语法的精确版本,可带先行版本号和版本编译信息,不带 `v` 前缀,不含空白字符;在插件内唯一。 | +| `publishTimestamp` | 是 | 以秒为单位的整数 Unix 时间戳,取值范围为 `[0, 10^11)`。 | +| `source` | 是 | `version` 的安装来源;见下文。 | +| `engines` | 否 | 对象。 | +| `engines.dsh` | 否 | 不以 `workspace:` 开头的非空 SemVer 范围字符串,表示该版本可运行的 DSH 版本。缺省表示任意 DSH 版本。 | `source` 采用以下两种形式之一,读取器拒绝其他任何 `type`: @@ -109,64 +132,80 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 ### 安装参数 -客户端安装条目时恰好使用以下 pnpm 参数: +客户端安装某个版本时恰好使用以下 pnpm 参数: - npm:spec 为 `@`;存在 `registry` 时先询问该 registry,否则先询问客户端所配置的 registry。客户端可以回退到它配置的其他 registry;其中任何一个安装的都是同一个精确版本。 - git:spec 为 `git+.git#`,`url` 已以 `.git` 结尾时不重复添加;存在 `path` 时在其后追加 `&path:/`。`git+` 前缀使 pnpm 将路径段多于两个的 URL(例如 GitLab 子组)视为 Git 仓库。 +### DSH 兼容性 + +DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时,当且仅当当前运行的 DSH 版本满足该范围(包括先行版本)时包才兼容;无效范围视为不兼容。只有没有 `engines.dsh` 的 manifest 才回退到其 `@deepseek-ai/dsh` 与 `@deepseek-ai/dsh-*` 的 `peerDependencies`。精确的 `name@version` 豁免对两条规则都适用。 + +回退规则用同一个当前运行的 DSH 版本检验每个 DSH peer 范围,因此这些范围的合取是一个结果相同的 SemVer 范围。SemVer 范围没有括号,所以合取的写法是:从每个范围各取一个 `||` 分支,用空格连接,遍历所有组合,再用 `||` 连接这些组合。因此索引只携带一个 `engines.dsh`。 + ### 生成器义务 读取器无法验证以下规则;违反这些规则的生成器会发布误导性的索引。 -- `name` 和 `version` 与所安装来源中的包 manifest 一致。 +- `name` 和每个 `version` 与所安装来源中的包 manifest 一致。 - 对于 npm 来源,`publishTimestamp` 是 `version` 在 registry 中的发布时间;对于 Git 来源,它是 `commit` 的提交者时间。 -- `peerDependencies` 复制 manifest 中经发布改写后的 DSH peer 范围。Git 来源的 manifest 保留 `workspace:` 范围时,生成器省略该成员,因为安装时会将此类范围视为当前运行的 DSH 版本。 -- 包声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 -- `title`、`description` 和 `icon` 来自包语言文件中的 `meta` 字段、manifest 字段和图标,并采用已安装插件显示元数据的规则。 +- `engines.dsh` 复制 manifest 中的 `engines.dsh`。manifest 没有该字段时,它是 manifest 中经发布改写后的 DSH peer 范围按 DSH 兼容性一节定义的合取,并省略 `workspace:` 范围,因为安装时会将此类范围视为当前运行的 DSH 版本;没有剩余范围时省略 `engines.dsh`。 +- 列出的每个版本都声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 +- `title`、`description`、`icon` 和 `author` 来自所列最高版本的语言文件 `meta` 字段、manifest 字段和图标,并采用已安装插件显示元数据的规则。 ### 读取器规则 -文档违反根字段、条目字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,`name` 重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 +文档违反根字段、插件字段、版本字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,`name` 或 `version` 重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 读取器在除 `source.type` 之外的每一层都忽略本 Agent Note 未定义的成员。这样格式 1 可以增加可选成员而不破坏现有读取器;现有读取器会误解的变更使用新的 `format` 值。 -分类、标签和排序键对读取器不透明:读取器按它们筛选和排序,显示其 `title`,从不解释 id 的含义。读取器按本地化 `title` 对声明排序后显示。对条目排序时,无论排序方向如何,没有所选排序键值的条目都排在所有有值的条目之后,值相同的条目保持索引顺序。 +分类、标签和排序键对读取器不透明:读取器按它们筛选和排序,显示其 `title`,从不解释 id 的含义。读取器按本地化 `title` 对声明排序后显示。对插件排序时,无论排序方向如何,没有所选排序键值的插件都排在所有有值的插件之后,值相同的插件保持索引顺序。按发布时间排序时使用插件最大的 `publishTimestamp`。 -读取器按照与 DSH 安装检查相同的规则,根据 `peerDependencies` 评估兼容性,因此无效范围会使条目不兼容。 +读取器按 DSH 兼容性一节的规则,根据 `engines.dsh` 评估每个版本的兼容性。读取器按 SemVer 优先级对版本排序。插件的默认版本是其不带先行版本号的最高兼容版本;完全没有此类版本的插件使用其最高兼容的先行版本。没有兼容默认版本的插件显示为不兼容,客户端仍可单独提供它的其他版本。 ## 考虑过的替代方案 **纯 npm 包名或仓库 URL 列表。** 它能标识每个插件,但列表渲染前每行需要一个或多个请求,而此格式正是为消除这一开销而设计。 -**每个条目使用一个不透明的安装 spec 字符串。** 读取器无法验证自由格式的 spec 是否固定了版本。结构化的 `source` 配合精确的 `version` 或 `commit`,读取器可以验证版本固定,客户端可以构建要安装的 spec。 +**每个版本使用一个不透明的安装 spec 字符串。** 读取器无法验证自由格式的 spec 是否固定了版本。结构化的 `source` 配合精确的 `version` 或 `commit`,读取器可以验证版本固定,客户端可以构建要安装的 spec。 **安装最新版本而不是固定版本。** 这样安装的构建可能与列表显示的元数据不一致,并且包发布新版本会改变未修改的索引所安装的内容。 -**只允许内联图标。** 不发额外请求的列表需要内联图标,但 256 KiB 原始字节编码为 base64 后约为 341 KiB,因此 100 个条目的索引可能达到约 35 MB。URL 图标以额外请求和向图片主机暴露用户 IP 地址为代价,换取较小的索引。 +**每个版本一个条目。** 每个版本都会重复标题、描述、图标、作者和市场元数据,读取器还要按 `name` 分组才能显示一个插件。 -**使用 `engines.dsh` 作为兼容性字段。** DSH 安装检查读取的是 DSH `peerDependencies`,而不是 `engines.dsh`。单独的字段可能把安装会拒绝的条目标记为兼容,反之亦然。 +**每个插件一个 `source`,每个版本只记录固定点。** 在两次发布之间换了仓库、目录或 registry 的插件将无法列出旧版本。 + +**每个版本各有显示字段。** 列表每个插件只显示一行,旧的显示文本会增加索引大小,却没有读取器显示它。 + +**只允许内联图标。** 不发额外请求的列表需要内联图标,但 256 KiB 原始字节编码为 base64 后约为 341 KiB,因此 100 个插件的索引可能达到约 35 MB。URL 图标以额外请求和向图片主机暴露用户 IP 地址为代价,换取较小的索引。 + +**把 DSH `peerDependencies` 复制进索引。** 它把多个包名映射到范围,而这些范围约束的都是同一个 DSH 版本,并且用 npm peer 解析的名称来命名这一约束。`engines.dsh` 只需表达一次同样的约束,并且安装时优先读取它。 + +**结构化的 `author`,例如 npm 的 `{ name, email, url }`。** 客户端只显示作者,而 email 成员会把邮箱地址扩散到每个索引中。 **用不透明排序值表示时间,包括 ISO 日期字符串。** 发布时间具有固定语义,客户端会对其格式化和排序,因此它是一个有类型的字段。排除时间后,排序值可以只用数值,无需为每个键规定值类型。 -**根级 `labels` 和 `sortKeys`,以及名为 `sort` 的条目字段。** 在两个层级都把市场定义的声明和值归入 `metadata`,并使用对应的成员名,可以将它们与客户端解释的字段区分开。 +**根级 `labels` 和 `sortKeys`,以及名为 `sort` 的插件字段。** 在两个层级都把市场定义的声明和值归入 `metadata`,并使用对应的成员名,可以将它们与客户端解释的字段区分开。 **以声明顺序作为显示顺序。** JavaScript 会重排类整数的对象键,因此要保留声明顺序,就需要限定 id 格式或改用数组声明。客户端改为按本地化标题对声明排序。 -**允许 `workspace:` peer 范围。** 安装时会将此类范围映射为当前运行的 DSH 版本,因此所有运行时都会显示为兼容;省略这些范围会明确表达同一结果。 +**允许 `workspace:` 范围。** 安装时会将此类范围映射为当前运行的 DSH 版本,因此所有运行时都会显示为兼容;省略这些范围会明确表达同一结果。 + +**默认版本使用先行版本。** 安装检查接受先行版本,但对已有稳定版本的插件默认提供候选版本,会在用户没有选择的情况下安装未经充分测试的构建。 **拒绝未知成员。** 这样每次增加可选成员都需要新的 `format` 值,并会破坏所有已部署的读取器。 ## 验收标准 -- 校验器接受上面的示例,并对根字段、条目字段和 `source` 形式中的每条规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。 -- 根据两个示例条目构建的安装参数可被 DSH 的安装 spec 解析器和 pnpm 接受。 +- 校验器接受上面的示例,并对根字段、插件字段、版本字段和 `source` 形式中的每条规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。 +- 根据每个示例版本构建的安装参数可被 DSH 的安装 spec 解析器和 pnpm 接受。 - 校验器在每一层都忽略未知成员。 -- 根据 `peerDependencies` 计算的兼容性与 DSH 对同一 manifest 的安装检查结果一致。 +- DSH 安装检查优先使用 `engines.dsh` 而不是 DSH `peerDependencies`,并且根据索引版本计算的兼容性与同一 manifest 的安装检查结果一致。 ## 风险 -- 索引没有签名。市场可能使用误导性的 `title`,例如声称自己是官方市场;客户端必须显示索引 URL 以及每个条目的 `source`。 -- Git 条目的 `name`、`version` 和 `peerDependencies` 是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 +- 索引没有签名。市场可能使用误导性的 `title`,例如声称自己是官方市场;客户端必须显示索引 URL 以及每个版本的 `source`。 +- Git 版本的 `name`、`version` 和 `engines.dsh` 是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 - URL 图标会向图片主机暴露用户的 IP 地址。 - 固定版本在索引重新生成之前一直保持陈旧。 -- 市场文本未经 DSH 审核即到达用户,并通过任何列出条目的客户端工具到达模型。 +- 市场文本未经 DSH 审核即到达用户,并通过任何列出插件的客户端工具到达模型。 From 6ac8f8766c740f0650ec2733f69101ff50f32873 Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Sat, 3 Oct 2026 10:28:24 +0800 Subject: [PATCH 022/155] docs(notes): explain relative icon references in the market index --- .../feature/2026-10-02-plugin-market-index-format.i18n.yaml | 4 ++-- .../proposed/feature/2026-10-02-plugin-market-index-format.md | 2 ++ .../feature/2026-10-02-plugin-market-index-format.zh.md | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index b8bf48fc31..ee47591d74 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -21,8 +21,8 @@ en: aa544c156b4592b4 zh: 69970e21ccb9eebd /agent-note-plugin-market-index-format/proposal/version-fields: - en: 478af9194d9ba643 - zh: 8236e1447ba34bb4 + en: 3b3cb703bae9b69f + zh: 37901897fe5f9e0e /agent-note-plugin-market-index-format/proposal/install-arguments: en: 8f11735ff597c974 zh: 70267600d4efcb06 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index e5743c500f..ce6c473b69 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -125,6 +125,8 @@ Category, label, and sort-key ids are non-empty strings. Readers look ids up as | `engines` | no | Object. | | `engines.dsh` | no | Non-empty SemVer range string that does not start with `workspace:`; the DSH versions this version runs on. Absent means any DSH version. | +A relative `icon` reference resolves against the index URL, as an HTML image reference resolves against its page. For an index at `https://market.example/dsh/index.json`, `"icon": "icons/foo.svg"` names `https://market.example/dsh/icons/foo.svg`. A generator can therefore publish the index and its icon files as one directory on any static host without knowing the final URL. Absolute icon URLs on other origins must use `https:`; the same-origin allowance lets an `http:` index on a loopback or intranet host serve its own icons. Readers resolve the reference when they read the index, so clients receive absolute URLs. + `source` takes one of two forms, and readers reject any other `type`: - `{ "type": "npm", "registry"?: string }`. `registry` is an `http:` or `https:` URL without credentials, query, or fragment. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index 0c1da14b22..71af7b52da 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -125,6 +125,8 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 | `engines` | 否 | 对象。 | | `engines.dsh` | 否 | 不以 `workspace:` 开头的非空 SemVer 范围字符串,表示该版本可运行的 DSH 版本。缺省表示任意 DSH 版本。 | +相对的 `icon` 引用相对于索引 URL 解析,与 HTML 图片引用相对于所在页面解析的方式相同。对于位于 `https://market.example/dsh/index.json` 的索引,`"icon": "icons/foo.svg"` 指向 `https://market.example/dsh/icons/foo.svg`。因此,生成器可以把索引和图标文件作为一个目录发布到任意静态主机,无需知道最终 URL。指向其他源的绝对图标 URL 必须使用 `https:`;同源规则允许位于 loopback 或内网主机上的 `http:` 索引提供自己的图标。读取器在读取索引时解析该引用,因此客户端收到的是绝对 URL。 + `source` 采用以下两种形式之一,读取器拒绝其他任何 `type`: - `{ "type": "npm", "registry"?: string }`。`registry` 是不含凭据、查询或片段的 `http:` 或 `https:` URL。 From a042d53289af72de85358148757979e2271a8518 Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Sat, 3 Oct 2026 10:44:19 +0800 Subject: [PATCH 023/155] docs(notes): follow the registry plan and tighten market index wording --- ...10-02-plugin-market-index-format.i18n.yaml | 32 +++++++++---------- .../2026-10-02-plugin-market-index-format.md | 23 ++++++------- ...026-10-02-plugin-market-index-format.zh.md | 23 ++++++------- 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index ee47591d74..d2cddab8a5 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -9,11 +9,11 @@ en: ce5e4a362f558af6 zh: 29d93e0655b99217 /agent-note-plugin-market-index-format/proposal: - en: 4639cf45ff00b873 - zh: 1b51054085e2d57e + en: 7b728d6cbf6f16d6 + zh: 73e79d35b0dbfbad /agent-note-plugin-market-index-format/proposal/example: - en: cf54551add808913 - zh: 55180dda6db75d53 + en: 1b1c960c966cf912 + zh: 97be87cb14893c26 /agent-note-plugin-market-index-format/proposal/root-fields: en: 4fac5a9b8261342d zh: f9168a8a4209feab @@ -21,26 +21,26 @@ en: aa544c156b4592b4 zh: 69970e21ccb9eebd /agent-note-plugin-market-index-format/proposal/version-fields: - en: 3b3cb703bae9b69f - zh: 37901897fe5f9e0e + en: d82d84e9f15f0a8c + zh: fa65770cd7607c15 /agent-note-plugin-market-index-format/proposal/install-arguments: - en: 8f11735ff597c974 - zh: 70267600d4efcb06 + en: c748cdc4d8ce349a + zh: 5740fa0d6106e637 /agent-note-plugin-market-index-format/proposal/dsh-compatibility: en: 323c997bccd7cf4a zh: fd588d37925d3732 /agent-note-plugin-market-index-format/proposal/generator-obligations: - en: ec28104907b9d1bc - zh: c0ee7ee11ec9682f + en: bd44312d55afce0c + zh: 8d341a2ae095dbca /agent-note-plugin-market-index-format/proposal/reader-rules: - en: af82b158f935f4c4 - zh: 3038977221db0883 + en: 40613286c82370b2 + zh: f6b2452c75e9fc71 /agent-note-plugin-market-index-format/alternatives-considered: - en: 5e239ebb99f7dda0 - zh: 7d05a3976c9b125f + en: ef519b0d5da71645 + zh: 428dbcd6502bbfb5 /agent-note-plugin-market-index-format/acceptance-criteria: en: f364af5c0343a23e zh: 8b8c2a3ec3f6a57f /agent-note-plugin-market-index-format/risks: - en: e806fcd791ce33ad - zh: cb8ab9029a531fdd + en: e9ef08d42066f51a + zh: 7b2ee5cda4c800ba diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index ce6c473b69..cdd1a85fbb 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -14,7 +14,7 @@ An index must therefore carry everything a list page displays: localized title a ## Proposal -Separate the **index** from the **index generator**. DSH defines and reads one JSON index format. How an index is produced, and from which source list, belongs to the generator. DSH's reader, its Discover page, and a reference generator are separate changes that consume this format. +Separate the **index** from the **index generator**. DSH defines and reads one JSON index format. How an index is produced, and from which source list, belongs to the generator. DSH's reader, its Discover page, and a reference generator are separate changes that consume this format. Indexes list [profile plugin bundles](../../implemented/architecture/2026-08-05-profile-plugin-bundles.md) and install them through [guided plugin installation](../../implemented/architecture/2026-09-15-guided-plugin-installation.md). ### Example @@ -37,11 +37,11 @@ Separate the **index** from the **index generator**. DSH defines and reads one J }, "plugins": [ { - "name": "@deepseek-ai/dsh-experimental-auto-review", + "name": "@example/dsh-auto-review", "title": { "en": "Auto Review", "zh": "自动审查" }, "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, "icon": "icons/auto-review.svg", - "author": "DeepSeek", + "author": "Example Labs", "metadata": { "category": "productivity", "labels": ["official"], @@ -83,7 +83,7 @@ Separate the **index** from the **index generator**. DSH defines and reads one J } ``` -`LocalizedText` below is the `LocalizedText` type of [`dsh-package-manifest`](../../../../packages/util/package-manifest/src/types.ts): either a string, or an object whose keys are lowercase language ids matching `^[a-z]{2,8}(-[a-z0-9]{1,8})*$`, whose members are strings, and which contains `en`. Every string contains at least one non-whitespace character. +`LocalizedText` below is the `LocalizedText` type of [`dsh-package-manifest`](../../../../packages/util/package-manifest/src/types.ts), a string or an object of strings that contains `en`, with two additional rules: object keys are lowercase language ids matching `^[a-z]{2,8}(-[a-z0-9]{1,8})*$`, and every string contains at least one non-whitespace character. ### Root fields @@ -129,14 +129,14 @@ A relative `icon` reference resolves against the index URL, as an HTML image ref `source` takes one of two forms, and readers reject any other `type`: -- `{ "type": "npm", "registry"?: string }`. `registry` is an `http:` or `https:` URL without credentials, query, or fragment. -- `{ "type": "git", "url": string, "commit": string, "path"?: string }`. `url` is a canonical `https:` URL (equal to its WHATWG URL serialization) with at least two non-empty path segments, without credentials, query, or fragment, and not ending in `.tgz` or `.tar.gz`. `commit` is a lowercase 40-hex-digit SHA. `path` is a `/`-separated relative directory whose segments contain only ASCII letters, digits, and `._@+-`, and are neither `.` nor `..`; absent means the repository root. +- `{ "type": "npm", "registry"?: string }`. `registry` is an `http:` or `https:` URL without credentials, query, or fragment; `http:` is admitted for intranet mirrors, as in DSH's [install registries](../../implemented/architecture/2026-09-18-plugin-install-registries.md). +- `{ "type": "git", "url": string, "commit": string, "path"?: string }`. `url` is a canonical `https:` URL (equal to its WHATWG URL serialization) with at least two non-empty path segments and no trailing slash, without credentials, query, or fragment, and not ending in `.tgz` or `.tar.gz`. `commit` is a lowercase 40-hex-digit SHA. `path` is a `/`-separated relative directory whose segments contain only ASCII letters, digits, and `._@+-`, and are neither `.` nor `..`; absent means the repository root. ### Install arguments A client installs one version with exactly these pnpm arguments: -- npm: the spec `@`, asking `registry` first when present and the client's configured registry otherwise. A client may fall back to its other configured registries; any of them installs the same exact version. +- npm: the spec `@`. Without `registry`, the client asks its configured registries as it does for any install. With `registry`, the client follows DSH's [registry plan](../../implemented/architecture/2026-09-18-plugin-install-registries.md): it asks `registry` first and falls back to its other configured registries only when `registry` is one of them; any other `registry` is asked alone, so a private registry never falls through to a public one that may publish a different package under the same name and version. - git: the spec `git+.git#`, without doubling a trailing `.git`, followed by `&path:/` when `path` is present. The `git+` prefix makes pnpm treat URLs with more than two path segments, such as GitLab subgroups, as Git repositories. ### DSH compatibility @@ -151,7 +151,7 @@ A reader cannot verify these rules; a generator that violates them publishes a m - `name` and each `version` equal the package manifest of the installed source. - `publishTimestamp` is the registry publish time of `version` for npm sources and the committer time of `commit` for Git sources. -- `engines.dsh` copies the manifest's `engines.dsh`. Without one, it is the conjunction, as defined in DSH compatibility, of the manifest's DSH peer ranges after publication rewriting, omitting `workspace:` ranges, because installation treats them as the running DSH version; with no remaining range, `engines.dsh` is absent. +- `engines.dsh` copies the manifest's `engines.dsh`. Without one, it is the conjunction, as defined in DSH compatibility, of the manifest's DSH peer ranges after publication rewriting, omitting `workspace:*`, `workspace:^`, and `workspace:~`, because installation treats them as the running DSH version; with no remaining range, `engines.dsh` is absent. Installation finds any other `workspace:` range incompatible with every DSH version, so generators do not list such a version. - Each listed version declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. - `title`, `description`, `icon`, and `author` come from the highest listed version's locale `meta` fields, manifest fields, and icon, using the rules for installed plugin display metadata. @@ -159,7 +159,7 @@ A reader cannot verify these rules; a generator that violates them publishes a m A reader rejects the whole index when the document violates any rule in Root fields, Plugin fields, Version fields, or the `source` forms, including an undeclared category, label, or sort-key reference, a duplicate `name` or `version`, or a `format` other than `1`. Each such defect is a generator bug, and dropping entries silently would hide it. Readers may bound the document size. -A reader ignores members that this note does not define, at every level except `source.type`. Format 1 can then gain optional members without breaking existing readers; a change that existing readers would misinterpret uses a new `format` value. +A reader ignores members that this note does not define, at every level; an unknown `source.type` value is rejected. Format 1 can then gain optional members without breaking existing readers; a change that existing readers would misinterpret uses a new `format` value. Categories, labels, and sort keys are opaque: a reader filters and sorts by them, displays their `title`, and never interprets an id. Readers display declarations in the order of their localized `title`. When sorting plugins, a plugin without a value for the selected sort key follows all plugins with a value in either direction, and equal values keep the index order. Sorting by publish time uses a plugin's greatest `publishTimestamp`. @@ -187,11 +187,11 @@ A reader evaluates each version's compatibility from `engines.dsh` with the rule **Opaque sort values for time, including ISO date strings.** Publish time has fixed semantics that clients format and sort, so it is a typed field. Without time, sort values can be numbers only, which needs no per-key value-type rule. -**Root-level `labels` and `sortKeys`, and a plugin field named `sort`.** Grouping market-defined declarations and values under `metadata` at both levels, with matching member names, separates them from fields that clients interpret. +**Root-level `labels` and `sortKeys`, and a plugin field named `sort`.** Grouping market-defined declarations and values under `metadata` at both levels, with matching member names except the single-valued `category`, separates them from fields that clients interpret. **Declaration order as display order.** JavaScript reorders integer-like object keys, so declaration order would need either an id pattern or array declarations. Clients sort declarations by their localized title instead. -**Allowing `workspace:` ranges.** Installation maps them to the running DSH version, so every runtime would appear compatible; omitting them states the same result explicitly. +**Allowing `workspace:` ranges.** Installation maps `workspace:*`, `workspace:^`, and `workspace:~` to the running DSH version, so every runtime would appear compatible; omitting them states the same result explicitly. **Prereleases as default versions.** Installation accepts prereleases, but offering a release candidate by default to users of a plugin with stable releases would install untested builds without a choice. @@ -208,6 +208,7 @@ A reader evaluates each version's compatibility from `engines.dsh` with the rule - An index is unsigned. A market can use a misleading `title`, such as one claiming to be official; clients must show the index URL and each version's `source`. - A Git version's `name`, `version`, and `engines.dsh` are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. +- An npm version's `source.registry` is equally a claim: it directs the install of any `name`, including an `@deepseek-ai/dsh-` name, to a registry the market chooses, and that registry decides what is installed. - URL icons disclose the user's IP address to image hosts. - Pinned versions stay stale until the index is regenerated. - Market text reaches users, and models through any client tool that lists plugins, without review by DSH. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index 71af7b52da..3cebaa7380 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -14,7 +14,7 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 ## 提案 -将**索引**与**索引生成器**分开。DSH 定义并读取一种 JSON 索引格式。索引如何生成、基于哪份源列表生成,由生成器负责。DSH 的读取器、Discover 页面和参考生成器是使用此格式的独立变更。 +将**索引**与**索引生成器**分开。DSH 定义并读取一种 JSON 索引格式。索引如何生成、基于哪份源列表生成,由生成器负责。DSH 的读取器、Discover 页面和参考生成器是使用此格式的独立变更。索引列出[profile 插件组合包](../../implemented/architecture/2026-08-05-profile-plugin-bundles.zh.md),并通过[引导式插件安装](../../implemented/architecture/2026-09-15-guided-plugin-installation.zh.md)安装它们。 ### 示例 @@ -37,11 +37,11 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 }, "plugins": [ { - "name": "@deepseek-ai/dsh-experimental-auto-review", + "name": "@example/dsh-auto-review", "title": { "en": "Auto Review", "zh": "自动审查" }, "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, "icon": "icons/auto-review.svg", - "author": "DeepSeek", + "author": "Example Labs", "metadata": { "category": "productivity", "labels": ["official"], @@ -83,7 +83,7 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 } ``` -下文中的 `LocalizedText` 即 [`dsh-package-manifest`](../../../../packages/util/package-manifest/src/types.ts) 中的 `LocalizedText` 类型:字符串,或者是满足以下条件的对象:键为匹配 `^[a-z]{2,8}(-[a-z0-9]{1,8})*$` 的小写语言 id,成员均为字符串,并且包含 `en`。每个字符串至少包含一个非空白字符。 +下文中的 `LocalizedText` 即 [`dsh-package-manifest`](../../../../packages/util/package-manifest/src/types.ts) 中的 `LocalizedText` 类型,即字符串或包含 `en` 的字符串对象,并附加两条规则:对象的键是匹配 `^[a-z]{2,8}(-[a-z0-9]{1,8})*$` 的小写语言 id,每个字符串至少包含一个非空白字符。 ### 根字段 @@ -129,14 +129,14 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 `source` 采用以下两种形式之一,读取器拒绝其他任何 `type`: -- `{ "type": "npm", "registry"?: string }`。`registry` 是不含凭据、查询或片段的 `http:` 或 `https:` URL。 -- `{ "type": "git", "url": string, "commit": string, "path"?: string }`。`url` 是规范的 `https:` URL(等于其 WHATWG URL 序列化结果),至少包含两个非空路径段,不含凭据、查询或片段,且不以 `.tgz` 或 `.tar.gz` 结尾。`commit` 是 40 位小写十六进制 SHA。`path` 是以 `/` 分隔的相对目录,各段只包含 ASCII 字母、数字和 `._@+-`,且不是 `.` 或 `..`;缺省表示仓库根目录。 +- `{ "type": "npm", "registry"?: string }`。`registry` 是不含凭据、查询或片段的 `http:` 或 `https:` URL;允许 `http:` 是为了支持内网镜像,与 DSH 的[安装 registry](../../implemented/architecture/2026-09-18-plugin-install-registries.zh.md) 一致。 +- `{ "type": "git", "url": string, "commit": string, "path"?: string }`。`url` 是规范的 `https:` URL(等于其 WHATWG URL 序列化结果),至少包含两个非空路径段且不以斜杠结尾,不含凭据、查询或片段,且不以 `.tgz` 或 `.tar.gz` 结尾。`commit` 是 40 位小写十六进制 SHA。`path` 是以 `/` 分隔的相对目录,各段只包含 ASCII 字母、数字和 `._@+-`,且不是 `.` 或 `..`;缺省表示仓库根目录。 ### 安装参数 客户端安装某个版本时恰好使用以下 pnpm 参数: -- npm:spec 为 `@`;存在 `registry` 时先询问该 registry,否则先询问客户端所配置的 registry。客户端可以回退到它配置的其他 registry;其中任何一个安装的都是同一个精确版本。 +- npm:spec 为 `@`。没有 `registry` 时,客户端像任何安装一样询问它配置的 registry。存在 `registry` 时,客户端遵循 DSH 的 [registry 计划](../../implemented/architecture/2026-09-18-plugin-install-registries.zh.md):先询问 `registry`,仅当它属于客户端配置的 registry 之一时才回退到其他已配置 registry;其他 `registry` 单独询问,因此私有 registry 不会回退到可能以相同名称和版本发布不同包的公共 registry。 - git:spec 为 `git+.git#`,`url` 已以 `.git` 结尾时不重复添加;存在 `path` 时在其后追加 `&path:/`。`git+` 前缀使 pnpm 将路径段多于两个的 URL(例如 GitLab 子组)视为 Git 仓库。 ### DSH 兼容性 @@ -151,7 +151,7 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, - `name` 和每个 `version` 与所安装来源中的包 manifest 一致。 - 对于 npm 来源,`publishTimestamp` 是 `version` 在 registry 中的发布时间;对于 Git 来源,它是 `commit` 的提交者时间。 -- `engines.dsh` 复制 manifest 中的 `engines.dsh`。manifest 没有该字段时,它是 manifest 中经发布改写后的 DSH peer 范围按 DSH 兼容性一节定义的合取,并省略 `workspace:` 范围,因为安装时会将此类范围视为当前运行的 DSH 版本;没有剩余范围时省略 `engines.dsh`。 +- `engines.dsh` 复制 manifest 中的 `engines.dsh`。manifest 没有该字段时,它是 manifest 中经发布改写后的 DSH peer 范围按 DSH 兼容性一节定义的合取,并省略 `workspace:*`、`workspace:^` 和 `workspace:~`,因为安装时会将它们视为当前运行的 DSH 版本;没有剩余范围时省略 `engines.dsh`。安装检查认为其他任何 `workspace:` 范围与所有 DSH 版本都不兼容,因此生成器不列出此类版本。 - 列出的每个版本都声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 - `title`、`description`、`icon` 和 `author` 来自所列最高版本的语言文件 `meta` 字段、manifest 字段和图标,并采用已安装插件显示元数据的规则。 @@ -159,7 +159,7 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, 文档违反根字段、插件字段、版本字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,`name` 或 `version` 重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 -读取器在除 `source.type` 之外的每一层都忽略本 Agent Note 未定义的成员。这样格式 1 可以增加可选成员而不破坏现有读取器;现有读取器会误解的变更使用新的 `format` 值。 +读取器在每一层都忽略本 Agent Note 未定义的成员;未知的 `source.type` 值会被拒绝。这样格式 1 可以增加可选成员而不破坏现有读取器;现有读取器会误解的变更使用新的 `format` 值。 分类、标签和排序键对读取器不透明:读取器按它们筛选和排序,显示其 `title`,从不解释 id 的含义。读取器按本地化 `title` 对声明排序后显示。对插件排序时,无论排序方向如何,没有所选排序键值的插件都排在所有有值的插件之后,值相同的插件保持索引顺序。按发布时间排序时使用插件最大的 `publishTimestamp`。 @@ -187,11 +187,11 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, **用不透明排序值表示时间,包括 ISO 日期字符串。** 发布时间具有固定语义,客户端会对其格式化和排序,因此它是一个有类型的字段。排除时间后,排序值可以只用数值,无需为每个键规定值类型。 -**根级 `labels` 和 `sortKeys`,以及名为 `sort` 的插件字段。** 在两个层级都把市场定义的声明和值归入 `metadata`,并使用对应的成员名,可以将它们与客户端解释的字段区分开。 +**根级 `labels` 和 `sortKeys`,以及名为 `sort` 的插件字段。** 在两个层级都把市场定义的声明和值归入 `metadata`,并使用对应的成员名(单值的 `category` 除外),可以将它们与客户端解释的字段区分开。 **以声明顺序作为显示顺序。** JavaScript 会重排类整数的对象键,因此要保留声明顺序,就需要限定 id 格式或改用数组声明。客户端改为按本地化标题对声明排序。 -**允许 `workspace:` 范围。** 安装时会将此类范围映射为当前运行的 DSH 版本,因此所有运行时都会显示为兼容;省略这些范围会明确表达同一结果。 +**允许 `workspace:` 范围。** 安装时会将 `workspace:*`、`workspace:^` 和 `workspace:~` 映射为当前运行的 DSH 版本,因此所有运行时都会显示为兼容;省略这些范围会明确表达同一结果。 **默认版本使用先行版本。** 安装检查接受先行版本,但对已有稳定版本的插件默认提供候选版本,会在用户没有选择的情况下安装未经充分测试的构建。 @@ -208,6 +208,7 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, - 索引没有签名。市场可能使用误导性的 `title`,例如声称自己是官方市场;客户端必须显示索引 URL 以及每个版本的 `source`。 - Git 版本的 `name`、`version` 和 `engines.dsh` 是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 +- npm 版本的 `source.registry` 同样是一种声明:它把任意 `name`(包括 `@deepseek-ai/dsh-` 名称)的安装引向市场选择的 registry,由该 registry 决定实际安装的内容。 - URL 图标会向图片主机暴露用户的 IP 地址。 - 固定版本在索引重新生成之前一直保持陈旧。 - 市场文本未经 DSH 审核即到达用户,并通过任何列出插件的客户端工具到达模型。 From 5535f0bcf76bd8e9cbd34853ef7fd6aff4f51b7f Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Sat, 3 Oct 2026 12:01:21 +0800 Subject: [PATCH 024/155] docs(notes): add an optional homepage to market index plugins --- .../2026-10-02-plugin-market-index-format.i18n.yaml | 12 ++++++------ .../feature/2026-10-02-plugin-market-index-format.md | 6 ++++-- .../2026-10-02-plugin-market-index-format.zh.md | 6 ++++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index d2cddab8a5..55e15276b5 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -18,8 +18,8 @@ en: 4fac5a9b8261342d zh: f9168a8a4209feab /agent-note-plugin-market-index-format/proposal/plugin-fields: - en: aa544c156b4592b4 - zh: 69970e21ccb9eebd + en: f728927a89754892 + zh: 3bc3b18cac60cdc1 /agent-note-plugin-market-index-format/proposal/version-fields: en: d82d84e9f15f0a8c zh: fa65770cd7607c15 @@ -30,14 +30,14 @@ en: 323c997bccd7cf4a zh: fd588d37925d3732 /agent-note-plugin-market-index-format/proposal/generator-obligations: - en: bd44312d55afce0c - zh: 8d341a2ae095dbca + en: 2355bd40a77e615c + zh: a83fa20f47b49e44 /agent-note-plugin-market-index-format/proposal/reader-rules: en: 40613286c82370b2 zh: f6b2452c75e9fc71 /agent-note-plugin-market-index-format/alternatives-considered: - en: ef519b0d5da71645 - zh: 428dbcd6502bbfb5 + en: d102d17d4203c592 + zh: b98f970545e3e07f /agent-note-plugin-market-index-format/acceptance-criteria: en: f364af5c0343a23e zh: 8b8c2a3ec3f6a57f diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index cdd1a85fbb..2d6b0c10a4 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -42,6 +42,7 @@ Separate the **index** from the **index generator**. DSH defines and reads one J "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, "icon": "icons/auto-review.svg", "author": "Example Labs", + "homepage": "https://example.com/dsh-auto-review", "metadata": { "category": "productivity", "labels": ["official"], @@ -109,6 +110,7 @@ Category, label, and sort-key ids are non-empty strings. Readers look ids up as | `description` | no | `LocalizedText`. | | `icon` | no | Either `data:;base64,`, where `` is `image/svg+xml`, `image/png`, `image/jpeg`, or `image/webp`, `` is canonically padded base64, and the decoded payload is at most 256 KiB; or a URL reference whose resolution against the index URL is an `https:` URL or has the index URL's origin. | | `author` | no | String with at least one non-whitespace character. | +| `homepage` | no | Absolute `https:` or `http:` URL of a page about the plugin. | | `metadata` | no | Object holding the three values below. | | `metadata.category` | no | One declared category id. | | `metadata.labels` | no | Array of distinct declared label ids. | @@ -153,7 +155,7 @@ A reader cannot verify these rules; a generator that violates them publishes a m - `publishTimestamp` is the registry publish time of `version` for npm sources and the committer time of `commit` for Git sources. - `engines.dsh` copies the manifest's `engines.dsh`. Without one, it is the conjunction, as defined in DSH compatibility, of the manifest's DSH peer ranges after publication rewriting, omitting `workspace:*`, `workspace:^`, and `workspace:~`, because installation treats them as the running DSH version; with no remaining range, `engines.dsh` is absent. Installation finds any other `workspace:` range incompatible with every DSH version, so generators do not list such a version. - Each listed version declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. -- `title`, `description`, `icon`, and `author` come from the highest listed version's locale `meta` fields, manifest fields, and icon, using the rules for installed plugin display metadata. +- `title`, `description`, `icon`, and `author` come from the highest listed version's locale `meta` fields, manifest fields, and icon, using the rules for installed plugin display metadata. `homepage` copies that version's manifest `homepage` and is absent without one. ### Reader rules @@ -177,7 +179,7 @@ A reader evaluates each version's compatibility from `engines.dsh` with the rule **One `source` per plugin, with only the pin per version.** A plugin that moves to another repository, directory, or registry between releases could not list its older versions. -**Display fields per version.** A list shows one row per plugin, so older display text would cost index size without a reader that shows it. +**Display fields per version.** A list shows one row per plugin, so older display text, icons, authors, and homepages would cost index size without a reader that shows them. **Inline icons only.** A list without extra requests needs inline icons, but 256 KiB of raw bytes is about 341 KiB as base64, so a 100-plugin index could reach about 35 MB. URL icons trade extra requests, and disclosure of the user's IP address to the image host, for a small index. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index 3cebaa7380..abdeaf78c4 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -42,6 +42,7 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 "description": { "en": "Per-tool LLM authorization review", "zh": "逐工具 LLM 授权审查" }, "icon": "icons/auto-review.svg", "author": "Example Labs", + "homepage": "https://example.com/dsh-auto-review", "metadata": { "category": "productivity", "labels": ["official"], @@ -109,6 +110,7 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 | `description` | 否 | `LocalizedText`。 | | `icon` | 否 | 以下两种形式之一:`data:;base64,`,其中 `` 为 `image/svg+xml`、`image/png`、`image/jpeg` 或 `image/webp`,`` 是按规范填充的 base64,解码后的载荷不超过 256 KiB;或者 URL 引用,它相对于索引 URL 解析的结果是 `https:` URL,或与索引 URL 同源。 | | `author` | 否 | 至少包含一个非空白字符的字符串。 | +| `homepage` | 否 | 介绍该插件的页面的绝对 `https:` 或 `http:` URL。 | | `metadata` | 否 | 包含下列三个值的对象。 | | `metadata.category` | 否 | 一个已声明的分类 id。 | | `metadata.labels` | 否 | 由互不相同的已声明标签 id 组成的数组。 | @@ -153,7 +155,7 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, - 对于 npm 来源,`publishTimestamp` 是 `version` 在 registry 中的发布时间;对于 Git 来源,它是 `commit` 的提交者时间。 - `engines.dsh` 复制 manifest 中的 `engines.dsh`。manifest 没有该字段时,它是 manifest 中经发布改写后的 DSH peer 范围按 DSH 兼容性一节定义的合取,并省略 `workspace:*`、`workspace:^` 和 `workspace:~`,因为安装时会将它们视为当前运行的 DSH 版本;没有剩余范围时省略 `engines.dsh`。安装检查认为其他任何 `workspace:` 范围与所有 DSH 版本都不兼容,因此生成器不列出此类版本。 - 列出的每个版本都声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 -- `title`、`description`、`icon` 和 `author` 来自所列最高版本的语言文件 `meta` 字段、manifest 字段和图标,并采用已安装插件显示元数据的规则。 +- `title`、`description`、`icon` 和 `author` 来自所列最高版本的语言文件 `meta` 字段、manifest 字段和图标,并采用已安装插件显示元数据的规则。`homepage` 复制该版本 manifest 的 `homepage`,manifest 没有该字段时省略。 ### 读取器规则 @@ -177,7 +179,7 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, **每个插件一个 `source`,每个版本只记录固定点。** 在两次发布之间换了仓库、目录或 registry 的插件将无法列出旧版本。 -**每个版本各有显示字段。** 列表每个插件只显示一行,旧的显示文本会增加索引大小,却没有读取器显示它。 +**每个版本各有显示字段。** 列表每个插件只显示一行,旧的显示文本、图标、作者和主页会增加索引大小,却没有读取器显示它们。 **只允许内联图标。** 不发额外请求的列表需要内联图标,但 256 KiB 原始字节编码为 base64 后约为 341 KiB,因此 100 个插件的索引可能达到约 35 MB。URL 图标以额外请求和向图片主机暴露用户 IP 地址为代价,换取较小的索引。 From 288a2bd6dcb13e8310eb31cbe65db9ae149bf436 Mon Sep 17 00:00:00 2001 From: _Kerman Date: Sun, 4 Oct 2026 16:09:45 +0800 Subject: [PATCH 025/155] fix(cordis): adopt effect disposers from their owning fiber --- docs/cordis-api/fiber.i18n.yaml | 68 ++++++++++++------------- docs/cordis-api/fiber.md | 34 ++++++------- docs/cordis-api/fiber.zh.md | 34 ++++++------- packages/core/scope/tests/scope.spec.ts | 34 ++++++++++++- vendor/README.md | 2 +- vendor/cordis/src/fiber.ts | 6 ++- 6 files changed, 107 insertions(+), 71 deletions(-) diff --git a/docs/cordis-api/fiber.i18n.yaml b/docs/cordis-api/fiber.i18n.yaml index acc84e2f3a..4936b0e926 100644 --- a/docs/cordis-api/fiber.i18n.yaml +++ b/docs/cordis-api/fiber.i18n.yaml @@ -9,56 +9,56 @@ en: b5b3510f4b6dd13a zh: a0c70471b6d779b5 /fiber/ctx-effect-execute-label: - en: ef3418fd5ffbe86d - zh: c98935435da8bc7e + en: 49e7a90726351489 + zh: 4db6bc88e42f016e /fiber/ctx-fiber: en: a10e38bf26b4ecfe zh: 7c91817984c95c99 /fiber/the-fiber-class: - en: 0e0fcb134ed44957 - zh: 326f4232aa0e65d1 + en: 0236f94c618945af + zh: 49653ee34995ff85 /fiber/the-fiber-class/fiber-uid: - en: 2f0eb3658bb8497e - zh: 65d3c17ca8bd4f95 + en: 79c8967b6a2cdd2d + zh: 0f8742c72403678f /fiber/the-fiber-class/fiber-ctx: - en: 1b527d85759324f9 - zh: 54aa40db2705b95c + en: 336ae46a13dcd6d7 + zh: 8de906a115e8d89b /fiber/the-fiber-class/fiber-config: - en: ee804c03c39e7806 - zh: 4353ba7817ec61ec + en: b6602e675fbc5a6c + zh: b57d551306265ead /fiber/the-fiber-class/fiber-state: - en: 999ad29dfc29661b - zh: 20245d11c338e3f1 + en: 3cf3270ab93ac5a9 + zh: cbe060dc345d0727 /fiber/the-fiber-class/fiber-dispose: - en: 29e304d183eb9104 - zh: 9ac5023f518e06c4 + en: aae5e01bce1c0d26 + zh: 8efb2b510eb97ad6 /fiber/the-fiber-class/fiber-store: - en: c4185e5d051136a2 - zh: 5714d9e4f5461ca3 + en: dd95f75be5d5801c + zh: c684954d453f69c0 /fiber/the-fiber-class/fiber-inertia: - en: 2a3b1d3bc37bf986 - zh: 83bd257ee685d38b + en: e14d839e4ebe6093 + zh: df5ba69c211360b3 /fiber/the-fiber-class/fiber-name: - en: e5c2ecca13167a32 - zh: 284a461f0f1cd35b + en: e4f962090c7ec2d8 + zh: 09d98a9d8cc42d24 /fiber/the-fiber-class/fiber-assertactive: - en: cceb503899634d09 - zh: a8381af1a23436f3 + en: 41f16c6770cb4a42 + zh: 78e5a409fcb8b51d /fiber/the-fiber-class/fiber-effect-execute-label: - en: 55dcfacf295bbcf2 - zh: 6e3ec27bb8da5a3d + en: b5dcba51da82bb48 + zh: 102779d0a7033a83 /fiber/the-fiber-class/fiber-geteffects: - en: 4d739a9c186fd9c2 - zh: f80fd3b87e79b004 + en: 2681d305e49df146 + zh: c376155efa901cee /fiber/the-fiber-class/fiber-await: - en: 1d6258cbea61cd18 - zh: 2f10dda8918dadc5 + en: 8b60c045fea02941 + zh: b9f3e1fcaffa2208 /fiber/the-fiber-class/fiber-restart: - en: 62d68dedb20b4fa9 - zh: 5a735ae0ff1266f4 + en: 5bd67e068f3a4a66 + zh: 93c5abb9bc677abd /fiber/the-fiber-class/fiber-update-config-nosave: - en: b57ce0f6260c2cb8 - zh: 3bfb6c5bc252a2c2 + en: 2d77e40537926a7b + zh: 334b4e91d1ef9f39 /fiber/effect: en: 007d5b214e8a8610 zh: d74c26fbb1b8aeb6 @@ -69,8 +69,8 @@ en: 849aa91b8e67809f zh: 4b31d7e2acd2a008 /fiber/cordiserror: - en: d276771958d3c05f - zh: 0141656ade938d55 + en: 36c9d46499342212 + zh: 82e4012ae4efab4b /fiber/validationerror: en: 178782124cc15210 zh: 2b226f43f48af555 diff --git a/docs/cordis-api/fiber.md b/docs/cordis-api/fiber.md index 3044301eff..cc31600bb9 100644 --- a/docs/cordis-api/fiber.md +++ b/docs/cordis-api/fiber.md @@ -34,7 +34,7 @@ Register a cleanup-aware effect on this fiber. **Returns** a disposer that tears the effect down and settles once done. -[Source](../../vendor/cordis/src/fiber.ts#L415) +[Source](../../vendor/cordis/src/fiber.ts#L417) ### ctx.fiber @@ -53,7 +53,7 @@ Runtime instance of one plugin application. A fiber tracks dependency state, validated config, lifecycle effects, and cleanup for the plugin context returned by `ctx.plugin()`. -[Source](../../vendor/cordis/src/fiber.ts#L184) +[Source](../../vendor/cordis/src/fiber.ts#L186) ### fiber.uid @@ -64,7 +64,7 @@ public uid: number | null Unique id within the registry; 0 for the root fiber, `null` once disposed. -[Source](../../vendor/cordis/src/fiber.ts#L186) +[Source](../../vendor/cordis/src/fiber.ts#L188) ### fiber.ctx @@ -75,7 +75,7 @@ public readonly ctx: Context The context this fiber's plugin runs in (extends the parent context). -[Source](../../vendor/cordis/src/fiber.ts#L188) +[Source](../../vendor/cordis/src/fiber.ts#L190) ### fiber.config @@ -86,7 +86,7 @@ public config: any The validated plugin config (updated by `update()`). -[Source](../../vendor/cordis/src/fiber.ts#L190) +[Source](../../vendor/cordis/src/fiber.ts#L192) ### fiber.state @@ -97,7 +97,7 @@ public state Current lifecycle state; transitions emit `internal/status`. -[Source](../../vendor/cordis/src/fiber.ts#L194) +[Source](../../vendor/cordis/src/fiber.ts#L196) ### fiber.dispose @@ -108,7 +108,7 @@ public readonly dispose: () => Promise Dispose this fiber: unload the plugin, then settle once cleanup finished. -[Source](../../vendor/cordis/src/fiber.ts#L196) +[Source](../../vendor/cordis/src/fiber.ts#L198) ### fiber.store @@ -119,7 +119,7 @@ public store: Dict | undefined Snapshot of required service implementations while loaded; `undefined` otherwise. -[Source](../../vendor/cordis/src/fiber.ts#L198) +[Source](../../vendor/cordis/src/fiber.ts#L200) ### fiber.inertia @@ -130,7 +130,7 @@ public inertia: Promise | undefined The in-flight load/unload transition, if one is currently running. -[Source](../../vendor/cordis/src/fiber.ts#L200) +[Source](../../vendor/cordis/src/fiber.ts#L202) ### fiber.name @@ -141,7 +141,7 @@ get name() The plugin's display name, inherited from the nearest named ancestor, else `'root'`. -[Source](../../vendor/cordis/src/fiber.ts#L336) +[Source](../../vendor/cordis/src/fiber.ts#L338) ### fiber.assertActive() @@ -159,7 +159,7 @@ Throw if the fiber has already been disposed. **Returns** nothing when the fiber is still active. -[Source](../../vendor/cordis/src/fiber.ts#L351) +[Source](../../vendor/cordis/src/fiber.ts#L353) ### fiber.effect(execute, label?) @@ -190,7 +190,7 @@ Register a cleanup-aware effect on this fiber. **Returns** a disposer that tears the effect down and settles once done. -[Source](../../vendor/cordis/src/fiber.ts#L415) +[Source](../../vendor/cordis/src/fiber.ts#L417) ### fiber.getEffects() @@ -207,7 +207,7 @@ Return metadata for currently registered effects. **Returns** one `EffectMeta` tree per labeled live effect. -[Source](../../vendor/cordis/src/fiber.ts#L568) +[Source](../../vendor/cordis/src/fiber.ts#L572) ### fiber.await() @@ -225,7 +225,7 @@ Wait for current lifecycle work and rethrow startup errors. **Returns** this fiber, once it has settled into a stable state. -[Source](../../vendor/cordis/src/fiber.ts#L704) +[Source](../../vendor/cordis/src/fiber.ts#L708) ### fiber.restart() @@ -243,7 +243,7 @@ Dispose and immediately reload this plugin with its current config. **Returns** a promise resolving once the reload settled. -[Source](../../vendor/cordis/src/fiber.ts#L718) +[Source](../../vendor/cordis/src/fiber.ts#L722) ### fiber.update(config, noSave?) @@ -271,7 +271,7 @@ Runs the `internal/update` waterfall first, so update hooks (and HMR) can veto o **Returns** nothing; the restart runs behind the `internal/update` waterfall. -[Source](../../vendor/cordis/src/fiber.ts#L736) +[Source](../../vendor/cordis/src/fiber.ts#L740) ## Effect @@ -352,7 +352,7 @@ namespace CordisError { } ``` -[Source](../../vendor/cordis/src/fiber.ts#L157) +[Source](../../vendor/cordis/src/fiber.ts#L159) ## ValidationError diff --git a/docs/cordis-api/fiber.zh.md b/docs/cordis-api/fiber.zh.md index bee2f523f1..1d5dc3cee5 100644 --- a/docs/cordis-api/fiber.zh.md +++ b/docs/cordis-api/fiber.zh.md @@ -36,7 +36,7 @@ effect(execute: () => Effect, label?: string): AsyncDisposable> **返回**一个用于撤销该作用的清理函数,并在清理完成后结算。 -[源码](../../vendor/cordis/src/fiber.ts#L415) +[源码](../../vendor/cordis/src/fiber.ts#L417) ### ctx.fiber @@ -55,7 +55,7 @@ fiber: Fiber fiber 会跟踪 `ctx.plugin()` 返回的插件上下文所对应的依赖状态、经过校验的配置、生命周期作用和清理操作。 -[源码](../../vendor/cordis/src/fiber.ts#L184) +[源码](../../vendor/cordis/src/fiber.ts#L186) ### fiber.uid @@ -66,7 +66,7 @@ public uid: number | null 在注册表中的唯一 id;根 fiber 的 id 为 0,dispose 后为 `null`。 -[源码](../../vendor/cordis/src/fiber.ts#L186) +[源码](../../vendor/cordis/src/fiber.ts#L188) ### fiber.ctx @@ -77,7 +77,7 @@ public readonly ctx: Context 此 fiber 的插件运行所在的上下文(扩展自父上下文)。 -[源码](../../vendor/cordis/src/fiber.ts#L188) +[源码](../../vendor/cordis/src/fiber.ts#L190) ### fiber.config @@ -88,7 +88,7 @@ public config: any 经过校验的插件配置(由 `update()` 更新)。 -[源码](../../vendor/cordis/src/fiber.ts#L190) +[源码](../../vendor/cordis/src/fiber.ts#L192) ### fiber.state @@ -99,7 +99,7 @@ public state 当前生命周期状态;状态转换会发出 `internal/status`。 -[源码](../../vendor/cordis/src/fiber.ts#L194) +[源码](../../vendor/cordis/src/fiber.ts#L196) ### fiber.dispose @@ -110,7 +110,7 @@ public readonly dispose: () => Promise dispose 此 fiber:卸载插件,并在清理完成后结算。 -[源码](../../vendor/cordis/src/fiber.ts#L196) +[源码](../../vendor/cordis/src/fiber.ts#L198) ### fiber.store @@ -121,7 +121,7 @@ public store: Dict | undefined 加载期间所需服务实现的快照;其他情况下为 `undefined`。 -[源码](../../vendor/cordis/src/fiber.ts#L198) +[源码](../../vendor/cordis/src/fiber.ts#L200) ### fiber.inertia @@ -132,7 +132,7 @@ public inertia: Promise | undefined 当前正在进行的加载或卸载转换;如果没有此类转换,则为 undefined。 -[源码](../../vendor/cordis/src/fiber.ts#L200) +[源码](../../vendor/cordis/src/fiber.ts#L202) ### fiber.name @@ -143,7 +143,7 @@ get name() 插件的显示名称,继承自最近的具名祖先;如果不存在,则为 `'root'`。 -[源码](../../vendor/cordis/src/fiber.ts#L336) +[源码](../../vendor/cordis/src/fiber.ts#L338) ### fiber.assertActive() @@ -161,7 +161,7 @@ assertActive() **返回**:fiber 仍处于活动状态时不返回任何内容。 -[源码](../../vendor/cordis/src/fiber.ts#L351) +[源码](../../vendor/cordis/src/fiber.ts#L353) ### fiber.effect(execute, label?) @@ -192,7 +192,7 @@ effect(execute: () => Effect, label?: string): AsyncDisposable> **返回**一个用于撤销该作用的清理函数,并在清理完成后结算。 -[源码](../../vendor/cordis/src/fiber.ts#L415) +[源码](../../vendor/cordis/src/fiber.ts#L417) ### fiber.getEffects() @@ -209,7 +209,7 @@ getEffects() **返回**:每个带标签的活动作用对应一棵 `EffectMeta` 树。 -[源码](../../vendor/cordis/src/fiber.ts#L568) +[源码](../../vendor/cordis/src/fiber.ts#L572) ### fiber.await() @@ -227,7 +227,7 @@ async await() **返回**:进入稳定状态后的此 fiber。 -[源码](../../vendor/cordis/src/fiber.ts#L704) +[源码](../../vendor/cordis/src/fiber.ts#L708) ### fiber.restart() @@ -245,7 +245,7 @@ dispose 此插件,并立即使用其当前配置重新加载。 **返回**一个在重新加载完成后兑现的 promise。 -[源码](../../vendor/cordis/src/fiber.ts#L718) +[源码](../../vendor/cordis/src/fiber.ts#L722) ### fiber.update(config, noSave?) @@ -273,7 +273,7 @@ update(config: any, noSave = false) **返回**无返回值;重启由 `internal/update` waterfall 执行。 -[源码](../../vendor/cordis/src/fiber.ts#L736) +[源码](../../vendor/cordis/src/fiber.ts#L740) ## Effect @@ -354,7 +354,7 @@ namespace CordisError { } ``` -[源码](../../vendor/cordis/src/fiber.ts#L157) +[源码](../../vendor/cordis/src/fiber.ts#L159) ## ValidationError diff --git a/packages/core/scope/tests/scope.spec.ts b/packages/core/scope/tests/scope.spec.ts index fa9c1dc705..13942fdf9d 100644 --- a/packages/core/scope/tests/scope.spec.ts +++ b/packages/core/scope/tests/scope.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, expectTypeOf, it } from 'vitest' +import { describe, expect, expectTypeOf, it, onTestFinished } from 'vitest' import { Context } from '@deepseek-ai/cordis' import { bindScopeParent, carrierKeyOf, createScope, isScopeCarrier, scopeChainOf, scopeOf, scopeParentOf, scopeTarget } from '@deepseek-ai/dsh-scope' import type { Scope, Scoped } from '@deepseek-ai/dsh-scope' @@ -87,6 +87,38 @@ describe('createScope', () => { await dispose() expect(order).toEqual(['inner', 'scope', 'outer']) }) + + it('moves scope cleanup to a composite on another fiber', async () => { + const ctx = new Context() + const release = Promise.withResolvers() + onTestFinished(async () => { + release.resolve(undefined) + await ctx.fiber.dispose() + }) + let originCtx!: Context + const origin = await ctx.plugin((inner: Context) => { originCtx = inner }) + const scope = createScope(originCtx, { name: 'cross-fiber' }) + const order: string[] = [] + scope.ctx.effect(() => () => { order.push('scope') }) + const draining = Promise.withResolvers() + const owner = await ctx.plugin((inner: Context) => { + inner.effect(function* () { + yield scope.rawDispose + yield async () => { + draining.resolve(undefined) + await release.promise + order.push('drained') + } + }) + }) + const disposal = owner.dispose() + await draining.promise + await origin.dispose() + expect(order).toEqual([]) + release.resolve(undefined) + await disposal + expect(order).toEqual(['drained', 'scope']) + }) }) describe('scopeTarget', () => { diff --git a/vendor/README.md b/vendor/README.md index 71cd648b03..1de68b02bd 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -35,7 +35,7 @@ Keep this log exhaustive — every divergence from upstream must be listed. 3. **All `tsconfig.json` files**: regenerated to extend the repo-root `tsconfig.base.json`, emit TypeScript intermediates to `lib/types`, and declare project references. 4. **Vendored TypeScript source internal specifiers**: changed local relative imports/exports from upstream's specifier shape to explicit `.ts` specifiers so TypeScript rewrites emitted JS to `.js` while declarations keep explicit, NodeNext-safe `.ts` specifiers. This includes `loader/src/config/isolate.ts` using `declare module './entry.ts'`. Type-only dependencies use `import type` or inline `type` modifiers so ESM output does not retain erased interfaces. 5. **`schemastery/tsdown.config.ts` and `logger-console/tsdown.config.ts`**: ours, not upstream files — per-package build-shape overrides (dual ESM+CJS output; separate node/browser entries) for the repo-root tsdown build. They read the JS emitted under `lib/types` and then write the publish runtime entries under `lib/`. Like the regenerated tsconfigs, they are not part of the upstream sync surface. -6. **`cordis/src/fiber.ts` lifecycle hardening**: locally closes three reentrant disposal gaps. An effect's owner-list wrapper is registered before its setup body runs, so an unload begun from inside setup awaits setup and every collected cleanup; synchronous setup failure removes the wrapper and rolls back collected cleanup. Async cleanup stays owner-visible until quiescence, and Cordis's internal effect composition joins an already-running cleanup while repeated public disposer calls retain their upstream single-shot result. Effect creation is rejected while the owner is `UNLOADING` (while `PENDING` and `LOADING` remain legal), preventing cleanup-time registrations from escaping the unload snapshot. Child fibers register and receive their parent-owned disposer before `internal/plugin` publication, resolve dependency declarations added by that notification before activation, drain effects attached while pending, skip plugin execution when reentrant disposal invalidates the load epoch before its first checkpoint, and contain teardown-notification failures per observer so one callback cannot starve peers or interrupt ownership cleanup. +6. **`cordis/src/fiber.ts` lifecycle hardening**: locally hardens reentrant and composed disposal. An effect's owner-list wrapper is registered before its setup body runs, so an unload begun from inside setup awaits setup and every collected cleanup; synchronous setup failure removes the wrapper and rolls back collected cleanup. Async cleanup stays owner-visible until quiescence, and Cordis's internal effect composition joins an already-running cleanup while repeated public disposer calls retain their upstream single-shot result. A composite effect adopts each returned or yielded Cordis disposer from its original fiber, including when the dependency context and cleanup owner are different fibers; the original fiber cannot independently dispose the adopted resource. Effect creation is rejected while the owner is `UNLOADING` (while `PENDING` and `LOADING` remain legal), preventing cleanup-time registrations from escaping the unload snapshot. Child fibers register and receive their parent-owned disposer before `internal/plugin` publication, resolve dependency declarations added by that notification before activation, drain effects attached while pending, skip plugin execution when reentrant disposal invalidates the load epoch before its first checkpoint, and contain teardown-notification failures per observer so one callback cannot starve peers or interrupt ownership cleanup. 7. **Cordis and Loader JSDoc enrichment**: added `@param`/`@returns` tags and contract documentation (disposal semantics, waterfall veto, bail conditions, error cases) across the public plugin-author surface — `Context` (class, statics, and the `Context` interface properties incl. `root`), module re-exports, shared utility helpers, `EventsService`, `Fiber`, `RegistryService`, `ReflectService`, `Service`, `LoggerService` and their `declare module './context.ts'` overloads. Loader documentation covers `loader/src/{index,internal,config/entry,config/group,config/isolate,config/tree,config/utils}.ts`, including entry ownership, tree mutation methods, and the `!!js` discriminator. Comment-only; no code changes. Motivation: the website API-reference generator renders these docs and hard-errors on undocumented members. Retire this entry when the enrichment is upstreamed to the fork. 8. **`include/src/index.ts` resilient file refresh and patch reapplication**: [#514](https://github.com/deepseek-harness/deepseek-harness/pull/514) validates a top-level entry array before caching parsed content, logs refresh failures, reapplies patches after file or Include-config edits, updates the Include config when it vetoes a restart, and uses `initial` only after `ENOENT`. These parse protections retain the running tree after an invalid file; plugin activation failures can leave a partially applied tree. Loader entry/group/tree mutations follow the pinned eager, non-transactional implementation and do not restore previous plugins or options. Covered by `packages/boot/app-boot/tests/{config-reload,user-patches}.spec.ts`. 9. **`hmr/src/index.ts` module-watcher readiness and native paths**: realpath the existing watch base, classify framework modules and attach listeners before reporting readiness, and compare config paths using both canonical and configured spellings. This preserves Node module-cache identity across Windows short-name paths and filesystem aliases. The main watcher uses `ignoreInitial: true` so startup reads do not trigger another refresh; exact profile patch watching is owned by `packages/boot/hmr/src/watch-config.ts`. Covered by `packages/boot/hmr/tests/watch-config.spec.ts`. diff --git a/vendor/cordis/src/fiber.ts b/vendor/cordis/src/fiber.ts index 6bb1caa7a5..7ae2649dd5 100644 --- a/vendor/cordis/src/fiber.ts +++ b/vendor/cordis/src/fiber.ts @@ -110,6 +110,8 @@ interface EffectRunner { // Public effect disposers remain single-shot, but structural owners and outer // effects must still be able to join a cleanup that another caller started. const effectInertia = new WeakMap void | Promise>() +// Composites can adopt effects created through another fiber's dependency context. +const effectOwners = new WeakMap() function runDisposable(dispose: Disposable) { const result = dispose() @@ -447,7 +449,8 @@ export class Fiber { epoch: true, collect: (dispose) => { disposables.push(dispose) - this._disposables.delete(dispose) + const owner = effectOwners.get(dispose) ?? this + owner._disposables.delete(dispose) if (dispose[symbols.effect]) { meta.children.push(dispose[symbols.effect]) } @@ -513,6 +516,7 @@ export class Fiber { }) }, symbols.effect, meta) as AsyncDisposable effectInertia.set(wrapper, () => inFlight) + effectOwners.set(wrapper, this) // Make the effect visible to a reentrant owner unload before execute() // runs any plugin code. Async teardown stays owner-visible until it From 1e1735a440e6ac0c8e69fb4ee98f3056331d1c86 Mon Sep 17 00:00:00 2001 From: _Kerman Date: Sun, 4 Oct 2026 16:10:06 +0800 Subject: [PATCH 026/155] fix(session-projection): preserve composable registration disposers --- .../session-projection/README.i18n.yaml | 4 ++-- packages/session/session-projection/README.md | 2 +- .../session/session-projection/README.zh.md | 2 +- .../session/session-projection/src/index.ts | 3 ++- .../session-projection/tests/registry.spec.ts | 18 +++++++++++++++++- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/session/session-projection/README.i18n.yaml b/packages/session/session-projection/README.i18n.yaml index 2af1d9ce09..2de0a0b1ef 100644 --- a/packages/session/session-projection/README.i18n.yaml +++ b/packages/session/session-projection/README.i18n.yaml @@ -24,8 +24,8 @@ en: 09758d1475fad86e zh: 473637cb34aebe72 /deepseek-ai-dsh-session-projection/use-this-package/register-and-read: - en: 5e754e67dff07b02 - zh: 2ba1bda464abaa45 + en: 9430eb1210648030 + zh: 280428f2ff1c71c1 /deepseek-ai-dsh-session-projection/use-this-package/persisted-checkpoints: en: 45f1c05fb7e08180 zh: f8d62c749899651a diff --git a/packages/session/session-projection/README.md b/packages/session/session-projection/README.md index bce4d1baf5..e0cfd0252a 100644 --- a/packages/session/session-projection/README.md +++ b/packages/session/session-projection/README.md @@ -55,7 +55,7 @@ const definition = { ### Register and read -`register(definition)` installs the unit; registrants with the same key and `stateVersion` share its cells, while an incompatible version or invalid `stateVersion` throws. Registration is an effect on the calling fiber, so the last unload removes the key and its cached cells. Carriers read a consistent synchronous cut over every client-visible unit with `snapshot(session)` — `{ asOfSeq, values }`, where `asOfSeq` is the seq of the last event every value reflects — and subscribe to per-change notifications with `onChanged(listener)`. `stateOf(session, key)` reads one unit's live read-only host state without computing unrelated views. +`register(definition)` installs the unit; registrants with the same key and `stateVersion` share its cells, while an incompatible version or invalid `stateVersion` throws. Registration is an effect on the calling fiber, so the last unload removes the key and its cached cells. The returned Cordis disposer can be yielded into a composite `ctx.effect()` to keep the projection available through dependent cleanup. Carriers read a consistent synchronous cut over every client-visible unit with `snapshot(session)` — `{ asOfSeq, values }`, where `asOfSeq` is the seq of the last event every value reflects — and subscribe to per-change notifications with `onChanged(listener)`. `stateOf(session, key)` reads one unit's live read-only host state without computing unrelated views. ```text const dispose = ctx.sessionProjections.register(definition) diff --git a/packages/session/session-projection/README.zh.md b/packages/session/session-projection/README.zh.md index f70e886192..35610554bf 100644 --- a/packages/session/session-projection/README.zh.md +++ b/packages/session/session-projection/README.zh.md @@ -55,7 +55,7 @@ const definition = { ### 注册与读取 -`register(definition)` 安装单元;具有相同 key 和 `stateVersion` 的注册方共享其 cell,版本不兼容或 `stateVersion` 非法时会 throw。注册是挂在调用方 fiber 上的 effect,因此最后一个注册方卸载后会移除 key 及其缓存 cell。载体用 `snapshot(session)` 对每个客户端可见单元读取一致的同步切面——`{ asOfSeq, values }`,其中 `asOfSeq` 是所有值共同反映到的最后一个事件的 seq——并用 `onChanged(listener)` 订阅逐变更通知。`stateOf(session, key)` 读取一个单元的实时只读 host 状态,不计算无关视图。 +`register(definition)` 安装单元;具有相同 key 和 `stateVersion` 的注册方共享其 cell,版本不兼容或 `stateVersion` 非法时会 throw。注册是挂在调用方 fiber 上的 effect,因此最后一个注册方卸载后会移除 key 及其缓存 cell。返回的 Cordis disposer 可以 yield 到复合 `ctx.effect()` 中,让依赖它的清理完成前投影始终可用。载体用 `snapshot(session)` 对每个客户端可见单元读取一致的同步切面——`{ asOfSeq, values }`,其中 `asOfSeq` 是所有值共同反映到的最后一个事件的 seq——并用 `onChanged(listener)` 订阅逐变更通知。`stateOf(session, key)` 读取一个单元的实时只读 host 状态,不计算无关视图。 ```text const dispose = ctx.sessionProjections.register(definition) diff --git a/packages/session/session-projection/src/index.ts b/packages/session/session-projection/src/index.ts index 6d28631ddc..ac6e63458f 100644 --- a/packages/session/session-projection/src/index.ts +++ b/packages/session/session-projection/src/index.ts @@ -289,7 +289,8 @@ export class SessionProjectionRegistry extends Service { if (live.refs === 0) this.registrations.delete(key) } }.bind(this), 'sessionProjections.register()') - return () => void dispose() + // oxlint-disable-next-line typescript/no-misused-promises -- synchronous cleanup; keep the Cordis disposer so effects can adopt it. + return dispose } /** diff --git a/packages/session/session-projection/tests/registry.spec.ts b/packages/session/session-projection/tests/registry.spec.ts index 0954b2daf5..de7ecdde60 100644 --- a/packages/session/session-projection/tests/registry.spec.ts +++ b/packages/session/session-projection/tests/registry.spec.ts @@ -7,7 +7,7 @@ * and effect-tied removal of registrations and change listeners (HMR safety). */ -import { describe, expect, it, vi } from 'vitest' +import { describe, expect, it, onTestFinished, vi } from 'vitest' import { Context } from '@deepseek-ai/cordis' import { z } from 'zod' import SessionStore, { @@ -525,6 +525,22 @@ describe('SessionProjectionRegistry drive', () => { expect(ctx.sessionProjections.snapshot(session).values).toEqual({}) }) + it('keeps a yielded registration live until the composite finishes using it', async () => { + const { ctx, session } = await harness() + onTestFinished(async () => { await ctx.fiber.dispose() }) + let observed: MarksState | undefined + const fiber = await ctx.plugin(Object.assign((inner: Context) => { + inner.effect(function* () { + yield inner.sessionProjections.register(marksUnit()) + yield () => { observed = inner.sessionProjections.stateOf(session, 'test/marks') } + }) + }, { inject: ['sessionProjections'] })) + mark(session, ['live']) + await fiber.dispose() + expect(observed).toEqual({ marks: ['live'] }) + expect(ctx.sessionProjections.stateOf(session, 'test/marks')).toBeUndefined() + }) + it('snapshot serves client views and excludes host-only state', async () => { const { ctx, session } = await harness() ctx.sessionProjections.register(marksUnit()) From 4263144de2a1d555744717114e82f14aee3216f4 Mon Sep 17 00:00:00 2001 From: _Kerman Date: Sun, 4 Oct 2026 16:10:18 +0800 Subject: [PATCH 027/155] fix(agent-loop): retain resources until all agents finish teardown --- docs/architecture.i18n.yaml | 4 +- docs/architecture.md | 2 +- docs/architecture.zh.md | 2 +- docs/config-catalog.md | 2 +- docs/config-catalog.zh.md | 2 +- docs/event-producer-consumer.md | 2 +- docs/event-producer-consumer.zh.md | 2 +- packages/core/agent-loop/README.i18n.yaml | 4 +- packages/core/agent-loop/README.md | 2 + packages/core/agent-loop/README.zh.md | 2 + packages/core/agent-loop/src/index.ts | 50 +++++-- .../tests/resource-lifecycle.spec.ts | 140 ++++++++++++++++++ 12 files changed, 190 insertions(+), 24 deletions(-) create mode 100644 packages/core/agent-loop/tests/resource-lifecycle.spec.ts diff --git a/docs/architecture.i18n.yaml b/docs/architecture.i18n.yaml index 2cbc4870c6..ee9c90c6c4 100644 --- a/docs/architecture.i18n.yaml +++ b/docs/architecture.i18n.yaml @@ -21,8 +21,8 @@ en: b4a221ac2910600a zh: 341046d3c9a9c9cd /deepseek-harness-architecture/events: - en: 214c3c81c21df6f9 - zh: 75d2cdc3c9fc9930 + en: e89802f066e4955d + zh: ea2fb4bef94e086d /deepseek-harness-architecture/turn-flow: en: badc0ffea030cdce zh: 3241f0b37c3ec067 diff --git a/docs/architecture.md b/docs/architecture.md index 8514fd8bd3..8a2f5f914e 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -77,7 +77,7 @@ Events are the extension points, and picking the right domain is the first decis - **Agent events** (`agent/*`) carry a live `Agent`: inbox, step, status, request, validation, continuation. Use one to observe or intercept work in flight. - **Capability events** attach policy and adapters to a seam (`fs/*`, `tools/*`, `telemetry/*`) without importing the loop. -AgentLoop awaits serial `agent/created` initialization before starting queued work. Initialization failure rolls back creation; [agent-loop](../packages/core/agent-loop/README.md#understand-the-implementation) defines teardown ordering. +AgentLoop awaits serial `agent/created` before queued work and rolls back failed initialization. Unload retains resources through Agent teardown; [agent-loop](../packages/core/agent-loop/README.md#understand-the-implementation) defines ordering. The [event map](event-producer-consumer.md) lists every event's producers and consumers. diff --git a/docs/architecture.zh.md b/docs/architecture.zh.md index fb713b90a6..6def17d9f3 100644 --- a/docs/architecture.zh.md +++ b/docs/architecture.zh.md @@ -79,7 +79,7 @@ Electron 使用 Electron Node 模式启动私有 Desktop Host。Host 调用共 - **Agent 事件**(`agent/*`)携带活跃 `Agent`:inbox、步骤、状态、请求、验证、续跑。要观察或拦截进行中的工作时,使用它。 - **能力事件**无需导入循环即可向某个 seam(`fs/*`、`tools/*`、`telemetry/*`)附加策略和适配器。 -AgentLoop 在启动已排队工作前等待串行 `agent/created` 初始化。初始化失败会回滚创建;[agent-loop](../packages/core/agent-loop/README.zh.md#understand-the-implementation)定义 teardown 顺序。 +AgentLoop 在启动已排队工作前等待串行 `agent/created`,初始化失败则回滚。卸载在 Agent teardown 期间保留所需资源;[agent-loop](../packages/core/agent-loop/README.zh.md#understand-the-implementation)定义顺序。 [事件映射](event-producer-consumer.zh.md)列出每个事件的生产方与消费方。 diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 2d38ab513d..a0ef820cc0 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -94,7 +94,7 @@ export interface Config { - `inject`: `agents` · `sessions` · `llm` · `tools` · `systemPrompt` · `sessionProjections` - `refs`: [`AgentOptions`](subsystems/core.md) · [`SessionId`](subsystems/core.md) · `Volatile` (`@deepseek-ai/cosmokit`) -- `source`: [`packages/core/agent-loop/src/index.ts:292`](../packages/core/agent-loop/src/index.ts) +- `source`: [`packages/core/agent-loop/src/index.ts:298`](../packages/core/agent-loop/src/index.ts) ```ts config-catalog /** Agent-loop plugin configuration. */ diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index 462a637a8c..b0ee253f16 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -96,7 +96,7 @@ export interface Config { - `inject`: `agents` · `sessions` · `llm` · `tools` · `systemPrompt` · `sessionProjections` - `refs`: [`AgentOptions`](subsystems/core.zh.md) · [`SessionId`](subsystems/core.zh.md) · `Volatile` (`@deepseek-ai/cosmokit`) -- `source`: [`packages/core/agent-loop/src/index.ts:292`](../packages/core/agent-loop/src/index.ts) +- `source`: [`packages/core/agent-loop/src/index.ts:298`](../packages/core/agent-loop/src/index.ts) ```ts config-catalog /** Agent-loop plugin configuration. */ diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index d70b40fdcc..72866f2782 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -8,7 +8,7 @@ This matrix shows which packages dispatch each harness-owned event and which pac | Event | Mode | Declared in | Dispatchers | Listeners | | --- | --- | --- | --- | --- | -| `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:238`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | +| `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:244`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | | `agent-preset/selected` | `emit` | [`packages/preset/agent-preset-registry/src/types.ts:69`](../packages/preset/agent-preset-registry/src/types.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`) | `remotes` | | `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:363`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` | | `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:261`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, `claude-code-mods`, [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index 25bb53ea61..48c42609b5 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -10,7 +10,7 @@ | Event | Mode | Declared in | Dispatchers | Listeners | | --- | --- | --- | --- | --- | -| `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:238`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | +| `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:244`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | | `agent-preset/selected` | `emit` | [`packages/preset/agent-preset-registry/src/types.ts:69`](../packages/preset/agent-preset-registry/src/types.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`) | `remotes` | | `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:363`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` | | `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:261`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, `claude-code-mods`, [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | diff --git a/packages/core/agent-loop/README.i18n.yaml b/packages/core/agent-loop/README.i18n.yaml index f43f393665..f63783f99c 100644 --- a/packages/core/agent-loop/README.i18n.yaml +++ b/packages/core/agent-loop/README.i18n.yaml @@ -39,8 +39,8 @@ en: 2a8b93869eb5a2f9 zh: ddab8e738d188a61 /deepseek-ai-dsh-agent-loop/understand-the-implementation/creation-and-teardown: - en: 6bc52b8ef503eeda - zh: 3290052ebc47baf6 + en: 26b047d8ab4a93f8 + zh: 6624a3e794ebeb2d /deepseek-ai-dsh-agent-loop/understand-the-implementation/persistence-integration: en: da056b9f0dde4ab3 zh: ba9ce3b19c17ca22 diff --git a/packages/core/agent-loop/README.md b/packages/core/agent-loop/README.md index 5567f505dd..cbf05ad162 100644 --- a/packages/core/agent-loop/README.md +++ b/packages/core/agent-loop/README.md @@ -109,6 +109,8 @@ The loop deep-freezes each derived message identity on its first request and reu Creation is one rollback-covered transaction: construct a private session, concrete agent, and scoped context; await optional setup; enter both registries; announce `session/created`; await serial `agent/created` listeners; then release queued input. A caller creating a runtime child sets `options.parentAgent`; the caller Context separately owns the transaction and live handle. Setup, commit, or listener failure and owner disposal roll back the prepared resources. Announcements already delivered remain observable and receive matching disposal notifications. Teardown stops and drains the driver, unwinds the scope, closes the session's write path, detaches the agent, then detaches the session. Every detach binds the exact entered object, so a stale disposer cannot remove a later same-id replacement. +Factory unload retains the inbox and turn-boundary projections until every Agent teardown and startup task settles, including when another teardown fails. Their registration disposers belong to the same ordered effect as factory teardown. Each Agent scope inherits the factory's dependencies, but its disposer belongs to the caller's lifecycle effect; caller unload, factory unload, and handle disposal await the same teardown. Independent Cordis effects unload concurrently, so registration order alone cannot provide these guarantees. + ### Persistence integration The loop is the production acquisition point for session write handles. When `ctx.sessionPersistence` is mounted, `create`/`createAgent` call `persistence.create(header)` — storing the durable identity and taking write ownership before publication — and append the constructor seed through the handle; `resume` calls `persistence.open(id, 'write')` first (excluding a concurrent resume of the same id), reads the physically valid log through the handle, and appends `interruptedTurnClosers` for a log crashed mid-turn as an ordinary batch — semantic crash repair is the agent layer's job, not a storage entry point. Immediately before publication, `appendUnstoredSuffix` stores any events appended during the setup window (seed markers, delegation policy records), which never re-emit through `session/event`. Once published, the mounted backend routes the session's `session/event` batches, `session/flush` barriers, and `session/disposed` retirement into the active write handle by session id; the loop touches storage only through the handle it owns. The memoized teardown closes the handle — close drains any routed buffer — after the loop commits the session's closing events, provably releasing write ownership. Without a backend, sessions are memory-only and nothing else changes. diff --git a/packages/core/agent-loop/README.zh.md b/packages/core/agent-loop/README.zh.md index 6589c18d9c..f5adaf3399 100644 --- a/packages/core/agent-loop/README.zh.md +++ b/packages/core/agent-loop/README.zh.md @@ -109,6 +109,8 @@ const handle = await ctx.agents.create({ 创建是同一个受回滚保护的事务:构造私有会话、具象 agent 与带作用域上下文;等待可选 setup;进入两个注册表;宣告 `session/created`;等待串行 `agent/created` 监听器;随后释放已排队输入。创建运行时子 Agent 的调用方设置 `options.parentAgent`;调用方 Context 则单独拥有事务和存活句柄。Setup、commit、监听器失败或所有者 dispose 都会回滚已准备的资源。已送达的宣告仍可被观察,并有配对的销毁通知。Teardown 停止并排空驱动器、撤销作用域、关闭会话写路径、detach agent,再 detach 会话。每次 detach 都绑定到确切进入的对象,因此陈旧 disposer 无法移除之后出现的同 id 替代项。 +工厂卸载时保留 inbox 投影与轮次边界投影,直到所有 Agent teardown 和启动任务结算,即使其他 teardown 已失败也如此。投影的注册 disposer 与工厂 teardown 属于同一个有序 effect。每个 Agent 作用域继承工厂的依赖,但其 disposer 属于调用方的生命周期 effect;调用方卸载、工厂卸载和句柄释放等待同一次 teardown。独立的 Cordis effect 并发卸载,因此仅靠注册顺序无法提供这些保证。 + ### 持久化集成 循环是会话写句柄在生产环境中的获取点。挂载 `ctx.sessionPersistence` 后,`create`/`createAgent` 调用 `persistence.create(header)`——在发布之前存储持久身份并取得写所有权——并通过句柄追加构造 seed;`resume` 先调用 `persistence.open(id, 'write')`(排除同 id 的并发恢复),通过句柄读取物理上有效的日志,并为在轮次中途崩溃的日志把 `interruptedTurnClosers` 作为普通批次追加——语义崩溃修复是 agent 层的职责,而非存储入口。发布前的最后一刻,`appendUnstoredSuffix` 存储 setup 窗口期间追加的事件(seed 标记、委派策略记录),它们绝不会经由 `session/event` 重新发出。发布之后,挂载的后端按会话 id 把该会话的 `session/event` 批次、`session/flush` 屏障与 `session/disposed` 退役路由进活跃写句柄;循环只通过它拥有的句柄触碰存储。记忆化的 teardown 在循环提交会话的收尾事件之后关闭句柄——close 会排空任何已路由的缓冲——可证明地释放写所有权。没有后端时,会话只存在于内存中,其余一切不变。 diff --git a/packages/core/agent-loop/src/index.ts b/packages/core/agent-loop/src/index.ts index 7541a5c4bf..a4f568df78 100644 --- a/packages/core/agent-loop/src/index.ts +++ b/packages/core/agent-loop/src/index.ts @@ -140,10 +140,16 @@ class FactoryOwnership { this.accepting = false this.teardown.abort(new Error('agent loop is not active')) this.inactive.resolve() - await Promise.all([ + const settlements = await Promise.allSettled([ ...[...this.liveAgents].map(dispose => dispose()), ...this.startupTasks, ]) + const failures: unknown[] = [] + for (const result of settlements) { + if (result.status === 'rejected') failures.push(result.reason) + } + if (failures.length === 1) throw failures[0] + if (failures.length > 1) throw new AggregateError(failures, 'agent loop disposal failed') } } @@ -361,11 +367,20 @@ export class AgentLoop extends Service implements AgentFactory { validateConfiguredAgents(this.config.agents) // Register only after every config validation above has passed, so a // rejected constructor leaves no projection unit behind. - ctx.sessionProjections.register(turnBoundaryProjectionDefinition) - ctx.sessionProjections.register(inboxProjectionDefinition) - this.ownership = new FactoryOwnership(ctx.fiber) + const ownership = this.ownership = new FactoryOwnership(ctx.fiber) this.runtime = { ctx } - ctx.effect(() => () => this.ownership.dispose(), 'agentLoop.transactions()') + // Independent effects unload concurrently; projections must outlive Agents. + ctx.effect(function* () { + const unregisterTurnBoundary = ctx.sessionProjections.register(turnBoundaryProjectionDefinition) + yield unregisterTurnBoundary + const unregisterInbox = ctx.sessionProjections.register(inboxProjectionDefinition) + yield unregisterInbox + // Cordis skips later disposers after a rejection; finally still releases projections. + yield () => ownership.dispose().finally(() => { + unregisterInbox() + unregisterTurnBoundary() + }) + }, 'agentLoop.transactions()') ctx.effect(() => ctx.agents.setFactory(this), 'agentLoop.setFactory()') ctx.systemPrompt.variable('provider', context => context.agent?.options.provider) ctx.systemPrompt.variable('model', context => context.agent?.options.model) @@ -521,9 +536,9 @@ export class AgentLoop extends Service implements AgentFactory { let publication: ReturnType> | undefined const machineReady = Promise.withResolvers() // Reverse teardown, memoized so every racing owner awaits one quiescence: - // stop the machine, drain and close the session's write path, leave the - // registries, unwind the scope, release bookkeeping. - const dispose = (ownerTriggered = false): Promise => (disposing ??= (async () => { + // stop the machine, unwind the scope, drain and close the session's write + // path, leave the registries, release bookkeeping. + const teardown = (): Promise => (disposing ??= (async () => { abort.abort(new Error(`agent "${id}" lifecycle disposed`)) callerSignal?.removeEventListener('abort', onCallerAbort) this.ownership.signal.removeEventListener('abort', onFactoryTeardown) @@ -543,11 +558,15 @@ export class AgentLoop extends Service implements AgentFactory { if (machine !== undefined) { machine.cancel({ kind: 'disposed' }) await machine.whenIdle() - await machine.scope.dispose() } } catch (error: unknown) { failures.push(error) } + try { + await machine?.scope.dispose() + } catch (error: unknown) { + failures.push(error) + } // The loop above committed its closing events synchronously into the // session; handle close drains them durably before releasing the write // path. The close drain can be the first operation that surfaces a @@ -562,13 +581,19 @@ export class AgentLoop extends Service implements AgentFactory { detachSession?.() } finally { untrack() - if (!ownerTriggered) await unfollowOwner() } if (failures.length === 1) throw failures[0] if (failures.length > 1) { throw new AggregateError(failures, `agent "${id}" disposal failed`) } })()) + const dispose = async (): Promise => { + try { + await teardown() + } finally { + await unfollowOwner() + } + } const untrack = this.ownership.track(dispose) let unfollowOwner: () => Promise | void try { @@ -577,11 +602,8 @@ export class AgentLoop extends Service implements AgentFactory { machineReady.resolve() yield machine.scope.rawDispose yield () => { - // Owner disposal owns the same quiescence boundary. Its teardown skips - // unregistering this already-running owner effect from inside itself. - if (disposing !== undefined) return abort.abort(new Error(`agent "${id}" setup aborted: owner disposed during setup`)) - return dispose(true) + return teardown() } }, `agentLoop.lifecycle(${id})`) /* v8 ignore start -- ctx.effect throws only on an inactive fiber, which assertActive() above already rejected */ diff --git a/packages/core/agent-loop/tests/resource-lifecycle.spec.ts b/packages/core/agent-loop/tests/resource-lifecycle.spec.ts new file mode 100644 index 0000000000..469f5426e7 --- /dev/null +++ b/packages/core/agent-loop/tests/resource-lifecycle.spec.ts @@ -0,0 +1,140 @@ +import { setImmediate } from 'node:timers/promises' +import { expect, it, onTestFinished, vi } from 'vitest' +import { Context } from '@deepseek-ai/cordis' +import AgentLoop from '@deepseek-ai/dsh-agent-loop' +import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-testkit' +import { SessionId } from '@deepseek-ai/dsh-session' +import { ToolCallId } from '@deepseek-ai/dsh-llm' +import SubagentRuntime from '@deepseek-ai/dsh-subagent' +import LocalJobRegistry from '@deepseek-ai/dsh-jobs-local' +import * as SubagentSpawn from '@deepseek-ai/dsh-subagent-spawn-in-process' +import * as ToolSubagent from '@deepseek-ai/dsh-tool-subagent' +import { MockAdapter, textResponse } from './mock-adapter.ts' + +it.each([0, 1, 2])('retains Agent resources until all work exits with %i failed teardowns', async (failures) => { + const ctx = new Context() + const release = Promise.withResolvers() + onTestFinished(async () => { + release.resolve(undefined) + await ctx.fiber.dispose() + }) + await mountAgentLoopTestDependencies(ctx) + const loop = await ctx.plugin(AgentLoop, { agents: [] }) + const failed = [] + for (let index = 0; index < failures; index++) { + const handle = await ctx.agents.create({ sessionId: SessionId(`failed-cleanup-${index}`) }) + const error = new Error(`teardown failure ${index}`) + vi.spyOn(handle.agent, 'cancel').mockImplementation(() => { throw error }) + failed.push({ handle, error }) + } + let ownerCtx!: Context + const owner = await ctx.plugin(Object.assign((inner: Context) => { ownerCtx = inner }, { inject: ['agents'] })) + const { agent } = await ownerCtx.agents.create({ sessionId: SessionId('pending-cleanup') }) + const aborted = Promise.withResolvers() + let workExited = false + let scopeDisposedBeforeWorkExit = false + let projectionPresentAtWorkExit = false + let scopeDisposed = false + agent.ctx.effect(() => () => { + scopeDisposed = true + scopeDisposedBeforeWorkExit = !workExited + }) + const projections = ctx.sessionProjections + const work = agent.runMaintenance(async (signal) => { + signal.addEventListener('abort', () => { aborted.resolve(undefined) }, { once: true }) + await release.promise + projectionPresentAtWorkExit = projections.stateOf(agent.session, 'inbox') !== undefined + && projections.stateOf(agent.session, 'turnBoundary') !== undefined + workExited = true + }) + const disposal = loop.dispose() + await aborted.promise + const ownerDisposal = owner.dispose() + // Drain runnable unload callbacks while the Agent is held at an explicit barrier. + await setImmediate() + release.resolve(undefined) + await work + await Promise.all([disposal, ownerDisposal]) + for (const { handle, error } of failed) await expect(handle.dispose()).rejects.toBe(error) + expect(scopeDisposedBeforeWorkExit).toBe(false) + expect(projectionPresentAtWorkExit).toBe(true) + expect(scopeDisposed).toBe(true) + expect(projections.stateOf(agent.session, 'inbox')).toBeUndefined() + expect(projections.stateOf(agent.session, 'turnBoundary')).toBeUndefined() + expect(ctx.agents.get(agent.id)).toBeUndefined() + expect(ctx.sessions.get(agent.session.id)).toBeUndefined() +}) + +it.each(['loop', 'root'] as const)('unloads %s while a background one-shot child is stopping', async (owner) => { + const ctx = new Context() + const release = Promise.withResolvers() + onTestFinished(async () => { + release.resolve(undefined) + await ctx.fiber.dispose() + }) + await mountAgentLoopTestDependencies(ctx) + const loop = await ctx.plugin(AgentLoop, { agents: [] }) + await ctx.plugin(SubagentRuntime) + await ctx.plugin(LocalJobRegistry) + await ctx.plugin(SubagentSpawn) + await ctx.plugin(ToolSubagent, { provider: 'spawn', backgroundMode: 'one-shot' }) + ctx.jobs.attachController('resource-lifecycle') + const parentCancelObserved = Promise.withResolvers() + ctx.on('agent/created', ({ agent }) => { + const cancel = agent.cancel.bind(agent) + vi.spyOn(agent, 'cancel').mockImplementation((cause, options) => { + if (cause.kind === 'parent') parentCancelObserved.resolve(undefined) + cancel(cause, options) + }) + }) + ctx.llm.registerAdapter(['mock'], new MockAdapter([textResponse('unused')])) + const { agent: parent } = await ctx.agents.create({ + sessionId: SessionId('background-parent'), agentOptions: { provider: 'mock', model: 'mock' }, + }) + const requestEntered = Promise.withResolvers() + ctx.on('agent/request', async (event, next) => { + expect(event.agent).not.toBe(parent) + requestEntered.resolve(undefined) + await release.promise + return next() + }) + const started = await ctx.tools.execute({ + agent: parent, signal: new AbortController().signal, + callId: ToolCallId('background-start'), name: 'subagent', + arguments: { description: 'child', prompt: 'wait', run_in_background: true }, + }) + expect(started.isError).toBe(false) + await requestEntered.promise + const disposal = owner === 'loop' ? loop.dispose() : ctx.fiber.dispose() + // Job teardown aborts its controller while the child is still in agent/request. + await parentCancelObserved.promise + release.resolve(undefined) + await disposal +}) + +it.each([false, true])('releases the Agent scope after cancel failure with scope failure %s', async (failScope) => { + const ctx = new Context() + onTestFinished(async () => { await ctx.fiber.dispose() }) + await mountAgentLoopTestDependencies(ctx) + await ctx.plugin(AgentLoop, { agents: [] }) + let ownerCtx!: Context + const owner = await ctx.plugin(Object.assign((inner: Context) => { ownerCtx = inner }, { inject: ['agents'] })) + const handle = await ownerCtx.agents.create({ sessionId: SessionId('failed-owner-cleanup') }) + let scopeDisposed = false + handle.agent.ctx.effect(() => () => { scopeDisposed = true }) + const failure = new Error('teardown failure') + vi.spyOn(handle.agent, 'cancel').mockImplementation(() => { throw failure }) + const scopeFailure = new Error('scope teardown failure') + if (failScope) { + const fiber = handle.agent.ctx.fiber + const rawDispose = fiber.dispose + vi.spyOn(fiber, 'dispose').mockImplementation(async () => { + await rawDispose() + throw scopeFailure + }) + } + await owner.dispose() + if (failScope) await expect(handle.dispose()).rejects.toMatchObject({ errors: [failure, scopeFailure] }) + else await expect(handle.dispose()).rejects.toBe(failure) + expect(scopeDisposed).toBe(true) +}) From d8c5187187e35d322dca89f8d74bab36f424bc88 Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Mon, 5 Oct 2026 16:18:03 +0800 Subject: [PATCH 028/155] fix(inspector): keep observed fetch Requests reachable so caller aborts reach native fetch Node's fetch forwards a caller's AbortSignal only while the Request it was given is reachable. The fetch observer creates that Request locally, so after garbage collection an abort after response headers no longer cancelled the body: capture never finished, Network.loadingFinished was never sent, and the connection stayed open. Fixes #5614 --- .../inspector/src/host/inspection/network.ts | 8 ++++ .../tests/fetch-observer.host.spec.ts | 40 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/packages/experimental/inspector/src/host/inspection/network.ts b/packages/experimental/inspector/src/host/inspection/network.ts index aa5225a8c5..9d316da444 100644 --- a/packages/experimental/inspector/src/host/inspection/network.ts +++ b/packages/experimental/inspector/src/host/inspection/network.ts @@ -14,6 +14,12 @@ export interface FetchCaptureOptions { readonly maxChunkBytes: number } +/** + * Keeps each wrapper-created Request reachable while either of its response body streams is reachable. + * Node's fetch forwards the caller's abort signal only while that Request is reachable. + */ +const requestsByBody = new WeakMap, Request>() + interface CaptureOutcome { readonly capturedBytes: number readonly truncated: boolean @@ -113,6 +119,7 @@ export function installFetchObserver( try { const responseClone = response.clone() + if (responseClone.body !== null) requestsByBody.set(responseClone.body, request) track(captureBody( responseClone.body, options.maxResponseBodyBytes, @@ -135,6 +142,7 @@ export function installFetchObserver( responseCaptureError: renderError(error), }) } + if (response.body !== null) requestsByBody.set(response.body, request) return response } diff --git a/packages/experimental/inspector/tests/fetch-observer.host.spec.ts b/packages/experimental/inspector/tests/fetch-observer.host.spec.ts index a79551a75d..94c1ce7a5a 100644 --- a/packages/experimental/inspector/tests/fetch-observer.host.spec.ts +++ b/packages/experimental/inspector/tests/fetch-observer.host.spec.ts @@ -1,5 +1,9 @@ /** Host fetch observation behavior. */ +import { createServer } from 'node:http' +import type { AddressInfo } from 'node:net' +import { setFlagsFromString } from 'node:v8' +import { runInNewContext } from 'node:vm' import { afterEach, describe, expect, it, vi } from 'vitest' import { installFetchObserver, type FetchObserver } from '../src/host/inspection/network.ts' import type { InspectorRecordInput } from '../src/shared/bridge/messages/observation.ts' @@ -115,6 +119,42 @@ describe('full fetch observer', () => { expect(records.some(record => record.topic === 'fetch/error')).toBe(false) }) + it('forwards a caller abort to native fetch after the wrapper Request is no longer referenced', async () => { + const server = createServer((_request, response) => { + response.writeHead(200, { 'content-type': 'text/event-stream' }) + response.write('data: first\n\n') + }) + await new Promise((resolve) => { server.listen(0, '127.0.0.1', () => { resolve() }) }) + try { + const records: InspectorRecordInput[] = [] + observer = installFetchObserver({ + publish(topic: string, payload: InspectorJsonValue, monotonicMs = performance.now()) { + records.push({ topic, payload, monotonicMs }) + }, + }, { maxRequestBodyBytes: 1_024, maxResponseBodyBytes: 1_024, maxChunkBytes: 1_024 }) + const abort = new AbortController() + const { port } = server.address() as AddressInfo + const response = await fetch(`http://127.0.0.1:${String(port)}/open-stream`, { signal: abort.signal }) + const reader = response.body!.getReader() + await reader.read() + // Node's fetch follows the caller signal only while the wrapper-created Request is reachable. + setFlagsFromString('--expose-gc') + const gc = runInNewContext('gc') as () => void + for (let pass = 0; pass < 5; pass += 1) { + gc() + await new Promise((resolve) => { setImmediate(resolve) }) + } + + abort.abort() + await expect(reader.read()).rejects.toMatchObject({ name: 'AbortError' }) + await vi.waitFor(() => { expect(records.some(record => record.topic === 'fetch/end')).toBe(true) }) + expect(String(payload(records, 'fetch/end').responseCaptureError)).toContain('AbortError') + } finally { + server.closeAllConnections() + await new Promise((resolve) => { server.close(() => { resolve() }) }) + } + }) + it('reports a fetch rejected before response headers as a canceled request', async () => { const records: InspectorRecordInput[] = [] Object.defineProperty(globalThis, 'fetch', { From 70723f41c8bf9c58f28773d1c2a44f2fd1f05553 Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Mon, 5 Oct 2026 17:36:53 +0800 Subject: [PATCH 029/155] fix(inspector): key the retained fetch Request on the caller body only The capture clone shares one source with the caller's body stream, so the caller key alone keeps the Request reachable on every path, including when capture has already stopped at its byte limit. Cover that path in the regression test and document the process-wide --expose-gc flag. Refs #5614 --- .../inspector/src/host/inspection/network.ts | 8 ++-- .../tests/fetch-observer.host.spec.ts | 38 ++++++++++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/experimental/inspector/src/host/inspection/network.ts b/packages/experimental/inspector/src/host/inspection/network.ts index 9d316da444..7446934e92 100644 --- a/packages/experimental/inspector/src/host/inspection/network.ts +++ b/packages/experimental/inspector/src/host/inspection/network.ts @@ -15,8 +15,11 @@ export interface FetchCaptureOptions { } /** - * Keeps each wrapper-created Request reachable while either of its response body streams is reachable. - * Node's fetch forwards the caller's abort signal only while that Request is reachable. + * Keeps each wrapper-created Request reachable while the caller's response body stream is reachable. + * Node's fetch forwards the caller's abort signal only while that Request is reachable. The capture + * clone shares one source with the caller's body stream and keeps that stream reachable while capture + * reads. Entries are set after `response.clone()`, which replaces `response.body`. The map is + * module-level so that responses obtained before `stop()` keep their Request reachable afterwards. */ const requestsByBody = new WeakMap, Request>() @@ -119,7 +122,6 @@ export function installFetchObserver( try { const responseClone = response.clone() - if (responseClone.body !== null) requestsByBody.set(responseClone.body, request) track(captureBody( responseClone.body, options.maxResponseBodyBytes, diff --git a/packages/experimental/inspector/tests/fetch-observer.host.spec.ts b/packages/experimental/inspector/tests/fetch-observer.host.spec.ts index 94c1ce7a5a..3896842e56 100644 --- a/packages/experimental/inspector/tests/fetch-observer.host.spec.ts +++ b/packages/experimental/inspector/tests/fetch-observer.host.spec.ts @@ -119,7 +119,13 @@ describe('full fetch observer', () => { expect(records.some(record => record.topic === 'fetch/error')).toBe(false) }) - it('forwards a caller abort to native fetch after the wrapper Request is no longer referenced', async () => { + it.each([ + { label: 'while capture is still reading the clone', maxResponseBodyBytes: 1_024, captureTruncated: false }, + { label: 'after capture has stopped at its byte limit', maxResponseBodyBytes: 4, captureTruncated: true }, + ])('forwards a caller abort to native fetch after the wrapper Request is unreferenced $label', async ({ + maxResponseBodyBytes, + captureTruncated, + }) => { const server = createServer((_request, response) => { response.writeHead(200, { 'content-type': 'text/event-stream' }) response.write('data: first\n\n') @@ -131,24 +137,25 @@ describe('full fetch observer', () => { publish(topic: string, payload: InspectorJsonValue, monotonicMs = performance.now()) { records.push({ topic, payload, monotonicMs }) }, - }, { maxRequestBodyBytes: 1_024, maxResponseBodyBytes: 1_024, maxChunkBytes: 1_024 }) + }, { maxRequestBodyBytes: 1_024, maxResponseBodyBytes, maxChunkBytes: 1_024 }) const abort = new AbortController() const { port } = server.address() as AddressInfo const response = await fetch(`http://127.0.0.1:${String(port)}/open-stream`, { signal: abort.signal }) const reader = response.body!.getReader() await reader.read() - // Node's fetch follows the caller signal only while the wrapper-created Request is reachable. - setFlagsFromString('--expose-gc') - const gc = runInNewContext('gc') as () => void - for (let pass = 0; pass < 5; pass += 1) { - gc() - await new Promise((resolve) => { setImmediate(resolve) }) + if (captureTruncated) { + await vi.waitFor(() => { expect(records.some(record => record.topic === 'fetch/end')).toBe(true) }) } + // Node's fetch follows the caller signal only while the wrapper-created Request is reachable. + await collectGarbage() abort.abort() await expect(reader.read()).rejects.toMatchObject({ name: 'AbortError' }) await vi.waitFor(() => { expect(records.some(record => record.topic === 'fetch/end')).toBe(true) }) - expect(String(payload(records, 'fetch/end').responseCaptureError)).toContain('AbortError') + const end = payload(records, 'fetch/end') + expect(end.responseBodyTruncated).toBe(true) + if (captureTruncated) expect(end.responseCaptureError).toBeUndefined() + else expect(String(end.responseCaptureError)).toContain('AbortError') } finally { server.closeAllConnections() await new Promise((resolve) => { server.close(() => { resolve() }) }) @@ -434,6 +441,19 @@ describe('full fetch observer', () => { }) }) +/** + * Run several full collections. `--expose-gc` stays enabled for the rest of this forked Vitest worker + * process; only new vm contexts can obtain `gc`, so other specs in the worker may observe it there. + */ +async function collectGarbage(): Promise { + setFlagsFromString('--expose-gc') + const gc = runInNewContext('gc') as () => void + for (let pass = 0; pass < 5; pass += 1) { + gc() + await new Promise((resolve) => { setImmediate(resolve) }) + } +} + function payload(records: readonly InspectorRecordInput[], topic: string): Record { const record = records.find(candidate => candidate.topic === topic) expect(record).toBeDefined() From 77191a490f2f8aa8c8f67d535696c266f8478155 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Mon, 5 Oct 2026 17:56:25 +0800 Subject: [PATCH 030/155] docs: require reuse of ecosystem declarations --- ...-05-reuse-ecosystem-declarations.i18n.yaml | 19 +++++++++++++ ...2026-10-05-reuse-ecosystem-declarations.md | 27 +++++++++++++++++++ ...6-10-05-reuse-ecosystem-declarations.zh.md | 27 +++++++++++++++++++ AGENTS.md | 9 ++++--- 4 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml create mode 100644 .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md create mode 100644 .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml new file mode 100644 index 0000000000..300c47e026 --- /dev/null +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml @@ -0,0 +1,19 @@ +# Bilingual-pair consistency record for 2026-10-05-reuse-ecosystem-declarations.md (docs/i18n/README.md): per heading +# section, a hash of its English and Chinese blocks outside code blocks and generated regions. +# After editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md +/agent-note-reuse-ecosystem-declarations: + en: d1dde7b44169dfbf + zh: 411f5322bc72729c +/agent-note-reuse-ecosystem-declarations/problem: + en: 549330d38e58af03 + zh: be91a1cc6d5d5004 +/agent-note-reuse-ecosystem-declarations/decision: + en: f9d931cab44e8cc2 + zh: 1560a1b50717f00b +/agent-note-reuse-ecosystem-declarations/alternatives-considered: + en: e323031a81d83039 + zh: c5bce4f4257b01da +/agent-note-reuse-ecosystem-declarations/consequences: + en: a6bfae0b6374ff98 + zh: d9c6bb50f583763e diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md new file mode 100644 index 0000000000..04a7cb6c6b --- /dev/null +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md @@ -0,0 +1,27 @@ +# Agent Note: Reuse ecosystem declarations + +Status: implemented + +English | [中文](2026-10-05-reuse-ecosystem-declarations.zh.md) + +## Problem + +Custom declarations can duplicate information that package ecosystems already define. Converting existing metadata into independently maintained fields introduces additional validation and interpretation rules. Catalogs and user interfaces need selected data, but a second authored declaration can disagree with its source. + +## Decision + +DSH reuses established ecosystem declarations, formats, and meanings when they satisfy its requirements. Readers use maintained parsers and validators. Catalogs and user interfaces derive their data from the original declarations. A generated projection may omit unused fields or normalize display data, but it preserves the source meaning and documents the projection. + +A new field or changed meaning requires a specific unmet requirement and a documented difference from the ecosystem rule. For npm package metadata, reuse package identity, version and range syntax, and person fields. DSH-specific composition, localized display data, and host enforcement still require explicit DSH rules. + +The [dependency policy](2026-07-26-dependencies-over-hand-rolling.md) governs dependency selection. The [public manifest decision](../architecture/2026-09-10-public-package-manifest.md) governs the selected npm fields and DSH declarations. These decisions retain their ownership; this policy governs reuse of declarations and their interpretation. + +## Alternatives considered + +**Reuse field names but define independent meanings.** Existing tools and authors cannot rely on familiar declarations when their interpretation changes without a stated requirement. + +**Copy all ecosystem metadata without adaptation.** Consumers need different field subsets and display formats. Documented generated projections preserve the original declaration without requiring every consumer to retain unused data. + +## Consequences + +The [root instructions](../../../../AGENTS.md#conventions) require declaration reuse and documented differences. Review checks the source declaration, the reused parser or validator, and each projection's meaning. This policy adds no installer behavior or package metadata migration. diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md new file mode 100644 index 0000000000..c20d38e2e7 --- /dev/null +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md @@ -0,0 +1,27 @@ +# Agent Note: 复用生态声明 + +Status: implemented + +[English](2026-10-05-reuse-ecosystem-declarations.md) | 中文 + +## 问题 + +自定义声明可能重复包生态已经定义的信息。将既有元数据转换成独立维护的字段,会引入额外的校验和解释规则。目录与用户界面需要选取数据,但第二份由作者维护的声明可能与原始声明不一致。 + +## 决策 + +既有生态声明、格式和含义满足需求时,DSH 复用它们。读取方使用持续维护的解析器和校验器。目录与用户界面从原始声明派生数据。生成的投影可以省略未使用的字段,或归一化显示数据,但须保留原始含义并记录投影规则。 + +新增字段或改变含义时,必须说明尚未满足的具体需求,并记录与生态规则的差异。对于 npm 包元数据,复用包身份、版本与范围语法,以及人员字段。DSH 特有的组合、本地化显示数据和宿主检查仍须明确的 DSH 规则。 + +[依赖政策](2026-07-26-dependencies-over-hand-rolling.zh.md)负责依赖选择。[公共 manifest 决策](../architecture/2026-09-10-public-package-manifest.zh.md)负责选取的 npm 字段与 DSH 声明。这些决策继续负责各自的范围;本政策负责声明及其解释的复用。 + +## 考虑过的替代方案 + +**复用字段名称,却独立定义含义。** 如果没有说明需求便改变熟悉声明的解释方式,既有工具和作者就无法依赖这些声明。 + +**完整复制生态元数据,不做适配。** 消费方需要不同的字段子集和显示格式。记录规则的生成投影保留原始声明,无需每个消费方都保留未使用的数据。 + +## 后果 + +[根指令](../../../../AGENTS.md#conventions)要求复用声明并记录差异。评审检查原始声明、复用的解析器或校验器,以及每种投影的含义。本政策不增加安装器行为,也不迁移包元数据。 diff --git a/AGENTS.md b/AGENTS.md index 4940e9b484..36a0325ab3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -137,6 +137,7 @@ Real-API tests/demos read `DEEPSEEK_API_KEY`, optional `DEEPSEEK_BASE_URL`, and - **Plugins, not loop changes**: new behavior goes on documented extension points; changing `agent-loop` requires updating docs/architecture.md. - **A capability seam comprises Service Definition / Service Provider / Consumer roles.** It is complete, never one role; split only when roles evolve independently ([glossary](docs/glossary.md#capability-seam)). - **Prefer maintained dependencies over hand-rolling** when they genuinely delete owned code and tests ([policy](.agents/notes/implemented/process/2026-07-26-dependencies-over-hand-rolling.md)). +- **Reuse ecosystem declarations, formats, and meanings when suitable.** Use maintained parsers and validators; derive catalog and UI data from original declarations. New fields or changed meanings require a documented unmet requirement ([policy](.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md)). - **Explicit > implicit at package boundaries**: defaulting is an explicit `resolve(request): Spec` step in the owning implementation, never a hidden `?? default` inside `run()` (the `dsh-shell` request/spec split is the template). - **No hardcoded tunables in plugins**: deployment-varying choices are validated `Config` fields changeable from cordis.yml; a `DEFAULT_*` constant or test hook is not configurability. Protocol constants, external specs, and security invariants stay fixed. - **Misconfiguration fails loud** at load when self-contained, otherwise at the earliest resolvable point; never silently skip a missing referent. @@ -167,15 +168,15 @@ Read [docs/defensive-patterns.md](docs/defensive-patterns.md) before lifecycle, ## Type safety and documentation -Everything compiles under `strict: true` with `noImplicitAny`; every remaining `any` explains why narrowing is infeasible. Every module and export has concise JSDoc for its non-obvious contract; function-like exports include `@param`/`@returns`, as enforced by `verify-export-jsdoc`. Heritage-declared members, plugin-protocol slots, and constructors keep their docs at the declaring Service Definition, protocol, or class. +Compile under `strict: true` and `noImplicitAny`; every remaining `any` explains why narrowing is infeasible. Every module/export has concise JSDoc for non-obvious contracts; function-like exports include `@param`/`@returns` (`verify-export-jsdoc`). Heritage-declared members, plugin-protocol slots, and constructors keep docs at the declaring Service Definition, protocol, or class. -Comments and docs state complete contracts and context, not reasoning transcripts. Use direct, concrete terms. Do not use metaphors. Before writing `contract`, `boundary`, or `shape`, ask whether a more exact term names the subject: write `response fields`, `JSON validation`, or `ESM exports` instead of `response shape`, `validation boundary`, or `module shape`. Keep `contract` for preconditions, postconditions, invariants, compatibility promises, and other obligations that callers, callees, implementers, providers, producers, or consumers rely on. Keep a literal process, wire, security, transaction, or lifecycle boundary. Do not narrate control flow or tests, preserve review history, or restate code. Keep behavior, failure, timing, ownership, and safe-use facts; link the rationale. Use [dsh-prose-standard](.agents/skills/dsh-prose-standard/SKILL.md) for decisions. Wire mechanically checkable invariants into an executed top-level gate and prove each changed acceptance path rejects an invalid case. Use narrow, justified exceptions instead of disabling a rule globally. +Comments/docs state complete contracts/context directly and concretely, without metaphors, reasoning transcripts, control-flow/test narration, review history, or code restatement. Prefer exact subjects to `contract`, `boundary`, or `shape`. `contract` names preconditions, postconditions, invariants, compatibility promises, or other obligations that callers/callees, implementers/providers, and producers/consumers rely on; `boundary` names a literal process, wire, security, transaction, or lifecycle boundary. Preserve behavior, failure, timing, ownership, safe-use facts, and rationale links; follow [dsh-prose-standard](.agents/skills/dsh-prose-standard/SKILL.md). Executed top-level gates check mechanically checkable invariants; demonstrate each changed acceptance path rejects an invalid case. Use narrow, justified exceptions; never disable rules globally. -Docs accompany every code change: update affected README and JSDoc contracts together. Routine bilingual work follows [docs/AGENTS.md](docs/AGENTS.md); only explicit user invocation may run `dsh-translate-docs`. Current-state prose, one physical line per paragraph, one home per fact, and word budgets live there. +Every code change updates affected README/JSDoc contracts together. [docs/AGENTS.md](docs/AGENTS.md) governs routine bilingual work, current-state prose, one physical line/paragraph, one home/fact, and word budgets; `dsh-translate-docs` requires explicit user invocation. ## Editing these instructions -`CLAUDE.md` symlinks `AGENTS.md` at root and `packages/`; edit the real file. Keep each rule self-contained while linking high-level docs. Condense when clarity survives; raise a `verify-doc-budgets` ceiling when the required content genuinely needs more space. +Root and `packages/` `CLAUDE.md` symlink `AGENTS.md`; edit targets. Keep rules self-contained, linking high-level docs. Condense without losing clarity; raise `verify-doc-budgets` ceilings only when required content needs more space. ## Vendoring policy From 1e13091f559d91fd0502e4e32a03471ece23c5a5 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Mon, 5 Oct 2026 18:18:42 +0800 Subject: [PATCH 031/155] docs: preserve instruction meaning and clarify reuse policy --- .../2026-10-05-reuse-ecosystem-declarations.i18n.yaml | 4 ++-- .../process/2026-10-05-reuse-ecosystem-declarations.md | 4 ++-- .../2026-10-05-reuse-ecosystem-declarations.zh.md | 4 ++-- AGENTS.md | 10 +++++----- docs/AGENTS.md | 2 +- scripts/doc-budgets.manifest.json | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml index 300c47e026..deb5b655f2 100644 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml @@ -9,8 +9,8 @@ en: 549330d38e58af03 zh: be91a1cc6d5d5004 /agent-note-reuse-ecosystem-declarations/decision: - en: f9d931cab44e8cc2 - zh: 1560a1b50717f00b + en: b86e80cdb73058b8 + zh: 8a1143246b38a1d5 /agent-note-reuse-ecosystem-declarations/alternatives-considered: en: e323031a81d83039 zh: c5bce4f4257b01da diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md index 04a7cb6c6b..dd28b72e31 100644 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md @@ -10,9 +10,9 @@ Custom declarations can duplicate information that package ecosystems already de ## Decision -DSH reuses established ecosystem declarations, formats, and meanings when they satisfy its requirements. Readers use maintained parsers and validators. Catalogs and user interfaces derive their data from the original declarations. A generated projection may omit unused fields or normalize display data, but it preserves the source meaning and documents the projection. +DSH reuses established ecosystem declarations, formats, and meanings when they satisfy its requirements. Readers use maintained parsers and validators. Catalogs and user interfaces derive their data from the original declarations. A generated projection may omit unused fields or normalize display data, but it preserves the source meaning. The owning package README or generator JSDoc documents the projection rules. -A new field or changed meaning requires a specific unmet requirement and a documented difference from the ecosystem rule. For npm package metadata, reuse package identity, version and range syntax, and person fields. DSH-specific composition, localized display data, and host enforcement still require explicit DSH rules. +A new field or changed meaning requires a specific unmet requirement and a documented difference from the ecosystem rule. When authors define npm package metadata, they reuse npm's package identity, version and range syntax, and person fields. DSH-specific composition, localized display data, and host enforcement still require explicit DSH rules. The [dependency policy](2026-07-26-dependencies-over-hand-rolling.md) governs dependency selection. The [public manifest decision](../architecture/2026-09-10-public-package-manifest.md) governs the selected npm fields and DSH declarations. These decisions retain their ownership; this policy governs reuse of declarations and their interpretation. diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md index c20d38e2e7..5657df18f9 100644 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md @@ -10,9 +10,9 @@ Status: implemented ## 决策 -既有生态声明、格式和含义满足需求时,DSH 复用它们。读取方使用持续维护的解析器和校验器。目录与用户界面从原始声明派生数据。生成的投影可以省略未使用的字段,或归一化显示数据,但须保留原始含义并记录投影规则。 +既有生态声明、格式和含义满足需求时,DSH 复用它们。读取方使用持续维护的解析器和校验器。目录与用户界面从原始声明派生数据。生成的投影可以省略未使用的字段,或归一化显示数据,但须保留原始含义。所属包的 README 或生成器的 JSDoc 记录投影规则。 -新增字段或改变含义时,必须说明尚未满足的具体需求,并记录与生态规则的差异。对于 npm 包元数据,复用包身份、版本与范围语法,以及人员字段。DSH 特有的组合、本地化显示数据和宿主检查仍须明确的 DSH 规则。 +新增字段或改变含义时,必须说明尚未满足的具体需求,并记录与生态规则的差异。作者定义 npm 包元数据时,复用 npm 的包身份、版本与范围语法,以及人员字段。DSH 特有的组合、本地化显示数据和宿主约束的强制执行仍须明确的 DSH 规则。 [依赖政策](2026-07-26-dependencies-over-hand-rolling.zh.md)负责依赖选择。[公共 manifest 决策](../architecture/2026-09-10-public-package-manifest.zh.md)负责选取的 npm 字段与 DSH 声明。这些决策继续负责各自的范围;本政策负责声明及其解释的复用。 diff --git a/AGENTS.md b/AGENTS.md index 36a0325ab3..864102877b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -137,7 +137,7 @@ Real-API tests/demos read `DEEPSEEK_API_KEY`, optional `DEEPSEEK_BASE_URL`, and - **Plugins, not loop changes**: new behavior goes on documented extension points; changing `agent-loop` requires updating docs/architecture.md. - **A capability seam comprises Service Definition / Service Provider / Consumer roles.** It is complete, never one role; split only when roles evolve independently ([glossary](docs/glossary.md#capability-seam)). - **Prefer maintained dependencies over hand-rolling** when they genuinely delete owned code and tests ([policy](.agents/notes/implemented/process/2026-07-26-dependencies-over-hand-rolling.md)). -- **Reuse ecosystem declarations, formats, and meanings when suitable.** Use maintained parsers and validators; derive catalog and UI data from original declarations. New fields or changed meanings require a documented unmet requirement ([policy](.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md)). +- **Reuse ecosystem declarations, formats, and meanings when they meet DSH requirements.** Use maintained parsers and validators; derive catalog and UI data from original declarations. New fields or changed meanings require a documented unmet requirement and difference from ecosystem rules ([policy](.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md)). - **Explicit > implicit at package boundaries**: defaulting is an explicit `resolve(request): Spec` step in the owning implementation, never a hidden `?? default` inside `run()` (the `dsh-shell` request/spec split is the template). - **No hardcoded tunables in plugins**: deployment-varying choices are validated `Config` fields changeable from cordis.yml; a `DEFAULT_*` constant or test hook is not configurability. Protocol constants, external specs, and security invariants stay fixed. - **Misconfiguration fails loud** at load when self-contained, otherwise at the earliest resolvable point; never silently skip a missing referent. @@ -168,15 +168,15 @@ Read [docs/defensive-patterns.md](docs/defensive-patterns.md) before lifecycle, ## Type safety and documentation -Compile under `strict: true` and `noImplicitAny`; every remaining `any` explains why narrowing is infeasible. Every module/export has concise JSDoc for non-obvious contracts; function-like exports include `@param`/`@returns` (`verify-export-jsdoc`). Heritage-declared members, plugin-protocol slots, and constructors keep docs at the declaring Service Definition, protocol, or class. +Everything compiles under `strict: true` with `noImplicitAny`; every remaining `any` explains why narrowing is infeasible. Every module and export has concise JSDoc for its non-obvious contract; function-like exports include `@param`/`@returns`, as enforced by `verify-export-jsdoc`. Heritage-declared members, plugin-protocol slots, and constructors keep their docs at the declaring Service Definition, protocol, or class. -Comments/docs state complete contracts/context directly and concretely, without metaphors, reasoning transcripts, control-flow/test narration, review history, or code restatement. Prefer exact subjects to `contract`, `boundary`, or `shape`. `contract` names preconditions, postconditions, invariants, compatibility promises, or other obligations that callers/callees, implementers/providers, and producers/consumers rely on; `boundary` names a literal process, wire, security, transaction, or lifecycle boundary. Preserve behavior, failure, timing, ownership, safe-use facts, and rationale links; follow [dsh-prose-standard](.agents/skills/dsh-prose-standard/SKILL.md). Executed top-level gates check mechanically checkable invariants; demonstrate each changed acceptance path rejects an invalid case. Use narrow, justified exceptions; never disable rules globally. +Comments and docs state complete contracts and context, not reasoning transcripts. Use direct, concrete terms. Do not use metaphors. Before writing `contract`, `boundary`, or `shape`, ask whether a more exact term names the subject: write `response fields`, `JSON validation`, or `ESM exports` instead of `response shape`, `validation boundary`, or `module shape`. Keep `contract` for preconditions, postconditions, invariants, compatibility promises, and other obligations that callers, callees, implementers, providers, producers, or consumers rely on. Keep a literal process, wire, security, transaction, or lifecycle boundary. Do not narrate control flow or tests, preserve review history, or restate code. Keep behavior, failure, timing, ownership, and safe-use facts; link the rationale. Use [dsh-prose-standard](.agents/skills/dsh-prose-standard/SKILL.md) for decisions. Wire mechanically checkable invariants into an executed top-level gate and prove each changed acceptance path rejects an invalid case. Use narrow, justified exceptions instead of disabling a rule globally. -Every code change updates affected README/JSDoc contracts together. [docs/AGENTS.md](docs/AGENTS.md) governs routine bilingual work, current-state prose, one physical line/paragraph, one home/fact, and word budgets; `dsh-translate-docs` requires explicit user invocation. +Docs accompany every code change: update affected README and JSDoc contracts together. Routine bilingual work follows [docs/AGENTS.md](docs/AGENTS.md); only explicit user invocation may run `dsh-translate-docs`. Current-state prose, one physical line per paragraph, one home per fact, and word budgets live there. ## Editing these instructions -Root and `packages/` `CLAUDE.md` symlink `AGENTS.md`; edit targets. Keep rules self-contained, linking high-level docs. Condense without losing clarity; raise `verify-doc-budgets` ceilings only when required content needs more space. +`CLAUDE.md` symlinks `AGENTS.md` at root and `packages/`; edit the real file. Keep each rule self-contained while linking high-level docs. Condense when clarity survives; raise a `verify-doc-budgets` ceiling when the required content genuinely needs more space. ## Vendoring policy diff --git a/docs/AGENTS.md b/docs/AGENTS.md index b524a84b3e..6e2c5527b4 100644 --- a/docs/AGENTS.md +++ b/docs/AGENTS.md @@ -55,7 +55,7 @@ When the gate goes red: 2. **Condense** content that belongs here but can be shorter. 3. **Raise** the ceiling only when the words need the space; justify the manifest diff in the PR. A too-low ceiling is a budget bug. -Ceilings are guardrails, not reduction targets. At or below target, retain at least 5% headroom; above target, freeze the ceiling until relocation or condensation brings the document under target. Lower a ceiling only when the document still has room. Targets: root `AGENTS.md` ≤ 1,960; `architecture.md` ≤ 2,400; subtree `AGENTS.md` ≤ 600, except `packages/AGENTS.md` ≤ 750 and this file ≤ 1,320; `packages/README.md` ≤ 994; plus `cordis-primer.md` 600, `defensive-patterns.md` 550, `testing.md` 1,300, `examples/AGENTS.md` 310. Review governs unbudgeted tiers. +Ceilings are guardrails, not reduction targets. At or below target, retain at least 5% headroom; above target, freeze the ceiling until relocation or condensation brings the document under target. Lower a ceiling only when the document still has room. Targets: root `AGENTS.md` ≤ 2,060; `architecture.md` ≤ 2,400; subtree `AGENTS.md` ≤ 600, except `packages/AGENTS.md` ≤ 750 and this file ≤ 1,320; `packages/README.md` ≤ 994; plus `cordis-primer.md` 600, `defensive-patterns.md` 550, `testing.md` 1,300, `examples/AGENTS.md` 310. Review governs unbudgeted tiers. ## The slop checklist diff --git a/scripts/doc-budgets.manifest.json b/scripts/doc-budgets.manifest.json index 2eba3f4c17..670ff02765 100644 --- a/scripts/doc-budgets.manifest.json +++ b/scripts/doc-budgets.manifest.json @@ -1,5 +1,5 @@ { - "AGENTS.md": 1960, + "AGENTS.md": 2060, "docs/AGENTS.md": 1320, "docs/architecture.md": 2410, "docs/cordis-primer.md": 600, From cecb029374e624cbfb327435102ab3b019087ab0 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Mon, 5 Oct 2026 20:17:59 +0800 Subject: [PATCH 032/155] docs(plugin-market): reuse npm declarations and distribution tags --- ...10-02-plugin-market-index-format.i18n.yaml | 36 ++++----- .../2026-10-02-plugin-market-index-format.md | 74 +++++++++++++------ ...026-10-02-plugin-market-index-format.zh.md | 74 +++++++++++++------ 3 files changed, 120 insertions(+), 64 deletions(-) diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index 55e15276b5..bdcc02c66a 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -9,8 +9,8 @@ en: ce5e4a362f558af6 zh: 29d93e0655b99217 /agent-note-plugin-market-index-format/proposal: - en: 7b728d6cbf6f16d6 - zh: 73e79d35b0dbfbad + en: 91b1df0d57ed60bb + zh: 3fbe3e01c0ad03dc /agent-note-plugin-market-index-format/proposal/example: en: 1b1c960c966cf912 zh: 97be87cb14893c26 @@ -18,29 +18,29 @@ en: 4fac5a9b8261342d zh: f9168a8a4209feab /agent-note-plugin-market-index-format/proposal/plugin-fields: - en: f728927a89754892 - zh: 3bc3b18cac60cdc1 + en: f292b64bad6c59e3 + zh: 2acbeabe99ca4354 /agent-note-plugin-market-index-format/proposal/version-fields: - en: d82d84e9f15f0a8c - zh: fa65770cd7607c15 + en: 83480978017dbcf7 + zh: 9a5bb55554f90caa /agent-note-plugin-market-index-format/proposal/install-arguments: en: c748cdc4d8ce349a zh: 5740fa0d6106e637 /agent-note-plugin-market-index-format/proposal/dsh-compatibility: - en: 323c997bccd7cf4a - zh: fd588d37925d3732 + en: 0212a29fac169225 + zh: 7c0f39e7be7ff502 /agent-note-plugin-market-index-format/proposal/generator-obligations: - en: 2355bd40a77e615c - zh: a83fa20f47b49e44 + en: 5b6e0defe28f4546 + zh: 5ee91013aa7d299c /agent-note-plugin-market-index-format/proposal/reader-rules: - en: 40613286c82370b2 - zh: f6b2452c75e9fc71 + en: 6e569aa9aa00078a + zh: f9db9f0063f0689d /agent-note-plugin-market-index-format/alternatives-considered: - en: d102d17d4203c592 - zh: b98f970545e3e07f + en: 001d2d67f4f725cb + zh: 5a0adbc3d1397eed /agent-note-plugin-market-index-format/acceptance-criteria: - en: f364af5c0343a23e - zh: 8b8c2a3ec3f6a57f + en: 3767130fe3b88801 + zh: bdd530b7aca75206 /agent-note-plugin-market-index-format/risks: - en: e9ef08d42066f51a - zh: 7b2ee5cda4c800ba + en: 0f60dad7891f7589 + zh: 9f0ebb72d3aafba4 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index 2d6b0c10a4..8a102f1816 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -16,6 +16,8 @@ An index must therefore carry everything a list page displays: localized title a Separate the **index** from the **index generator**. DSH defines and reads one JSON index format. How an index is produced, and from which source list, belongs to the generator. DSH's reader, its Discover page, and a reference generator are separate changes that consume this format. Indexes list [profile plugin bundles](../../implemented/architecture/2026-08-05-profile-plugin-bundles.md) and install them through [guided plugin installation](../../implemented/architecture/2026-09-15-guided-plugin-installation.md). +Package authors use [npm declarations](https://docs.npmjs.com/cli/v11/configuring-npm/package-json/). An index caches selected package metadata and adds localized display data, source pins, and market metadata. Readers and generators use maintained npm parsers and normalizers. They do not introduce another author-maintained package identity, compatibility declaration, or author field. + ### Example ```json @@ -48,18 +50,21 @@ Separate the **index** from the **index generator**. DSH defines and reads one J "labels": ["official"], "sortKeys": { "downloads": 12034, "rating": 4.6 } }, + "dist-tags": { "latest": "0.2.0-rc.1", "next": "0.2.0-rc.2" }, "versions": [ { "version": "0.2.0-rc.2", "publishTimestamp": 1790476800, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.2" } + "engines": { "dsh": "0.2.0-rc.2" }, + "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.2" } }, { "version": "0.2.0-rc.1", "publishTimestamp": 1789872000, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.1" } + "engines": { "dsh": "0.2.0-rc.1" }, + "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.1" } } ] }, @@ -67,6 +72,7 @@ Separate the **index** from the **index generator**. DSH defines and reads one J "name": "dsh-plugin-foo", "title": "Foo", "icon": "https://example.com/foo.png", + "dist-tags": { "latest": "1.0.0" }, "versions": [ { "version": "1.0.0", @@ -105,27 +111,29 @@ Category, label, and sort-key ids are non-empty strings. Readers look ids up as | Field | Required | Rule | |---|---|---| -| `name` | yes | Package name matching `^(@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*$`, at most 214 characters, unique within the index. | +| `name` | yes | Package name accepted by npm's maintained package-name validator for new packages; unique within the index. | | `title` | no | `LocalizedText`; a reader displays `name` when absent. | -| `description` | no | `LocalizedText`. | +| `description` | no | `LocalizedText` for catalog display, derived from locale metadata and the npm description. | | `icon` | no | Either `data:;base64,`, where `` is `image/svg+xml`, `image/png`, `image/jpeg`, or `image/webp`, `` is canonically padded base64, and the decoded payload is at most 256 KiB; or a URL reference whose resolution against the index URL is an `https:` URL or has the index URL's origin. | -| `author` | no | String with at least one non-whitespace character. | +| `author` | no | Display name containing a non-whitespace character, projected from the npm author declaration; see Generator obligations. | | `homepage` | no | Absolute `https:` or `http:` URL of a page about the plugin. | | `metadata` | no | Object holding the three values below. | | `metadata.category` | no | One declared category id. | | `metadata.labels` | no | Array of distinct declared label ids. | | `metadata.sortKeys` | no | Object mapping a declared sort-key id → finite number. | -| `versions` | yes | Non-empty array of versions; see below. Its order has no meaning. | +| `dist-tags` | no | Object mapping npm distribution-tag names to exact version strings listed in `versions`. Absent means no recorded channels. | +| `versions` | yes | Non-empty array of versions; see below. Array order does not select a default version. | ### Version fields | Field | Required | Rule | |---|---|---| -| `version` | yes | Exact version in the SemVer 2.0.0 grammar, with optional prerelease and build metadata and without a `v` prefix or whitespace; unique within the plugin. | +| `version` | yes | Exact package version parsed by npm's `node-semver`; preserve its complete string, including build metadata. The exact string is unique within the plugin. | | `publishTimestamp` | yes | Integer Unix timestamp in seconds, in `[0, 10^11)`. | | `source` | yes | Where `version` is installed from; see below. | -| `engines` | no | Object. | -| `engines.dsh` | no | Non-empty SemVer range string that does not start with `workspace:`; the DSH versions this version runs on. Absent means any DSH version. | +| `engines` | no | npm manifest object mapping engine names to requirement strings, copied without range rewriting. | +| `engines.dsh` | no | Requirement string for the running DSH process. An empty or invalid range is incompatible; absence adds no host requirement. | +| `peerDependencies` | no | npm manifest object mapping package names to requirement strings, copied without range rewriting. DSH peers constrain compatibility; other peers remain package-manager requirements. | A relative `icon` reference resolves against the index URL, as an HTML image reference resolves against its page. For an index at `https://market.example/dsh/index.json`, `"icon": "icons/foo.svg"` names `https://market.example/dsh/icons/foo.svg`. A generator can therefore publish the index and its icon files as one directory on any static host without knowing the final URL. Absolute icon URLs on other origins must use `https:`; the same-origin allowance lets an `http:` index on a loopback or intranet host serve its own icons. Readers resolve the reference when they read the index, so clients receive absolute URLs. @@ -143,9 +151,11 @@ A client installs one version with exactly these pnpm arguments: ### DSH compatibility -DSH's installation check reads `engines.dsh` from the package manifest. When it is present, the package is compatible exactly when the running DSH version satisfies that range, prereleases included; an invalid range is incompatible. Only a manifest without `engines.dsh` falls back to its `@deepseek-ai/dsh` and `@deepseek-ai/dsh-*` `peerDependencies`. Exact `name@version` exemptions apply to both rules. +An index carries the manifest's `peerDependencies` and `engines` as separate declarations. DSH tests every `@deepseek-ai/dsh` and `@deepseek-ai/dsh-*` peer against the running DSH version. A declared `engines.dsh` adds a host requirement; it does not replace those peers. The version is compatible only when every applicable requirement matches. Missing declarations add no requirement. -The fallback tests every DSH peer range against the same running DSH version, so their conjunction is one SemVer range with the same result. SemVer ranges have no parentheses, so the conjunction joins one `||` alternative from each range with spaces, for every combination, and joins the combinations with `||`. An index therefore carries a single `engines.dsh`. +The index reader and installation use one DSH compatibility evaluator with npm's `node-semver` parser and `includePrerelease: true`. Empty or invalid DSH ranges are incompatible. The existing peer rule maps `workspace:*`, `workspace:^`, and `workspace:~` to the running DSH version; other `workspace:` peer ranges are incompatible. Engine ranges do not use that peer mapping. Exact local `name@version` exemptions apply to both kinds of DSH requirement and are not published in the index. + +Generators preserve each requirement string. Readers evaluate the strings separately; they do not concatenate or expand their ranges. npm owns package peer resolution and its Node/npm engine checks. DSH owns enforcement of its custom `engines.dsh` key, as recorded in the [public manifest decision](../../implemented/architecture/2026-09-10-public-package-manifest.md). ### Generator obligations @@ -153,19 +163,27 @@ A reader cannot verify these rules; a generator that violates them publishes a m - `name` and each `version` equal the package manifest of the installed source. - `publishTimestamp` is the registry publish time of `version` for npm sources and the committer time of `commit` for Git sources. -- `engines.dsh` copies the manifest's `engines.dsh`. Without one, it is the conjunction, as defined in DSH compatibility, of the manifest's DSH peer ranges after publication rewriting, omitting `workspace:*`, `workspace:^`, and `workspace:~`, because installation treats them as the running DSH version; with no remaining range, `engines.dsh` is absent. Installation finds any other `workspace:` range incompatible with every DSH version, so generators do not list such a version. +- `engines` and `peerDependencies` copy the source manifest. npm sources use published metadata, including npm's publication rewriting. Git sources use the pinned manifest. Invalid DSH ranges remain visible as incompatible requirements; they are not omitted or converted into another declaration. +- `dist-tags` snapshots the registry's [distribution tags](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/). A generator includes each retained tag's target version, or omits that tag when its target is outside the listed bundle versions. For Git sources, the publisher or market supplies the same exact tag-to-version mapping. - Each listed version declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. -- `title`, `description`, `icon`, and `author` come from the highest listed version's locale `meta` fields, manifest fields, and icon, using the rules for installed plugin display metadata. `homepage` copies that version's manifest `homepage` and is absent without one. +- Package-derived display fields come from the exact version named by `dist-tags.latest`. Without that tag, generators omit those display fields and readers use the package-name fallback. `title`, `description`, and `icon` follow installed-plugin display metadata rules, subject to this format's `LocalizedText` requirements. Localized text is catalog display data, not another npm manifest declaration. `homepage` copies the selected manifest's `homepage` and is absent without one. +- npm's `author` may be a person object or shorthand string. For an object, generators copy its `name` when it contains a non-whitespace character. For a shorthand string, they use a maintained npm person normalizer and take its `name` under the same condition. They omit an absent or whitespace-only name and do not copy email or URL into this display field. They normalize only the author projection, preserving version strings and exemption identities. ### Reader rules -A reader rejects the whole index when the document violates any rule in Root fields, Plugin fields, Version fields, or the `source` forms, including an undeclared category, label, or sort-key reference, a duplicate `name` or `version`, or a `format` other than `1`. Each such defect is a generator bug, and dropping entries silently would hide it. Readers may bound the document size. +A reader rejects the whole index when the document violates any rule in Root fields, Plugin fields, Version fields, or the `source` forms, including an undeclared category, label, or sort-key reference, an unlisted distribution-tag target, a duplicate `name` or exact `version` string, or a `format` other than `1`. Each such defect is a generator bug, and dropping entries silently would hide it. Readers may bound the document size. A reader ignores members that this note does not define, at every level; an unknown `source.type` value is rejected. Format 1 can then gain optional members without breaking existing readers; a change that existing readers would misinterpret uses a new `format` value. +Entries in `engines`, `peerDependencies`, and `dist-tags` are declared data, not unknown members to discard. Their values must be strings; a non-string value invalidates the index. A DSH requirement string can be empty or syntactically invalid and remains visible as incompatible. Distribution-tag names use npm's tag validation, and targets match listed version strings exactly. + Categories, labels, and sort keys are opaque: a reader filters and sorts by them, displays their `title`, and never interprets an id. Readers display declarations in the order of their localized `title`. When sorting plugins, a plugin without a value for the selected sort key follows all plugins with a value in either direction, and equal values keep the index order. Sorting by publish time uses a plugin's greatest `publishTimestamp`. -A reader evaluates each version's compatibility from `engines.dsh` with the rule in DSH compatibility. A reader orders versions by SemVer precedence. A plugin's default version is its highest compatible version without a prerelease tag; a plugin with no such version at all uses its highest compatible prerelease. A plugin without a compatible default version displays as incompatible, and a client may still offer its other versions individually. +A reader evaluates each version's declared requirements with the rule in DSH compatibility. It orders versions by npm SemVer precedence; equally ranked versions keep their index order for display only. Full version strings identify entries, including versions that differ only in build metadata. + +The initial channel is `latest`. Its exact tag target is the version selected by the publisher or market, even when another version has higher SemVer precedence. A client installs the listed exact version or commit, never `name@latest`. If `latest` is absent, version selection is required. If its target is incompatible, the client reports that requirement and offers other versions for explicit selection. It does not switch channels or select another release or prerelease automatically. + +Clients identify prereleases when users choose an exact version or channel, and in the installation confirmation. A publisher may deliberately tag a prerelease as `latest`; its presence does not authorize installation without that explicit confirmation. Clients attribute display fields, labels, categories, and scores to the index URL. A market label such as `official` is not DSH verification, and scores from different markets do not imply a shared scale. ## Alternatives considered @@ -183,9 +201,11 @@ A reader evaluates each version's compatibility from `engines.dsh` with the rule **Inline icons only.** A list without extra requests needs inline icons, but 256 KiB of raw bytes is about 341 KiB as base64, so a 100-plugin index could reach about 35 MB. URL icons trade extra requests, and disclosure of the user's IP address to the image host, for a small index. -**Copying DSH `peerDependencies` into the index.** It maps several package names to ranges that all constrain one DSH version, and names the constraint after npm peer resolution. `engines.dsh` states the same constraint once, and installation reads it first. +**Combining peer ranges into one synthetic `engines.dsh`.** This creates another compatibility declaration and requires range-intersection logic. Preserving the npm maps lets the reader and installer evaluate the same requirements, including hyphen ranges and `||` alternatives. -**A structured `author` such as npm's `{ name, email, url }`.** Clients only display an author, and an email member would spread addresses into every index. +**Letting `engines.dsh` override peers.** Host and package requirements express different obligations. Replacing package requirements with a broad host range can hide an incompatible DSH peer. + +**Copying the complete npm person object into the display field.** The catalog needs a name. A documented projection supports npm's original object and shorthand declarations while omitting unused contact fields. **Opaque sort values for time, including ISO date strings.** Publish time has fixed semantics that clients format and sort, so it is a typed field. Without time, sort values can be numbers only, which needs no per-key value-type rule. @@ -193,24 +213,32 @@ A reader evaluates each version's compatibility from `engines.dsh` with the rule **Declaration order as display order.** JavaScript reorders integer-like object keys, so declaration order would need either an id pattern or array declarations. Clients sort declarations by their localized title instead. -**Allowing `workspace:` ranges.** Installation maps `workspace:*`, `workspace:^`, and `workspace:~` to the running DSH version, so every runtime would appear compatible; omitting them states the same result explicitly. +**Dropping workspace or invalid peer ranges.** A generator would then hide requirements that installation reads. Retaining their literal strings lets the shared checker apply the existing workspace rules and report incompatibility. -**Prereleases as default versions.** Installation accepts prereleases, but offering a release candidate by default to users of a plugin with stable releases would install untested builds without a choice. +**Selecting the greatest compatible version.** npm's `latest` tag is publisher-controlled and can name an older release. Replacing it with version ranking loses that choice and leaves equal-precedence builds without a unique target. + +**Automatic prerelease fallback.** Missing or incompatible channel targets do not indicate that the user chose a prerelease. A client requires explicit version or channel selection instead. **Rejecting unknown members.** Every optional addition would then require a new `format` value and break every deployed reader. ## Acceptance criteria -- A validator accepts the example above and rejects one violation of each rule in Root fields, Plugin fields, Version fields, and the `source` forms, with a diagnostic naming the JSON path. +- A validator accepts the example above and rejects one violation of each structural rule in Root fields, Plugin fields, Version fields, and the `source` forms, with a diagnostic naming the JSON path. Invalid DSH range strings are accepted structurally and evaluated as incompatible. - Install arguments built from every example version are accepted by DSH's install-spec parser and by pnpm. - A validator ignores unknown members at every level. -- DSH's installation check prefers `engines.dsh` over DSH `peerDependencies`, and compatibility computed from an index version matches it for the same manifest. +- Index and installation compatibility match for the same manifest, runtime version, and local exemptions. Cases cover hyphen ranges, `||` alternatives, workspace shorthands, invalid ranges, and a broad engine range with an incompatible DSH peer. +- Exact `dist-tags` targets select the same source when equally ranked build-metadata versions are reordered. Missing tag targets are rejected; absent or incompatible `latest` never causes an implicit version or channel switch. +- Author objects and shorthand strings produce the declared display name without contact fields or version normalization. +- A parser validates `1.0.0+one` and preserves that complete string for tag lookup, installation identity, and local exemption keys. +- Installation confirmation identifies the selected version, channel when selected, prerelease status, index URL, and source. Market labels and scores remain attributed claims. ## Risks - An index is unsigned. A market can use a misleading `title`, such as one claiming to be official; clients must show the index URL and each version's `source`. -- A Git version's `name`, `version`, and `engines.dsh` are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. +- A Git version's identity and requirements are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. - An npm version's `source.registry` is equally a claim: it directs the install of any `name`, including an `@deepseek-ai/dsh-` name, to a registry the market chooses, and that registry decides what is installed. - URL icons disclose the user's IP address to image hosts. -- Pinned versions stay stale until the index is regenerated. +- Pinned versions and distribution tags stay stale until the index is regenerated. +- Version pinning does not authenticate a market's identity or guarantee the bytes an arbitrary registry returns. Installed package checks remain independent of the catalog. +- Readers and generators must adopt this revised proposal together before deployment; mixing the original and revised format-1 rules can change compatibility results and version selection. - Market text reaches users, and models through any client tool that lists plugins, without review by DSH. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index abdeaf78c4..ef95177cdf 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -16,6 +16,8 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 将**索引**与**索引生成器**分开。DSH 定义并读取一种 JSON 索引格式。索引如何生成、基于哪份源列表生成,由生成器负责。DSH 的读取器、Discover 页面和参考生成器是使用此格式的独立变更。索引列出[profile 插件组合包](../../implemented/architecture/2026-08-05-profile-plugin-bundles.zh.md),并通过[引导式插件安装](../../implemented/architecture/2026-09-15-guided-plugin-installation.zh.md)安装它们。 +包作者使用 [npm 声明](https://docs.npmjs.com/cli/v11/configuring-npm/package-json/)。索引缓存选取的包元数据,并增加本地化显示数据、固定的来源和市场元数据。读取方和生成器使用持续维护的 npm 解析器和归一化工具。它们不引入另一份由作者独立维护的包身份、兼容性声明或作者字段。 + ### 示例 ```json @@ -48,18 +50,21 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 "labels": ["official"], "sortKeys": { "downloads": 12034, "rating": 4.6 } }, + "dist-tags": { "latest": "0.2.0-rc.1", "next": "0.2.0-rc.2" }, "versions": [ { "version": "0.2.0-rc.2", "publishTimestamp": 1790476800, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.2" } + "engines": { "dsh": "0.2.0-rc.2" }, + "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.2" } }, { "version": "0.2.0-rc.1", "publishTimestamp": 1789872000, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.1" } + "engines": { "dsh": "0.2.0-rc.1" }, + "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.1" } } ] }, @@ -67,6 +72,7 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 "name": "dsh-plugin-foo", "title": "Foo", "icon": "https://example.com/foo.png", + "dist-tags": { "latest": "1.0.0" }, "versions": [ { "version": "1.0.0", @@ -105,27 +111,29 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 | 字段 | 必填 | 规则 | |---|---|---| -| `name` | 是 | 匹配 `^(@[a-z0-9][a-z0-9._~-]*/)?[a-z0-9][a-z0-9._~-]*$` 的包名,长度不超过 214 个字符,在索引内唯一。 | +| `name` | 是 | npm 持续维护的包名校验器接受的新包名称;在索引内唯一。 | | `title` | 否 | `LocalizedText`;缺省时读取器显示 `name`。 | -| `description` | 否 | `LocalizedText`。 | +| `description` | 否 | 用于市场列表显示的 `LocalizedText`,由语言元数据和 npm 描述派生。 | | `icon` | 否 | 以下两种形式之一:`data:;base64,`,其中 `` 为 `image/svg+xml`、`image/png`、`image/jpeg` 或 `image/webp`,`` 是按规范填充的 base64,解码后的载荷不超过 256 KiB;或者 URL 引用,它相对于索引 URL 解析的结果是 `https:` URL,或与索引 URL 同源。 | -| `author` | 否 | 至少包含一个非空白字符的字符串。 | +| `author` | 否 | 从 npm 作者声明投影得到的显示名称,至少包含一个非空白字符;见生成器义务。 | | `homepage` | 否 | 介绍该插件的页面的绝对 `https:` 或 `http:` URL。 | | `metadata` | 否 | 包含下列三个值的对象。 | | `metadata.category` | 否 | 一个已声明的分类 id。 | | `metadata.labels` | 否 | 由互不相同的已声明标签 id 组成的数组。 | | `metadata.sortKeys` | 否 | 对象,将已声明的排序键 id 映射为有限数值。 | -| `versions` | 是 | 非空的版本数组;见下文。数组顺序没有含义。 | +| `dist-tags` | 否 | 对象,将 npm 分发标签名映射为 `versions` 中列出的精确版本字符串。缺省表示没有记录的渠道。 | +| `versions` | 是 | 非空的版本数组;见下文。数组顺序不决定默认版本。 | ### 版本字段 | 字段 | 必填 | 规则 | |---|---|---| -| `version` | 是 | 符合 SemVer 2.0.0 语法的精确版本,可带先行版本号和版本编译信息,不带 `v` 前缀,不含空白字符;在插件内唯一。 | +| `version` | 是 | 由 npm 的 `node-semver` 解析的精确包版本;保留完整字符串,包括版本编译信息。精确字符串在插件内唯一。 | | `publishTimestamp` | 是 | 以秒为单位的整数 Unix 时间戳,取值范围为 `[0, 10^11)`。 | | `source` | 是 | `version` 的安装来源;见下文。 | -| `engines` | 否 | 对象。 | -| `engines.dsh` | 否 | 不以 `workspace:` 开头的非空 SemVer 范围字符串,表示该版本可运行的 DSH 版本。缺省表示任意 DSH 版本。 | +| `engines` | 否 | npm manifest 对象,将引擎名称映射为要求字符串,复制时不改写范围。 | +| `engines.dsh` | 否 | 对当前运行的 DSH 进程的要求字符串。空范围或无效范围不兼容;缺省不增加宿主要求。 | +| `peerDependencies` | 否 | npm manifest 对象,将包名映射为要求字符串,复制时不改写范围。DSH 对等依赖(peer dependency)约束兼容性;其他对等依赖仍由包管理器处理。 | 相对的 `icon` 引用相对于索引 URL 解析,与 HTML 图片引用相对于所在页面解析的方式相同。对于位于 `https://market.example/dsh/index.json` 的索引,`"icon": "icons/foo.svg"` 指向 `https://market.example/dsh/icons/foo.svg`。因此,生成器可以把索引和图标文件作为一个目录发布到任意静态主机,无需知道最终 URL。指向其他源的绝对图标 URL 必须使用 `https:`;同源规则允许位于 loopback 或内网主机上的 `http:` 索引提供自己的图标。读取器在读取索引时解析该引用,因此客户端收到的是绝对 URL。 @@ -143,9 +151,11 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 ### DSH 兼容性 -DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时,当且仅当当前运行的 DSH 版本满足该范围(包括先行版本)时包才兼容;无效范围视为不兼容。只有没有 `engines.dsh` 的 manifest 才回退到其 `@deepseek-ai/dsh` 与 `@deepseek-ai/dsh-*` 的 `peerDependencies`。精确的 `name@version` 豁免对两条规则都适用。 +索引将 manifest 的 `peerDependencies` 和 `engines` 作为两份独立声明保留。DSH 用当前运行的 DSH 版本检验每个 `@deepseek-ai/dsh` 与 `@deepseek-ai/dsh-*` 对等依赖。声明的 `engines.dsh` 增加一条宿主要求,不替代这些对等依赖。只有满足每条适用要求时,该版本才兼容。缺少声明不增加要求。 -回退规则用同一个当前运行的 DSH 版本检验每个 DSH peer 范围,因此这些范围的合取是一个结果相同的 SemVer 范围。SemVer 范围没有括号,所以合取的写法是:从每个范围各取一个 `||` 分支,用空格连接,遍历所有组合,再用 `||` 连接这些组合。因此索引只携带一个 `engines.dsh`。 +索引读取器和安装检查使用同一个 DSH 兼容性求值器,采用 npm 的 `node-semver` 解析器和 `includePrerelease: true`。空的或无效的 DSH 范围不兼容。既有对等依赖规则将 `workspace:*`、`workspace:^` 和 `workspace:~` 映射为当前运行的 DSH 版本;其他 `workspace:` 对等依赖范围不兼容。引擎范围不采用这种对等依赖映射。精确的本地 `name@version` 豁免适用于两种 DSH 要求,但不发布到索引中。 + +生成器保留每条要求字符串。读取器分别求值,不拼接或展开范围。npm 负责包的对等依赖解析及其 Node/npm 引擎检查。DSH 负责强制检查自定义 `engines.dsh` 键,规则记录在[公共 manifest 决策](../../implemented/architecture/2026-09-10-public-package-manifest.zh.md)中。 ### 生成器义务 @@ -153,19 +163,27 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, - `name` 和每个 `version` 与所安装来源中的包 manifest 一致。 - 对于 npm 来源,`publishTimestamp` 是 `version` 在 registry 中的发布时间;对于 Git 来源,它是 `commit` 的提交者时间。 -- `engines.dsh` 复制 manifest 中的 `engines.dsh`。manifest 没有该字段时,它是 manifest 中经发布改写后的 DSH peer 范围按 DSH 兼容性一节定义的合取,并省略 `workspace:*`、`workspace:^` 和 `workspace:~`,因为安装时会将它们视为当前运行的 DSH 版本;没有剩余范围时省略 `engines.dsh`。安装检查认为其他任何 `workspace:` 范围与所有 DSH 版本都不兼容,因此生成器不列出此类版本。 +- `engines` 和 `peerDependencies` 复制来源 manifest 的声明。npm 来源使用已发布元数据,包括 npm 发布时的改写。Git 来源使用固定提交中的 manifest。无效的 DSH 范围作为不兼容要求保留,不省略,也不转换成其他声明。 +- `dist-tags` 保存 registry [分发标签](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/)的快照。生成器包含每个保留标签的目标版本;目标不在列出的组合包版本中时,省略该标签。对于 Git 来源,发布者或市场提供同样的精确标签到版本的映射。 - 列出的每个版本都声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 -- `title`、`description`、`icon` 和 `author` 来自所列最高版本的语言文件 `meta` 字段、manifest 字段和图标,并采用已安装插件显示元数据的规则。`homepage` 复制该版本 manifest 的 `homepage`,manifest 没有该字段时省略。 +- 来自包的显示字段取自 `dist-tags.latest` 指向的精确版本。没有该标签时,生成器省略这些显示字段,读取器回退到包名。`title`、`description` 和 `icon` 遵循已安装插件的显示元数据规则,同时满足本格式的 `LocalizedText` 要求。本地化文本是市场列表显示数据,不是另一份 npm manifest 声明。`homepage` 复制所选 manifest 的 `homepage`,manifest 没有该字段时省略。 +- npm 的 `author` 可以是人员对象或简写字符串。对于对象,生成器复制其包含非空白字符的 `name`。对于简写字符串,生成器使用持续维护的 npm 人员归一化工具,在相同条件下取结果中的 `name`。名称不存在或只有空白时省略,不将 email 或 URL 复制到该显示字段。生成器只归一化作者投影,保留版本字符串与豁免身份。 ### 读取器规则 -文档违反根字段、插件字段、版本字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,`name` 或 `version` 重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 +文档违反根字段、插件字段、版本字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,分发标签指向未列出的版本,`name` 或精确 `version` 字符串重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 读取器在每一层都忽略本 Agent Note 未定义的成员;未知的 `source.type` 值会被拒绝。这样格式 1 可以增加可选成员而不破坏现有读取器;现有读取器会误解的变更使用新的 `format` 值。 +`engines`、`peerDependencies` 和 `dist-tags` 中的条目是声明的数据,不是应当丢弃的未知成员。其值必须为字符串;非字符串值使索引无效。DSH 要求字符串可以为空或语法无效,但仍作为不兼容要求保留。分发标签名使用 npm 的标签校验规则,目标与所列版本字符串精确匹配。 + 分类、标签和排序键对读取器不透明:读取器按它们筛选和排序,显示其 `title`,从不解释 id 的含义。读取器按本地化 `title` 对声明排序后显示。对插件排序时,无论排序方向如何,没有所选排序键值的插件都排在所有有值的插件之后,值相同的插件保持索引顺序。按发布时间排序时使用插件最大的 `publishTimestamp`。 -读取器按 DSH 兼容性一节的规则,根据 `engines.dsh` 评估每个版本的兼容性。读取器按 SemVer 优先级对版本排序。插件的默认版本是其不带先行版本号的最高兼容版本;完全没有此类版本的插件使用其最高兼容的先行版本。没有兼容默认版本的插件显示为不兼容,客户端仍可单独提供它的其他版本。 +读取器按 DSH 兼容性一节的规则评估每个版本的声明要求。它按 npm SemVer 优先级对版本排序;优先级相同的版本保留索引顺序,该顺序只用于显示。完整版本字符串标识条目,包括仅版本编译信息不同的版本。 + +初始渠道为 `latest`。标签的精确目标是发布者或市场选定的版本,即使另一个版本具有更高的 SemVer 优先级。客户端安装索引中列出的精确版本或提交,不使用 `name@latest`。没有 `latest` 时,需要选择版本。目标不兼容时,客户端显示该要求,并提供其他版本供显式选择。它不自动切换渠道,也不自动选择其他正式版本或先行版本。 + +用户选择精确版本或渠道时,以及安装确认中,客户端标识先行版本。发布者可以有意将先行版本标记为 `latest`;标签的存在不授权跳过该显式确认而安装。客户端将显示字段、标签、分类和评分归属于索引 URL。市场提供的 `official` 等标签不表示 DSH 验证,不同市场的评分也不隐含相同尺度。 ## 考虑过的替代方案 @@ -183,9 +201,11 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, **只允许内联图标。** 不发额外请求的列表需要内联图标,但 256 KiB 原始字节编码为 base64 后约为 341 KiB,因此 100 个插件的索引可能达到约 35 MB。URL 图标以额外请求和向图片主机暴露用户 IP 地址为代价,换取较小的索引。 -**把 DSH `peerDependencies` 复制进索引。** 它把多个包名映射到范围,而这些范围约束的都是同一个 DSH 版本,并且用 npm peer 解析的名称来命名这一约束。`engines.dsh` 只需表达一次同样的约束,并且安装时优先读取它。 +**将对等依赖范围合成为一个 `engines.dsh`。** 这会创建另一份兼容性声明,并需要范围求交逻辑。保留 npm 映射后,读取器与安装检查可以求值相同要求,包括连字符范围和 `||` 分支。 -**结构化的 `author`,例如 npm 的 `{ name, email, url }`。** 客户端只显示作者,而 email 成员会把邮箱地址扩散到每个索引中。 +**让 `engines.dsh` 覆盖对等依赖。** 宿主要求与包要求表达不同义务。用宽泛的宿主范围替代包要求,可能掩盖不兼容的 DSH 对等依赖。 + +**将完整 npm 人员对象复制到显示字段。** 市场列表需要名称。记录规则的投影支持 npm 的原始对象与简写声明,同时省略未使用的联系字段。 **用不透明排序值表示时间,包括 ISO 日期字符串。** 发布时间具有固定语义,客户端会对其格式化和排序,因此它是一个有类型的字段。排除时间后,排序值可以只用数值,无需为每个键规定值类型。 @@ -193,24 +213,32 @@ DSH 安装检查读取包 manifest 中的 `engines.dsh`。存在该字段时, **以声明顺序作为显示顺序。** JavaScript 会重排类整数的对象键,因此要保留声明顺序,就需要限定 id 格式或改用数组声明。客户端改为按本地化标题对声明排序。 -**允许 `workspace:` 范围。** 安装时会将 `workspace:*`、`workspace:^` 和 `workspace:~` 映射为当前运行的 DSH 版本,因此所有运行时都会显示为兼容;省略这些范围会明确表达同一结果。 +**丢弃 workspace 或无效的对等依赖范围。** 生成器会隐藏安装检查要读取的要求。保留原始字符串后,共享检查器可以应用既有 workspace 规则并报告不兼容。 -**默认版本使用先行版本。** 安装检查接受先行版本,但对已有稳定版本的插件默认提供候选版本,会在用户没有选择的情况下安装未经充分测试的构建。 +**选择最高兼容版本。** npm 的 `latest` 标签由发布者控制,可以指向较旧的发布版本。用版本排序替代它,会丢失这个选择,也会使优先级相同的构建没有唯一目标。 + +**自动回退到先行版本。** 渠道目标缺失或不兼容,不表示用户选择了先行版本。客户端要求显式选择版本或渠道。 **拒绝未知成员。** 这样每次增加可选成员都需要新的 `format` 值,并会破坏所有已部署的读取器。 ## 验收标准 -- 校验器接受上面的示例,并对根字段、插件字段、版本字段和 `source` 形式中的每条规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。 +- 校验器接受上面的示例,并对根字段、插件字段、版本字段和 `source` 形式中的每条结构规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。无效的 DSH 范围字符串通过结构校验,但求值结果为不兼容。 - 根据每个示例版本构建的安装参数可被 DSH 的安装 spec 解析器和 pnpm 接受。 - 校验器在每一层都忽略未知成员。 -- DSH 安装检查优先使用 `engines.dsh` 而不是 DSH `peerDependencies`,并且根据索引版本计算的兼容性与同一 manifest 的安装检查结果一致。 +- 对相同的 manifest、运行时版本和本地豁免,索引与安装检查的兼容性结果一致。用例覆盖连字符范围、`||` 分支、workspace 简写、无效范围,以及宽泛的引擎范围与不兼容的 DSH 对等依赖同时存在的情况。 +- 调整优先级相同的版本编译信息条目的顺序后,精确的 `dist-tags` 目标仍选择同一来源。读取器拒绝未列出的标签目标;`latest` 缺失或不兼容时,不隐式切换版本或渠道。 +- 作者对象与简写字符串产生声明的显示名称,不携带联系字段,也不归一化版本。 +- 解析器校验 `1.0.0+one`,并保留完整字符串供标签查找、安装身份和本地豁免键使用。 +- 安装确认标识所选版本、所选渠道(如有)、先行版本状态、索引 URL 和来源。市场标签与评分继续标明归属。 ## 风险 - 索引没有签名。市场可能使用误导性的 `title`,例如声称自己是官方市场;客户端必须显示索引 URL 以及每个版本的 `source`。 -- Git 版本的 `name`、`version` 和 `engines.dsh` 是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 +- Git 版本的身份与要求是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 - npm 版本的 `source.registry` 同样是一种声明:它把任意 `name`(包括 `@deepseek-ai/dsh-` 名称)的安装引向市场选择的 registry,由该 registry 决定实际安装的内容。 - URL 图标会向图片主机暴露用户的 IP 地址。 -- 固定版本在索引重新生成之前一直保持陈旧。 +- 固定版本与分发标签在索引重新生成之前一直保持陈旧。 +- 版本固定不验证市场身份,也不保证任意 registry 返回的字节。已安装包的检查与市场列表保持独立。 +- 读取器和生成器必须在部署前一同采用这份修订提案;混用原始与修订后的格式 1 规则,可能改变兼容性结果和版本选择。 - 市场文本未经 DSH 审核即到达用户,并通过任何列出插件的客户端工具到达模型。 From 5fab7d08d45386d20168e72d3ccddec4deea0e87 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Mon, 5 Oct 2026 20:42:40 +0800 Subject: [PATCH 033/155] docs(plugin-market): clarify enforcement and npm installation identities --- ...-05-reuse-ecosystem-declarations.i18n.yaml | 4 ++-- ...2026-10-05-reuse-ecosystem-declarations.md | 2 +- ...6-10-05-reuse-ecosystem-declarations.zh.md | 2 +- ...10-02-plugin-market-index-format.i18n.yaml | 24 +++++++++---------- .../2026-10-02-plugin-market-index-format.md | 20 ++++++++++------ ...026-10-02-plugin-market-index-format.zh.md | 20 ++++++++++------ 6 files changed, 42 insertions(+), 30 deletions(-) diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml index deb5b655f2..54cfa46fb0 100644 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml @@ -9,8 +9,8 @@ en: 549330d38e58af03 zh: be91a1cc6d5d5004 /agent-note-reuse-ecosystem-declarations/decision: - en: b86e80cdb73058b8 - zh: 8a1143246b38a1d5 + en: 1d782e8be314bf79 + zh: 6bfd9e0dcee767a2 /agent-note-reuse-ecosystem-declarations/alternatives-considered: en: e323031a81d83039 zh: c5bce4f4257b01da diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md index dd28b72e31..ad18d47c7e 100644 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md @@ -10,7 +10,7 @@ Custom declarations can duplicate information that package ecosystems already de ## Decision -DSH reuses established ecosystem declarations, formats, and meanings when they satisfy its requirements. Readers use maintained parsers and validators. Catalogs and user interfaces derive their data from the original declarations. A generated projection may omit unused fields or normalize display data, but it preserves the source meaning. The owning package README or generator JSDoc documents the projection rules. +Contributors must reuse established ecosystem declarations, formats, and meanings when they satisfy DSH requirements. Reader implementations must use maintained parsers and validators. Catalogs and user interfaces must derive their data from the original declarations. A generated projection may omit unused fields or normalize display data, but it must preserve the source meaning. The owning package README or generator JSDoc documents the projection rules. A new field or changed meaning requires a specific unmet requirement and a documented difference from the ecosystem rule. When authors define npm package metadata, they reuse npm's package identity, version and range syntax, and person fields. DSH-specific composition, localized display data, and host enforcement still require explicit DSH rules. diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md index 5657df18f9..6ecb8e29d0 100644 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md +++ b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md @@ -10,7 +10,7 @@ Status: implemented ## 决策 -既有生态声明、格式和含义满足需求时,DSH 复用它们。读取方使用持续维护的解析器和校验器。目录与用户界面从原始声明派生数据。生成的投影可以省略未使用的字段,或归一化显示数据,但须保留原始含义。所属包的 README 或生成器的 JSDoc 记录投影规则。 +既有生态声明、格式和含义满足 DSH 需求时,贡献者必须复用它们。读取器实现必须使用持续维护的解析器和校验器。目录与用户界面必须从原始声明派生数据。生成的投影可以省略未使用的字段,或归一化显示数据,但必须保留原始含义。所属包的 README 或生成器的 JSDoc 记录投影规则。 新增字段或改变含义时,必须说明尚未满足的具体需求,并记录与生态规则的差异。作者定义 npm 包元数据时,复用 npm 的包身份、版本与范围语法,以及人员字段。DSH 特有的组合、本地化显示数据和宿主约束的强制执行仍须明确的 DSH 规则。 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index bdcc02c66a..f169408955 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -18,8 +18,8 @@ en: 4fac5a9b8261342d zh: f9168a8a4209feab /agent-note-plugin-market-index-format/proposal/plugin-fields: - en: f292b64bad6c59e3 - zh: 2acbeabe99ca4354 + en: cf572978bea19f5a + zh: 80a6d9507c468958 /agent-note-plugin-market-index-format/proposal/version-fields: en: 83480978017dbcf7 zh: 9a5bb55554f90caa @@ -27,20 +27,20 @@ en: c748cdc4d8ce349a zh: 5740fa0d6106e637 /agent-note-plugin-market-index-format/proposal/dsh-compatibility: - en: 0212a29fac169225 - zh: 7c0f39e7be7ff502 + en: a6ae732431422eb7 + zh: 3750ecdc33f75b79 /agent-note-plugin-market-index-format/proposal/generator-obligations: - en: 5b6e0defe28f4546 - zh: 5ee91013aa7d299c + en: b7185a5fc36af7d3 + zh: a6fd69988607c324 /agent-note-plugin-market-index-format/proposal/reader-rules: - en: 6e569aa9aa00078a - zh: f9db9f0063f0689d + en: 7eb0df505ef26cde + zh: dfe1f56554489c0f /agent-note-plugin-market-index-format/alternatives-considered: en: 001d2d67f4f725cb zh: 5a0adbc3d1397eed /agent-note-plugin-market-index-format/acceptance-criteria: - en: 3767130fe3b88801 - zh: bdd530b7aca75206 + en: 4ffec806e7a8445e + zh: a68fee8a99f185db /agent-note-plugin-market-index-format/risks: - en: 0f60dad7891f7589 - zh: 9f0ebb72d3aafba4 + en: 19f22cc4a00b97e8 + zh: 585eea737ad6af40 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index 8a102f1816..402cdb835f 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -113,9 +113,9 @@ Category, label, and sort-key ids are non-empty strings. Readers look ids up as |---|---|---| | `name` | yes | Package name accepted by npm's maintained package-name validator for new packages; unique within the index. | | `title` | no | `LocalizedText`; a reader displays `name` when absent. | -| `description` | no | `LocalizedText` for catalog display, derived from locale metadata and the npm description. | +| `description` | no | `LocalizedText` for catalog display; see Generator obligations for its derivation. | | `icon` | no | Either `data:;base64,`, where `` is `image/svg+xml`, `image/png`, `image/jpeg`, or `image/webp`, `` is canonically padded base64, and the decoded payload is at most 256 KiB; or a URL reference whose resolution against the index URL is an `https:` URL or has the index URL's origin. | -| `author` | no | Display name containing a non-whitespace character, projected from the npm author declaration; see Generator obligations. | +| `author` | no | Display name containing a non-whitespace character; see Generator obligations for the npm author projection. | | `homepage` | no | Absolute `https:` or `http:` URL of a page about the plugin. | | `metadata` | no | Object holding the three values below. | | `metadata.category` | no | One declared category id. | @@ -153,6 +153,10 @@ A client installs one version with exactly these pnpm arguments: An index carries the manifest's `peerDependencies` and `engines` as separate declarations. DSH tests every `@deepseek-ai/dsh` and `@deepseek-ai/dsh-*` peer against the running DSH version. A declared `engines.dsh` adds a host requirement; it does not replace those peers. The version is compatible only when every applicable requirement matches. Missing declarations add no requirement. +This preserves the existing [app-boot peer check](../../../../packages/boot/app-boot/src/plugin-compatibility.ts), which receives the running DSH version explicitly. Peer declarations do not identify that process; npm's package resolution in a profile remains separate from DSH's check against its running runtime. + +Implementing this proposal extends that evaluator with `engines.dsh` enforcement and engine-aware exemptions. The current evaluator checks peers only. The index reader and installation must both use the extended evaluator before this format is deployed. + The index reader and installation use one DSH compatibility evaluator with npm's `node-semver` parser and `includePrerelease: true`. Empty or invalid DSH ranges are incompatible. The existing peer rule maps `workspace:*`, `workspace:^`, and `workspace:~` to the running DSH version; other `workspace:` peer ranges are incompatible. Engine ranges do not use that peer mapping. Exact local `name@version` exemptions apply to both kinds of DSH requirement and are not published in the index. Generators preserve each requirement string. Readers evaluate the strings separately; they do not concatenate or expand their ranges. npm owns package peer resolution and its Node/npm engine checks. DSH owns enforcement of its custom `engines.dsh` key, as recorded in the [public manifest decision](../../implemented/architecture/2026-09-10-public-package-manifest.md). @@ -167,7 +171,7 @@ A reader cannot verify these rules; a generator that violates them publishes a m - `dist-tags` snapshots the registry's [distribution tags](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/). A generator includes each retained tag's target version, or omits that tag when its target is outside the listed bundle versions. For Git sources, the publisher or market supplies the same exact tag-to-version mapping. - Each listed version declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. - Package-derived display fields come from the exact version named by `dist-tags.latest`. Without that tag, generators omit those display fields and readers use the package-name fallback. `title`, `description`, and `icon` follow installed-plugin display metadata rules, subject to this format's `LocalizedText` requirements. Localized text is catalog display data, not another npm manifest declaration. `homepage` copies the selected manifest's `homepage` and is absent without one. -- npm's `author` may be a person object or shorthand string. For an object, generators copy its `name` when it contains a non-whitespace character. For a shorthand string, they use a maintained npm person normalizer and take its `name` under the same condition. They omit an absent or whitespace-only name and do not copy email or URL into this display field. They normalize only the author projection, preserving version strings and exemption identities. +- npm's `author` may be a person object or shorthand string. For an object, generators copy its `name` when it contains a non-whitespace character. For a shorthand string, they use a maintained npm person normalizer and take its `name` under the same condition. They omit an absent or whitespace-only name and do not copy email or URL into this display field. They normalize a fresh projection, leaving the source manifest untouched. ### Reader rules @@ -175,7 +179,9 @@ A reader rejects the whole index when the document violates any rule in Root fie A reader ignores members that this note does not define, at every level; an unknown `source.type` value is rejected. Format 1 can then gain optional members without breaking existing readers; a change that existing readers would misinterpret uses a new `format` value. -Entries in `engines`, `peerDependencies`, and `dist-tags` are declared data, not unknown members to discard. Their values must be strings; a non-string value invalidates the index. A DSH requirement string can be empty or syntactically invalid and remains visible as incompatible. Distribution-tag names use npm's tag validation, and targets match listed version strings exactly. +Entries in `engines`, `peerDependencies`, and `dist-tags` are declared data, not unknown members to discard. Their values must be strings; a non-string value invalidates the index. A DSH requirement string can be empty or syntactically invalid and remains visible as incompatible. A distribution-tag name must make `name@tag` a registry tag spec under npm's maintained `npm-package-arg` parser, rather than a version or range. Tag targets match listed version strings exactly. + +npm sources use canonical published registry version identifiers: the string equals npm's `node-semver.valid()` result, without build metadata. npm's publishing normalization does not provide separately selectable build-metadata variants. Git sources can retain such variants because their commits pin the installed source independently. Readers reject non-canonical npm source versions instead of claiming an exact build selection that npm does not provide. Categories, labels, and sort keys are opaque: a reader filters and sorts by them, displays their `title`, and never interprets an id. Readers display declarations in the order of their localized `title`. When sorting plugins, a plugin without a value for the selected sort key follows all plugins with a value in either direction, and equal values keep the index order. Sorting by publish time uses a plugin's greatest `publishTimestamp`. @@ -226,10 +232,10 @@ Clients identify prereleases when users choose an exact version or channel, and - A validator accepts the example above and rejects one violation of each structural rule in Root fields, Plugin fields, Version fields, and the `source` forms, with a diagnostic naming the JSON path. Invalid DSH range strings are accepted structurally and evaluated as incompatible. - Install arguments built from every example version are accepted by DSH's install-spec parser and by pnpm. - A validator ignores unknown members at every level. -- Index and installation compatibility match for the same manifest, runtime version, and local exemptions. Cases cover hyphen ranges, `||` alternatives, workspace shorthands, invalid ranges, and a broad engine range with an incompatible DSH peer. +- Index and installation compatibility match for the same manifest, runtime version, and local exemptions. Cases cover hyphen ranges, `||` alternatives, workspace shorthands, invalid ranges, a broad engine range with an incompatible DSH peer, and compatible peers with an unsatisfied or empty `engines.dsh`. - Exact `dist-tags` targets select the same source when equally ranked build-metadata versions are reordered. Missing tag targets are rejected; absent or incompatible `latest` never causes an implicit version or channel switch. - Author objects and shorthand strings produce the declared display name without contact fields or version normalization. -- A parser validates `1.0.0+one` and preserves that complete string for tag lookup, installation identity, and local exemption keys. +- A Git version parser validates `1.0.0+one` and preserves that complete string for tag lookup, installation identity, and local exemption keys. Its commit selects the exact source; npm source versions with build metadata are rejected. - Installation confirmation identifies the selected version, channel when selected, prerelease status, index URL, and source. Market labels and scores remain attributed claims. ## Risks @@ -240,5 +246,5 @@ Clients identify prereleases when users choose an exact version or channel, and - URL icons disclose the user's IP address to image hosts. - Pinned versions and distribution tags stay stale until the index is regenerated. - Version pinning does not authenticate a market's identity or guarantee the bytes an arbitrary registry returns. Installed package checks remain independent of the catalog. -- Readers and generators must adopt this revised proposal together before deployment; mixing the original and revised format-1 rules can change compatibility results and version selection. +- Readers, generators, and installation must adopt this revised proposal together before deployment; mixing the original and revised format-1 rules can change compatibility results and version selection. - Market text reaches users, and models through any client tool that lists plugins, without review by DSH. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index ef95177cdf..503f20df4f 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -113,9 +113,9 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 |---|---|---| | `name` | 是 | npm 持续维护的包名校验器接受的新包名称;在索引内唯一。 | | `title` | 否 | `LocalizedText`;缺省时读取器显示 `name`。 | -| `description` | 否 | 用于市场列表显示的 `LocalizedText`,由语言元数据和 npm 描述派生。 | +| `description` | 否 | 用于市场列表显示的 `LocalizedText`;派生规则见生成器义务。 | | `icon` | 否 | 以下两种形式之一:`data:;base64,`,其中 `` 为 `image/svg+xml`、`image/png`、`image/jpeg` 或 `image/webp`,`` 是按规范填充的 base64,解码后的载荷不超过 256 KiB;或者 URL 引用,它相对于索引 URL 解析的结果是 `https:` URL,或与索引 URL 同源。 | -| `author` | 否 | 从 npm 作者声明投影得到的显示名称,至少包含一个非空白字符;见生成器义务。 | +| `author` | 否 | 至少包含一个非空白字符的显示名称;npm 作者投影规则见生成器义务。 | | `homepage` | 否 | 介绍该插件的页面的绝对 `https:` 或 `http:` URL。 | | `metadata` | 否 | 包含下列三个值的对象。 | | `metadata.category` | 否 | 一个已声明的分类 id。 | @@ -153,6 +153,10 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 索引将 manifest 的 `peerDependencies` 和 `engines` 作为两份独立声明保留。DSH 用当前运行的 DSH 版本检验每个 `@deepseek-ai/dsh` 与 `@deepseek-ai/dsh-*` 对等依赖。声明的 `engines.dsh` 增加一条宿主要求,不替代这些对等依赖。只有满足每条适用要求时,该版本才兼容。缺少声明不增加要求。 +这保留了既有的 [app-boot 对等依赖检查](../../../../packages/boot/app-boot/src/plugin-compatibility.ts),该检查显式接收当前运行的 DSH 版本。对等依赖声明不标识该进程;profile 中 npm 的包解析与 DSH 针对当前运行时的检查相互独立。 + +实现本提案时,须为该求值器增加 `engines.dsh` 强制检查及对应的引擎豁免处理。当前求值器只检查对等依赖。部署本格式前,索引读取器与安装检查都必须使用扩展后的求值器。 + 索引读取器和安装检查使用同一个 DSH 兼容性求值器,采用 npm 的 `node-semver` 解析器和 `includePrerelease: true`。空的或无效的 DSH 范围不兼容。既有对等依赖规则将 `workspace:*`、`workspace:^` 和 `workspace:~` 映射为当前运行的 DSH 版本;其他 `workspace:` 对等依赖范围不兼容。引擎范围不采用这种对等依赖映射。精确的本地 `name@version` 豁免适用于两种 DSH 要求,但不发布到索引中。 生成器保留每条要求字符串。读取器分别求值,不拼接或展开范围。npm 负责包的对等依赖解析及其 Node/npm 引擎检查。DSH 负责强制检查自定义 `engines.dsh` 键,规则记录在[公共 manifest 决策](../../implemented/architecture/2026-09-10-public-package-manifest.zh.md)中。 @@ -167,7 +171,7 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 - `dist-tags` 保存 registry [分发标签](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/)的快照。生成器包含每个保留标签的目标版本;目标不在列出的组合包版本中时,省略该标签。对于 Git 来源,发布者或市场提供同样的精确标签到版本的映射。 - 列出的每个版本都声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 - 来自包的显示字段取自 `dist-tags.latest` 指向的精确版本。没有该标签时,生成器省略这些显示字段,读取器回退到包名。`title`、`description` 和 `icon` 遵循已安装插件的显示元数据规则,同时满足本格式的 `LocalizedText` 要求。本地化文本是市场列表显示数据,不是另一份 npm manifest 声明。`homepage` 复制所选 manifest 的 `homepage`,manifest 没有该字段时省略。 -- npm 的 `author` 可以是人员对象或简写字符串。对于对象,生成器复制其包含非空白字符的 `name`。对于简写字符串,生成器使用持续维护的 npm 人员归一化工具,在相同条件下取结果中的 `name`。名称不存在或只有空白时省略,不将 email 或 URL 复制到该显示字段。生成器只归一化作者投影,保留版本字符串与豁免身份。 +- npm 的 `author` 可以是人员对象或简写字符串。对于对象,生成器复制其包含非空白字符的 `name`。对于简写字符串,生成器使用持续维护的 npm 人员归一化工具,在相同条件下取结果中的 `name`。名称不存在或只有空白时省略,不将 email 或 URL 复制到该显示字段。生成器归一化一份新建的投影,不改动来源 manifest。 ### 读取器规则 @@ -175,7 +179,9 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 读取器在每一层都忽略本 Agent Note 未定义的成员;未知的 `source.type` 值会被拒绝。这样格式 1 可以增加可选成员而不破坏现有读取器;现有读取器会误解的变更使用新的 `format` 值。 -`engines`、`peerDependencies` 和 `dist-tags` 中的条目是声明的数据,不是应当丢弃的未知成员。其值必须为字符串;非字符串值使索引无效。DSH 要求字符串可以为空或语法无效,但仍作为不兼容要求保留。分发标签名使用 npm 的标签校验规则,目标与所列版本字符串精确匹配。 +`engines`、`peerDependencies` 和 `dist-tags` 中的条目是声明的数据,不是应当丢弃的未知成员。其值必须为字符串;非字符串值使索引无效。DSH 要求字符串可以为空或语法无效,但仍作为不兼容要求保留。分发标签名必须使 `name@tag` 在 npm 持续维护的 `npm-package-arg` 解析器中成为 registry 标签 spec,而非版本或范围。标签目标与所列版本字符串精确匹配。 + +npm 来源使用规范的已发布 registry 版本标识:字符串等于 npm 的 `node-semver.valid()` 结果,不含版本编译信息。npm 发布时的归一化不提供仅版本编译信息不同的可独立选择版本。Git 来源可以保留此类版本,因为提交独立固定了所安装的来源。读取器拒绝不规范的 npm 来源版本,避免声称 npm 并不提供的精确构建选择。 分类、标签和排序键对读取器不透明:读取器按它们筛选和排序,显示其 `title`,从不解释 id 的含义。读取器按本地化 `title` 对声明排序后显示。对插件排序时,无论排序方向如何,没有所选排序键值的插件都排在所有有值的插件之后,值相同的插件保持索引顺序。按发布时间排序时使用插件最大的 `publishTimestamp`。 @@ -226,10 +232,10 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 - 校验器接受上面的示例,并对根字段、插件字段、版本字段和 `source` 形式中的每条结构规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。无效的 DSH 范围字符串通过结构校验,但求值结果为不兼容。 - 根据每个示例版本构建的安装参数可被 DSH 的安装 spec 解析器和 pnpm 接受。 - 校验器在每一层都忽略未知成员。 -- 对相同的 manifest、运行时版本和本地豁免,索引与安装检查的兼容性结果一致。用例覆盖连字符范围、`||` 分支、workspace 简写、无效范围,以及宽泛的引擎范围与不兼容的 DSH 对等依赖同时存在的情况。 +- 对相同的 manifest、运行时版本和本地豁免,索引与安装检查的兼容性结果一致。用例覆盖连字符范围、`||` 分支、workspace 简写、无效范围、宽泛的引擎范围与不兼容的 DSH 对等依赖同时存在,以及对等依赖兼容而 `engines.dsh` 不满足或为空的情况。 - 调整优先级相同的版本编译信息条目的顺序后,精确的 `dist-tags` 目标仍选择同一来源。读取器拒绝未列出的标签目标;`latest` 缺失或不兼容时,不隐式切换版本或渠道。 - 作者对象与简写字符串产生声明的显示名称,不携带联系字段,也不归一化版本。 -- 解析器校验 `1.0.0+one`,并保留完整字符串供标签查找、安装身份和本地豁免键使用。 +- Git 版本解析器校验 `1.0.0+one`,并保留完整字符串供标签查找、安装身份和本地豁免键使用。提交选择精确来源;带有版本编译信息的 npm 来源版本被拒绝。 - 安装确认标识所选版本、所选渠道(如有)、先行版本状态、索引 URL 和来源。市场标签与评分继续标明归属。 ## 风险 @@ -240,5 +246,5 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 - URL 图标会向图片主机暴露用户的 IP 地址。 - 固定版本与分发标签在索引重新生成之前一直保持陈旧。 - 版本固定不验证市场身份,也不保证任意 registry 返回的字节。已安装包的检查与市场列表保持独立。 -- 读取器和生成器必须在部署前一同采用这份修订提案;混用原始与修订后的格式 1 规则,可能改变兼容性结果和版本选择。 +- 读取器、生成器和安装检查必须在部署前一同采用这份修订提案;混用原始与修订后的格式 1 规则,可能改变兼容性结果和版本选择。 - 市场文本未经 DSH 审核即到达用户,并通过任何列出插件的客户端工具到达模型。 From dd4fd530daf3db20a3c8220bb0aa653f31dd4b68 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Mon, 5 Oct 2026 21:45:25 +0800 Subject: [PATCH 034/155] docs(plugin-market): require declared engine ranges and trim proposal --- ...10-02-plugin-market-index-format.i18n.yaml | 36 ++++---- .../2026-10-02-plugin-market-index-format.md | 82 +++++++---------- ...026-10-02-plugin-market-index-format.zh.md | 88 +++++++------------ 3 files changed, 81 insertions(+), 125 deletions(-) diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index f169408955..1da0b47262 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -9,8 +9,8 @@ en: ce5e4a362f558af6 zh: 29d93e0655b99217 /agent-note-plugin-market-index-format/proposal: - en: 91b1df0d57ed60bb - zh: 3fbe3e01c0ad03dc + en: 7b728d6cbf6f16d6 + zh: 73e79d35b0dbfbad /agent-note-plugin-market-index-format/proposal/example: en: 1b1c960c966cf912 zh: 97be87cb14893c26 @@ -18,29 +18,29 @@ en: 4fac5a9b8261342d zh: f9168a8a4209feab /agent-note-plugin-market-index-format/proposal/plugin-fields: - en: cf572978bea19f5a - zh: 80a6d9507c468958 + en: dbb59e8f9807b1d5 + zh: 030754d30a3c1861 /agent-note-plugin-market-index-format/proposal/version-fields: - en: 83480978017dbcf7 - zh: 9a5bb55554f90caa + en: d6c0fa99e1cbb068 + zh: 3d2a7b85299c679a /agent-note-plugin-market-index-format/proposal/install-arguments: en: c748cdc4d8ce349a zh: 5740fa0d6106e637 /agent-note-plugin-market-index-format/proposal/dsh-compatibility: - en: a6ae732431422eb7 - zh: 3750ecdc33f75b79 + en: 00fe507b9b5dfea7 + zh: 55de6aaeb3865e84 /agent-note-plugin-market-index-format/proposal/generator-obligations: - en: b7185a5fc36af7d3 - zh: a6fd69988607c324 + en: 8e848a102fe9d86e + zh: feff226ef8321e00 /agent-note-plugin-market-index-format/proposal/reader-rules: - en: 7eb0df505ef26cde - zh: dfe1f56554489c0f + en: 92903cbe87d9c0ca + zh: 54af6cb33e9da252 /agent-note-plugin-market-index-format/alternatives-considered: - en: 001d2d67f4f725cb - zh: 5a0adbc3d1397eed + en: 3d7cf519bc8e0593 + zh: 328dc0747836eaa8 /agent-note-plugin-market-index-format/acceptance-criteria: - en: 4ffec806e7a8445e - zh: a68fee8a99f185db + en: 753abee6adf39812 + zh: 1102bcfdd48f7e90 /agent-note-plugin-market-index-format/risks: - en: 19f22cc4a00b97e8 - zh: 585eea737ad6af40 + en: 41170d483b17df80 + zh: 1bfd8f44e0f09036 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index 402cdb835f..7faf8edc98 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -16,8 +16,6 @@ An index must therefore carry everything a list page displays: localized title a Separate the **index** from the **index generator**. DSH defines and reads one JSON index format. How an index is produced, and from which source list, belongs to the generator. DSH's reader, its Discover page, and a reference generator are separate changes that consume this format. Indexes list [profile plugin bundles](../../implemented/architecture/2026-08-05-profile-plugin-bundles.md) and install them through [guided plugin installation](../../implemented/architecture/2026-09-15-guided-plugin-installation.md). -Package authors use [npm declarations](https://docs.npmjs.com/cli/v11/configuring-npm/package-json/). An index caches selected package metadata and adds localized display data, source pins, and market metadata. Readers and generators use maintained npm parsers and normalizers. They do not introduce another author-maintained package identity, compatibility declaration, or author field. - ### Example ```json @@ -56,15 +54,13 @@ Package authors use [npm declarations](https://docs.npmjs.com/cli/v11/configurin "version": "0.2.0-rc.2", "publishTimestamp": 1790476800, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.2" }, - "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.2" } + "engines": { "dsh": "0.2.0-rc.2" } }, { "version": "0.2.0-rc.1", "publishTimestamp": 1789872000, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.1" }, - "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.1" } + "engines": { "dsh": "0.2.0-rc.1" } } ] }, @@ -82,7 +78,8 @@ Package authors use [npm declarations](https://docs.npmjs.com/cli/v11/configurin "url": "https://github.com/author/dsh-plugins", "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", "path": "packages/foo" - } + }, + "engines": { "dsh": "*" } } ] } @@ -113,27 +110,26 @@ Category, label, and sort-key ids are non-empty strings. Readers look ids up as |---|---|---| | `name` | yes | Package name accepted by npm's maintained package-name validator for new packages; unique within the index. | | `title` | no | `LocalizedText`; a reader displays `name` when absent. | -| `description` | no | `LocalizedText` for catalog display; see Generator obligations for its derivation. | +| `description` | no | `LocalizedText`. | | `icon` | no | Either `data:;base64,`, where `` is `image/svg+xml`, `image/png`, `image/jpeg`, or `image/webp`, `` is canonically padded base64, and the decoded payload is at most 256 KiB; or a URL reference whose resolution against the index URL is an `https:` URL or has the index URL's origin. | -| `author` | no | Display name containing a non-whitespace character; see Generator obligations for the npm author projection. | +| `author` | no | String with at least one non-whitespace character. | | `homepage` | no | Absolute `https:` or `http:` URL of a page about the plugin. | | `metadata` | no | Object holding the three values below. | | `metadata.category` | no | One declared category id. | | `metadata.labels` | no | Array of distinct declared label ids. | | `metadata.sortKeys` | no | Object mapping a declared sort-key id → finite number. | -| `dist-tags` | no | Object mapping npm distribution-tag names to exact version strings listed in `versions`. Absent means no recorded channels. | -| `versions` | yes | Non-empty array of versions; see below. Array order does not select a default version. | +| `dist-tags` | no | Object mapping npm distribution-tag names to exact listed version strings; absent means no recorded channels. | +| `versions` | yes | Non-empty array of versions; see below. Array order does not select the installation version. | ### Version fields | Field | Required | Rule | |---|---|---| -| `version` | yes | Exact package version parsed by npm's `node-semver`; preserve its complete string, including build metadata. The exact string is unique within the plugin. | +| `version` | yes | Exact version parsed by npm's `node-semver`; preserve the complete string, including Git build metadata. The exact string is unique within the plugin. | | `publishTimestamp` | yes | Integer Unix timestamp in seconds, in `[0, 10^11)`. | | `source` | yes | Where `version` is installed from; see below. | -| `engines` | no | npm manifest object mapping engine names to requirement strings, copied without range rewriting. | -| `engines.dsh` | no | Requirement string for the running DSH process. An empty or invalid range is incompatible; absence adds no host requirement. | -| `peerDependencies` | no | npm manifest object mapping package names to requirement strings, copied without range rewriting. DSH peers constrain compatibility; other peers remain package-manager requirements. | +| `engines` | yes | Object containing `dsh`. | +| `engines.dsh` | yes | Non-blank valid npm SemVer range declared in the source manifest; copied unchanged. `*` explicitly declares support for any DSH version. | A relative `icon` reference resolves against the index URL, as an HTML image reference resolves against its page. For an index at `https://market.example/dsh/index.json`, `"icon": "icons/foo.svg"` names `https://market.example/dsh/icons/foo.svg`. A generator can therefore publish the index and its icon files as one directory on any static host without knowing the final URL. Absolute icon URLs on other origins must use `https:`; the same-origin allowance lets an `http:` index on a loopback or intranet host serve its own icons. Readers resolve the reference when they read the index, so clients receive absolute URLs. @@ -151,15 +147,9 @@ A client installs one version with exactly these pnpm arguments: ### DSH compatibility -An index carries the manifest's `peerDependencies` and `engines` as separate declarations. DSH tests every `@deepseek-ai/dsh` and `@deepseek-ai/dsh-*` peer against the running DSH version. A declared `engines.dsh` adds a host requirement; it does not replace those peers. The version is compatible only when every applicable requirement matches. Missing declarations add no requirement. +Every market-listed version must declare valid `engines.dsh`. The reader and market-origin installation evaluate that range against the running DSH version with npm's `node-semver` and `includePrerelease: true`. There is no peer fallback or range synthesis. npm package peer resolution remains outside market host compatibility. -This preserves the existing [app-boot peer check](../../../../packages/boot/app-boot/src/plugin-compatibility.ts), which receives the running DSH version explicitly. Peer declarations do not identify that process; npm's package resolution in a profile remains separate from DSH's check against its running runtime. - -Implementing this proposal extends that evaluator with `engines.dsh` enforcement and engine-aware exemptions. The current evaluator checks peers only. The index reader and installation must both use the extended evaluator before this format is deployed. - -The index reader and installation use one DSH compatibility evaluator with npm's `node-semver` parser and `includePrerelease: true`. Empty or invalid DSH ranges are incompatible. The existing peer rule maps `workspace:*`, `workspace:^`, and `workspace:~` to the running DSH version; other `workspace:` peer ranges are incompatible. Engine ranges do not use that peer mapping. Exact local `name@version` exemptions apply to both kinds of DSH requirement and are not published in the index. - -Generators preserve each requirement string. Readers evaluate the strings separately; they do not concatenate or expand their ranges. npm owns package peer resolution and its Node/npm engine checks. DSH owns enforcement of its custom `engines.dsh` key, as recorded in the [public manifest decision](../../implemented/architecture/2026-09-10-public-package-manifest.md). +Installation rechecks the source manifest before accepting a market-origin package. An exact local `name@version` exemption may permit a valid range that rejects the runtime; it cannot make a missing or invalid declaration eligible. Exemptions are not published in the index. ### Generator obligations @@ -167,11 +157,11 @@ A reader cannot verify these rules; a generator that violates them publishes a m - `name` and each `version` equal the package manifest of the installed source. - `publishTimestamp` is the registry publish time of `version` for npm sources and the committer time of `commit` for Git sources. -- `engines` and `peerDependencies` copy the source manifest. npm sources use published metadata, including npm's publication rewriting. Git sources use the pinned manifest. Invalid DSH ranges remain visible as incompatible requirements; they are not omitted or converted into another declaration. -- `dist-tags` snapshots the registry's [distribution tags](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/). A generator includes each retained tag's target version, or omits that tag when its target is outside the listed bundle versions. For Git sources, the publisher or market supplies the same exact tag-to-version mapping. +- `engines.dsh` copies the manifest's declared range unchanged. A version with a missing, blank, or invalid range is omitted with a diagnostic. A plugin with no eligible version is omitted. +- `dist-tags` snapshots npm's [distribution tags](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/), retaining only targets present among the eligible listed versions. For Git sources, the publisher or market supplies the same exact tag-to-version mapping. - Each listed version declares `dsh.bundle`. Installation independently refuses a package without a bundle patch. -- Package-derived display fields come from the exact version named by `dist-tags.latest`. Without that tag, generators omit those display fields and readers use the package-name fallback. `title`, `description`, and `icon` follow installed-plugin display metadata rules, subject to this format's `LocalizedText` requirements. Localized text is catalog display data, not another npm manifest declaration. `homepage` copies the selected manifest's `homepage` and is absent without one. -- npm's `author` may be a person object or shorthand string. For an object, generators copy its `name` when it contains a non-whitespace character. For a shorthand string, they use a maintained npm person normalizer and take its `name` under the same condition. They omit an absent or whitespace-only name and do not copy email or URL into this display field. They normalize a fresh projection, leaving the source manifest untouched. +- `title`, `description`, and `icon` come from the highest listed version's locale metadata, manifest fields, and icon under the installed-plugin display rules. Use npm's `node-semver.rsort()` order, retaining input order for ties. This metadata choice does not select the installation version. `homepage` copies that version's manifest `homepage` and is absent without one. +- `author` comes from the same highest listed version's npm author declaration. Copy an object's `name`; parse shorthand strings with a maintained npm person normalizer. Omit an absent or whitespace-only name and contact fields. Normalize a fresh projection, leaving the source manifest untouched. ### Reader rules @@ -179,17 +169,13 @@ A reader rejects the whole index when the document violates any rule in Root fie A reader ignores members that this note does not define, at every level; an unknown `source.type` value is rejected. Format 1 can then gain optional members without breaking existing readers; a change that existing readers would misinterpret uses a new `format` value. -Entries in `engines`, `peerDependencies`, and `dist-tags` are declared data, not unknown members to discard. Their values must be strings; a non-string value invalidates the index. A DSH requirement string can be empty or syntactically invalid and remains visible as incompatible. A distribution-tag name must make `name@tag` a registry tag spec under npm's maintained `npm-package-arg` parser, rather than a version or range. Tag targets match listed version strings exactly. - -npm sources use canonical published registry version identifiers: the string equals npm's `node-semver.valid()` result, without build metadata. npm's publishing normalization does not provide separately selectable build-metadata variants. Git sources can retain such variants because their commits pin the installed source independently. Readers reject non-canonical npm source versions instead of claiming an exact build selection that npm does not provide. +Tag names must parse as registry tag specs under npm's maintained `npm-package-arg`; targets are exact listed version strings. npm sources use canonical published identifiers (`node-semver.valid(version) === version`); Git sources retain build metadata and pin their exact source by commit. Categories, labels, and sort keys are opaque: a reader filters and sorts by them, displays their `title`, and never interprets an id. Readers display declarations in the order of their localized `title`. When sorting plugins, a plugin without a value for the selected sort key follows all plugins with a value in either direction, and equal values keep the index order. Sorting by publish time uses a plugin's greatest `publishTimestamp`. -A reader evaluates each version's declared requirements with the rule in DSH compatibility. It orders versions by npm SemVer precedence; equally ranked versions keep their index order for display only. Full version strings identify entries, including versions that differ only in build metadata. +A reader evaluates the required `engines.dsh` range under DSH compatibility. Versions use npm's `node-semver.rsort()` order, retaining index order for ties. Exact tag targets, not this display order, select installation versions. -The initial channel is `latest`. Its exact tag target is the version selected by the publisher or market, even when another version has higher SemVer precedence. A client installs the listed exact version or commit, never `name@latest`. If `latest` is absent, version selection is required. If its target is incompatible, the client reports that requirement and offers other versions for explicit selection. It does not switch channels or select another release or prerelease automatically. - -Clients identify prereleases when users choose an exact version or channel, and in the installation confirmation. A publisher may deliberately tag a prerelease as `latest`; its presence does not authorize installation without that explicit confirmation. Clients attribute display fields, labels, categories, and scores to the index URL. A market label such as `official` is not DSH verification, and scores from different markets do not imply a shared scale. +The initial channel is `latest`. Its exact target is the publisher- or market-selected version. Clients install that recorded version or commit, never `name@latest`. Missing or incompatible `latest` requires explicit version or channel selection; clients do not switch automatically. Installation confirmation identifies the version, selected channel if any, prerelease status, index URL, and source. ## Alternatives considered @@ -207,11 +193,9 @@ Clients identify prereleases when users choose an exact version or channel, and **Inline icons only.** A list without extra requests needs inline icons, but 256 KiB of raw bytes is about 341 KiB as base64, so a 100-plugin index could reach about 35 MB. URL icons trade extra requests, and disclosure of the user's IP address to the image host, for a small index. -**Combining peer ranges into one synthetic `engines.dsh`.** This creates another compatibility declaration and requires range-intersection logic. Preserving the npm maps lets the reader and installer evaluate the same requirements, including hyphen ranges and `||` alternatives. +**Inferring host compatibility from peer dependencies.** The market defines a new standard requiring an author-declared `engines.dsh`. Existing packages must add that declaration before listing; no fallback, workspace mapping, or range intersection is needed. -**Letting `engines.dsh` override peers.** Host and package requirements express different obligations. Replacing package requirements with a broad host range can hide an incompatible DSH peer. - -**Copying the complete npm person object into the display field.** The catalog needs a name. A documented projection supports npm's original object and shorthand declarations while omitting unused contact fields. +**Copying the complete npm person object into the display field.** The list needs a name. The generator supports npm's original declaration while omitting unused contact fields. **Opaque sort values for time, including ISO date strings.** Publish time has fixed semantics that clients format and sort, so it is a typed field. Without time, sort values can be numbers only, which needs no per-key value-type rule. @@ -219,32 +203,26 @@ Clients identify prereleases when users choose an exact version or channel, and **Declaration order as display order.** JavaScript reorders integer-like object keys, so declaration order would need either an id pattern or array declarations. Clients sort declarations by their localized title instead. -**Dropping workspace or invalid peer ranges.** A generator would then hide requirements that installation reads. Retaining their literal strings lets the shared checker apply the existing workspace rules and report incompatibility. +**Selecting the greatest compatible version.** npm's `latest` can name an older release. Inferring a target from SemVer ranking loses the recorded channel choice and is ambiguous for equally ranked builds. -**Selecting the greatest compatible version.** npm's `latest` tag is publisher-controlled and can name an older release. Replacing it with version ranking loses that choice and leaves equal-precedence builds without a unique target. - -**Automatic prerelease fallback.** Missing or incompatible channel targets do not indicate that the user chose a prerelease. A client requires explicit version or channel selection instead. +**Automatic prerelease fallback.** Missing or incompatible channel targets do not mean that the user selected a prerelease. **Rejecting unknown members.** Every optional addition would then require a new `format` value and break every deployed reader. ## Acceptance criteria -- A validator accepts the example above and rejects one violation of each structural rule in Root fields, Plugin fields, Version fields, and the `source` forms, with a diagnostic naming the JSON path. Invalid DSH range strings are accepted structurally and evaluated as incompatible. +- A validator accepts the example above and rejects one violation of each rule in Root fields, Plugin fields, Version fields, and the `source` forms, with a diagnostic naming the JSON path. - Install arguments built from every example version are accepted by DSH's install-spec parser and by pnpm. - A validator ignores unknown members at every level. -- Index and installation compatibility match for the same manifest, runtime version, and local exemptions. Cases cover hyphen ranges, `||` alternatives, workspace shorthands, invalid ranges, a broad engine range with an incompatible DSH peer, and compatible peers with an unsatisfied or empty `engines.dsh`. -- Exact `dist-tags` targets select the same source when equally ranked build-metadata versions are reordered. Missing tag targets are rejected; absent or incompatible `latest` never causes an implicit version or channel switch. -- Author objects and shorthand strings produce the declared display name without contact fields or version normalization. -- A Git version parser validates `1.0.0+one` and preserves that complete string for tag lookup, installation identity, and local exemption keys. Its commit selects the exact source; npm source versions with build metadata are rejected. -- Installation confirmation identifies the selected version, channel when selected, prerelease status, index URL, and source. Market labels and scores remain attributed claims. +- Generator and validator refuse missing, blank, and invalid `engines.dsh`; omitted versions leave no dangling tag target. Index and market-origin installation agree on valid ranges, including hyphen ranges, prereleases, and valid ranges that reject the runtime. Exemptions never bypass the declaration requirement. +- Exact tag targets select the same source after equally ranked Git build versions are reordered. Missing targets are rejected; absent or incompatible `latest` causes no automatic switch. +- npm author objects and shorthand strings produce the declared name without contact fields or mutation of source identity. ## Risks -- An index is unsigned. A market can use a misleading `title`, such as one claiming to be official; clients must show the index URL and each version's `source`. -- A Git version's identity and requirements are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. +- An index is unsigned. Titles, authors, labels, and scores are market claims; an `official` label is not DSH verification. Clients must show the index URL and each version's `source`. +- A Git version's `name`, `version`, and `engines.dsh` are claims about the repository. A repository can claim any name, including an `@deepseek-ai/dsh-` name, and the installed manifest decides what is actually installed. - An npm version's `source.registry` is equally a claim: it directs the install of any `name`, including an `@deepseek-ai/dsh-` name, to a registry the market chooses, and that registry decides what is installed. - URL icons disclose the user's IP address to image hosts. - Pinned versions and distribution tags stay stale until the index is regenerated. -- Version pinning does not authenticate a market's identity or guarantee the bytes an arbitrary registry returns. Installed package checks remain independent of the catalog. -- Readers, generators, and installation must adopt this revised proposal together before deployment; mixing the original and revised format-1 rules can change compatibility results and version selection. - Market text reaches users, and models through any client tool that lists plugins, without review by DSH. diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index 503f20df4f..29813bef25 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -16,8 +16,6 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 将**索引**与**索引生成器**分开。DSH 定义并读取一种 JSON 索引格式。索引如何生成、基于哪份源列表生成,由生成器负责。DSH 的读取器、Discover 页面和参考生成器是使用此格式的独立变更。索引列出[profile 插件组合包](../../implemented/architecture/2026-08-05-profile-plugin-bundles.zh.md),并通过[引导式插件安装](../../implemented/architecture/2026-09-15-guided-plugin-installation.zh.md)安装它们。 -包作者使用 [npm 声明](https://docs.npmjs.com/cli/v11/configuring-npm/package-json/)。索引缓存选取的包元数据,并增加本地化显示数据、固定的来源和市场元数据。读取方和生成器使用持续维护的 npm 解析器和归一化工具。它们不引入另一份由作者独立维护的包身份、兼容性声明或作者字段。 - ### 示例 ```json @@ -56,15 +54,13 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 "version": "0.2.0-rc.2", "publishTimestamp": 1790476800, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.2" }, - "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.2" } + "engines": { "dsh": "0.2.0-rc.2" } }, { "version": "0.2.0-rc.1", "publishTimestamp": 1789872000, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.1" }, - "peerDependencies": { "@deepseek-ai/dsh-tools": "0.2.0-rc.1" } + "engines": { "dsh": "0.2.0-rc.1" } } ] }, @@ -82,7 +78,8 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 "url": "https://github.com/author/dsh-plugins", "commit": "3f9c2e1d8a4b6c0e7f1a2b3c4d5e6f708192a3b4", "path": "packages/foo" - } + }, + "engines": { "dsh": "*" } } ] } @@ -111,29 +108,28 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 | 字段 | 必填 | 规则 | |---|---|---| -| `name` | 是 | npm 持续维护的包名校验器接受的新包名称;在索引内唯一。 | +| `name` | 是 | npm 维护的包名校验器接受的新包名称;在索引内唯一。 | | `title` | 否 | `LocalizedText`;缺省时读取器显示 `name`。 | -| `description` | 否 | 用于市场列表显示的 `LocalizedText`;派生规则见生成器义务。 | +| `description` | 否 | `LocalizedText`。 | | `icon` | 否 | 以下两种形式之一:`data:;base64,`,其中 `` 为 `image/svg+xml`、`image/png`、`image/jpeg` 或 `image/webp`,`` 是按规范填充的 base64,解码后的载荷不超过 256 KiB;或者 URL 引用,它相对于索引 URL 解析的结果是 `https:` URL,或与索引 URL 同源。 | -| `author` | 否 | 至少包含一个非空白字符的显示名称;npm 作者投影规则见生成器义务。 | +| `author` | 否 | 至少包含一个非空白字符的字符串。 | | `homepage` | 否 | 介绍该插件的页面的绝对 `https:` 或 `http:` URL。 | | `metadata` | 否 | 包含下列三个值的对象。 | | `metadata.category` | 否 | 一个已声明的分类 id。 | | `metadata.labels` | 否 | 由互不相同的已声明标签 id 组成的数组。 | | `metadata.sortKeys` | 否 | 对象,将已声明的排序键 id 映射为有限数值。 | -| `dist-tags` | 否 | 对象,将 npm 分发标签名映射为 `versions` 中列出的精确版本字符串。缺省表示没有记录的渠道。 | -| `versions` | 是 | 非空的版本数组;见下文。数组顺序不决定默认版本。 | +| `dist-tags` | 否 | 将 npm 发布标签名称映射为已列出的精确版本字符串的对象;缺省表示未记录发布渠道。 | +| `versions` | 是 | 非空的版本数组;见下文。数组顺序不选择安装版本。 | ### 版本字段 | 字段 | 必填 | 规则 | |---|---|---| -| `version` | 是 | 由 npm 的 `node-semver` 解析的精确包版本;保留完整字符串,包括版本编译信息。精确字符串在插件内唯一。 | +| `version` | 是 | npm 的 `node-semver` 解析的精确版本;保留完整字符串,包括 Git 版本编译信息。精确字符串在插件内唯一。 | | `publishTimestamp` | 是 | 以秒为单位的整数 Unix 时间戳,取值范围为 `[0, 10^11)`。 | | `source` | 是 | `version` 的安装来源;见下文。 | -| `engines` | 否 | npm manifest 对象,将引擎名称映射为要求字符串,复制时不改写范围。 | -| `engines.dsh` | 否 | 对当前运行的 DSH 进程的要求字符串。空范围或无效范围不兼容;缺省不增加宿主要求。 | -| `peerDependencies` | 否 | npm manifest 对象,将包名映射为要求字符串,复制时不改写范围。DSH 对等依赖(peer dependency)约束兼容性;其他对等依赖仍由包管理器处理。 | +| `engines` | 是 | 包含 `dsh` 的对象。 | +| `engines.dsh` | 是 | 源 manifest 声明的非空白、有效 npm SemVer 范围;原样复制。`*` 显式声明支持任意 DSH 版本。 | 相对的 `icon` 引用相对于索引 URL 解析,与 HTML 图片引用相对于所在页面解析的方式相同。对于位于 `https://market.example/dsh/index.json` 的索引,`"icon": "icons/foo.svg"` 指向 `https://market.example/dsh/icons/foo.svg`。因此,生成器可以把索引和图标文件作为一个目录发布到任意静态主机,无需知道最终 URL。指向其他源的绝对图标 URL 必须使用 `https:`;同源规则允许位于 loopback 或内网主机上的 `http:` 索引提供自己的图标。读取器在读取索引时解析该引用,因此客户端收到的是绝对 URL。 @@ -151,15 +147,9 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 ### DSH 兼容性 -索引将 manifest 的 `peerDependencies` 和 `engines` 作为两份独立声明保留。DSH 用当前运行的 DSH 版本检验每个 `@deepseek-ai/dsh` 与 `@deepseek-ai/dsh-*` 对等依赖。声明的 `engines.dsh` 增加一条宿主要求,不替代这些对等依赖。只有满足每条适用要求时,该版本才兼容。缺少声明不增加要求。 +市场列出的每个版本都必须声明有效的 `engines.dsh`。读取器与市场来源的安装使用 npm 的 `node-semver` 和 `includePrerelease: true`,根据当前运行的 DSH 版本求值。不存在对等依赖回退或范围合成。npm 包的对等依赖解析不属于市场宿主兼容性检查。 -这保留了既有的 [app-boot 对等依赖检查](../../../../packages/boot/app-boot/src/plugin-compatibility.ts),该检查显式接收当前运行的 DSH 版本。对等依赖声明不标识该进程;profile 中 npm 的包解析与 DSH 针对当前运行时的检查相互独立。 - -实现本提案时,须为该求值器增加 `engines.dsh` 强制检查及对应的引擎豁免处理。当前求值器只检查对等依赖。部署本格式前,索引读取器与安装检查都必须使用扩展后的求值器。 - -索引读取器和安装检查使用同一个 DSH 兼容性求值器,采用 npm 的 `node-semver` 解析器和 `includePrerelease: true`。空的或无效的 DSH 范围不兼容。既有对等依赖规则将 `workspace:*`、`workspace:^` 和 `workspace:~` 映射为当前运行的 DSH 版本;其他 `workspace:` 对等依赖范围不兼容。引擎范围不采用这种对等依赖映射。精确的本地 `name@version` 豁免适用于两种 DSH 要求,但不发布到索引中。 - -生成器保留每条要求字符串。读取器分别求值,不拼接或展开范围。npm 负责包的对等依赖解析及其 Node/npm 引擎检查。DSH 负责强制检查自定义 `engines.dsh` 键,规则记录在[公共 manifest 决策](../../implemented/architecture/2026-09-10-public-package-manifest.zh.md)中。 +安装接受市场来源的包前,会重新检查源 manifest。精确的本地 `name@version` 豁免可以允许有效范围拒绝当前运行时的情况,但不能使缺失或无效声明符合列出条件。豁免不发布在索引中。 ### 生成器义务 @@ -167,29 +157,25 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 - `name` 和每个 `version` 与所安装来源中的包 manifest 一致。 - 对于 npm 来源,`publishTimestamp` 是 `version` 在 registry 中的发布时间;对于 Git 来源,它是 `commit` 的提交者时间。 -- `engines` 和 `peerDependencies` 复制来源 manifest 的声明。npm 来源使用已发布元数据,包括 npm 发布时的改写。Git 来源使用固定提交中的 manifest。无效的 DSH 范围作为不兼容要求保留,不省略,也不转换成其他声明。 -- `dist-tags` 保存 registry [分发标签](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/)的快照。生成器包含每个保留标签的目标版本;目标不在列出的组合包版本中时,省略该标签。对于 Git 来源,发布者或市场提供同样的精确标签到版本的映射。 +- `engines.dsh` 原样复制 manifest 声明的范围。缺失、空白或无效范围的版本会被省略并给出诊断。没有合格版本的插件会被省略。 +- `dist-tags` 是 npm [发布标签](https://docs.npmjs.com/cli/v11/commands/npm-dist-tag/)的快照,只保留指向合格且已列出版本的目标。对于 Git 来源,发布者或市场提供同样的精确标签到版本映射。 - 列出的每个版本都声明了 `dsh.bundle`。安装时也会独立拒绝没有组合包 patch 的包。 -- 来自包的显示字段取自 `dist-tags.latest` 指向的精确版本。没有该标签时,生成器省略这些显示字段,读取器回退到包名。`title`、`description` 和 `icon` 遵循已安装插件的显示元数据规则,同时满足本格式的 `LocalizedText` 要求。本地化文本是市场列表显示数据,不是另一份 npm manifest 声明。`homepage` 复制所选 manifest 的 `homepage`,manifest 没有该字段时省略。 -- npm 的 `author` 可以是人员对象或简写字符串。对于对象,生成器复制其包含非空白字符的 `name`。对于简写字符串,生成器使用持续维护的 npm 人员归一化工具,在相同条件下取结果中的 `name`。名称不存在或只有空白时省略,不将 email 或 URL 复制到该显示字段。生成器归一化一份新建的投影,不改动来源 manifest。 +- `title`、`description` 和 `icon` 来自所列最高版本的语言元数据、manifest 字段和图标,采用已安装插件的显示规则。使用 npm 的 `node-semver.rsort()` 顺序,相等时保留输入顺序。元数据选择不选择安装版本。`homepage` 复制该版本 manifest 的 `homepage`,manifest 没有该字段时省略。 +- `author` 来自同一最高版本的 npm 作者声明。复制对象的 `name`;使用维护中的 npm person 归一化器解析简写字符串。省略缺失或全空白的名称以及联系字段。归一化新建的投影,不修改源 manifest。 ### 读取器规则 -文档违反根字段、插件字段、版本字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,分发标签指向未列出的版本,`name` 或精确 `version` 字符串重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 +文档违反根字段、插件字段、版本字段或 `source` 形式中的任何规则时,读取器拒绝整个索引,包括引用了未声明的分类、标签或排序键,发布标签指向未列出的目标,`name` 或精确的 `version` 字符串重复,以及 `format` 不是 `1`。每个此类缺陷都是生成器 bug,静默丢弃条目会掩盖它。读取器可以限制文档大小。 读取器在每一层都忽略本 Agent Note 未定义的成员;未知的 `source.type` 值会被拒绝。这样格式 1 可以增加可选成员而不破坏现有读取器;现有读取器会误解的变更使用新的 `format` 值。 -`engines`、`peerDependencies` 和 `dist-tags` 中的条目是声明的数据,不是应当丢弃的未知成员。其值必须为字符串;非字符串值使索引无效。DSH 要求字符串可以为空或语法无效,但仍作为不兼容要求保留。分发标签名必须使 `name@tag` 在 npm 持续维护的 `npm-package-arg` 解析器中成为 registry 标签 spec,而非版本或范围。标签目标与所列版本字符串精确匹配。 - -npm 来源使用规范的已发布 registry 版本标识:字符串等于 npm 的 `node-semver.valid()` 结果,不含版本编译信息。npm 发布时的归一化不提供仅版本编译信息不同的可独立选择版本。Git 来源可以保留此类版本,因为提交独立固定了所安装的来源。读取器拒绝不规范的 npm 来源版本,避免声称 npm 并不提供的精确构建选择。 +标签名称必须能被 npm 维护的 `npm-package-arg` 解析为 registry 标签 spec;目标是已列出的精确版本字符串。npm 来源使用规范发布标识(`node-semver.valid(version) === version`);Git 来源保留版本编译信息并用提交固定精确来源。 分类、标签和排序键对读取器不透明:读取器按它们筛选和排序,显示其 `title`,从不解释 id 的含义。读取器按本地化 `title` 对声明排序后显示。对插件排序时,无论排序方向如何,没有所选排序键值的插件都排在所有有值的插件之后,值相同的插件保持索引顺序。按发布时间排序时使用插件最大的 `publishTimestamp`。 -读取器按 DSH 兼容性一节的规则评估每个版本的声明要求。它按 npm SemVer 优先级对版本排序;优先级相同的版本保留索引顺序,该顺序只用于显示。完整版本字符串标识条目,包括仅版本编译信息不同的版本。 +读取器按 DSH 兼容性一节的规则求值必填的 `engines.dsh` 范围。版本使用 npm 的 `node-semver.rsort()` 顺序,相等时保留索引顺序。安装版本由精确的标签目标选择,而不是此显示顺序。 -初始渠道为 `latest`。标签的精确目标是发布者或市场选定的版本,即使另一个版本具有更高的 SemVer 优先级。客户端安装索引中列出的精确版本或提交,不使用 `name@latest`。没有 `latest` 时,需要选择版本。目标不兼容时,客户端显示该要求,并提供其他版本供显式选择。它不自动切换渠道,也不自动选择其他正式版本或先行版本。 - -用户选择精确版本或渠道时,以及安装确认中,客户端标识先行版本。发布者可以有意将先行版本标记为 `latest`;标签的存在不授权跳过该显式确认而安装。客户端将显示字段、标签、分类和评分归属于索引 URL。市场提供的 `official` 等标签不表示 DSH 验证,不同市场的评分也不隐含相同尺度。 +初始渠道是 `latest`。它的精确目标是发布者或市场选择的版本。客户端安装记录的版本或提交,绝不安装 `name@latest`。缺失或不兼容的 `latest` 需要显式选择版本或渠道;客户端不会自动切换。安装确认标明版本、所选渠道(如果有)、先行版本状态、索引 URL 和来源。 ## 考虑过的替代方案 @@ -207,11 +193,9 @@ npm 来源使用规范的已发布 registry 版本标识:字符串等于 npm **只允许内联图标。** 不发额外请求的列表需要内联图标,但 256 KiB 原始字节编码为 base64 后约为 341 KiB,因此 100 个插件的索引可能达到约 35 MB。URL 图标以额外请求和向图片主机暴露用户 IP 地址为代价,换取较小的索引。 -**将对等依赖范围合成为一个 `engines.dsh`。** 这会创建另一份兼容性声明,并需要范围求交逻辑。保留 npm 映射后,读取器与安装检查可以求值相同要求,包括连字符范围和 `||` 分支。 +**从对等依赖推断宿主兼容性。** 市场定义要求作者声明 `engines.dsh` 的新标准。现有包必须添加此声明才能列出;不需要回退、workspace 映射或范围求交。 -**让 `engines.dsh` 覆盖对等依赖。** 宿主要求与包要求表达不同义务。用宽泛的宿主范围替代包要求,可能掩盖不兼容的 DSH 对等依赖。 - -**将完整 npm 人员对象复制到显示字段。** 市场列表需要名称。记录规则的投影支持 npm 的原始对象与简写声明,同时省略未使用的联系字段。 +**将完整 npm person 对象复制到显示字段。** 列表需要名称。生成器支持 npm 的原始声明,同时省略不用的联系字段。 **用不透明排序值表示时间,包括 ISO 日期字符串。** 发布时间具有固定语义,客户端会对其格式化和排序,因此它是一个有类型的字段。排除时间后,排序值可以只用数值,无需为每个键规定值类型。 @@ -219,32 +203,26 @@ npm 来源使用规范的已发布 registry 版本标识:字符串等于 npm **以声明顺序作为显示顺序。** JavaScript 会重排类整数的对象键,因此要保留声明顺序,就需要限定 id 格式或改用数组声明。客户端改为按本地化标题对声明排序。 -**丢弃 workspace 或无效的对等依赖范围。** 生成器会隐藏安装检查要读取的要求。保留原始字符串后,共享检查器可以应用既有 workspace 规则并报告不兼容。 +**选择最高兼容版本。** npm 的 `latest` 可以指向较旧的发布版本。从 SemVer 排名推断目标会丢失记录的渠道选择,而且在构建排名相等时存在歧义。 -**选择最高兼容版本。** npm 的 `latest` 标签由发布者控制,可以指向较旧的发布版本。用版本排序替代它,会丢失这个选择,也会使优先级相同的构建没有唯一目标。 - -**自动回退到先行版本。** 渠道目标缺失或不兼容,不表示用户选择了先行版本。客户端要求显式选择版本或渠道。 +**自动回退到先行版本。** 渠道目标缺失或不兼容,不表示用户选择了先行版本。 **拒绝未知成员。** 这样每次增加可选成员都需要新的 `format` 值,并会破坏所有已部署的读取器。 ## 验收标准 -- 校验器接受上面的示例,并对根字段、插件字段、版本字段和 `source` 形式中的每条结构规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。无效的 DSH 范围字符串通过结构校验,但求值结果为不兼容。 +- 校验器接受上面的示例,并对根字段、插件字段、版本字段和 `source` 形式中的每条规则各拒绝一个违例,诊断信息给出对应的 JSON 路径。 - 根据每个示例版本构建的安装参数可被 DSH 的安装 spec 解析器和 pnpm 接受。 - 校验器在每一层都忽略未知成员。 -- 对相同的 manifest、运行时版本和本地豁免,索引与安装检查的兼容性结果一致。用例覆盖连字符范围、`||` 分支、workspace 简写、无效范围、宽泛的引擎范围与不兼容的 DSH 对等依赖同时存在,以及对等依赖兼容而 `engines.dsh` 不满足或为空的情况。 -- 调整优先级相同的版本编译信息条目的顺序后,精确的 `dist-tags` 目标仍选择同一来源。读取器拒绝未列出的标签目标;`latest` 缺失或不兼容时,不隐式切换版本或渠道。 -- 作者对象与简写字符串产生声明的显示名称,不携带联系字段,也不归一化版本。 -- Git 版本解析器校验 `1.0.0+one`,并保留完整字符串供标签查找、安装身份和本地豁免键使用。提交选择精确来源;带有版本编译信息的 npm 来源版本被拒绝。 -- 安装确认标识所选版本、所选渠道(如有)、先行版本状态、索引 URL 和来源。市场标签与评分继续标明归属。 +- 生成器和校验器拒绝缺失、空白和无效的 `engines.dsh`;省略版本后不留下悬空的标签目标。索引和市场来源的安装对有效范围结果一致,包括连字符范围、先行版本以及拒绝当前运行时的有效范围。豁免绝不绕过声明要求。 +- 排名相等的 Git 构建版本重新排序后,精确标签目标仍选择同一来源。缺失的目标被拒绝;`latest` 缺省或不兼容时不自动切换。 +- npm 作者对象与简写字符串产生声明的名称,不包含联系字段,也不修改源身份。 ## 风险 -- 索引没有签名。市场可能使用误导性的 `title`,例如声称自己是官方市场;客户端必须显示索引 URL 以及每个版本的 `source`。 -- Git 版本的身份与要求是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 +- 索引没有签名。标题、作者、标签和评分是市场的声明;`official` 标签不是 DSH 验证。客户端必须显示索引 URL 以及每个版本的 `source`。 +- Git 版本的 `name`、`version` 和 `engines.dsh` 是关于仓库的声明。仓库可以声明任意名称,包括 `@deepseek-ai/dsh-` 名称,实际安装的内容由已安装的 manifest 决定。 - npm 版本的 `source.registry` 同样是一种声明:它把任意 `name`(包括 `@deepseek-ai/dsh-` 名称)的安装引向市场选择的 registry,由该 registry 决定实际安装的内容。 - URL 图标会向图片主机暴露用户的 IP 地址。 -- 固定版本与分发标签在索引重新生成之前一直保持陈旧。 -- 版本固定不验证市场身份,也不保证任意 registry 返回的字节。已安装包的检查与市场列表保持独立。 -- 读取器、生成器和安装检查必须在部署前一同采用这份修订提案;混用原始与修订后的格式 1 规则,可能改变兼容性结果和版本选择。 +- 固定版本和发布标签在索引重新生成之前一直保持陈旧。 - 市场文本未经 DSH 审核即到达用户,并通过任何列出插件的客户端工具到达模型。 From f7851b58c0cec0e784f8060dc1651c8cf4a4c5e9 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Mon, 5 Oct 2026 21:55:43 +0800 Subject: [PATCH 035/155] docs(plugin-market): scope reuse policy and illustrate engine ranges --- ...-05-reuse-ecosystem-declarations.i18n.yaml | 19 ------------- ...2026-10-05-reuse-ecosystem-declarations.md | 27 ------------------- ...6-10-05-reuse-ecosystem-declarations.zh.md | 27 ------------------- ...10-02-plugin-market-index-format.i18n.yaml | 4 +-- .../2026-10-02-plugin-market-index-format.md | 6 +++-- ...026-10-02-plugin-market-index-format.zh.md | 6 +++-- AGENTS.md | 1 - docs/AGENTS.md | 2 +- scripts/doc-budgets.manifest.json | 2 +- 9 files changed, 12 insertions(+), 82 deletions(-) delete mode 100644 .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml delete mode 100644 .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md delete mode 100644 .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml deleted file mode 100644 index 54cfa46fb0..0000000000 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.i18n.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Bilingual-pair consistency record for 2026-10-05-reuse-ecosystem-declarations.md (docs/i18n/README.md): per heading -# section, a hash of its English and Chinese blocks outside code blocks and generated regions. -# After editing either side, bring the other along and re-record with: -# pnpm run verify-translation-pairing --write .agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md -/agent-note-reuse-ecosystem-declarations: - en: d1dde7b44169dfbf - zh: 411f5322bc72729c -/agent-note-reuse-ecosystem-declarations/problem: - en: 549330d38e58af03 - zh: be91a1cc6d5d5004 -/agent-note-reuse-ecosystem-declarations/decision: - en: 1d782e8be314bf79 - zh: 6bfd9e0dcee767a2 -/agent-note-reuse-ecosystem-declarations/alternatives-considered: - en: e323031a81d83039 - zh: c5bce4f4257b01da -/agent-note-reuse-ecosystem-declarations/consequences: - en: a6bfae0b6374ff98 - zh: d9c6bb50f583763e diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md deleted file mode 100644 index ad18d47c7e..0000000000 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md +++ /dev/null @@ -1,27 +0,0 @@ -# Agent Note: Reuse ecosystem declarations - -Status: implemented - -English | [中文](2026-10-05-reuse-ecosystem-declarations.zh.md) - -## Problem - -Custom declarations can duplicate information that package ecosystems already define. Converting existing metadata into independently maintained fields introduces additional validation and interpretation rules. Catalogs and user interfaces need selected data, but a second authored declaration can disagree with its source. - -## Decision - -Contributors must reuse established ecosystem declarations, formats, and meanings when they satisfy DSH requirements. Reader implementations must use maintained parsers and validators. Catalogs and user interfaces must derive their data from the original declarations. A generated projection may omit unused fields or normalize display data, but it must preserve the source meaning. The owning package README or generator JSDoc documents the projection rules. - -A new field or changed meaning requires a specific unmet requirement and a documented difference from the ecosystem rule. When authors define npm package metadata, they reuse npm's package identity, version and range syntax, and person fields. DSH-specific composition, localized display data, and host enforcement still require explicit DSH rules. - -The [dependency policy](2026-07-26-dependencies-over-hand-rolling.md) governs dependency selection. The [public manifest decision](../architecture/2026-09-10-public-package-manifest.md) governs the selected npm fields and DSH declarations. These decisions retain their ownership; this policy governs reuse of declarations and their interpretation. - -## Alternatives considered - -**Reuse field names but define independent meanings.** Existing tools and authors cannot rely on familiar declarations when their interpretation changes without a stated requirement. - -**Copy all ecosystem metadata without adaptation.** Consumers need different field subsets and display formats. Documented generated projections preserve the original declaration without requiring every consumer to retain unused data. - -## Consequences - -The [root instructions](../../../../AGENTS.md#conventions) require declaration reuse and documented differences. Review checks the source declaration, the reused parser or validator, and each projection's meaning. This policy adds no installer behavior or package metadata migration. diff --git a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md b/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md deleted file mode 100644 index 6ecb8e29d0..0000000000 --- a/.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.zh.md +++ /dev/null @@ -1,27 +0,0 @@ -# Agent Note: 复用生态声明 - -Status: implemented - -[English](2026-10-05-reuse-ecosystem-declarations.md) | 中文 - -## 问题 - -自定义声明可能重复包生态已经定义的信息。将既有元数据转换成独立维护的字段,会引入额外的校验和解释规则。目录与用户界面需要选取数据,但第二份由作者维护的声明可能与原始声明不一致。 - -## 决策 - -既有生态声明、格式和含义满足 DSH 需求时,贡献者必须复用它们。读取器实现必须使用持续维护的解析器和校验器。目录与用户界面必须从原始声明派生数据。生成的投影可以省略未使用的字段,或归一化显示数据,但必须保留原始含义。所属包的 README 或生成器的 JSDoc 记录投影规则。 - -新增字段或改变含义时,必须说明尚未满足的具体需求,并记录与生态规则的差异。作者定义 npm 包元数据时,复用 npm 的包身份、版本与范围语法,以及人员字段。DSH 特有的组合、本地化显示数据和宿主约束的强制执行仍须明确的 DSH 规则。 - -[依赖政策](2026-07-26-dependencies-over-hand-rolling.zh.md)负责依赖选择。[公共 manifest 决策](../architecture/2026-09-10-public-package-manifest.zh.md)负责选取的 npm 字段与 DSH 声明。这些决策继续负责各自的范围;本政策负责声明及其解释的复用。 - -## 考虑过的替代方案 - -**复用字段名称,却独立定义含义。** 如果没有说明需求便改变熟悉声明的解释方式,既有工具和作者就无法依赖这些声明。 - -**完整复制生态元数据,不做适配。** 消费方需要不同的字段子集和显示格式。记录规则的生成投影保留原始声明,无需每个消费方都保留未使用的数据。 - -## 后果 - -[根指令](../../../../AGENTS.md#conventions)要求复用声明并记录差异。评审检查原始声明、复用的解析器或校验器,以及每种投影的含义。本政策不增加安装器行为,也不迁移包元数据。 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml index 1da0b47262..0c9ecf4045 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.i18n.yaml @@ -9,8 +9,8 @@ en: ce5e4a362f558af6 zh: 29d93e0655b99217 /agent-note-plugin-market-index-format/proposal: - en: 7b728d6cbf6f16d6 - zh: 73e79d35b0dbfbad + en: ed9148e95b2ad7c2 + zh: 25a7add3c56fd681 /agent-note-plugin-market-index-format/proposal/example: en: 1b1c960c966cf912 zh: 97be87cb14893c26 diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md index 7faf8edc98..68f8e6a447 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.md @@ -16,6 +16,8 @@ An index must therefore carry everything a list page displays: localized title a Separate the **index** from the **index generator**. DSH defines and reads one JSON index format. How an index is produced, and from which source list, belongs to the generator. DSH's reader, its Discover page, and a reference generator are separate changes that consume this format. Indexes list [profile plugin bundles](../../implemented/architecture/2026-08-05-profile-plugin-bundles.md) and install them through [guided plugin installation](../../implemented/architecture/2026-09-15-guided-plugin-installation.md). +The market reuses npm's package names, versions, ranges, distribution tags, and person declarations. Readers and generators use maintained npm parsers and validators. Additional fields or changed meanings require a plugin-market requirement that npm does not meet. + ### Example ```json @@ -54,13 +56,13 @@ Separate the **index** from the **index generator**. DSH defines and reads one J "version": "0.2.0-rc.2", "publishTimestamp": 1790476800, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.2" } + "engines": { "dsh": ">=0.2.0 <0.3.0" } }, { "version": "0.2.0-rc.1", "publishTimestamp": 1789872000, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.1" } + "engines": { "dsh": "0.2.0 - 0.2.4 || >=0.3.0 <0.4.0" } } ] }, diff --git a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md index 29813bef25..062547490e 100644 --- a/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md +++ b/.agents/notes/proposed/feature/2026-10-02-plugin-market-index-format.zh.md @@ -16,6 +16,8 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 将**索引**与**索引生成器**分开。DSH 定义并读取一种 JSON 索引格式。索引如何生成、基于哪份源列表生成,由生成器负责。DSH 的读取器、Discover 页面和参考生成器是使用此格式的独立变更。索引列出[profile 插件组合包](../../implemented/architecture/2026-08-05-profile-plugin-bundles.zh.md),并通过[引导式插件安装](../../implemented/architecture/2026-09-15-guided-plugin-installation.zh.md)安装它们。 +市场复用 npm 的包名、版本、范围、发布标签和 person 声明。读取器与生成器使用维护中的 npm 解析器和校验器。新增字段或改变含义需要 npm 无法满足的插件市场需求。 + ### 示例 ```json @@ -54,13 +56,13 @@ DSH 只能从用户已知的 spec 安装第三方组合包(bundle):npm 包 "version": "0.2.0-rc.2", "publishTimestamp": 1790476800, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.2" } + "engines": { "dsh": ">=0.2.0 <0.3.0" } }, { "version": "0.2.0-rc.1", "publishTimestamp": 1789872000, "source": { "type": "npm" }, - "engines": { "dsh": "0.2.0-rc.1" } + "engines": { "dsh": "0.2.0 - 0.2.4 || >=0.3.0 <0.4.0" } } ] }, diff --git a/AGENTS.md b/AGENTS.md index 864102877b..4940e9b484 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -137,7 +137,6 @@ Real-API tests/demos read `DEEPSEEK_API_KEY`, optional `DEEPSEEK_BASE_URL`, and - **Plugins, not loop changes**: new behavior goes on documented extension points; changing `agent-loop` requires updating docs/architecture.md. - **A capability seam comprises Service Definition / Service Provider / Consumer roles.** It is complete, never one role; split only when roles evolve independently ([glossary](docs/glossary.md#capability-seam)). - **Prefer maintained dependencies over hand-rolling** when they genuinely delete owned code and tests ([policy](.agents/notes/implemented/process/2026-07-26-dependencies-over-hand-rolling.md)). -- **Reuse ecosystem declarations, formats, and meanings when they meet DSH requirements.** Use maintained parsers and validators; derive catalog and UI data from original declarations. New fields or changed meanings require a documented unmet requirement and difference from ecosystem rules ([policy](.agents/notes/implemented/process/2026-10-05-reuse-ecosystem-declarations.md)). - **Explicit > implicit at package boundaries**: defaulting is an explicit `resolve(request): Spec` step in the owning implementation, never a hidden `?? default` inside `run()` (the `dsh-shell` request/spec split is the template). - **No hardcoded tunables in plugins**: deployment-varying choices are validated `Config` fields changeable from cordis.yml; a `DEFAULT_*` constant or test hook is not configurability. Protocol constants, external specs, and security invariants stay fixed. - **Misconfiguration fails loud** at load when self-contained, otherwise at the earliest resolvable point; never silently skip a missing referent. diff --git a/docs/AGENTS.md b/docs/AGENTS.md index 6e2c5527b4..b524a84b3e 100644 --- a/docs/AGENTS.md +++ b/docs/AGENTS.md @@ -55,7 +55,7 @@ When the gate goes red: 2. **Condense** content that belongs here but can be shorter. 3. **Raise** the ceiling only when the words need the space; justify the manifest diff in the PR. A too-low ceiling is a budget bug. -Ceilings are guardrails, not reduction targets. At or below target, retain at least 5% headroom; above target, freeze the ceiling until relocation or condensation brings the document under target. Lower a ceiling only when the document still has room. Targets: root `AGENTS.md` ≤ 2,060; `architecture.md` ≤ 2,400; subtree `AGENTS.md` ≤ 600, except `packages/AGENTS.md` ≤ 750 and this file ≤ 1,320; `packages/README.md` ≤ 994; plus `cordis-primer.md` 600, `defensive-patterns.md` 550, `testing.md` 1,300, `examples/AGENTS.md` 310. Review governs unbudgeted tiers. +Ceilings are guardrails, not reduction targets. At or below target, retain at least 5% headroom; above target, freeze the ceiling until relocation or condensation brings the document under target. Lower a ceiling only when the document still has room. Targets: root `AGENTS.md` ≤ 1,960; `architecture.md` ≤ 2,400; subtree `AGENTS.md` ≤ 600, except `packages/AGENTS.md` ≤ 750 and this file ≤ 1,320; `packages/README.md` ≤ 994; plus `cordis-primer.md` 600, `defensive-patterns.md` 550, `testing.md` 1,300, `examples/AGENTS.md` 310. Review governs unbudgeted tiers. ## The slop checklist diff --git a/scripts/doc-budgets.manifest.json b/scripts/doc-budgets.manifest.json index 670ff02765..2eba3f4c17 100644 --- a/scripts/doc-budgets.manifest.json +++ b/scripts/doc-budgets.manifest.json @@ -1,5 +1,5 @@ { - "AGENTS.md": 2060, + "AGENTS.md": 1960, "docs/AGENTS.md": 1320, "docs/architecture.md": 2410, "docs/cordis-primer.md": 600, From 407d7a1475818c84840c3373bd808b6e421e8774 Mon Sep 17 00:00:00 2001 From: Turtle Date: Mon, 5 Oct 2026 23:08:46 +0800 Subject: [PATCH 036/155] fix(client): keep the image lightbox clear of the Windows caption --- apps/web/tests/markdown-images.e2e.ts | 13 ++++++++++++- packages/client/ui-primitives/README.i18n.yaml | 4 ++-- packages/client/ui-primitives/README.md | 2 +- packages/client/ui-primitives/README.zh.md | 2 +- .../ui-primitives/src/ImageLightbox.module.css | 10 +++++----- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/apps/web/tests/markdown-images.e2e.ts b/apps/web/tests/markdown-images.e2e.ts index 122abebc73..4031ed8562 100644 --- a/apps/web/tests/markdown-images.e2e.ts +++ b/apps/web/tests/markdown-images.e2e.ts @@ -289,7 +289,18 @@ describe('web e2e: Markdown image rendering', () => { await page.getByRole('button', { name: `View full image: ${WORKSPACE_ALT}`, exact: true }).click() const lightbox = page.getByRole('dialog', { name: 'Image preview', exact: true }) await lightbox.waitFor() - await lightbox.getByRole('button', { name: 'Close image preview' }).click() + const lightboxMask = lightbox.locator(':scope > [aria-hidden="true"]') + const lightboxClose = lightbox.getByRole('button', { name: 'Close image preview' }) + for (const windows of [true, false]) { + await page.evaluate((value) => { + document.documentElement.toggleAttribute('data-windows-titlebar', value) + document.documentElement.style.setProperty('--dsh-windows-titlebar-height', value ? '40px' : '') + }, windows) + // The Windows caption stays unpainted and the close control sits below it. + expect((await lightboxMask.boundingBox())?.y).toBe(windows ? 40 : 0) + expect((await lightboxClose.boundingBox())?.y).toBe(windows ? 60 : 20) + } + await lightboxClose.click() await lightbox.waitFor({ state: 'detached' }) const link = page.getByRole('button', { name: 'View comparison', exact: true }) await link.hover() diff --git a/packages/client/ui-primitives/README.i18n.yaml b/packages/client/ui-primitives/README.i18n.yaml index 2a527cf249..566395b051 100644 --- a/packages/client/ui-primitives/README.i18n.yaml +++ b/packages/client/ui-primitives/README.i18n.yaml @@ -24,8 +24,8 @@ en: f0e54915b896af5a zh: 2047520fd321be90 /deepseek-ai-dsh-client-ui-primitives/use-this-package/rendering-agent-output: - en: d79e20306593c4bf - zh: 5c0f1100e2cd6fcc + en: 4a1a61bb2d64fe4c + zh: 1b0097fff440c2ef /deepseek-ai-dsh-client-ui-primitives/use-this-package/localizing-copy: en: 4aef65dea11de083 zh: abc22cd7c65cdf38 diff --git a/packages/client/ui-primitives/README.md b/packages/client/ui-primitives/README.md index 9ce34c7095..5f92aaec70 100644 --- a/packages/client/ui-primitives/README.md +++ b/packages/client/ui-primitives/README.md @@ -105,7 +105,7 @@ The nearest `MarkdownDelegateProvider` supplies optional `openExternalLink` and `JsonTree` clamps collapsed strings to `collapsedStringLines` (three by default). Expanded strings show raw text, retain sibling commas, and fit within the window and outer scrolling containers. Resize and ancestor-scroll events update that limit. Row copy feedback updates independently of JSON value rendering; pending clipboard writes cannot update a different row or an unmounted tree. -`ImageLightbox` is the shared original-image modal with focus restoration and Escape dismissal. The internal thumbnail renderer receives loading/failure labels from its owner. `HoverCard.inline` keeps a file link in the text flow and uses the shared menu material, keyboard-visible focus, and placement above or below the anchor without covering it. Escape closes an open thumbnail even when focus is elsewhere; subsequent Escape presses reach the owner. `MarkdownDelegateProvider.fileImages` supplies a decoded-path resolver and complete image labels: settled image links gain hover previews, and standalone images gain lightbox activation. Image-only anchors retain their single navigation target. The parser recovers only complete, unescaped, standalone local image references with bare spaces and an unambiguous supported image suffix; code and ambiguous destinations remain literal. +`ImageLightbox` is the shared original-image modal with focus restoration and Escape dismissal. Like `Modal`, its mask leaves the Windows caption unpainted, and its close control sits 20px below the caption. The internal thumbnail renderer receives loading/failure labels from its owner. `HoverCard.inline` keeps a file link in the text flow and uses the shared menu material, keyboard-visible focus, and placement above or below the anchor without covering it. Escape closes an open thumbnail even when focus is elsewhere; subsequent Escape presses reach the owner. `MarkdownDelegateProvider.fileImages` supplies a decoded-path resolver and complete image labels: settled image links gain hover previews, and standalone images gain lightbox activation. Image-only anchors retain their single navigation target. The parser recovers only complete, unescaped, standalone local image references with bare spaces and an unambiguous supported image suffix; code and ambiguous destinations remain literal. ### Localizing copy diff --git a/packages/client/ui-primitives/README.zh.md b/packages/client/ui-primitives/README.zh.md index 92a8de27b0..e2c1b8f46f 100644 --- a/packages/client/ui-primitives/README.zh.md +++ b/packages/client/ui-primitives/README.zh.md @@ -105,7 +105,7 @@ kind: "package-library" `JsonTree` 把折叠字符串限制为 `collapsedStringLines` 行(默认三行)。展开后显示原始文本、保留同级逗号,并限制在窗口与外层滚动容器内;尺寸变化和祖先滚动事件会更新此限制。行复制反馈独立于 JSON 值渲染更新;尚未完成的剪贴板写入不会更新另一行或已卸载的树。 -`ImageLightbox` 是共享原图浮层,支持焦点恢复与 Esc 关闭。包内缩略图渲染器由调用方提供加载及失败文案。`HoverCard.inline` 使文件链接保持在文本流内,并使用共享菜单材质、键盘可见焦点,并在锚点上方或下方定位而不遮挡锚点。即使焦点位于其他位置,Esc 也会关闭已打开的缩略图;后续 Esc 按键继续传给 owner。`MarkdownDelegateProvider.fileImages` 提供已解码路径解析器与完整图片文案:消息落定后的图片链接支持悬停预览,独立图片支持点击放大。仅包含图片的链接保留单一导航目标。解析器仅恢复完整、未转义、独立成段且带明确图片扩展名的含裸空格本地图片引用;代码与有歧义的目标保持原文。 +`ImageLightbox` 是共享原图浮层,支持焦点恢复与 Esc 关闭。与 `Modal` 相同,其遮罩不覆盖 Windows 顶栏,关闭按钮位于顶栏下方 20px。包内缩略图渲染器由调用方提供加载及失败文案。`HoverCard.inline` 使文件链接保持在文本流内,并使用共享菜单材质、键盘可见焦点,并在锚点上方或下方定位而不遮挡锚点。即使焦点位于其他位置,Esc 也会关闭已打开的缩略图;后续 Esc 按键继续传给 owner。`MarkdownDelegateProvider.fileImages` 提供已解码路径解析器与完整图片文案:消息落定后的图片链接支持悬停预览,独立图片支持点击放大。仅包含图片的链接保留单一导航目标。解析器仅恢复完整、未转义、独立成段且带明确图片扩展名的含裸空格本地图片引用;代码与有歧义的目标保持原文。 ### 本地化文案 diff --git a/packages/client/ui-primitives/src/ImageLightbox.module.css b/packages/client/ui-primitives/src/ImageLightbox.module.css index 1907fe930f..d24769cefd 100644 --- a/packages/client/ui-primitives/src/ImageLightbox.module.css +++ b/packages/client/ui-primitives/src/ImageLightbox.module.css @@ -4,13 +4,13 @@ z-index: 1000; display: grid; place-items: center; - padding: 40px; + padding: calc(40px + var(--dsh-frame-chrome-top, 0px)) 40px 40px; } -/* Shared dimming mask below the preview and its controls. */ +/* Shared dimming mask below the preview and its controls; like Modal, it leaves the Windows caption unpainted. */ .mask { position: absolute; - inset: 0; + inset: var(--dsh-frame-chrome-top, 0px) 0 0; background: var(--dsw-alias-bg-mask-1); backdrop-filter: var(--dsw-mask-blur); } @@ -18,7 +18,7 @@ .image { position: relative; max-width: min(100%, 1600px); - max-height: calc(100vh - 80px); + max-height: calc(100vh - 80px - var(--dsh-frame-chrome-top, 0px)); object-fit: contain; border-radius: var(--dsw-radius-lg); background: var(--dsw-specific-input-major); @@ -28,7 +28,7 @@ .close { position: fixed; - top: 20px; + top: calc(20px + var(--dsh-frame-chrome-top, 0px)); right: 20px; z-index: 1; display: grid; From e127ed2d6cd2b51cfc256fc6e7e808aedd3fcfc0 Mon Sep 17 00:00:00 2001 From: Turtle Date: Mon, 5 Oct 2026 23:55:51 +0800 Subject: [PATCH 037/155] refactor(client): position the lightbox in a stage below the Windows caption --- apps/web/tests/markdown-images.e2e.ts | 2 +- .../src/ImageLightbox.module.css | 24 ++++++++++++------- .../ui-primitives/src/ImageLightbox.tsx | 12 ++++++---- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/apps/web/tests/markdown-images.e2e.ts b/apps/web/tests/markdown-images.e2e.ts index 4031ed8562..390675a3d1 100644 --- a/apps/web/tests/markdown-images.e2e.ts +++ b/apps/web/tests/markdown-images.e2e.ts @@ -289,7 +289,7 @@ describe('web e2e: Markdown image rendering', () => { await page.getByRole('button', { name: `View full image: ${WORKSPACE_ALT}`, exact: true }).click() const lightbox = page.getByRole('dialog', { name: 'Image preview', exact: true }) await lightbox.waitFor() - const lightboxMask = lightbox.locator(':scope > [aria-hidden="true"]') + const lightboxMask = lightbox.locator(':scope > div > [aria-hidden="true"]') const lightboxClose = lightbox.getByRole('button', { name: 'Close image preview' }) for (const windows of [true, false]) { await page.evaluate((value) => { diff --git a/packages/client/ui-primitives/src/ImageLightbox.module.css b/packages/client/ui-primitives/src/ImageLightbox.module.css index d24769cefd..4cffa16c36 100644 --- a/packages/client/ui-primitives/src/ImageLightbox.module.css +++ b/packages/client/ui-primitives/src/ImageLightbox.module.css @@ -1,16 +1,24 @@ +/* Full-viewport layer that blocks background clicks, including on the Windows caption. */ .backdrop { position: fixed; inset: 0; z-index: 1000; - display: grid; - place-items: center; - padding: calc(40px + var(--dsh-frame-chrome-top, 0px)) 40px 40px; } -/* Shared dimming mask below the preview and its controls; like Modal, it leaves the Windows caption unpainted. */ -.mask { +/* Painted area below the Windows caption; like Modal, the caption stays unpainted. */ +.stage { position: absolute; inset: var(--dsh-frame-chrome-top, 0px) 0 0; + display: flex; + align-items: center; + justify-content: center; + padding: 40px; +} + +/* Shared dimming mask below the preview and its controls. */ +.mask { + position: absolute; + inset: 0; background: var(--dsw-alias-bg-mask-1); backdrop-filter: var(--dsw-mask-blur); } @@ -18,7 +26,7 @@ .image { position: relative; max-width: min(100%, 1600px); - max-height: calc(100vh - 80px - var(--dsh-frame-chrome-top, 0px)); + max-height: 100%; object-fit: contain; border-radius: var(--dsw-radius-lg); background: var(--dsw-specific-input-major); @@ -27,8 +35,8 @@ } .close { - position: fixed; - top: calc(20px + var(--dsh-frame-chrome-top, 0px)); + position: absolute; + top: 20px; right: 20px; z-index: 1; display: grid; diff --git a/packages/client/ui-primitives/src/ImageLightbox.tsx b/packages/client/ui-primitives/src/ImageLightbox.tsx index 893ed2fe95..1cb3fe4a8c 100644 --- a/packages/client/ui-primitives/src/ImageLightbox.tsx +++ b/packages/client/ui-primitives/src/ImageLightbox.tsx @@ -54,11 +54,13 @@ export function ImageLightbox({ src, alt, labels, onClose }: { aria-modal="true" aria-label={labels.dialog} > -