diff --git a/.github/workflows/ci-docs.yml b/.github/workflows/ci-docs.yml index e4a6e21b0e..62a0369484 100644 --- a/.github/workflows/ci-docs.yml +++ b/.github/workflows/ci-docs.yml @@ -4,6 +4,11 @@ on: pull_request: paths: - 'apps/docs/**' + - 'packages/document-api/src/contract/**' + - 'packages/document-api/scripts/**' + - 'scripts/generate-all.mjs' + - 'package.json' + - 'pnpm-lock.yaml' workflow_dispatch: jobs: @@ -27,6 +32,9 @@ jobs: - name: Install Dependencies run: pnpm install --frozen-lockfile + - name: Generate all artifacts + run: pnpm run generate:all + - name: Validate Docs run: pnpm --filter @superdoc/docs validate diff --git a/.github/workflows/ci-document-api.yml b/.github/workflows/ci-document-api.yml index e2d1f6cefd..31bb22ae55 100644 --- a/.github/workflows/ci-document-api.yml +++ b/.github/workflows/ci-document-api.yml @@ -32,5 +32,11 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Generate contract outputs + run: pnpm run docapi:sync + + - name: Check overview.mdx freshness + run: git diff --exit-code apps/docs/document-api/overview.mdx + - name: Check contract parity and generated outputs run: pnpm run docapi:check diff --git a/.github/workflows/ci-sdk.yml b/.github/workflows/ci-sdk.yml new file mode 100644 index 0000000000..a8ef752170 --- /dev/null +++ b/.github/workflows/ci-sdk.yml @@ -0,0 +1,52 @@ +name: CI SDK + +permissions: + contents: read + +on: + pull_request: + paths: + - 'packages/document-api/src/contract/**' + - 'packages/document-api/scripts/**' + - 'apps/cli/**' + - 'packages/sdk/**' + - 'scripts/generate-all.mjs' + - 'package.json' + - 'pnpm-lock.yaml' + - '.github/workflows/ci-sdk.yml' + workflow_dispatch: + +concurrency: + group: ci-sdk-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + + - uses: oven-sh/setup-bun@v2 + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Generate all artifacts + run: pnpm run generate:all + + - name: Validate SDK + run: node packages/sdk/scripts/sdk-validate.mjs + + - name: Build Node SDK + run: pnpm --prefix packages/sdk/langs/node run build diff --git a/.github/workflows/release-sdk.yml b/.github/workflows/release-sdk.yml new file mode 100644 index 0000000000..d60f998d48 --- /dev/null +++ b/.github/workflows/release-sdk.yml @@ -0,0 +1,124 @@ +name: 📦 Release SDK + +on: + workflow_dispatch: + inputs: + version: + description: "Version to release (e.g. 1.0.0-alpha.7). Leave empty to release the current version." + required: false + type: string + dry-run: + description: "Dry run — build and validate without publishing" + required: false + type: boolean + default: false + +permissions: + contents: read + id-token: write # PyPI trusted publishing (OIDC) + +concurrency: + group: release-sdk + cancel-in-progress: false + +jobs: + release: + runs-on: ubuntu-24.04 + environment: ${{ inputs.dry-run && '' || 'pypi' }} + steps: + - uses: actions/checkout@v6 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v6 + with: + node-version-file: .nvmrc + cache: pnpm + registry-url: "https://registry.npmjs.org" + + - uses: oven-sh/setup-bun@v2 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Install Python build tools + run: pip install build + + # --------------------------------------------------------------- + # Show current version (visible in the Actions run summary) + # --------------------------------------------------------------- + - name: Show current version + run: | + CURRENT=$(node -p "require('./packages/sdk/package.json').version") + echo "### SDK Release" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| | Version |" >> $GITHUB_STEP_SUMMARY + echo "|---|---|" >> $GITHUB_STEP_SUMMARY + echo "| **Current (in repo)** | \`${CURRENT}\` |" >> $GITHUB_STEP_SUMMARY + if [ -n "${{ inputs.version }}" ]; then + echo "| **Releasing** | \`${{ inputs.version }}\` |" >> $GITHUB_STEP_SUMMARY + else + echo "| **Releasing** | \`${CURRENT}\` (unchanged) |" >> $GITHUB_STEP_SUMMARY + fi + echo "| **Dry run** | \`${{ inputs.dry-run }}\` |" >> $GITHUB_STEP_SUMMARY + + # --------------------------------------------------------------- + # Set version (if provided) + # --------------------------------------------------------------- + - name: Set version + if: inputs.version != '' + run: node packages/sdk/scripts/sync-sdk-version.mjs --set "${{ inputs.version }}" + + # --------------------------------------------------------------- + # Generate + validate + # --------------------------------------------------------------- + - name: Generate all artifacts + run: pnpm run generate:all + + - name: Validate SDK + run: node packages/sdk/scripts/sdk-validate.mjs + + # --------------------------------------------------------------- + # Node SDK + # --------------------------------------------------------------- + - name: Build Node SDK + run: pnpm --prefix packages/sdk/langs/node run build + + - name: Publish Node SDK + if: ${{ !inputs.dry-run }} + run: pnpm --prefix packages/sdk/langs/node publish --access public --tag latest --no-git-checks + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish Node SDK (dry run) + if: ${{ inputs.dry-run }} + run: pnpm --prefix packages/sdk/langs/node publish --access public --tag latest --no-git-checks --dry-run + + # --------------------------------------------------------------- + # Python SDK + # --------------------------------------------------------------- + - name: Prepare Python SDK tools + run: | + rm -rf packages/sdk/langs/python/superdoc/tools + cp -r packages/sdk/tools packages/sdk/langs/python/superdoc/tools + rm -f packages/sdk/langs/python/superdoc/tools/__init__.py + + - name: Build Python SDK + run: python -m build + working-directory: packages/sdk/langs/python + + - name: Publish Python SDK to PyPI + if: ${{ !inputs.dry-run }} + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: packages/sdk/langs/python/dist/ + + - name: Publish Python SDK (dry run) + if: ${{ inputs.dry-run }} + run: | + echo "Would publish the following Python packages:" + ls -la packages/sdk/langs/python/dist/ diff --git a/.gitignore b/.gitignore index 67f41ef92c..025a52e27b 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,16 @@ devtools/visual-testing/pnpm-lock.yaml .bun-cache/ +# Python +__pycache__/ +*.pyc +*.pyo + +# Generated artifacts — run `pnpm run generate:all` to produce +packages/document-api/generated/ +apps/cli/generated/ +packages/sdk/langs/node/src/generated/ +packages/sdk/langs/python/superdoc/generated/ +packages/sdk/tools/*.json +# Note: apps/docs/document-api/reference/ stays committed because Mintlify +# deploys directly from git with no pre-build hook support. diff --git a/CLAUDE.md b/CLAUDE.md index 2cd6d0e91b..fed3296bcc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -109,3 +109,21 @@ Many packages use `.js` files with JSDoc `@typedef` for type definitions (e.g., - `pnpm build` - Build all packages - `pnpm test` - Run tests - `pnpm dev` - Start dev server (from examples/) +- `pnpm run generate:all` - Generate all derived artifacts (schemas, SDK clients, tool catalogs, reference docs) + +## Generated Artifacts + +These directories are produced by `pnpm run generate:all`: + +| Directory | In git? | What it contains | +|-----------|---------|-----------------| +| `packages/document-api/generated/` | No (gitignored) | Agent tool schemas, JSON schemas, manifest | +| `apps/cli/generated/` | No (gitignored) | SDK contract JSON exported from CLI metadata | +| `packages/sdk/langs/node/src/generated/` | No (gitignored) | Node SDK generated client code | +| `packages/sdk/langs/python/superdoc/generated/` | No (gitignored) | Python SDK generated client code | +| `packages/sdk/tools/*.json` | No (gitignored) | Tool catalogs for all providers (catalog.json, tools.openai.json, etc.) | +| `apps/docs/document-api/reference/` | Yes (Mintlify deploys from git) | Reference doc pages generated from contract | + +After a fresh clone, run `pnpm run generate:all` before working on SDK, CLI, or doc-api code. + +Note: `packages/sdk/tools/__init__.py` is a manual file (Python package marker) and stays committed. diff --git a/apps/cli/package.json b/apps/cli/package.json index 0e98cb4582..5ce2f927dd 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -44,13 +44,6 @@ "typescript": "catalog:" }, "module": "src/index.ts", - "optionalDependencies": { - "@superdoc-dev/cli-darwin-arm64": "workspace:*", - "@superdoc-dev/cli-darwin-x64": "workspace:*", - "@superdoc-dev/cli-linux-x64": "workspace:*", - "@superdoc-dev/cli-linux-arm64": "workspace:*", - "@superdoc-dev/cli-windows-x64": "workspace:*" - }, "publishConfig": { "access": "public" } diff --git a/apps/cli/scripts/export-sdk-contract.ts b/apps/cli/scripts/export-sdk-contract.ts new file mode 100644 index 0000000000..4592e870c7 --- /dev/null +++ b/apps/cli/scripts/export-sdk-contract.ts @@ -0,0 +1,251 @@ +/** + * export-sdk-contract.ts — Produces `apps/cli/generated/sdk-contract.json`. + * + * This is the single input artifact the SDK codegen consumes. It merges: + * - CLI operation metadata (transport plane: params, constraints, command tokens) + * - document-api schemas (schema plane: inputSchema, outputSchema, successSchema) + * - CLI-only operation definitions (from canonical definitions module) + * - Host protocol metadata + * + * Run: bun run apps/cli/scripts/export-sdk-contract.ts + * Check: bun run apps/cli/scripts/export-sdk-contract.ts --check + */ + +import { readFileSync, writeFileSync, mkdirSync } from 'node:fs'; +import { resolve, dirname } from 'node:path'; +import { createHash } from 'node:crypto'; +import { tmpdir } from 'node:os'; + +import { COMMAND_CATALOG } from '@superdoc/document-api'; + +import { CLI_OPERATION_METADATA } from '../src/cli/operation-params'; +import { + CLI_OPERATION_IDS, + cliCategory, + cliDescription, + cliCommandTokens, + cliRequiresDocumentContext, + toDocApiId, + type DocBackedCliOpId, +} from '../src/cli/operation-set'; +import type { CliOnlyOperation } from '../src/cli/types'; +import { CLI_ONLY_OPERATION_DEFINITIONS } from '../src/cli/cli-only-operation-definitions'; +import { HOST_PROTOCOL_VERSION, HOST_PROTOCOL_FEATURES, HOST_PROTOCOL_NOTIFICATIONS } from '../src/host/protocol'; + +// --------------------------------------------------------------------------- +// Paths +// --------------------------------------------------------------------------- + +const ROOT = resolve(import.meta.dir, '../../..'); +const CLI_DIR = resolve(ROOT, 'apps/cli'); +const CONTRACT_JSON_PATH = resolve(ROOT, 'packages/document-api/generated/schemas/document-api-contract.json'); +const OUTPUT_PATH = resolve(CLI_DIR, 'generated/sdk-contract.json'); +const CLI_PKG_PATH = resolve(CLI_DIR, 'package.json'); + +// --------------------------------------------------------------------------- +// Intent names — human-friendly tool names for doc-backed operations only. +// CLI-only intent names live in CLI_ONLY_OPERATION_DEFINITIONS. +// Typed exhaustively: missing entry = compile error. +// --------------------------------------------------------------------------- + +const INTENT_NAMES = { + 'doc.find': 'find_content', + 'doc.getNode': 'get_node', + 'doc.getNodeById': 'get_node_by_id', + 'doc.info': 'get_document_info', + 'doc.insert': 'insert_content', + 'doc.replace': 'replace_content', + 'doc.delete': 'delete_content', + 'doc.format.bold': 'format_bold', + 'doc.format.italic': 'format_italic', + 'doc.format.underline': 'format_underline', + 'doc.format.strikethrough': 'format_strikethrough', + 'doc.create.paragraph': 'create_paragraph', + 'doc.lists.list': 'list_lists', + 'doc.lists.get': 'get_list', + 'doc.lists.insert': 'insert_list', + 'doc.lists.setType': 'set_list_type', + 'doc.lists.indent': 'indent_list', + 'doc.lists.outdent': 'outdent_list', + 'doc.lists.restart': 'restart_list_numbering', + 'doc.lists.exit': 'exit_list', + 'doc.comments.add': 'add_comment', + 'doc.comments.edit': 'edit_comment', + 'doc.comments.reply': 'reply_to_comment', + 'doc.comments.move': 'move_comment', + 'doc.comments.resolve': 'resolve_comment', + 'doc.comments.remove': 'remove_comment', + 'doc.comments.setInternal': 'set_comment_internal', + 'doc.comments.setActive': 'set_comment_active', + 'doc.comments.goTo': 'go_to_comment', + 'doc.comments.get': 'get_comment', + 'doc.comments.list': 'list_comments', + 'doc.trackChanges.list': 'list_tracked_changes', + 'doc.trackChanges.get': 'get_tracked_change', + 'doc.trackChanges.accept': 'accept_tracked_change', + 'doc.trackChanges.reject': 'reject_tracked_change', + 'doc.trackChanges.acceptAll': 'accept_all_tracked_changes', + 'doc.trackChanges.rejectAll': 'reject_all_tracked_changes', +} as const satisfies Record; + +// --------------------------------------------------------------------------- +// Load inputs +// --------------------------------------------------------------------------- + +function loadDocApiContract(): { + contractVersion: string; + operations: Record>; +} { + const raw = readFileSync(CONTRACT_JSON_PATH, 'utf-8'); + return JSON.parse(raw); +} + +function loadCliPackage(): { name: string; version: string } { + const raw = readFileSync(CLI_PKG_PATH, 'utf-8'); + return JSON.parse(raw); +} + +// --------------------------------------------------------------------------- +// Build contract +// --------------------------------------------------------------------------- + +function buildSdkContract() { + const docApiContract = loadDocApiContract(); + const cliPkg = loadCliPackage(); + + const sourceHash = createHash('sha256').update(JSON.stringify(docApiContract)).digest('hex').slice(0, 16); + + const operations: Record = {}; + + for (const cliOpId of CLI_OPERATION_IDS) { + const metadata = CLI_OPERATION_METADATA[cliOpId]; + const docApiId = toDocApiId(cliOpId); + const stripped = cliOpId.slice(4) as CliOnlyOperation; + + // Resolve intentName: doc-backed from INTENT_NAMES, CLI-only from definitions + const cliOnlyDef = docApiId ? null : CLI_ONLY_OPERATION_DEFINITIONS[stripped]; + const intentName = docApiId ? INTENT_NAMES[cliOpId as DocBackedCliOpId] : cliOnlyDef!.intentName; + if (!intentName) { + throw new Error(`Missing intentName for ${cliOpId}`); + } + + // Base fields shared by all operations + const entry: Record = { + operationId: cliOpId, + command: metadata.command, + commandTokens: [...cliCommandTokens(cliOpId)], + category: cliCategory(cliOpId), + description: cliDescription(cliOpId), + requiresDocumentContext: cliRequiresDocumentContext(cliOpId), + docRequirement: metadata.docRequirement, + intentName, + + // Transport plane + params: metadata.params.map((p) => { + const spec: Record = { + name: p.name, + kind: p.kind, + type: p.type, + }; + if (p.flag && p.flag !== p.name) spec.flag = p.flag; + if (p.required) spec.required = true; + if (p.schema) spec.schema = p.schema; + if (p.agentVisible === false) spec.agentVisible = false; + return spec; + }), + constraints: metadata.constraints ?? null, + }; + + if (docApiId) { + // Doc-backed operation — metadata from COMMAND_CATALOG + const catalog = COMMAND_CATALOG[docApiId]; + entry.mutates = catalog.mutates; + entry.idempotency = catalog.idempotency; + entry.supportsTrackedMode = catalog.supportsTrackedMode; + entry.supportsDryRun = catalog.supportsDryRun; + + // Schema plane from document-api-contract.json + const docOp = docApiContract.operations[docApiId]; + if (!docOp) { + throw new Error(`Missing document-api contract entry for ${docApiId}`); + } + entry.inputSchema = docOp.inputSchema; + entry.outputSchema = docOp.outputSchema; + if (docOp.successSchema) entry.successSchema = docOp.successSchema; + if (docOp.failureSchema) entry.failureSchema = docOp.failureSchema; + } else { + // CLI-only operation — metadata from canonical definitions + const def = cliOnlyDef!; + entry.mutates = def.sdkMetadata.mutates; + entry.idempotency = def.sdkMetadata.idempotency; + entry.supportsTrackedMode = def.sdkMetadata.supportsTrackedMode; + entry.supportsDryRun = def.sdkMetadata.supportsDryRun; + entry.outputSchema = def.outputSchema; + } + + // Invariant: every operation must have outputSchema + if (!entry.outputSchema) { + throw new Error(`Operation ${cliOpId} is missing outputSchema — contract export bug.`); + } + + operations[cliOpId] = entry; + } + + return { + contractVersion: docApiContract.contractVersion, + sourceHash, + cli: { + package: cliPkg.name, + minVersion: cliPkg.version, + }, + protocol: { + version: HOST_PROTOCOL_VERSION, + transport: 'stdio', + features: [...HOST_PROTOCOL_FEATURES], + notifications: [...HOST_PROTOCOL_NOTIFICATIONS], + }, + operations, + }; +} + +// --------------------------------------------------------------------------- +// Main +// --------------------------------------------------------------------------- + +function main() { + const isCheck = process.argv.includes('--check'); + const contract = buildSdkContract(); + const json = JSON.stringify(contract, null, 2) + '\n'; + + if (isCheck) { + let existing: string; + try { + existing = readFileSync(OUTPUT_PATH, 'utf-8'); + } catch { + console.error(`--check: ${OUTPUT_PATH} does not exist. Run without --check to generate.`); + process.exit(1); + } + + if (existing === json) { + console.log('sdk-contract.json is up to date.'); + process.exit(0); + } + + // Write to temp for diff + const tmpPath = resolve(tmpdir(), 'sdk-contract-check.json'); + writeFileSync(tmpPath, json); + console.error(`--check: sdk-contract.json is stale.`); + console.error(` Committed: ${OUTPUT_PATH}`); + console.error(` Generated: ${tmpPath}`); + console.error(` Run without --check to regenerate.`); + process.exit(1); + } + + mkdirSync(dirname(OUTPUT_PATH), { recursive: true }); + writeFileSync(OUTPUT_PATH, json); + + const opCount = Object.keys(contract.operations).length; + console.log(`Wrote ${OUTPUT_PATH} (${opCount} operations)`); +} + +main(); diff --git a/apps/cli/src/cli/__tests__/cli-only-definitions.test.ts b/apps/cli/src/cli/__tests__/cli-only-definitions.test.ts new file mode 100644 index 0000000000..6cceff0570 --- /dev/null +++ b/apps/cli/src/cli/__tests__/cli-only-definitions.test.ts @@ -0,0 +1,134 @@ +import { describe, expect, test } from 'bun:test'; + +import { CLI_ONLY_OPERATIONS } from '../operation-set'; +import { CLI_ONLY_OPERATION_DEFINITIONS } from '../cli-only-operation-definitions'; + +// --------------------------------------------------------------------------- +// Structural completeness +// --------------------------------------------------------------------------- + +describe('CLI-only operation definitions', () => { + test('all CLI_ONLY_OPERATIONS have entries in CLI_ONLY_OPERATION_DEFINITIONS', () => { + for (const op of CLI_ONLY_OPERATIONS) { + expect(CLI_ONLY_OPERATION_DEFINITIONS[op]).toBeDefined(); + } + }); + + test('no extra entries beyond CLI_ONLY_OPERATIONS', () => { + const definedKeys = new Set(Object.keys(CLI_ONLY_OPERATION_DEFINITIONS)); + const expectedKeys = new Set(CLI_ONLY_OPERATIONS); + expect(definedKeys).toEqual(expectedKeys); + }); + + test('all CLI-only ops have non-empty outputSchema with type:object', () => { + for (const [, def] of Object.entries(CLI_ONLY_OPERATION_DEFINITIONS)) { + expect(def.outputSchema).toBeTruthy(); + expect(def.outputSchema.type).toBe('object'); + } + }); + + test('outputSchema required arrays only reference defined properties', () => { + function checkSchema(schema: Record, path: string) { + const properties = schema.properties as Record | undefined; + const required = schema.required as string[] | undefined; + + if (required && properties) { + for (const req of required) { + expect(properties[req]).toBeDefined(); + } + } + + // Recurse into nested object schemas + if (properties) { + for (const [key, propSchema] of Object.entries(properties)) { + if ( + propSchema && + typeof propSchema === 'object' && + (propSchema as Record).type === 'object' + ) { + checkSchema(propSchema as Record, `${path}.${key}`); + } + } + } + } + + for (const [op, def] of Object.entries(CLI_ONLY_OPERATION_DEFINITIONS)) { + checkSchema(def.outputSchema, op); + } + }); + + test('all CLI-only ops have non-empty intentName', () => { + for (const [, def] of Object.entries(CLI_ONLY_OPERATION_DEFINITIONS)) { + expect(def.intentName).toBeTruthy(); + } + }); + + test('sdkMetadata fields present and correctly typed', () => { + const validIdempotency = new Set(['idempotent', 'non-idempotent', 'conditional']); + + for (const [, def] of Object.entries(CLI_ONLY_OPERATION_DEFINITIONS)) { + expect(typeof def.sdkMetadata.mutates).toBe('boolean'); + expect(validIdempotency.has(def.sdkMetadata.idempotency)).toBe(true); + expect(typeof def.sdkMetadata.supportsTrackedMode).toBe('boolean'); + expect(typeof def.sdkMetadata.supportsDryRun).toBe('boolean'); + } + }); +}); + +// --------------------------------------------------------------------------- +// Schema validity (lightweight — no AJV dependency) +// --------------------------------------------------------------------------- + +describe('CLI-only outputSchema validity', () => { + const VALID_TYPES = new Set(['string', 'number', 'integer', 'boolean', 'array', 'object']); + + function validateSchemaNode(schema: Record, path: string) { + if (schema.type) { + expect(VALID_TYPES.has(schema.type as string)).toBe(true); + } + + if (schema.type === 'object' && schema.properties) { + expect(typeof schema.properties).toBe('object'); + for (const [key, propSchema] of Object.entries(schema.properties as Record)) { + if (propSchema && typeof propSchema === 'object') { + validateSchemaNode(propSchema as Record, `${path}.properties.${key}`); + } + } + } + + if (schema.type === 'array' && schema.items) { + expect(typeof schema.items).toBe('object'); + validateSchemaNode(schema.items as Record, `${path}.items`); + } + + if (schema.required) { + expect(Array.isArray(schema.required)).toBe(true); + } + } + + test('all outputSchemas have valid JSON Schema structure', () => { + for (const [op, def] of Object.entries(CLI_ONLY_OPERATION_DEFINITIONS)) { + validateSchemaNode(def.outputSchema, op); + } + }); +}); + +// --------------------------------------------------------------------------- +// Intent name naming policy +// --------------------------------------------------------------------------- + +describe('CLI-only intent name naming policy', () => { + test('all intentNames match snake_case naming policy', () => { + for (const [, def] of Object.entries(CLI_ONLY_OPERATION_DEFINITIONS)) { + expect(def.intentName).toMatch(/^[a-z][a-z0-9_]*$/); + } + }); + + test('all intentNames are unique', () => { + const seen = new Set(); + for (const [, def] of Object.entries(CLI_ONLY_OPERATION_DEFINITIONS)) { + expect(seen.has(def.intentName)).toBe(false); + seen.add(def.intentName); + } + }); +}); diff --git a/apps/cli/src/cli/cli-only-operation-definitions.ts b/apps/cli/src/cli/cli-only-operation-definitions.ts new file mode 100644 index 0000000000..6eb59d1ce6 --- /dev/null +++ b/apps/cli/src/cli/cli-only-operation-definitions.ts @@ -0,0 +1,307 @@ +/** + * Canonical CLI-only operation definitions — single source of truth. + * + * This module consolidates metadata for the 10 CLI-only operations that + * are not backed by document-api. All downstream consumers project the + * views they need from this canonical object: + * + * - operation-set.ts → category, description, tokens, requiresDoc + * - export-sdk-contract.ts → intentName, sdkMetadata, outputSchema + * - response-schemas.ts → CLI-only response schema entries + */ + +import type { CliCategory, CliOnlyOperation } from './types'; + +// --------------------------------------------------------------------------- +// Types +// --------------------------------------------------------------------------- + +export interface CliOnlySdkMetadata { + mutates: boolean; + idempotency: 'idempotent' | 'non-idempotent' | 'conditional'; + supportsTrackedMode: boolean; + supportsDryRun: boolean; +} + +export interface CliOnlyOperationDefinition { + category: CliCategory; + description: string; + requiresDocumentContext: boolean; + tokenOverride?: readonly string[]; + intentName: string; + sdkMetadata: CliOnlySdkMetadata; + outputSchema: Record; +} + +// --------------------------------------------------------------------------- +// Canonical definitions +// --------------------------------------------------------------------------- + +export const CLI_ONLY_OPERATION_DEFINITIONS: Record = { + open: { + category: 'lifecycle', + description: 'Open a document and create a persistent editing session.', + requiresDocumentContext: false, + intentName: 'open_document', + sdkMetadata: { mutates: false, idempotency: 'non-idempotent', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + contextId: { type: 'string' }, + sessionType: { type: 'string' }, + document: { + type: 'object', + properties: { + path: { type: 'string' }, + source: { type: 'string' }, + revision: { type: 'number' }, + }, + }, + collaboration: { + type: 'object', + properties: { + documentId: { type: 'string' }, + url: { type: 'string' }, + }, + }, + }, + required: ['contextId', 'sessionType'], + }, + }, + save: { + category: 'lifecycle', + description: 'Save the current session to the original file or a new path.', + requiresDocumentContext: false, + intentName: 'save_document', + sdkMetadata: { mutates: true, idempotency: 'conditional', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + contextId: { type: 'string' }, + saved: { type: 'boolean' }, + inPlace: { type: 'boolean' }, + document: { + type: 'object', + properties: { + path: { type: 'string' }, + source: { type: 'string' }, + revision: { type: 'number' }, + }, + }, + context: { + type: 'object', + properties: { + dirty: { type: 'boolean' }, + revision: { type: 'number' }, + lastSavedAt: { type: 'string' }, + }, + }, + output: { + type: 'object', + properties: { + path: { type: 'string' }, + byteLength: { type: 'number' }, + }, + }, + }, + required: ['contextId', 'saved'], + }, + }, + close: { + category: 'lifecycle', + description: 'Close the active editing session and clean up resources.', + requiresDocumentContext: false, + intentName: 'close_document', + sdkMetadata: { mutates: false, idempotency: 'conditional', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + contextId: { type: 'string' }, + closed: { type: 'boolean' }, + saved: { type: 'boolean' }, + discarded: { type: 'boolean' }, + defaultSessionCleared: { type: 'boolean' }, + wasDirty: { type: 'boolean' }, + document: { + type: 'object', + properties: { + path: { type: 'string' }, + source: { type: 'string' }, + revision: { type: 'number' }, + }, + }, + }, + required: ['contextId', 'closed'], + }, + }, + status: { + category: 'introspection', + description: 'Show the current session status and document metadata.', + requiresDocumentContext: false, + intentName: 'get_status', + sdkMetadata: { mutates: false, idempotency: 'idempotent', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + contextId: { type: 'string' }, + sessionType: { type: 'string' }, + dirty: { type: 'boolean' }, + revision: { type: 'number' }, + document: { + type: 'object', + properties: { + path: { type: 'string' }, + source: { type: 'string' }, + }, + }, + }, + required: ['contextId'], + }, + }, + describe: { + category: 'introspection', + description: 'List all available CLI operations and contract metadata.', + requiresDocumentContext: false, + intentName: 'describe_commands', + sdkMetadata: { mutates: false, idempotency: 'idempotent', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + contractVersion: { type: 'string' }, + operations: { + type: 'array', + items: { + type: 'object', + properties: { + operationId: { type: 'string' }, + command: { type: 'string' }, + category: { type: 'string' }, + description: { type: 'string' }, + mutates: { type: 'boolean' }, + }, + }, + }, + }, + }, + }, + describeCommand: { + category: 'introspection', + description: 'Show detailed metadata for a single CLI operation.', + requiresDocumentContext: false, + tokenOverride: ['describe', 'command'], + intentName: 'describe_command', + sdkMetadata: { mutates: false, idempotency: 'idempotent', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + operationId: { type: 'string' }, + command: { type: 'string' }, + category: { type: 'string' }, + description: { type: 'string' }, + mutates: { type: 'boolean' }, + params: { type: 'array' }, + constraints: {}, + }, + }, + }, + 'session.list': { + category: 'session', + description: 'List all active editing sessions.', + requiresDocumentContext: false, + intentName: 'list_sessions', + sdkMetadata: { mutates: false, idempotency: 'idempotent', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + activeSessionId: { type: 'string' }, + sessions: { + type: 'array', + items: { + type: 'object', + properties: { + sessionId: { type: 'string' }, + sessionType: { type: 'string' }, + dirty: { type: 'boolean' }, + revision: { type: 'number' }, + }, + }, + }, + total: { type: 'number' }, + }, + }, + }, + 'session.save': { + category: 'session', + description: 'Persist the current session state.', + requiresDocumentContext: false, + intentName: 'save_session', + sdkMetadata: { mutates: true, idempotency: 'conditional', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + sessionId: { type: 'string' }, + contextId: { type: 'string' }, + saved: { type: 'boolean' }, + inPlace: { type: 'boolean' }, + document: { + type: 'object', + properties: { + path: { type: 'string' }, + source: { type: 'string' }, + revision: { type: 'number' }, + }, + }, + output: { + type: 'object', + properties: { + path: { type: 'string' }, + byteLength: { type: 'number' }, + }, + }, + }, + required: ['sessionId'], + }, + }, + 'session.close': { + category: 'session', + description: 'Close a specific editing session by ID.', + requiresDocumentContext: false, + intentName: 'close_session', + sdkMetadata: { mutates: false, idempotency: 'conditional', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + sessionId: { type: 'string' }, + contextId: { type: 'string' }, + closed: { type: 'boolean' }, + saved: { type: 'boolean' }, + discarded: { type: 'boolean' }, + defaultSessionCleared: { type: 'boolean' }, + wasDirty: { type: 'boolean' }, + document: { + type: 'object', + properties: { + path: { type: 'string' }, + source: { type: 'string' }, + revision: { type: 'number' }, + }, + }, + }, + required: ['sessionId'], + }, + }, + 'session.setDefault': { + category: 'session', + description: 'Set the default session for subsequent commands.', + requiresDocumentContext: false, + intentName: 'set_default_session', + sdkMetadata: { mutates: false, idempotency: 'conditional', supportsTrackedMode: false, supportsDryRun: false }, + outputSchema: { + type: 'object', + properties: { + activeSessionId: { type: 'string' }, + }, + required: ['activeSessionId'], + }, + }, +}; diff --git a/apps/cli/src/cli/operation-params.ts b/apps/cli/src/cli/operation-params.ts index 907d8812af..68ce3cd073 100644 --- a/apps/cli/src/cli/operation-params.ts +++ b/apps/cli/src/cli/operation-params.ts @@ -38,21 +38,29 @@ import { CLI_OPERATION_COMMAND_KEYS } from './commands'; const DOC_PARAM: CliOperationParamSpec = { name: 'doc', kind: 'doc', type: 'string' }; const SESSION_PARAM: CliOperationParamSpec = { name: 'sessionId', kind: 'flag', flag: 'session', type: 'string' }; -const OUT_PARAM: CliOperationParamSpec = { name: 'out', kind: 'flag', type: 'string' }; +const OUT_PARAM: CliOperationParamSpec = { name: 'out', kind: 'flag', type: 'string', agentVisible: false }; const FORCE_PARAM: CliOperationParamSpec = { name: 'force', kind: 'flag', type: 'boolean' }; -const DRY_RUN_PARAM: CliOperationParamSpec = { name: 'dryRun', kind: 'flag', flag: 'dry-run', type: 'boolean' }; +const DRY_RUN_PARAM: CliOperationParamSpec = { + name: 'dryRun', + kind: 'flag', + flag: 'dry-run', + type: 'boolean', + agentVisible: false, +}; const CHANGE_MODE_PARAM: CliOperationParamSpec = { name: 'changeMode', kind: 'flag', flag: 'change-mode', type: 'string', schema: { oneOf: [{ const: 'direct' }, { const: 'tracked' }] } as CliTypeSpec, + agentVisible: false, }; const EXPECTED_REVISION_PARAM: CliOperationParamSpec = { name: 'expectedRevision', kind: 'flag', flag: 'expected-revision', type: 'number', + agentVisible: false, }; // --------------------------------------------------------------------------- diff --git a/apps/cli/src/cli/operation-set.ts b/apps/cli/src/cli/operation-set.ts index 56e3e3b454..063733b5fc 100644 --- a/apps/cli/src/cli/operation-set.ts +++ b/apps/cli/src/cli/operation-set.ts @@ -18,6 +18,11 @@ import { type ReferenceGroupKey, } from '@superdoc/document-api'; +import { CLI_ONLY_OPERATION_DEFINITIONS } from './cli-only-operation-definitions'; + +export { CLI_ONLY_OPERATIONS, type CliCategory, type CliOnlyOperation } from './types'; +import { CLI_ONLY_OPERATIONS, type CliCategory, type CliOnlyOperation } from './types'; + // --------------------------------------------------------------------------- // Doc-backed operations (derived from document-api with denylist) // --------------------------------------------------------------------------- @@ -43,25 +48,6 @@ export const CLI_DOC_OPERATIONS: readonly CliExposedOperationId[] = OPERATION_ID (id): id is CliExposedOperationId => !denySet.has(id), ); -// --------------------------------------------------------------------------- -// CLI-only operations (not in document-api) -// --------------------------------------------------------------------------- - -export const CLI_ONLY_OPERATIONS = [ - 'open', - 'save', - 'close', - 'status', - 'describe', - 'describeCommand', - 'session.list', - 'session.save', - 'session.close', - 'session.setDefault', -] as const; - -export type CliOnlyOperation = (typeof CLI_ONLY_OPERATIONS)[number]; - // --------------------------------------------------------------------------- // CliOperationId — union of all CLI operation IDs // --------------------------------------------------------------------------- @@ -97,32 +83,6 @@ export function isDocBackedOperation(cliOpId: string): boolean { // Category derivation // --------------------------------------------------------------------------- -export type CliCategory = - | 'query' - | 'mutation' - | 'format' - | 'create' - | 'lists' - | 'comments' - | 'trackChanges' - | 'capabilities' - | 'lifecycle' - | 'session' - | 'introspection'; - -const CLI_ONLY_CATEGORIES: Record = { - open: 'lifecycle', - save: 'lifecycle', - close: 'lifecycle', - status: 'introspection', - describe: 'introspection', - describeCommand: 'introspection', - 'session.list': 'session', - 'session.save': 'session', - 'session.close': 'session', - 'session.setDefault': 'session', -}; - const REFERENCE_GROUP_BY_OP = new Map(); for (const group of REFERENCE_OPERATION_GROUPS) { for (const opId of group.operations) { @@ -146,45 +106,19 @@ export function cliCategory(cliOpId: CliOperationId): CliCategory { if (docApiId) return deriveCategoryFromDocApi(docApiId); const stripped = cliOpId.slice(4) as CliOnlyOperation; - return CLI_ONLY_CATEGORIES[stripped] ?? 'introspection'; + return CLI_ONLY_OPERATION_DEFINITIONS[stripped].category; } // --------------------------------------------------------------------------- // Description + requiresDocumentContext accessors // --------------------------------------------------------------------------- -const CLI_ONLY_DESCRIPTIONS: Record = { - open: 'Open a document and create a persistent editing session.', - save: 'Save the current session to the original file or a new path.', - close: 'Close the active editing session and clean up resources.', - status: 'Show the current session status and document metadata.', - describe: 'List all available CLI operations and contract metadata.', - describeCommand: 'Show detailed metadata for a single CLI operation.', - 'session.list': 'List all active editing sessions.', - 'session.save': 'Persist the current session state.', - 'session.close': 'Close a specific editing session by ID.', - 'session.setDefault': 'Set the default session for subsequent commands.', -}; - -const CLI_ONLY_REQUIRES_DOCUMENT: Record = { - open: false, - save: false, - close: false, - status: false, - describe: false, - describeCommand: false, - 'session.list': false, - 'session.save': false, - 'session.close': false, - 'session.setDefault': false, -}; - export function cliDescription(cliOpId: CliOperationId): string { const docApiId = toDocApiId(cliOpId); if (docApiId) return OPERATION_DESCRIPTION_MAP[docApiId]; const stripped = cliOpId.slice(4) as CliOnlyOperation; - return CLI_ONLY_DESCRIPTIONS[stripped] ?? ''; + return CLI_ONLY_OPERATION_DEFINITIONS[stripped].description; } export function cliRequiresDocumentContext(cliOpId: CliOperationId): boolean { @@ -192,7 +126,7 @@ export function cliRequiresDocumentContext(cliOpId: CliOperationId): boolean { if (docApiId) return OPERATION_REQUIRES_DOCUMENT_CONTEXT_MAP[docApiId]; const stripped = cliOpId.slice(4) as CliOnlyOperation; - return CLI_ONLY_REQUIRES_DOCUMENT[stripped] ?? false; + return CLI_ONLY_OPERATION_DEFINITIONS[stripped].requiresDocumentContext; } // --------------------------------------------------------------------------- @@ -210,14 +144,6 @@ function camelToKebab(str: string): string { return str.replace(/[A-Z]/g, (ch) => `-${ch.toLowerCase()}`); } -/** - * Explicit command token overrides for CLI-only operations whose - * algorithmic derivation doesn't match the expected CLI surface. - */ -const CLI_ONLY_TOKEN_OVERRIDES: Partial> = { - describeCommand: ['describe', 'command'], -}; - export function cliCommandTokens(cliOpId: CliOperationId): readonly string[] { const docApiId = toDocApiId(cliOpId); if (docApiId) { @@ -226,7 +152,7 @@ export function cliCommandTokens(cliOpId: CliOperationId): readonly string[] { } const stripped = cliOpId.slice(4) as CliOnlyOperation; - const override = CLI_ONLY_TOKEN_OVERRIDES[stripped]; + const override = CLI_ONLY_OPERATION_DEFINITIONS[stripped].tokenOverride; if (override) return override; return stripped.split('.').map(camelToKebab); diff --git a/apps/cli/src/cli/response-schemas.ts b/apps/cli/src/cli/response-schemas.ts index 778d30c479..92e4248b82 100644 --- a/apps/cli/src/cli/response-schemas.ts +++ b/apps/cli/src/cli/response-schemas.ts @@ -3,12 +3,13 @@ * * `validateOperationResponseData()` validates `CommandExecution["data"]`, * which for doc-backed ops IS the document-api output directly. - * For CLI-only ops, schemas are defined inline. + * For CLI-only ops, permissive JSON validation is derived from the canonical + * definitions object (precise schemas live in outputSchema for SDK use). */ -import { buildInternalContractSchemas, type OperationId } from '@superdoc/document-api'; +import { buildInternalContractSchemas } from '@superdoc/document-api'; import type { CliTypeSpec } from './types'; -import { toDocApiId, type CliOperationId } from './operation-set'; +import { CLI_ONLY_OPERATION_DEFINITIONS } from './cli-only-operation-definitions'; type JsonSchema = Record; @@ -62,19 +63,10 @@ function getDocResponseSchemas(): Map { return cachedDocSchemas; } -/** CLI-only operation response schemas (permissive — CLI-only ops have varied shapes). */ -const CLI_ONLY_RESPONSE_SCHEMAS: Record = { - 'doc.open': { type: 'json' }, - 'doc.save': { type: 'json' }, - 'doc.close': { type: 'json' }, - 'doc.status': { type: 'json' }, - 'doc.describe': { type: 'json' }, - 'doc.describeCommand': { type: 'json' }, - 'doc.session.list': { type: 'json' }, - 'doc.session.save': { type: 'json' }, - 'doc.session.close': { type: 'json' }, - 'doc.session.setDefault': { type: 'json' }, -}; +/** CLI-only operation response schemas (permissive — derived from canonical definitions). */ +const CLI_ONLY_RESPONSE_SCHEMAS: Record = Object.fromEntries( + Object.keys(CLI_ONLY_OPERATION_DEFINITIONS).map((op) => [`doc.${op}`, { type: 'json' } as CliTypeSpec]), +); /** * Returns the response validation schema for a CLI operation. diff --git a/apps/cli/src/cli/types.ts b/apps/cli/src/cli/types.ts index 0b880c4981..bc56cafd9e 100644 --- a/apps/cli/src/cli/types.ts +++ b/apps/cli/src/cli/types.ts @@ -38,6 +38,8 @@ export type CliOperationParamSpec = { type: 'string' | 'number' | 'boolean' | 'string[]' | 'json'; required?: boolean; schema?: CliTypeSpec; + /** When false, param is a transport-envelope detail hidden from agent tool schemas. */ + agentVisible?: boolean; }; // --------------------------------------------------------------------------- @@ -101,3 +103,36 @@ export type CliCommandSpec = { export type CliOperationArgsById = { [K: string]: Record; }; + +// --------------------------------------------------------------------------- +// CLI-only operation types (shared between operation-set and definitions) +// --------------------------------------------------------------------------- + +export type CliCategory = + | 'query' + | 'mutation' + | 'format' + | 'create' + | 'lists' + | 'comments' + | 'trackChanges' + | 'capabilities' + | 'lifecycle' + | 'session' + | 'introspection'; + +/** The 10 CLI-only operation identifiers (without `doc.` prefix). Single source of truth. */ +export const CLI_ONLY_OPERATIONS = [ + 'open', + 'save', + 'close', + 'status', + 'describe', + 'describeCommand', + 'session.list', + 'session.save', + 'session.close', + 'session.setDefault', +] as const; + +export type CliOnlyOperation = (typeof CLI_ONLY_OPERATIONS)[number]; diff --git a/apps/docs/CLAUDE.md b/apps/docs/CLAUDE.md index 29e3d3d39e..a242fb550b 100644 --- a/apps/docs/CLAUDE.md +++ b/apps/docs/CLAUDE.md @@ -19,11 +19,11 @@ When moving or renaming a page, always add a redirect in `docs.json`: Document API docs have mixed manual/generated ownership. Treat these paths as authoritative: -- `apps/docs/document-api/reference/*`: generated, commit to git, do not hand-edit. -- `packages/document-api/generated/*`: generated, commit to git, do not hand-edit. +- `apps/docs/document-api/reference/*`: generated, committed to git (Mintlify deploys from git), do not hand-edit. +- `packages/document-api/generated/*`: generated, **not in git**, do not hand-edit. Run `pnpm run generate:all` to produce. - `apps/docs/document-api/overview.mdx`: manual except for the block between: - - `/* DOC_API_GENERATED_API_SURFACE_START */` - - `/* DOC_API_GENERATED_API_SURFACE_END */` + - `{/* DOC_API_OPERATIONS_START */}` + - `{/* DOC_API_OPERATIONS_END */}` To refresh generated content: diff --git a/apps/docs/docs.json b/apps/docs/docs.json index bfb4dba7df..80e400fc63 100644 --- a/apps/docs/docs.json +++ b/apps/docs/docs.json @@ -90,9 +90,14 @@ ] }, { - "group": "Document API", + "group": "Document Engine", "tag": "ALPHA", - "pages": ["document-api/overview"] + "pages": [ + "document-engine/overview", + "document-api/overview", + "document-engine/sdks", + "document-engine/cli" + ] }, { "group": "Modules", diff --git a/apps/docs/document-engine/cli.mdx b/apps/docs/document-engine/cli.mdx new file mode 100644 index 0000000000..dd22ffaf5a --- /dev/null +++ b/apps/docs/document-engine/cli.mdx @@ -0,0 +1,109 @@ +--- +title: CLI +sidebarTitle: CLI +description: Edit documents from the terminal with the SuperDoc CLI +keywords: "cli, command line, terminal, document automation, headless docx, superdoc cli" +--- + +The SuperDoc CLI lets you open, query, and edit `.docx` files from any shell. It exposes the same operations as the [Document API](/document-api/overview) through a stdio-based process. + + +The CLI is in alpha. Commands and output formats may change. + + +## Installation + +```bash +npm install -g @superdoc-dev/cli +``` + +Or run without installing: + +```bash +npx @superdoc-dev/cli open my-doc.docx +``` + +## Workflow + +The CLI uses persistent sessions. Open a document, run operations, then save and close: + +```bash +# Open a document +superdoc open contract.docx + +# Search for text +superdoc find --pattern "ACME Corp" + +# Replace it +superdoc replace --target-json '{"kind":"text","blockId":"...","range":{"start":0,"end":9}}' --text "NewCo Inc." + +# Save and close +superdoc save +superdoc close +``` + +## Commands + +### Lifecycle + +| Command | Description | +| --- | --- | +| `superdoc open ` | Open a document and create an editing session | +| `superdoc save` | Save the current session to disk | +| `superdoc close` | Close the active session and clean up resources | + +### Document operations + +The CLI exposes all [Document API operations](/document-api/overview) as commands. The command name matches the operation's member path, converted to kebab-case: + +| CLI command | Operation | Description | +| --- | --- | --- | +| `superdoc find` | `find` | Search by text, node type, or structured query | +| `superdoc info` | `info` | Get document structure and metadata | +| `superdoc get-node` | `getNode` | Get a node by address | +| `superdoc get-node-by-id` | `getNodeById` | Get a node by ID | +| `superdoc insert` | `insert` | Insert text at a position | +| `superdoc replace` | `replace` | Replace content at a position | +| `superdoc delete` | `delete` | Delete content at a position | +| `superdoc format bold` | `format.bold` | Toggle bold on a range | +| `superdoc format italic` | `format.italic` | Toggle italic on a range | +| `superdoc format underline` | `format.underline` | Toggle underline on a range | +| `superdoc format strikethrough` | `format.strikethrough` | Toggle strikethrough on a range | +| `superdoc create paragraph` | `create.paragraph` | Insert a new paragraph | +| `superdoc comments add` | `comments.add` | Add a comment thread | +| `superdoc comments list` | `comments.list` | List all comments | +| `superdoc track-changes list` | `trackChanges.list` | List tracked changes | +| `superdoc track-changes accept` | `trackChanges.accept` | Accept a tracked change | +| `superdoc track-changes reject` | `trackChanges.reject` | Reject a tracked change | + +Run `superdoc --help` for the full list, or `superdoc describe` for machine-readable metadata. + +### Session management + +| Command | Description | +| --- | --- | +| `superdoc session list` | List all active sessions | +| `superdoc session save ` | Save a specific session | +| `superdoc session close ` | Close a specific session | +| `superdoc session set-default ` | Set the default session for subsequent commands | + +### Introspection + +| Command | Description | +| --- | --- | +| `superdoc status` | Show current session status and document metadata | +| `superdoc describe` | List all available operations and contract metadata | +| `superdoc describe command ` | Show detailed metadata for a single operation | + +## JSON I/O + +All commands accept `--input-json` or `--input-file` for structured input and return JSON output. Use `superdoc call ` for raw operation invocation: + +```bash +superdoc call doc.find --input-json '{"doc":"./contract.docx","query":{"select":{"type":"text","pattern":"test"}}}' +``` + +## Related + +- [SDKs](/document-engine/sdks) — typed Node.js and Python wrappers over the CLI +- [Document API](/document-api/overview) — the in-browser API that defines the operation set diff --git a/apps/docs/document-engine/overview.mdx b/apps/docs/document-engine/overview.mdx new file mode 100644 index 0000000000..a426f5c41b --- /dev/null +++ b/apps/docs/document-engine/overview.mdx @@ -0,0 +1,36 @@ +--- +title: Document Engine +sidebarTitle: Overview +description: Programmatic document editing — in the browser, from the terminal, or through SDKs +keywords: "document engine, document api, sdk, cli, headless docx, document automation" +--- + + +Document Engine is in alpha and subject to breaking changes while the contract and adapters continue to evolve. + + +Document Engine is the programmatic surface of SuperDoc. It gives you three ways to read and edit `.docx` files without a visible editor: + +| Surface | Use case | Runtime | +| --- | --- | --- | +| [Document API](/document-api/overview) | In-browser editing via `editor.doc.*` methods | Browser (ProseMirror) | +| [SDKs](/document-engine/sdks) | Node.js and Python wrappers for backend automation | Node / Python | +| [CLI](/document-engine/cli) | Terminal commands for scripting and CI pipelines | Any shell | + +All three surfaces share the same operation set. An operation like `find` is available as `editor.doc.find()` in the browser, `superdoc.doc.find()` in the SDK, and `superdoc find` in the CLI. + +## How it works + +The Document API defines the canonical operations. The CLI wraps them in a stdio-based process. The SDKs manage the CLI process and expose typed methods for each operation. + +``` +Document API (source of truth) + → CLI (stdio process) + → Node SDK / Python SDK (typed wrappers) +``` + +## Where to start + +- **Building a web editor?** Start with the [Document API](/document-api/overview). +- **Automating documents from a backend?** Start with the [SDKs](/document-engine/sdks). +- **Scripting from the terminal or CI?** Start with the [CLI](/document-engine/cli). diff --git a/apps/docs/document-engine/sdks.mdx b/apps/docs/document-engine/sdks.mdx new file mode 100644 index 0000000000..73fc4fca97 --- /dev/null +++ b/apps/docs/document-engine/sdks.mdx @@ -0,0 +1,203 @@ +--- +title: SDKs +sidebarTitle: SDKs +description: Node.js and Python SDKs for programmatic document editing +keywords: "sdk, node, python, document automation, headless docx, superdoc sdk" +--- + +SuperDoc SDKs let you open, read, and edit `.docx` files from Node.js or Python. They manage the CLI process for you and expose typed methods for every operation. + + +The SDKs are in alpha. The API surface matches the [Document API](/document-api/overview) and will evolve alongside it. + + +## Installation + + + + ```bash + npm install @superdoc-dev/sdk + ``` + + + ```bash + pip install superdoc-sdk + ``` + + + +The CLI is bundled with the SDK — no separate install needed. + +## Quick start + + + + ```typescript + import { SuperDocClient } from '@superdoc-dev/sdk'; + + const client = new SuperDocClient(); + + // Open a document + await client.doc.open({ doc: './contract.docx' }); + + // Find text + const result = await client.doc.find({ pattern: 'ACME Corp' }); + + // Replace it + const target = result.context?.[0]?.textRanges?.[0]; + if (target) { + await client.doc.replace({ target, text: 'NewCo Inc.' }); + } + + // Save and close + await client.doc.save(); + await client.doc.close(); + ``` + + + ```python + from superdoc import SuperDocClient + + client = SuperDocClient() + + # Open a document + await client.doc.open(doc="./contract.docx") + + # Find text + result = await client.doc.find(pattern="ACME Corp") + + # Replace it + target = result["context"][0]["textRanges"][0] + await client.doc.replace(target=target, text="NewCo Inc.") + + # Save and close + await client.doc.save() + await client.doc.close() + ``` + + + +## AI tool use + +The SDKs include tool catalogs for LLM integrations. You can expose document operations as tools for AI agents: + +```typescript +import { chooseSuperDocTools, dispatchSuperDocTool } from '@superdoc-dev/sdk'; + +// Get tools scoped to the current task +const tools = chooseSuperDocTools({ + phase: 'mutate', + features: { comments: true, trackChanges: true }, +}); + +// Dispatch a tool call from your LLM +const result = await dispatchSuperDocTool(client, toolCall); +``` + +{/* SDK_OPERATIONS_START */} +## Available operations + +The SDKs expose all operations from the [Document API](/document-api/overview) plus lifecycle and session commands. The tables below are grouped by category. + +#### Lifecycle + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.open` | `open` | Open a document and create a persistent editing session. | +| `doc.save` | `save` | Save the current session to the original file or a new path. | +| `doc.close` | `close` | Close the active editing session and clean up resources. | + +#### Query + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.find` | `find` | Search the document for nodes matching type, text, or attribute criteria. | +| `doc.getNode` | `get-node` | Retrieve a single node by target position. | +| `doc.getNodeById` | `get-node-by-id` | Retrieve a single node by its unique ID. | +| `doc.info` | `info` | Return document metadata including revision, node count, and capabilities. | + +#### Mutation + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.insert` | `insert` | Insert text or inline content at a target position. | +| `doc.replace` | `replace` | Replace content at a target position with new text or inline content. | +| `doc.delete` | `delete` | Delete content at a target position. | + +#### Format + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.format.bold` | `format bold` | Toggle bold formatting on the target range. | +| `doc.format.italic` | `format italic` | Toggle italic formatting on the target range. | +| `doc.format.underline` | `format underline` | Toggle underline formatting on the target range. | +| `doc.format.strikethrough` | `format strikethrough` | Toggle strikethrough formatting on the target range. | + +#### Create + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.create.paragraph` | `create paragraph` | Create a new paragraph at the target position. | + +#### Lists + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.lists.list` | `lists list` | List all list nodes in the document, optionally filtered by scope. | +| `doc.lists.get` | `lists get` | Retrieve a specific list node by target. | +| `doc.lists.insert` | `lists insert` | Insert a new list at the target position. | +| `doc.lists.setType` | `lists set-type` | Change the list type (ordered, unordered) of a target list. | +| `doc.lists.indent` | `lists indent` | Increase the indentation level of a list item. | +| `doc.lists.outdent` | `lists outdent` | Decrease the indentation level of a list item. | +| `doc.lists.restart` | `lists restart` | Restart numbering of an ordered list at the target item. | +| `doc.lists.exit` | `lists exit` | Exit a list context, converting the target item to a paragraph. | + +#### Comments + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.comments.add` | `comments add` | Add a new comment thread anchored to a target range. | +| `doc.comments.edit` | `comments edit` | Edit the content of an existing comment. | +| `doc.comments.reply` | `comments reply` | Add a reply to an existing comment thread. | +| `doc.comments.move` | `comments move` | Move a comment thread to a new anchor range. | +| `doc.comments.resolve` | `comments resolve` | Resolve or unresolve a comment thread. | +| `doc.comments.remove` | `comments remove` | Remove a comment or reply by ID. | +| `doc.comments.setInternal` | `comments set-internal` | Toggle the internal (private) flag on a comment thread. | +| `doc.comments.setActive` | `comments set-active` | Set the active (focused) comment thread for UI highlighting. | +| `doc.comments.goTo` | `comments go-to` | Scroll the viewport to a comment thread by ID. | +| `doc.comments.get` | `comments get` | Retrieve a single comment thread by ID. | +| `doc.comments.list` | `comments list` | List all comment threads in the document. | + +#### Track changes + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.trackChanges.list` | `track-changes list` | List all tracked changes in the document. | +| `doc.trackChanges.get` | `track-changes get` | Retrieve a single tracked change by ID. | +| `doc.trackChanges.accept` | `track-changes accept` | Accept a tracked change, applying it permanently. | +| `doc.trackChanges.reject` | `track-changes reject` | Reject a tracked change, reverting it. | +| `doc.trackChanges.acceptAll` | `track-changes accept-all` | Accept all tracked changes in the document. | +| `doc.trackChanges.rejectAll` | `track-changes reject-all` | Reject all tracked changes in the document. | + +#### Session + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.session.list` | `session list` | List all active editing sessions. | +| `doc.session.save` | `session save` | Persist the current session state. | +| `doc.session.close` | `session close` | Close a specific editing session by ID. | +| `doc.session.setDefault` | `session set-default` | Set the default session for subsequent commands. | + +#### Introspection + +| Operation | CLI command | Description | +| --- | --- | --- | +| `doc.status` | `status` | Show the current session status and document metadata. | +| `doc.describe` | `describe` | List all available CLI operations and contract metadata. | +| `doc.describeCommand` | `describe command` | Show detailed metadata for a single CLI operation. | +{/* SDK_OPERATIONS_END */} + +## Related + +- [Document API](/document-api/overview) — the in-browser API that defines the operation set +- [CLI](/document-engine/cli) — use the same operations from the terminal diff --git a/apps/docs/scripts/generate-sdk-overview.ts b/apps/docs/scripts/generate-sdk-overview.ts new file mode 100644 index 0000000000..0485c8bd1d --- /dev/null +++ b/apps/docs/scripts/generate-sdk-overview.ts @@ -0,0 +1,157 @@ +/** + * Generate the operations table in the SDK overview page. + * + * Reads the SDK contract JSON and injects a categorized operations table + * into the marker block in `apps/docs/document-engine/sdks.mdx`. + * + * Requires: `apps/cli/generated/sdk-contract.json` to exist on disk. + * Run `pnpm run cli:export-sdk-contract` first if it doesn't. + */ + +import { readFile, writeFile } from 'node:fs/promises'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +// --------------------------------------------------------------------------- +// Paths +// --------------------------------------------------------------------------- + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = resolve(__dirname, '../../..'); +const CONTRACT_PATH = resolve(REPO_ROOT, 'apps/cli/generated/sdk-contract.json'); +const SDK_OVERVIEW_PATH = resolve(REPO_ROOT, 'apps/docs/document-engine/sdks.mdx'); + +// --------------------------------------------------------------------------- +// Marker block +// --------------------------------------------------------------------------- + +const MARKER_START = '{/* SDK_OPERATIONS_START */}'; +const MARKER_END = '{/* SDK_OPERATIONS_END */}'; + +function replaceMarkerBlock(content: string, replacement: string): string { + const startIndex = content.indexOf(MARKER_START); + const endIndex = content.indexOf(MARKER_END); + + if (startIndex === -1 || endIndex === -1 || endIndex < startIndex) { + throw new Error(`Marker block not found in SDK overview. Expected ${MARKER_START} ... ${MARKER_END}.`); + } + + const endMarkerEnd = endIndex + MARKER_END.length; + return `${content.slice(0, startIndex)}${replacement}${content.slice(endMarkerEnd)}`; +} + +// --------------------------------------------------------------------------- +// Contract types (minimal — only what we need for rendering) +// --------------------------------------------------------------------------- + +interface ContractOperation { + operationId: string; + command: string; + category: string; + description: string; + mutates: boolean; + supportsTrackedMode: boolean; + supportsDryRun: boolean; +} + +interface SdkContract { + operations: Record; +} + +// --------------------------------------------------------------------------- +// Category display order and labels +// --------------------------------------------------------------------------- + +const CATEGORY_ORDER = [ + 'lifecycle', + 'query', + 'mutation', + 'format', + 'create', + 'lists', + 'comments', + 'trackChanges', + 'session', + 'introspection', +] as const; + +const CATEGORY_LABELS: Record = { + lifecycle: 'Lifecycle', + query: 'Query', + mutation: 'Mutation', + format: 'Format', + create: 'Create', + lists: 'Lists', + comments: 'Comments', + trackChanges: 'Track changes', + session: 'Session', + introspection: 'Introspection', +}; + +// --------------------------------------------------------------------------- +// Rendering +// --------------------------------------------------------------------------- + +function groupByCategory(operations: ContractOperation[]): Map { + const groups = new Map(); + + for (const op of operations) { + const list = groups.get(op.category) ?? []; + list.push(op); + groups.set(op.category, list); + } + + return groups; +} + +function renderOperationsTable(operations: ContractOperation[]): string { + const grouped = groupByCategory(operations); + + const sections: string[] = []; + + for (const category of CATEGORY_ORDER) { + const ops = grouped.get(category); + if (!ops || ops.length === 0) continue; + + const label = CATEGORY_LABELS[category] ?? category; + const rows = ops.map((op) => `| \`${op.operationId}\` | \`${op.command}\` | ${op.description} |`).join('\n'); + + sections.push(`#### ${label}\n\n| Operation | CLI command | Description |\n| --- | --- | --- |\n${rows}`); + } + + return sections.join('\n\n'); +} + +function renderMarkerBlock(operations: ContractOperation[]): string { + const table = renderOperationsTable(operations); + + return `${MARKER_START} +## Available operations + +The SDKs expose all operations from the [Document API](/document-api/overview) plus lifecycle and session commands. The tables below are grouped by category. + +${table} +${MARKER_END}`; +} + +// --------------------------------------------------------------------------- +// Main +// --------------------------------------------------------------------------- + +async function main(): Promise { + const contractRaw = await readFile(CONTRACT_PATH, 'utf8'); + const contract: SdkContract = JSON.parse(contractRaw); + const operations = Object.values(contract.operations); + + const overviewContent = await readFile(SDK_OVERVIEW_PATH, 'utf8'); + const block = renderMarkerBlock(operations); + const updated = replaceMarkerBlock(overviewContent, block); + + await writeFile(SDK_OVERVIEW_PATH, updated, 'utf8'); + console.log(`generated SDK overview operations table (${operations.length} operations)`); +} + +main().catch((error) => { + console.error('generate-sdk-overview failed:', error.message ?? error); + process.exitCode = 1; +}); diff --git a/apps/docs/scripts/validate-code-imports.ts b/apps/docs/scripts/validate-code-imports.ts index 6c77be587e..0601c995ca 100644 --- a/apps/docs/scripts/validate-code-imports.ts +++ b/apps/docs/scripts/validate-code-imports.ts @@ -26,6 +26,7 @@ const EXACT_SUPERDOC_IMPORTS = new Set([ '@superdoc-dev/esign', '@superdoc-dev/esign/styles.css', '@superdoc-dev/react', + '@superdoc-dev/sdk', '@superdoc-dev/react/style.css', '@superdoc-dev/template-builder', '@superdoc-dev/template-builder/defaults', diff --git a/eslint.config.mjs b/eslint.config.mjs index d6dcd980ec..35c5cdbca3 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -143,6 +143,7 @@ export default [ '^bun:.*$', // Bun built-in modules '^superdoc$', '^superdoc/style\\.css$', + '^\\..*\/generated\/', // Generated files (codegen artifacts, not in git) ], } ] diff --git a/lefthook.yml b/lefthook.yml index 067d565772..f70fa635a9 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -39,9 +39,9 @@ pre-commit: root: "apps/docs/" glob: "apps/docs/**/*.mdx" run: pnpm run test:examples - docapi-sync: - glob: "{packages/document-api,apps/docs/document-api}/**" - run: pnpm run docapi:sync && git add packages/document-api/generated apps/docs/document-api/reference apps/docs/document-api/overview.mdx + docapi-overview-sync: + glob: "{packages/document-api/src/contract,packages/document-api/scripts}/**" + run: pnpm run docapi:sync && git add apps/docs/document-api/reference apps/docs/document-api/overview.mdx commit-msg: commands: diff --git a/package.json b/package.json index e5ee41f1f9..bb7cdc1794 100644 --- a/package.json +++ b/package.json @@ -64,13 +64,19 @@ "update-preset-geometry": "ROOT=$(pwd) && cd ../superdoc-devtools/preset-geometry && pnpm run build && cp ./dist/index.js ./dist/index.js.map ./dist/index.d.ts \"$ROOT/packages/preset-geometry/\"", "manual-tag": "bash scripts/manual-tag.sh", "manual-clean-tag": "bash scripts/manual-clean-tag.sh", + "generate:all": "node scripts/generate-all.mjs", "docapi:sync": "pnpm exec tsx packages/document-api/scripts/generate-contract-outputs.ts", "docapi:check": "pnpm exec tsx packages/document-api/scripts/check-contract-parity.ts && pnpm exec tsx packages/document-api/scripts/check-contract-outputs.ts", "docapi:sync:check": "pnpm run docapi:sync && pnpm run docapi:check", "test:cli": "pnpm --prefix apps/cli run test", "cli:prepare": "pnpm run test:cli && pnpm --prefix apps/cli run build:prepublish", "cli:release": "pnpm run cli:prepare && pnpm --prefix apps/cli run publish:platforms", - "cli:release:dry": "pnpm run cli:prepare && pnpm --prefix apps/cli run publish:platforms:dry" + "cli:release:dry": "pnpm run cli:prepare && pnpm --prefix apps/cli run publish:platforms:dry", + "cli:export-sdk-contract": "bun apps/cli/scripts/export-sdk-contract.ts", + "docs:sync-engine": "pnpm exec tsx apps/docs/scripts/generate-sdk-overview.ts", + "sdk:sync-version": "node packages/sdk/scripts/sync-sdk-version.mjs", + "sdk:release": "node packages/sdk/scripts/sdk-release.mjs", + "sdk:release:dry": "node packages/sdk/scripts/sdk-release.mjs --dry-run" }, "devDependencies": { "@commitlint/cli": "catalog:", diff --git a/packages/document-api/README.md b/packages/document-api/README.md index dcd43317d6..8b4cee33a1 100644 --- a/packages/document-api/README.md +++ b/packages/document-api/README.md @@ -4,21 +4,21 @@ Contract-first Document API package (internal workspace package). ## Generated vs manual files -This package intentionally checks generated artifacts into git. Use this boundary when editing: +Most generated artifacts are **not** committed to git — run `pnpm run generate:all` to produce them. The exception is `apps/docs/document-api/reference/**`, which stays committed because Mintlify deploys directly from git. | Path | Source of truth | Edit directly? | | --- | --- | --- | | `packages/document-api/src/contract/*` | Hand-authored contract source | Yes | | `packages/document-api/src/index.ts` and other `src/**` runtime/types | Hand-authored source | Yes | | `packages/document-api/scripts/**` | Hand-authored generation/check tooling | Yes | -| `packages/document-api/generated/**` | Generated from contract + scripts | No (regenerate) | -| `apps/docs/document-api/reference/**` | Generated docs from contract + scripts | No (regenerate) | +| `packages/document-api/generated/**` | Generated (gitignored) | No (regenerate) | +| `apps/docs/document-api/reference/**` | Generated (committed — Mintlify deploys from git) | No (regenerate) | | `apps/docs/document-api/overview.mdx` | Mixed: manual page + generated section between markers | Yes, but do not hand-edit inside generated marker block | Generated marker block in overview: -- `/* DOC_API_GENERATED_API_SURFACE_START */` -- `/* DOC_API_GENERATED_API_SURFACE_END */` +- `{/* DOC_API_OPERATIONS_START */}` +- `{/* DOC_API_OPERATIONS_END */}` ## Regeneration commands @@ -31,8 +31,8 @@ pnpm run docapi:sync:check # sync then check in one step ``` These are also enforced automatically: -- **Pre-commit hook** runs `docapi:sync` when document-api sources change and restages generated files. -- **CI workflow** (`ci-document-api.yml`) runs `docapi:check` on every PR touching relevant paths. +- **Pre-commit hook** runs `docapi:sync` when contract or script sources change and restages `reference/` and `overview.mdx`. +- **CI workflow** (`ci-document-api.yml`) generates outputs, checks overview freshness, then runs `docapi:check` on every PR touching relevant paths. ## Adding a new operation diff --git a/packages/document-api/generated/agent/compatibility-hints.json b/packages/document-api/generated/agent/compatibility-hints.json deleted file mode 100644 index a0db2e2a77..0000000000 --- a/packages/document-api/generated/agent/compatibility-hints.json +++ /dev/null @@ -1,366 +0,0 @@ -{ - "contractVersion": "0.1.0", - "operations": { - "capabilities.get": { - "deterministicTargetResolution": true, - "memberPath": "capabilities", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.add": { - "deterministicTargetResolution": true, - "memberPath": "comments.add", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.edit": { - "deterministicTargetResolution": true, - "memberPath": "comments.edit", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.get": { - "deterministicTargetResolution": true, - "memberPath": "comments.get", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.goTo": { - "deterministicTargetResolution": true, - "memberPath": "comments.goTo", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.list": { - "deterministicTargetResolution": true, - "memberPath": "comments.list", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.move": { - "deterministicTargetResolution": true, - "memberPath": "comments.move", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.remove": { - "deterministicTargetResolution": true, - "memberPath": "comments.remove", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.reply": { - "deterministicTargetResolution": true, - "memberPath": "comments.reply", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.resolve": { - "deterministicTargetResolution": true, - "memberPath": "comments.resolve", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.setActive": { - "deterministicTargetResolution": true, - "memberPath": "comments.setActive", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "comments.setInternal": { - "deterministicTargetResolution": true, - "memberPath": "comments.setInternal", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "create.heading": { - "deterministicTargetResolution": true, - "memberPath": "create.heading", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "create.paragraph": { - "deterministicTargetResolution": true, - "memberPath": "create.paragraph", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "delete": { - "deterministicTargetResolution": true, - "memberPath": "delete", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "find": { - "deterministicTargetResolution": false, - "memberPath": "find", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "format.bold": { - "deterministicTargetResolution": true, - "memberPath": "format.bold", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "format.italic": { - "deterministicTargetResolution": true, - "memberPath": "format.italic", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "format.strikethrough": { - "deterministicTargetResolution": true, - "memberPath": "format.strikethrough", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "format.underline": { - "deterministicTargetResolution": true, - "memberPath": "format.underline", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "getNode": { - "deterministicTargetResolution": true, - "memberPath": "getNode", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "getNodeById": { - "deterministicTargetResolution": true, - "memberPath": "getNodeById", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "getText": { - "deterministicTargetResolution": true, - "memberPath": "getText", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "info": { - "deterministicTargetResolution": true, - "memberPath": "info", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "insert": { - "deterministicTargetResolution": true, - "memberPath": "insert", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "lists.exit": { - "deterministicTargetResolution": true, - "memberPath": "lists.exit", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - "lists.get": { - "deterministicTargetResolution": true, - "memberPath": "lists.get", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "lists.indent": { - "deterministicTargetResolution": true, - "memberPath": "lists.indent", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - "lists.insert": { - "deterministicTargetResolution": true, - "memberPath": "lists.insert", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "lists.list": { - "deterministicTargetResolution": true, - "memberPath": "lists.list", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "lists.outdent": { - "deterministicTargetResolution": true, - "memberPath": "lists.outdent", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - "lists.restart": { - "deterministicTargetResolution": true, - "memberPath": "lists.restart", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - "lists.setType": { - "deterministicTargetResolution": true, - "memberPath": "lists.setType", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - "replace": { - "deterministicTargetResolution": true, - "memberPath": "replace", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - "trackChanges.accept": { - "deterministicTargetResolution": true, - "memberPath": "trackChanges.accept", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "trackChanges.acceptAll": { - "deterministicTargetResolution": true, - "memberPath": "trackChanges.acceptAll", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "trackChanges.get": { - "deterministicTargetResolution": true, - "memberPath": "trackChanges.get", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "trackChanges.list": { - "deterministicTargetResolution": true, - "memberPath": "trackChanges.list", - "mutates": false, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": false, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "trackChanges.reject": { - "deterministicTargetResolution": true, - "memberPath": "trackChanges.reject", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - "trackChanges.rejectAll": { - "deterministicTargetResolution": true, - "memberPath": "trackChanges.rejectAll", - "mutates": true, - "postApplyThrowForbidden": true, - "requiresPreflightCapabilitiesCheck": true, - "supportsDryRun": false, - "supportsTrackedMode": false - } - }, - "sourceHash": "d53e75c131bc35996800d18ff3b67961de5d6d031ba20f4a6a03106e1117acaa" -} diff --git a/packages/document-api/generated/agent/remediation-map.json b/packages/document-api/generated/agent/remediation-map.json deleted file mode 100644 index 0f3323d94f..0000000000 --- a/packages/document-api/generated/agent/remediation-map.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "contractVersion": "0.1.0", - "entries": [ - { - "code": "CAPABILITY_UNAVAILABLE", - "message": "Check runtime capabilities and switch to supported mode or operation.", - "nonAppliedOperations": [], - "operations": [ - "comments.add", - "comments.edit", - "comments.goTo", - "comments.move", - "comments.remove", - "comments.reply", - "comments.resolve", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "delete", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "insert", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace", - "trackChanges.accept", - "trackChanges.acceptAll", - "trackChanges.reject", - "trackChanges.rejectAll" - ], - "preApplyOperations": [ - "comments.add", - "comments.edit", - "comments.goTo", - "comments.move", - "comments.remove", - "comments.reply", - "comments.resolve", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "delete", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "insert", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace", - "trackChanges.accept", - "trackChanges.acceptAll", - "trackChanges.reject", - "trackChanges.rejectAll" - ] - }, - { - "code": "COMMAND_UNAVAILABLE", - "message": "Call capabilities.get and branch to a fallback when operation availability is false.", - "nonAppliedOperations": [], - "operations": [ - "comments.add", - "comments.edit", - "comments.goTo", - "comments.move", - "comments.remove", - "comments.reply", - "comments.resolve", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "trackChanges.accept", - "trackChanges.acceptAll", - "trackChanges.reject", - "trackChanges.rejectAll" - ], - "preApplyOperations": [ - "comments.add", - "comments.edit", - "comments.goTo", - "comments.move", - "comments.remove", - "comments.reply", - "comments.resolve", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "trackChanges.accept", - "trackChanges.acceptAll", - "trackChanges.reject", - "trackChanges.rejectAll" - ] - }, - { - "code": "INVALID_TARGET", - "message": "Confirm the target shape and operation compatibility, then retry with a valid target.", - "nonAppliedOperations": [ - "comments.add", - "comments.move", - "comments.reply", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "insert", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace" - ], - "operations": [ - "comments.add", - "comments.move", - "comments.reply", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "insert", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace" - ], - "preApplyOperations": ["insert"] - }, - { - "code": "NO_OP", - "message": "Treat as idempotent no-op and avoid retry loops unless inputs change.", - "nonAppliedOperations": [ - "comments.add", - "comments.edit", - "comments.move", - "comments.remove", - "comments.resolve", - "comments.setInternal", - "delete", - "insert", - "lists.indent", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace", - "trackChanges.accept", - "trackChanges.acceptAll", - "trackChanges.reject", - "trackChanges.rejectAll" - ], - "operations": [ - "comments.add", - "comments.edit", - "comments.move", - "comments.remove", - "comments.resolve", - "comments.setInternal", - "delete", - "insert", - "lists.indent", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace", - "trackChanges.accept", - "trackChanges.acceptAll", - "trackChanges.reject", - "trackChanges.rejectAll" - ], - "preApplyOperations": [] - }, - { - "code": "TARGET_NOT_FOUND", - "message": "Refresh targets via find/get operations and retry with a fresh address or ID.", - "nonAppliedOperations": [], - "operations": [ - "comments.add", - "comments.edit", - "comments.get", - "comments.goTo", - "comments.move", - "comments.remove", - "comments.reply", - "comments.resolve", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "delete", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "getNode", - "getNodeById", - "insert", - "lists.exit", - "lists.get", - "lists.indent", - "lists.insert", - "lists.list", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace", - "trackChanges.accept", - "trackChanges.get", - "trackChanges.reject" - ], - "preApplyOperations": [ - "comments.add", - "comments.edit", - "comments.get", - "comments.goTo", - "comments.move", - "comments.remove", - "comments.reply", - "comments.resolve", - "comments.setActive", - "comments.setInternal", - "create.heading", - "create.paragraph", - "delete", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "getNode", - "getNodeById", - "insert", - "lists.exit", - "lists.get", - "lists.indent", - "lists.insert", - "lists.list", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace", - "trackChanges.accept", - "trackChanges.get", - "trackChanges.reject" - ] - }, - { - "code": "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "message": "Verify track-changes support via capabilities.get before requesting tracked mode.", - "nonAppliedOperations": [], - "operations": [ - "create.heading", - "create.paragraph", - "delete", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "insert", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace" - ], - "preApplyOperations": [ - "create.heading", - "create.paragraph", - "delete", - "format.bold", - "format.italic", - "format.strikethrough", - "format.underline", - "insert", - "lists.exit", - "lists.indent", - "lists.insert", - "lists.outdent", - "lists.restart", - "lists.setType", - "replace" - ] - } - ], - "sourceHash": "d53e75c131bc35996800d18ff3b67961de5d6d031ba20f4a6a03106e1117acaa" -} diff --git a/packages/document-api/generated/agent/workflow-playbooks.json b/packages/document-api/generated/agent/workflow-playbooks.json deleted file mode 100644 index f8916c9562..0000000000 --- a/packages/document-api/generated/agent/workflow-playbooks.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "contractVersion": "0.1.0", - "sourceHash": "d53e75c131bc35996800d18ff3b67961de5d6d031ba20f4a6a03106e1117acaa", - "workflows": [ - { - "id": "find-mutate", - "operations": ["find", "replace"], - "title": "Find + mutate workflow" - }, - { - "id": "tracked-insert", - "operations": ["capabilities.get", "insert"], - "title": "Tracked insert workflow" - }, - { - "id": "comment-thread-lifecycle", - "operations": ["comments.add", "comments.reply", "comments.resolve"], - "title": "Comment lifecycle workflow" - }, - { - "id": "list-manipulation", - "operations": ["lists.insert", "lists.setType", "lists.indent", "lists.outdent", "lists.exit"], - "title": "List manipulation workflow" - }, - { - "id": "capabilities-aware-branching", - "operations": ["capabilities.get", "replace", "insert"], - "title": "Capabilities-aware branching workflow" - }, - { - "id": "track-change-review", - "operations": ["trackChanges.list", "trackChanges.accept", "trackChanges.reject"], - "title": "Track-change review workflow" - } - ] -} diff --git a/packages/document-api/generated/manifests/document-api-tools.json b/packages/document-api/generated/manifests/document-api-tools.json deleted file mode 100644 index ba68db1048..0000000000 --- a/packages/document-api/generated/manifests/document-api-tools.json +++ /dev/null @@ -1,13129 +0,0 @@ -{ - "contractVersion": "0.1.0", - "generatedAt": null, - "sourceCommit": null, - "sourceHash": "d53e75c131bc35996800d18ff3b67961de5d6d031ba20f4a6a03106e1117acaa", - "tools": [ - { - "description": "Read Document API data via `find`.", - "deterministicTargetResolution": false, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "includeNodes": { - "type": "boolean" - }, - "includeUnknown": { - "type": "boolean" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "select": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "caseSensitive": { - "type": "boolean" - }, - "mode": { - "enum": ["contains", "regex"] - }, - "pattern": { - "type": "string" - }, - "type": { - "const": "text" - } - }, - "required": ["type", "pattern"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "enum": ["block", "inline"] - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "type": { - "const": "node" - } - }, - "required": ["type"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["nodeType"], - "type": "object" - } - ] - }, - "within": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - } - }, - "required": ["select"], - "type": "object" - }, - "memberPath": "find", - "mutates": false, - "name": "find", - "outputSchema": { - "additionalProperties": false, - "properties": { - "context": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "highlightRange": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "snippet": { - "type": "string" - }, - "textRanges": { - "items": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["address", "snippet", "highlightRange"], - "type": "object" - }, - "type": "array" - }, - "diagnostics": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "hint": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": ["message"], - "type": "object" - }, - "type": "array" - }, - "matches": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "type": "array" - }, - "nodes": { - "items": { - "additionalProperties": false, - "properties": { - "bodyNodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "bodyText": { - "type": "string" - }, - "kind": { - "enum": ["block", "inline"] - }, - "nodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "properties": { - "type": "object" - }, - "summary": { - "additionalProperties": false, - "properties": { - "label": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["nodeType", "kind"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": [], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `getNode`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": ["run", "bookmark", "comment", "hyperlink", "sdt", "image", "footnoteRef", "tab", "lineBreak"] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "memberPath": "getNode", - "mutates": false, - "name": "getNode", - "outputSchema": { - "additionalProperties": false, - "properties": { - "bodyNodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "bodyText": { - "type": "string" - }, - "kind": { - "enum": ["block", "inline"] - }, - "nodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "properties": { - "type": "object" - }, - "summary": { - "additionalProperties": false, - "properties": { - "label": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["nodeType", "kind"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": ["TARGET_NOT_FOUND"], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `getNodeById`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["nodeId"], - "type": "object" - }, - "memberPath": "getNodeById", - "mutates": false, - "name": "getNodeById", - "outputSchema": { - "additionalProperties": false, - "properties": { - "bodyNodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "bodyText": { - "type": "string" - }, - "kind": { - "enum": ["block", "inline"] - }, - "nodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "properties": { - "type": "object" - }, - "summary": { - "additionalProperties": false, - "properties": { - "label": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["nodeType", "kind"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": ["TARGET_NOT_FOUND"], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `getText`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "getText", - "mutates": false, - "name": "getText", - "outputSchema": { - "type": "string" - }, - "possibleFailureCodes": [], - "preApplyThrows": [], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `info`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "info", - "mutates": false, - "name": "info", - "outputSchema": { - "additionalProperties": false, - "properties": { - "capabilities": { - "additionalProperties": false, - "properties": { - "canComment": { - "type": "boolean" - }, - "canFind": { - "type": "boolean" - }, - "canGetNode": { - "type": "boolean" - }, - "canReplace": { - "type": "boolean" - } - }, - "required": ["canFind", "canGetNode", "canComment", "canReplace"], - "type": "object" - }, - "counts": { - "additionalProperties": false, - "properties": { - "comments": { - "type": "integer" - }, - "headings": { - "type": "integer" - }, - "images": { - "type": "integer" - }, - "paragraphs": { - "type": "integer" - }, - "tables": { - "type": "integer" - }, - "words": { - "type": "integer" - } - }, - "required": ["words", "paragraphs", "headings", "tables", "images", "comments"], - "type": "object" - }, - "outline": { - "items": { - "additionalProperties": false, - "properties": { - "level": { - "type": "integer" - }, - "nodeId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": ["level", "text", "nodeId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["counts", "outline", "capabilities"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": [], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `insert`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "idempotency": "non-idempotent", - "inputSchema": { - "additionalProperties": false, - "allOf": [ - { - "not": { - "required": ["target", "blockId"] - } - }, - { - "not": { - "required": ["target", "offset"] - } - }, - { - "if": { - "required": ["offset"] - }, - "then": { - "required": ["blockId"] - } - } - ], - "properties": { - "blockId": { - "description": "Block ID for block-relative targeting.", - "type": "string" - }, - "offset": { - "description": "Character offset within the block identified by blockId.", - "minimum": 0, - "type": "integer" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["text"], - "type": "object" - }, - "memberPath": "insert", - "mutates": true, - "name": "insert", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE", - "INVALID_TARGET" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `replace`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "text"], - "type": "object" - }, - "memberPath": "replace", - "mutates": true, - "name": "replace", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "TRACK_CHANGE_COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `delete`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "delete", - "mutates": true, - "name": "delete", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "TRACK_CHANGE_COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `format.bold`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.bold", - "mutates": true, - "name": "format.bold", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `format.italic`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.italic", - "mutates": true, - "name": "format.italic", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `format.underline`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.underline", - "mutates": true, - "name": "format.underline", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `format.strikethrough`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.strikethrough", - "mutates": true, - "name": "format.strikethrough", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `create.paragraph`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "non-idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "at": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentStart" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentEnd" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "before" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "after" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - } - ] - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "memberPath": "create.paragraph", - "mutates": true, - "name": "create.paragraph", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "paragraph", "insertionPoint"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "paragraph", "insertionPoint"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `create.heading`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "non-idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "at": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentStart" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentEnd" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "before" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "after" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - } - ] - }, - "level": { - "maximum": 6, - "minimum": 1, - "type": "integer" - }, - "text": { - "type": "string" - } - }, - "required": ["level"], - "type": "object" - }, - "memberPath": "create.heading", - "mutates": true, - "name": "create.heading", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "heading": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "heading" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "heading", "insertionPoint"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "heading": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "heading" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "heading", "insertionPoint"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Read Document API data via `lists.list`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "kind": { - "enum": ["ordered", "bullet"] - }, - "level": { - "type": "integer" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "ordinal": { - "type": "integer" - }, - "within": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "type": "object" - }, - "memberPath": "lists.list", - "mutates": false, - "name": "lists.list", - "outputSchema": { - "additionalProperties": false, - "properties": { - "items": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "kind": { - "enum": ["ordered", "bullet"] - }, - "level": { - "type": "integer" - }, - "marker": { - "type": "string" - }, - "ordinal": { - "type": "integer" - }, - "path": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "text": { - "type": "string" - } - }, - "required": ["address"], - "type": "object" - }, - "type": "array" - }, - "matches": { - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total", "items"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": ["TARGET_NOT_FOUND"], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `lists.get`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["address"], - "type": "object" - }, - "memberPath": "lists.get", - "mutates": false, - "name": "lists.get", - "outputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "kind": { - "enum": ["ordered", "bullet"] - }, - "level": { - "type": "integer" - }, - "marker": { - "type": "string" - }, - "ordinal": { - "type": "integer" - }, - "path": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "text": { - "type": "string" - } - }, - "required": ["address"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": ["TARGET_NOT_FOUND"], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `lists.insert`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "non-idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "position": { - "enum": ["before", "after"] - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "position"], - "type": "object" - }, - "memberPath": "lists.insert", - "mutates": true, - "name": "lists.insert", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "item", "insertionPoint"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "item", "insertionPoint"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": true - }, - { - "description": "Apply Document API mutation `lists.setType`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "kind": { - "enum": ["ordered", "bullet"] - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target", "kind"], - "type": "object" - }, - "memberPath": "lists.setType", - "mutates": true, - "name": "lists.setType", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `lists.indent`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.indent", - "mutates": true, - "name": "lists.indent", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `lists.outdent`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.outdent", - "mutates": true, - "name": "lists.outdent", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `lists.restart`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.restart", - "mutates": true, - "name": "lists.restart", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `lists.exit`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.exit", - "mutates": true, - "name": "lists.exit", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "paragraph"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "paragraph"], - "type": "object" - }, - "supportsDryRun": true, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.add`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "non-idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "text"], - "type": "object" - }, - "memberPath": "comments.add", - "mutates": true, - "name": "comments.add", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.edit`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": ["commentId", "text"], - "type": "object" - }, - "memberPath": "comments.edit", - "mutates": true, - "name": "comments.edit", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.reply`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "non-idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "parentCommentId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": ["parentCommentId", "text"], - "type": "object" - }, - "memberPath": "comments.reply", - "mutates": true, - "name": "comments.reply", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.move`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["commentId", "target"], - "type": "object" - }, - "memberPath": "comments.move", - "mutates": true, - "name": "comments.move", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.resolve`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.resolve", - "mutates": true, - "name": "comments.resolve", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.remove`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.remove", - "mutates": true, - "name": "comments.remove", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.setInternal`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - }, - "isInternal": { - "type": "boolean" - } - }, - "required": ["commentId", "isInternal"], - "type": "object" - }, - "memberPath": "comments.setInternal", - "mutates": true, - "name": "comments.setInternal", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `comments.setActive`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": ["string", "null"] - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.setActive", - "mutates": true, - "name": "comments.setActive", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["INVALID_TARGET"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `comments.goTo`.", - "deterministicTargetResolution": true, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.goTo", - "mutates": false, - "name": "comments.goTo", - "outputSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `comments.get`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.get", - "mutates": false, - "name": "comments.get", - "outputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "commentId": { - "type": "string" - }, - "createdTime": { - "type": "number" - }, - "creatorEmail": { - "type": "string" - }, - "creatorName": { - "type": "string" - }, - "importedId": { - "type": "string" - }, - "isInternal": { - "type": "boolean" - }, - "parentCommentId": { - "type": "string" - }, - "status": { - "enum": ["open", "resolved"] - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["address", "commentId", "status"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": ["TARGET_NOT_FOUND"], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `comments.list`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "includeResolved": { - "type": "boolean" - } - }, - "type": "object" - }, - "memberPath": "comments.list", - "mutates": false, - "name": "comments.list", - "outputSchema": { - "additionalProperties": false, - "properties": { - "matches": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "commentId": { - "type": "string" - }, - "createdTime": { - "type": "number" - }, - "creatorEmail": { - "type": "string" - }, - "creatorName": { - "type": "string" - }, - "importedId": { - "type": "string" - }, - "isInternal": { - "type": "boolean" - }, - "parentCommentId": { - "type": "string" - }, - "status": { - "enum": ["open", "resolved"] - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["address", "commentId", "status"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": [], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `trackChanges.list`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "type": { - "enum": ["insert", "delete", "format"] - } - }, - "type": "object" - }, - "memberPath": "trackChanges.list", - "mutates": false, - "name": "trackChanges.list", - "outputSchema": { - "additionalProperties": false, - "properties": { - "changes": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "author": { - "type": "string" - }, - "authorEmail": { - "type": "string" - }, - "authorImage": { - "type": "string" - }, - "date": { - "type": "string" - }, - "excerpt": { - "type": "string" - }, - "id": { - "type": "string" - }, - "type": { - "enum": ["insert", "delete", "format"] - } - }, - "required": ["address", "id", "type"], - "type": "object" - }, - "type": "array" - }, - "matches": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": [], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `trackChanges.get`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - } - }, - "required": ["id"], - "type": "object" - }, - "memberPath": "trackChanges.get", - "mutates": false, - "name": "trackChanges.get", - "outputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "author": { - "type": "string" - }, - "authorEmail": { - "type": "string" - }, - "authorImage": { - "type": "string" - }, - "date": { - "type": "string" - }, - "excerpt": { - "type": "string" - }, - "id": { - "type": "string" - }, - "type": { - "enum": ["insert", "delete", "format"] - } - }, - "required": ["address", "id", "type"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": ["TARGET_NOT_FOUND"], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `trackChanges.accept`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - } - }, - "required": ["id"], - "type": "object" - }, - "memberPath": "trackChanges.accept", - "mutates": true, - "name": "trackChanges.accept", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `trackChanges.reject`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - } - }, - "required": ["id"], - "type": "object" - }, - "memberPath": "trackChanges.reject", - "mutates": true, - "name": "trackChanges.reject", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `trackChanges.acceptAll`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "trackChanges.acceptAll", - "mutates": true, - "name": "trackChanges.acceptAll", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Apply Document API mutation `trackChanges.rejectAll`.", - "deterministicTargetResolution": true, - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "idempotency": "conditional", - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "trackChanges.rejectAll", - "mutates": true, - "name": "trackChanges.rejectAll", - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "possibleFailureCodes": ["NO_OP"], - "preApplyThrows": ["COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"], - "remediationHints": [], - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - "supportsDryRun": false, - "supportsTrackedMode": false - }, - { - "description": "Read Document API data via `capabilities.get`.", - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "capabilities", - "mutates": false, - "name": "capabilities.get", - "outputSchema": { - "additionalProperties": false, - "properties": { - "global": { - "additionalProperties": false, - "properties": { - "comments": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - }, - "dryRun": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - }, - "lists": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - }, - "trackChanges": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - } - }, - "required": ["trackChanges", "comments", "lists", "dryRun"], - "type": "object" - }, - "operations": { - "additionalProperties": false, - "properties": { - "capabilities.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.add": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.edit": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.goTo": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.list": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.move": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.remove": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.reply": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.resolve": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.setActive": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.setInternal": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "create.heading": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "create.paragraph": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "delete": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "find": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.bold": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.italic": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.strikethrough": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.underline": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "getNode": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "getNodeById": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "getText": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "info": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "insert": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.exit": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.indent": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.insert": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.list": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.outdent": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.restart": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.setType": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "replace": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.accept": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.acceptAll": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.list": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.reject": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.rejectAll": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - } - }, - "required": [ - "find", - "getNode", - "getNodeById", - "getText", - "info", - "insert", - "replace", - "delete", - "format.bold", - "format.italic", - "format.underline", - "format.strikethrough", - "create.paragraph", - "create.heading", - "lists.list", - "lists.get", - "lists.insert", - "lists.setType", - "lists.indent", - "lists.outdent", - "lists.restart", - "lists.exit", - "comments.add", - "comments.edit", - "comments.reply", - "comments.move", - "comments.resolve", - "comments.remove", - "comments.setInternal", - "comments.setActive", - "comments.goTo", - "comments.get", - "comments.list", - "trackChanges.list", - "trackChanges.get", - "trackChanges.accept", - "trackChanges.reject", - "trackChanges.acceptAll", - "trackChanges.rejectAll", - "capabilities.get" - ], - "type": "object" - } - }, - "required": ["global", "operations"], - "type": "object" - }, - "possibleFailureCodes": [], - "preApplyThrows": [], - "remediationHints": [], - "supportsDryRun": false, - "supportsTrackedMode": false - } - ] -} diff --git a/packages/document-api/generated/schemas/README.md b/packages/document-api/generated/schemas/README.md deleted file mode 100644 index f8de1f16cb..0000000000 --- a/packages/document-api/generated/schemas/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Generated Document API schemas - -GENERATED FILE: DO NOT EDIT. Regenerate via `pnpm run docapi:sync`. -This directory is generated from `packages/document-api/src/contract/*`. diff --git a/packages/document-api/generated/schemas/document-api-contract.json b/packages/document-api/generated/schemas/document-api-contract.json deleted file mode 100644 index 2b61cb0632..0000000000 --- a/packages/document-api/generated/schemas/document-api-contract.json +++ /dev/null @@ -1,13210 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "contractVersion": "0.1.0", - "generatedAt": null, - "operations": { - "capabilities.get": { - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "capabilities", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "global": { - "additionalProperties": false, - "properties": { - "comments": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - }, - "dryRun": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - }, - "lists": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - }, - "trackChanges": { - "additionalProperties": false, - "properties": { - "enabled": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - } - }, - "required": ["enabled"], - "type": "object" - } - }, - "required": ["trackChanges", "comments", "lists", "dryRun"], - "type": "object" - }, - "operations": { - "additionalProperties": false, - "properties": { - "capabilities.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.add": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.edit": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.goTo": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.list": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.move": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.remove": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.reply": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.resolve": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.setActive": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "comments.setInternal": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "create.heading": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "create.paragraph": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "delete": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "find": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.bold": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.italic": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.strikethrough": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "format.underline": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "getNode": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "getNodeById": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "getText": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "info": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "insert": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.exit": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.indent": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.insert": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.list": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.outdent": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.restart": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "lists.setType": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "replace": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.accept": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.acceptAll": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.get": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.list": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.reject": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - }, - "trackChanges.rejectAll": { - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "reasons": { - "items": { - "enum": [ - "COMMAND_UNAVAILABLE", - "OPERATION_UNAVAILABLE", - "TRACKED_MODE_UNAVAILABLE", - "DRY_RUN_UNAVAILABLE", - "NAMESPACE_UNAVAILABLE" - ] - }, - "type": "array" - }, - "tracked": { - "type": "boolean" - } - }, - "required": ["available", "tracked", "dryRun"], - "type": "object" - } - }, - "required": [ - "find", - "getNode", - "getNodeById", - "getText", - "info", - "insert", - "replace", - "delete", - "format.bold", - "format.italic", - "format.underline", - "format.strikethrough", - "create.paragraph", - "create.heading", - "lists.list", - "lists.get", - "lists.insert", - "lists.setType", - "lists.indent", - "lists.outdent", - "lists.restart", - "lists.exit", - "comments.add", - "comments.edit", - "comments.reply", - "comments.move", - "comments.resolve", - "comments.remove", - "comments.setInternal", - "comments.setActive", - "comments.goTo", - "comments.get", - "comments.list", - "trackChanges.list", - "trackChanges.get", - "trackChanges.accept", - "trackChanges.reject", - "trackChanges.acceptAll", - "trackChanges.rejectAll", - "capabilities.get" - ], - "type": "object" - } - }, - "required": ["global", "operations"], - "type": "object" - } - }, - "comments.add": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "text"], - "type": "object" - }, - "memberPath": "comments.add", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "non-idempotent", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.edit": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": ["commentId", "text"], - "type": "object" - }, - "memberPath": "comments.edit", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.get": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.get", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND"] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "commentId": { - "type": "string" - }, - "createdTime": { - "type": "number" - }, - "creatorEmail": { - "type": "string" - }, - "creatorName": { - "type": "string" - }, - "importedId": { - "type": "string" - }, - "isInternal": { - "type": "boolean" - }, - "parentCommentId": { - "type": "string" - }, - "status": { - "enum": ["open", "resolved"] - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["address", "commentId", "status"], - "type": "object" - } - }, - "comments.goTo": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.goTo", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.list": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "includeResolved": { - "type": "boolean" - } - }, - "type": "object" - }, - "memberPath": "comments.list", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "matches": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "commentId": { - "type": "string" - }, - "createdTime": { - "type": "number" - }, - "creatorEmail": { - "type": "string" - }, - "creatorName": { - "type": "string" - }, - "importedId": { - "type": "string" - }, - "isInternal": { - "type": "boolean" - }, - "parentCommentId": { - "type": "string" - }, - "status": { - "enum": ["open", "resolved"] - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["address", "commentId", "status"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total"], - "type": "object" - } - }, - "comments.move": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["commentId", "target"], - "type": "object" - }, - "memberPath": "comments.move", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.remove": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.remove", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.reply": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "parentCommentId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": ["parentCommentId", "text"], - "type": "object" - }, - "memberPath": "comments.reply", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "non-idempotent", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.resolve": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.resolve", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.setActive": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": ["string", "null"] - } - }, - "required": ["commentId"], - "type": "object" - }, - "memberPath": "comments.setActive", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "comments.setInternal": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "commentId": { - "type": "string" - }, - "isInternal": { - "type": "boolean" - } - }, - "required": ["commentId", "isInternal"], - "type": "object" - }, - "memberPath": "comments.setInternal", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "create.heading": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "at": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentStart" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentEnd" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "before" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "after" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - } - ] - }, - "level": { - "maximum": 6, - "minimum": 1, - "type": "integer" - }, - "text": { - "type": "string" - } - }, - "required": ["level"], - "type": "object" - }, - "memberPath": "create.heading", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "non-idempotent", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "heading": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "heading" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "heading", "insertionPoint"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "heading": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "heading" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "heading", "insertionPoint"], - "type": "object" - } - }, - "create.paragraph": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "at": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentStart" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "documentEnd" - } - }, - "required": ["kind"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "before" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "after" - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["kind", "target"], - "type": "object" - } - ] - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "memberPath": "create.paragraph", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "non-idempotent", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "paragraph", "insertionPoint"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "paragraph", "insertionPoint"], - "type": "object" - } - }, - "delete": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "delete", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "TRACK_CHANGE_COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - } - }, - "find": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "includeNodes": { - "type": "boolean" - }, - "includeUnknown": { - "type": "boolean" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "select": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "caseSensitive": { - "type": "boolean" - }, - "mode": { - "enum": ["contains", "regex"] - }, - "pattern": { - "type": "string" - }, - "type": { - "const": "text" - } - }, - "required": ["type", "pattern"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "enum": ["block", "inline"] - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "type": { - "const": "node" - } - }, - "required": ["type"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["nodeType"], - "type": "object" - } - ] - }, - "within": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - } - }, - "required": ["select"], - "type": "object" - }, - "memberPath": "find", - "metadata": { - "deterministicTargetResolution": false, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "context": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "highlightRange": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "snippet": { - "type": "string" - }, - "textRanges": { - "items": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["address", "snippet", "highlightRange"], - "type": "object" - }, - "type": "array" - }, - "diagnostics": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "hint": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": ["message"], - "type": "object" - }, - "type": "array" - }, - "matches": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": [ - "run", - "bookmark", - "comment", - "hyperlink", - "sdt", - "image", - "footnoteRef", - "tab", - "lineBreak" - ] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "type": "array" - }, - "nodes": { - "items": { - "additionalProperties": false, - "properties": { - "bodyNodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "bodyText": { - "type": "string" - }, - "kind": { - "enum": ["block", "inline"] - }, - "nodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "properties": { - "type": "object" - }, - "summary": { - "additionalProperties": false, - "properties": { - "label": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["nodeType", "kind"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total"], - "type": "object" - } - }, - "format.bold": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.bold", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - } - }, - "format.italic": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.italic", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - } - }, - "format.strikethrough": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.strikethrough", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - } - }, - "format.underline": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "format.underline", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - } - }, - "getNode": { - "inputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "anchor": { - "additionalProperties": false, - "properties": { - "end": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - }, - "start": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "offset": { - "type": "integer" - } - }, - "required": ["blockId", "offset"], - "type": "object" - } - }, - "required": ["start", "end"], - "type": "object" - }, - "kind": { - "const": "inline" - }, - "nodeType": { - "enum": ["run", "bookmark", "comment", "hyperlink", "sdt", "image", "footnoteRef", "tab", "lineBreak"] - } - }, - "required": ["kind", "nodeType", "anchor"], - "type": "object" - } - ] - }, - "memberPath": "getNode", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND"] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "bodyNodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "bodyText": { - "type": "string" - }, - "kind": { - "enum": ["block", "inline"] - }, - "nodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "properties": { - "type": "object" - }, - "summary": { - "additionalProperties": false, - "properties": { - "label": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["nodeType", "kind"], - "type": "object" - } - }, - "getNodeById": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["nodeId"], - "type": "object" - }, - "memberPath": "getNodeById", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND"] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "bodyNodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "bodyText": { - "type": "string" - }, - "kind": { - "enum": ["block", "inline"] - }, - "nodes": { - "items": { - "type": "object" - }, - "type": "array" - }, - "nodeType": { - "enum": [ - "paragraph", - "heading", - "listItem", - "table", - "tableRow", - "tableCell", - "image", - "sdt", - "run", - "bookmark", - "comment", - "hyperlink", - "footnoteRef", - "tab", - "lineBreak" - ] - }, - "properties": { - "type": "object" - }, - "summary": { - "additionalProperties": false, - "properties": { - "label": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["nodeType", "kind"], - "type": "object" - } - }, - "getText": { - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "getText", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [] - } - }, - "outputSchema": { - "type": "string" - } - }, - "info": { - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "info", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "capabilities": { - "additionalProperties": false, - "properties": { - "canComment": { - "type": "boolean" - }, - "canFind": { - "type": "boolean" - }, - "canGetNode": { - "type": "boolean" - }, - "canReplace": { - "type": "boolean" - } - }, - "required": ["canFind", "canGetNode", "canComment", "canReplace"], - "type": "object" - }, - "counts": { - "additionalProperties": false, - "properties": { - "comments": { - "type": "integer" - }, - "headings": { - "type": "integer" - }, - "images": { - "type": "integer" - }, - "paragraphs": { - "type": "integer" - }, - "tables": { - "type": "integer" - }, - "words": { - "type": "integer" - } - }, - "required": ["words", "paragraphs", "headings", "tables", "images", "comments"], - "type": "object" - }, - "outline": { - "items": { - "additionalProperties": false, - "properties": { - "level": { - "type": "integer" - }, - "nodeId": { - "type": "string" - }, - "text": { - "type": "string" - } - }, - "required": ["level", "text", "nodeId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["counts", "outline", "capabilities"], - "type": "object" - } - }, - "insert": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "allOf": [ - { - "not": { - "required": ["target", "blockId"] - } - }, - { - "not": { - "required": ["target", "offset"] - } - }, - { - "if": { - "required": ["offset"] - }, - "then": { - "required": ["blockId"] - } - } - ], - "properties": { - "blockId": { - "description": "Block ID for block-relative targeting.", - "type": "string" - }, - "offset": { - "description": "Character offset within the block identified by blockId.", - "minimum": 0, - "type": "integer" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["text"], - "type": "object" - }, - "memberPath": "insert", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "non-idempotent", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE", - "INVALID_TARGET" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - } - }, - "lists.exit": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.exit", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "paragraph"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "paragraph": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "paragraph" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "paragraph"], - "type": "object" - } - }, - "lists.get": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["address"], - "type": "object" - }, - "memberPath": "lists.get", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND"] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "kind": { - "enum": ["ordered", "bullet"] - }, - "level": { - "type": "integer" - }, - "marker": { - "type": "string" - }, - "ordinal": { - "type": "integer" - }, - "path": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "text": { - "type": "string" - } - }, - "required": ["address"], - "type": "object" - } - }, - "lists.indent": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.indent", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - } - }, - "lists.insert": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "position": { - "enum": ["before", "after"] - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "position"], - "type": "object" - }, - "memberPath": "lists.insert", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "non-idempotent", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "item", "insertionPoint"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "insertionPoint": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - }, - "trackedChangeRefs": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["success", "item", "insertionPoint"], - "type": "object" - } - }, - "lists.list": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "kind": { - "enum": ["ordered", "bullet"] - }, - "level": { - "type": "integer" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "ordinal": { - "type": "integer" - }, - "within": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "enum": ["paragraph", "heading", "listItem", "table", "tableRow", "tableCell", "image", "sdt"] - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "type": "object" - }, - "memberPath": "lists.list", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND"] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "items": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "kind": { - "enum": ["ordered", "bullet"] - }, - "level": { - "type": "integer" - }, - "marker": { - "type": "string" - }, - "ordinal": { - "type": "integer" - }, - "path": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "text": { - "type": "string" - } - }, - "required": ["address"], - "type": "object" - }, - "type": "array" - }, - "matches": { - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total", "items"], - "type": "object" - } - }, - "lists.outdent": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.outdent", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - } - }, - "lists.restart": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target"], - "type": "object" - }, - "memberPath": "lists.restart", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - } - }, - "lists.setType": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "kind": { - "enum": ["ordered", "bullet"] - }, - "target": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - } - }, - "required": ["target", "kind"], - "type": "object" - }, - "memberPath": "lists.setType", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP", "INVALID_TARGET"], - "supportsDryRun": true, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [ - "TARGET_NOT_FOUND", - "COMMAND_UNAVAILABLE", - "TRACK_CHANGE_COMMAND_UNAVAILABLE", - "CAPABILITY_UNAVAILABLE" - ] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP", "INVALID_TARGET"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "kind": { - "const": "block" - }, - "nodeId": { - "type": "string" - }, - "nodeType": { - "const": "listItem" - } - }, - "required": ["kind", "nodeType", "nodeId"], - "type": "object" - }, - "success": { - "const": true - } - }, - "required": ["success", "item"], - "type": "object" - } - }, - "replace": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "text"], - "type": "object" - }, - "memberPath": "replace", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["INVALID_TARGET", "NO_OP"], - "supportsDryRun": true, - "supportsTrackedMode": true, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "TRACK_CHANGE_COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["INVALID_TARGET", "NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure", "resolution"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "resolution": { - "additionalProperties": false, - "properties": { - "range": { - "additionalProperties": false, - "properties": { - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["from", "to"], - "type": "object" - }, - "requestedTarget": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "target": { - "additionalProperties": false, - "properties": { - "blockId": { - "type": "string" - }, - "kind": { - "const": "text" - }, - "range": { - "additionalProperties": false, - "properties": { - "end": { - "type": "integer" - }, - "start": { - "type": "integer" - } - }, - "required": ["start", "end"], - "type": "object" - } - }, - "required": ["kind", "blockId", "range"], - "type": "object" - }, - "text": { - "type": "string" - } - }, - "required": ["target", "range", "text"], - "type": "object" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success", "resolution"], - "type": "object" - } - }, - "trackChanges.accept": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - } - }, - "required": ["id"], - "type": "object" - }, - "memberPath": "trackChanges.accept", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "trackChanges.acceptAll": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "trackChanges.acceptAll", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "trackChanges.get": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - } - }, - "required": ["id"], - "type": "object" - }, - "memberPath": "trackChanges.get", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND"] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "author": { - "type": "string" - }, - "authorEmail": { - "type": "string" - }, - "authorImage": { - "type": "string" - }, - "date": { - "type": "string" - }, - "excerpt": { - "type": "string" - }, - "id": { - "type": "string" - }, - "type": { - "enum": ["insert", "delete", "format"] - } - }, - "required": ["address", "id", "type"], - "type": "object" - } - }, - "trackChanges.list": { - "inputSchema": { - "additionalProperties": false, - "properties": { - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "type": { - "enum": ["insert", "delete", "format"] - } - }, - "type": "object" - }, - "memberPath": "trackChanges.list", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "idempotent", - "mutates": false, - "possibleFailureCodes": [], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": [] - } - }, - "outputSchema": { - "additionalProperties": false, - "properties": { - "changes": { - "items": { - "additionalProperties": false, - "properties": { - "address": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "author": { - "type": "string" - }, - "authorEmail": { - "type": "string" - }, - "authorImage": { - "type": "string" - }, - "date": { - "type": "string" - }, - "excerpt": { - "type": "string" - }, - "id": { - "type": "string" - }, - "type": { - "enum": ["insert", "delete", "format"] - } - }, - "required": ["address", "id", "type"], - "type": "object" - }, - "type": "array" - }, - "matches": { - "items": { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - "type": "array" - }, - "total": { - "type": "integer" - } - }, - "required": ["matches", "total"], - "type": "object" - } - }, - "trackChanges.reject": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - } - }, - "required": ["id"], - "type": "object" - }, - "memberPath": "trackChanges.reject", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["TARGET_NOT_FOUND", "COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - }, - "trackChanges.rejectAll": { - "failureSchema": { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - }, - "inputSchema": { - "additionalProperties": false, - "properties": {}, - "type": "object" - }, - "memberPath": "trackChanges.rejectAll", - "metadata": { - "deterministicTargetResolution": true, - "idempotency": "conditional", - "mutates": true, - "possibleFailureCodes": ["NO_OP"], - "supportsDryRun": false, - "supportsTrackedMode": false, - "throws": { - "postApplyForbidden": true, - "preApply": ["COMMAND_UNAVAILABLE", "CAPABILITY_UNAVAILABLE"] - } - }, - "outputSchema": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "failure": { - "additionalProperties": false, - "properties": { - "code": { - "enum": ["NO_OP"] - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": ["code", "message"], - "type": "object" - }, - "success": { - "const": false - } - }, - "required": ["success", "failure"], - "type": "object" - } - ] - }, - "successSchema": { - "additionalProperties": false, - "properties": { - "inserted": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "removed": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - }, - "success": { - "const": true - }, - "updated": { - "items": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "comment" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "entityId": { - "type": "string" - }, - "entityType": { - "const": "trackedChange" - }, - "kind": { - "const": "entity" - } - }, - "required": ["kind", "entityType", "entityId"], - "type": "object" - } - ] - }, - "type": "array" - } - }, - "required": ["success"], - "type": "object" - } - } - }, - "sourceCommit": null, - "sourceHash": "d53e75c131bc35996800d18ff3b67961de5d6d031ba20f4a6a03106e1117acaa" -} diff --git a/packages/document-api/scripts/README.md b/packages/document-api/scripts/README.md index 5d8a50f2ef..165e4694d9 100644 --- a/packages/document-api/scripts/README.md +++ b/packages/document-api/scripts/README.md @@ -10,8 +10,8 @@ This folder contains deterministic generator/check entry points for the Document - `pnpm run docapi:sync` — runs `generate-contract-outputs.ts` - `pnpm run docapi:check` — runs `check-contract-parity.ts` + `check-contract-outputs.ts` - `pnpm run docapi:sync:check` — sync then check -- Pre-commit hook (`lefthook.yml`) auto-runs `docapi:sync` when document-api source files are staged. -- CI workflow (`ci-document-api.yml`) runs `docapi:check` on PRs touching document-api paths. +- Pre-commit hook (`lefthook.yml`) auto-runs `docapi:sync` when contract or script sources are staged, and restages `reference/` and `overview.mdx`. +- CI workflow (`ci-document-api.yml`) generates outputs, checks overview freshness, then runs `docapi:check` on PRs touching document-api paths. ## Manual vs generated boundaries @@ -19,9 +19,11 @@ This folder contains deterministic generator/check entry points for the Document - `packages/document-api/src/contract/*` - `packages/document-api/src/index.ts` and related runtime/types - `packages/document-api/scripts/*` -- Generated outputs (checked into git): +- Generated outputs (gitignored — run `pnpm run generate:all`): - `packages/document-api/generated/*` +- Generated outputs (committed — Mintlify deploys from git): - `apps/docs/document-api/reference/*` +- Committed mixed-content file: - generated marker block in `apps/docs/document-api/overview.mdx` Do not hand-edit generated output files. Regenerate instead. diff --git a/packages/document-api/src/README.md b/packages/document-api/src/README.md index 9a9918d499..fde44585fe 100644 --- a/packages/document-api/src/README.md +++ b/packages/document-api/src/README.md @@ -5,9 +5,11 @@ - Manual source of truth: - `packages/document-api/src/**` (this folder) - `packages/document-api/scripts/**` -- Generated and committed: +- Generated (not in git — run `pnpm run generate:all`): - `packages/document-api/generated/**` +- Generated (committed — Mintlify deploys from git): - `apps/docs/document-api/reference/**` +- Committed mixed-content file: - marker block in `apps/docs/document-api/overview.mdx` Do not hand-edit generated files; regenerate via script. diff --git a/packages/sdk/codegen/package.json b/packages/sdk/codegen/package.json new file mode 100644 index 0000000000..fbeafb28af --- /dev/null +++ b/packages/sdk/codegen/package.json @@ -0,0 +1,10 @@ +{ + "name": "@superdoc-dev/sdk-codegen", + "version": "0.0.1", + "private": true, + "type": "module", + "scripts": { + "generate": "node ./src/generate-all.mjs", + "test": "bun test" + } +} diff --git a/packages/sdk/codegen/src/__tests__/contract-integrity.test.ts b/packages/sdk/codegen/src/__tests__/contract-integrity.test.ts new file mode 100644 index 0000000000..d97474cd6e --- /dev/null +++ b/packages/sdk/codegen/src/__tests__/contract-integrity.test.ts @@ -0,0 +1,363 @@ +import { describe, expect, test } from 'bun:test'; +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; + +const REPO_ROOT = path.resolve(import.meta.dir, '../../../../../'); +const CONTRACT_PATH = path.join(REPO_ROOT, 'apps/cli/generated/sdk-contract.json'); +const CATALOG_PATH = path.join(REPO_ROOT, 'packages/sdk/tools/catalog.json'); +const NAME_MAP_PATH = path.join(REPO_ROOT, 'packages/sdk/tools/tool-name-map.json'); + +async function loadJson(filePath: string): Promise { + return JSON.parse(await readFile(filePath, 'utf8')) as T; +} + +type Contract = { + contractVersion: string; + sourceHash: string; + cli: { package: string; minVersion: string }; + protocol: { version: string; transport: string; features: string[] }; + operations: Record< + string, + { + operationId: string; + command: string; + commandTokens: string[]; + category: string; + description: string; + params: Array<{ + name: string; + kind: string; + flag?: string; + type: string; + required?: boolean; + agentVisible?: boolean; + }>; + mutates: boolean; + intentName: string | null; + outputSchema: Record; + inputSchema?: Record; + successSchema?: Record; + failureSchema?: Record; + } + >; +}; + +type Catalog = { + contractVersion: string; + toolCount: number; + profiles: { + intent: { tools: Array<{ operationId: string; toolName: string }> }; + operation: { tools: Array<{ operationId: string; toolName: string }> }; + }; +}; + +describe('Contract integrity', () => { + let contract: Contract; + + test('loads and has required top-level fields', async () => { + contract = await loadJson(CONTRACT_PATH); + expect(contract.contractVersion).toBeTruthy(); + expect(contract.sourceHash).toBeTruthy(); + expect(contract.cli.package).toBe('@superdoc-dev/cli'); + expect(contract.protocol.version).toBe('1.0'); + expect(contract.protocol.features).toContain('cli.invoke'); + }); + + test('all operations have required fields', async () => { + contract = await loadJson(CONTRACT_PATH); + for (const [id, op] of Object.entries(contract.operations)) { + expect(op.operationId).toBe(id); + expect(op.commandTokens.length).toBeGreaterThan(0); + expect(op.category).toBeTruthy(); + expect(op.description).toBeTruthy(); + expect(op.outputSchema).toBeTruthy(); + expect(Array.isArray(op.params)).toBe(true); + expect(typeof op.mutates).toBe('boolean'); + } + }); + + test('all operations start with doc.', async () => { + contract = await loadJson(CONTRACT_PATH); + for (const id of Object.keys(contract.operations)) { + expect(id.startsWith('doc.')).toBe(true); + } + }); + + test('mutations have successSchema and failureSchema', async () => { + contract = await loadJson(CONTRACT_PATH); + for (const [id, op] of Object.entries(contract.operations)) { + if (op.mutates && op.inputSchema) { + // Doc-backed mutations should have success/failure schemas + expect(op.successSchema).toBeTruthy(); + expect(op.failureSchema).toBeTruthy(); + } + } + }); + + test('doc-backed operations have inputSchema', async () => { + contract = await loadJson(CONTRACT_PATH); + const CLI_ONLY = new Set([ + 'doc.open', + 'doc.save', + 'doc.close', + 'doc.status', + 'doc.describe', + 'doc.describeCommand', + 'doc.session.list', + 'doc.session.save', + 'doc.session.close', + 'doc.session.setDefault', + ]); + for (const [id, op] of Object.entries(contract.operations)) { + if (!CLI_ONLY.has(id)) { + expect(op.inputSchema).toBeTruthy(); + } + } + }); + + test('param specs have valid shapes', async () => { + contract = await loadJson(CONTRACT_PATH); + const validKinds = new Set(['doc', 'flag', 'jsonFlag']); + const validTypes = new Set(['string', 'number', 'boolean', 'json', 'string[]']); + + for (const [id, op] of Object.entries(contract.operations)) { + for (const param of op.params) { + expect(validKinds.has(param.kind)).toBe(true); + expect(validTypes.has(param.type)).toBe(true); + if (param.kind === 'doc') { + expect(param.type).toBe('string'); + } + if (param.kind === 'flag' || param.kind === 'jsonFlag') { + expect(param.flag ?? param.name).toBeTruthy(); + } + } + } + }); +}); + +describe('Tool catalog integrity', () => { + test('tool counts match contract operation count', async () => { + const contract = await loadJson(CONTRACT_PATH); + const catalog = await loadJson(CATALOG_PATH); + const opCount = Object.keys(contract.operations).length; + + expect(catalog.profiles.intent.tools.length).toBe(opCount); + expect(catalog.profiles.operation.tools.length).toBe(opCount); + expect(catalog.toolCount).toBe(opCount * 2); + }); + + test('tool name map covers all operations', async () => { + const contract = await loadJson(CONTRACT_PATH); + const nameMap = await loadJson>(NAME_MAP_PATH); + const contractOps = new Set(Object.keys(contract.operations)); + const mappedOps = new Set(Object.values(nameMap)); + + for (const opId of contractOps) { + expect(mappedOps.has(opId)).toBe(true); + } + }); + + test('all catalog entries have required fields', async () => { + const catalog = await loadJson(CATALOG_PATH); + + for (const profile of ['intent', 'operation'] as const) { + for (const tool of catalog.profiles[profile].tools) { + expect(tool.operationId).toBeTruthy(); + expect(tool.toolName).toBeTruthy(); + } + } + }); + + test('provider bundles have correct structure', async () => { + const contract = await loadJson(CONTRACT_PATH); + const opCount = Object.keys(contract.operations).length; + const providers = ['openai', 'anthropic', 'vercel', 'generic']; + + for (const provider of providers) { + const bundle = await loadJson<{ profiles: Record }>( + path.join(REPO_ROOT, `packages/sdk/tools/tools.${provider}.json`), + ); + expect(Array.isArray(bundle.profiles.intent)).toBe(true); + expect(Array.isArray(bundle.profiles.operation)).toBe(true); + expect(bundle.profiles.intent.length).toBe(opCount); + expect(bundle.profiles.operation.length).toBe(opCount); + } + }); + + test('OpenAI tools have required function shape', async () => { + const bundle = await loadJson<{ profiles: { intent: Array> } }>( + path.join(REPO_ROOT, 'packages/sdk/tools/tools.openai.json'), + ); + + for (const tool of bundle.profiles.intent) { + expect(tool.type).toBe('function'); + const fn = tool.function as Record; + expect(typeof fn.name).toBe('string'); + expect(typeof fn.description).toBe('string'); + expect(typeof fn.parameters).toBe('object'); + } + }); + + test('Anthropic tools have required shape', async () => { + const bundle = await loadJson<{ profiles: { intent: Array> } }>( + path.join(REPO_ROOT, 'packages/sdk/tools/tools.anthropic.json'), + ); + + for (const tool of bundle.profiles.intent) { + expect(typeof tool.name).toBe('string'); + expect(typeof tool.description).toBe('string'); + expect(typeof tool.input_schema).toBe('object'); + } + }); +}); + +const POLICY_PATH = path.join(REPO_ROOT, 'packages/sdk/tools/tools-policy.json'); + +type ToolsPolicy = { + policyVersion: string; + contractHash: string; + phases: Record; + defaults: { + maxToolsByProfile: Record; + minReadTools: number; + foundationalOperationIds: string[]; + chooserDecisionVersion: string; + }; + capabilityFeatures: Record; +}; + +describe('Tools policy integrity', () => { + test('loads and has required structure', async () => { + const policy = await loadJson(POLICY_PATH); + expect(policy.policyVersion).toBeTruthy(); + expect(policy.contractHash).toBeTruthy(); + expect(typeof policy.phases).toBe('object'); + expect(typeof policy.defaults).toBe('object'); + expect(typeof policy.capabilityFeatures).toBe('object'); + }); + + test('all 4 phase keys present with correct shape', async () => { + const policy = await loadJson(POLICY_PATH); + for (const phase of ['read', 'locate', 'mutate', 'review']) { + expect(policy.phases[phase]).toBeDefined(); + expect(Array.isArray(policy.phases[phase].include)).toBe(true); + expect(Array.isArray(policy.phases[phase].exclude)).toBe(true); + expect(Array.isArray(policy.phases[phase].priority)).toBe(true); + } + }); + + test('phase categories exist in catalog entries', async () => { + const policy = await loadJson(POLICY_PATH); + const catalog = await loadJson(CATALOG_PATH); + const catalogCategories = new Set(catalog.profiles.intent.tools.map((t) => (t as Record).category)); + + for (const phaseRule of Object.values(policy.phases)) { + for (const category of [...phaseRule.include, ...phaseRule.exclude]) { + expect(catalogCategories.has(category)).toBe(true); + } + } + }); + + test('foundational operation IDs exist in contract', async () => { + const policy = await loadJson(POLICY_PATH); + const contract = await loadJson(CONTRACT_PATH); + for (const opId of policy.defaults.foundationalOperationIds) { + expect(contract.operations[opId]).toBeDefined(); + } + }); + + test('contractHash matches contract sourceHash', async () => { + const policy = await loadJson(POLICY_PATH); + const contract = await loadJson(CONTRACT_PATH); + expect(policy.contractHash).toBe(contract.sourceHash); + }); + + test('capabilityFeatures consistent with catalog entries', async () => { + const policy = await loadJson(POLICY_PATH); + const catalog = await loadJson(CATALOG_PATH); + + for (const [category, expectedFeatures] of Object.entries(policy.capabilityFeatures)) { + const categoryTools = catalog.profiles.intent.tools.filter( + (t) => (t as Record).category === category, + ); + for (const tool of categoryTools) { + expect((tool as Record).requiredCapabilities).toEqual(expectedFeatures); + } + } + }); +}); + +describe('Intent name integrity', () => { + test('all operations have intentName in contract', async () => { + const contract = await loadJson(CONTRACT_PATH); + for (const [id, op] of Object.entries(contract.operations)) { + expect(op.intentName).toBeTruthy(); + } + }); + + test('contract intentNames match catalog intent profile toolNames', async () => { + const contract = await loadJson(CONTRACT_PATH); + const catalog = await loadJson(CATALOG_PATH); + + const catalogIntentNames = new Map(catalog.profiles.intent.tools.map((t) => [t.operationId, t.toolName])); + + for (const [id, op] of Object.entries(contract.operations)) { + const catalogName = catalogIntentNames.get(id); + expect(catalogName).toBe(op.intentName); + } + }); + + test('all intentNames are unique and match snake_case naming policy', async () => { + const contract = await loadJson(CONTRACT_PATH); + const seen = new Set(); + for (const [id, op] of Object.entries(contract.operations)) { + expect(op.intentName).toMatch(/^[a-z][a-z0-9_]*$/); + expect(seen.has(op.intentName!)).toBe(false); + seen.add(op.intentName!); + } + }); +}); + +describe('agentVisible param annotation integrity', () => { + const EXPECTED_HIDDEN = new Set(['out', 'expectedRevision', 'changeMode', 'dryRun']); + + test('expected transport-envelope params are agentVisible: false', async () => { + const contract = await loadJson(CONTRACT_PATH); + for (const [, op] of Object.entries(contract.operations)) { + for (const param of op.params) { + if (EXPECTED_HIDDEN.has(param.name)) { + expect(param.agentVisible).toBe(false); + } + } + } + }); + + test('agentVisible: false params are excluded from catalog inputSchema', async () => { + const contract = await loadJson(CONTRACT_PATH); + const catalog = await loadJson(CATALOG_PATH); + + for (const tool of catalog.profiles.intent.tools) { + const entry = tool as Record; + const inputSchema = entry.inputSchema as { properties?: Record } | undefined; + if (!inputSchema?.properties) continue; + const op = contract.operations[entry.operationId as string]; + if (!op) continue; + + const hiddenParams = op.params.filter((p) => p.agentVisible === false).map((p) => p.name); + for (const hidden of hiddenParams) { + expect(inputSchema.properties[hidden]).toBeUndefined(); + } + } + }); + + test('no unexpected params are marked agentVisible: false', async () => { + const contract = await loadJson(CONTRACT_PATH); + for (const [, op] of Object.entries(contract.operations)) { + for (const param of op.params) { + if (param.agentVisible === false) { + expect(EXPECTED_HIDDEN.has(param.name)).toBe(true); + } + } + } + }); +}); diff --git a/packages/sdk/codegen/src/__tests__/cross-lang-parity.test.ts b/packages/sdk/codegen/src/__tests__/cross-lang-parity.test.ts new file mode 100644 index 0000000000..c404efca91 --- /dev/null +++ b/packages/sdk/codegen/src/__tests__/cross-lang-parity.test.ts @@ -0,0 +1,482 @@ +import { describe, expect, test } from 'bun:test'; +import { spawn } from 'node:child_process'; +import { readFileSync } from 'node:fs'; +import path from 'node:path'; + +const REPO_ROOT = path.resolve(import.meta.dir, '../../../../../'); +const PYTHON_SDK = path.join(REPO_ROOT, 'packages/sdk/langs/python'); + +// -------------------------------------------------------------------------- +// Helpers +// -------------------------------------------------------------------------- + +type SelectionEntry = { operationId: string; toolName: string; category: string; mutates: boolean; profile: string }; +type ChooseResult = { + selected: SelectionEntry[]; + excluded: Array<{ toolName: string; reason: string }>; + selectionMeta: Record; +}; + +/** Call the Python parity helper with a JSON command and parse the result. */ +function callPython(command: Record): Promise { + return new Promise((resolve, reject) => { + const proc = spawn('python3', ['-m', 'superdoc.test_parity_helper'], { + cwd: PYTHON_SDK, + stdio: ['pipe', 'pipe', 'pipe'], + }); + + let stdout = ''; + let stderr = ''; + proc.stdout.on('data', (chunk) => { + stdout += chunk; + }); + proc.stderr.on('data', (chunk) => { + stderr += chunk; + }); + + proc.on('close', (code) => { + if (code !== 0) { + reject(new Error(`Python helper exited ${code}: ${stderr}`)); + return; + } + try { + const result = JSON.parse(stdout.trim()); + if (!result.ok) { + reject(new Error(`Python helper error:\n${result.error}`)); + return; + } + resolve(result.result); + } catch (error) { + reject(new Error(`Failed to parse Python output: ${stdout}\nstderr: ${stderr}`)); + } + }); + + proc.stdin.write(JSON.stringify(command)); + proc.stdin.end(); + }); +} + +/** Import Node SDK chooseTools (cached). */ +let _nodeTools: typeof import('../../../langs/node/src/tools.js') | null = null; +async function nodeTools() { + if (!_nodeTools) { + _nodeTools = await import(path.join(REPO_ROOT, 'packages/sdk/langs/node/src/tools.ts')); + } + return _nodeTools; +} + +// -------------------------------------------------------------------------- +// Phase 1 — Minimal parity tests (3 test cases for 3 bug fixes) +// -------------------------------------------------------------------------- + +describe('Cross-language parity (Phase 1)', () => { + test('chooseTools: foundational seeding includes both foundational ops', async () => { + const input = { + provider: 'generic' as const, + profile: 'intent' as const, + taskContext: { phase: 'read' as const }, + budget: { minReadTools: 2 }, + }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + const nodeIds = nodeResult.selected.map((s: { operationId: string }) => s.operationId); + + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + const pyIds = pyResult.selected.map((s) => s.operationId); + + expect(nodeIds).toContain('doc.info'); + expect(nodeIds).toContain('doc.find'); + expect(pyIds).toContain('doc.info'); + expect(pyIds).toContain('doc.find'); + expect(pyIds).toEqual(nodeIds); + }); + + test('constraint validation: mutuallyExclusive rejects in both runtimes', async () => { + const args = { type: 'paragraph', query: 'test' }; + + const { dispatchSuperDocTool } = await nodeTools(); + let nodeError: { code?: string } | null = null; + try { + await dispatchSuperDocTool({ doc: {} }, 'find_content', args); + } catch (error: unknown) { + nodeError = error as { code?: string }; + } + + const pyResult = (await callPython({ + action: 'validateDispatchArgs', + operationId: 'doc.find', + args, + })) as { rejected?: boolean; code?: string }; + + expect(nodeError).not.toBeNull(); + expect(nodeError!.code).toBe('INVALID_ARGUMENT'); + expect(pyResult.rejected).toBe(true); + expect(pyResult.code).toBe('INVALID_ARGUMENT'); + }); + + test('type mismatches pass through to CLI: both runtimes accept true for a number param', async () => { + const args = { query: 'test', limit: true }; + + const pyResult = await callPython({ + action: 'validateDispatchArgs', + operationId: 'doc.find', + args, + }); + + expect(pyResult).toBe('passed'); + }); +}); + +// -------------------------------------------------------------------------- +// Phase 6 — Expanded golden tests +// -------------------------------------------------------------------------- + +describe('chooseTools parity — phases and profiles', () => { + const phases = ['read', 'locate', 'mutate', 'review'] as const; + const profiles = ['intent', 'operation'] as const; + + for (const phase of phases) { + for (const profile of profiles) { + test(`${phase}/${profile}: identical selected operationIds`, async () => { + const input = { provider: 'generic' as const, profile, taskContext: { phase } }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + const nodeIds = nodeResult.selected.map((s: SelectionEntry) => s.operationId); + + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + const pyIds = pyResult.selected.map((s) => s.operationId); + + expect(pyIds).toEqual(nodeIds); + }); + } + } +}); + +describe('chooseTools parity — budget constraints', () => { + test('maxTools=5, minReadTools=3: same selections', async () => { + const input = { + provider: 'generic' as const, + profile: 'intent' as const, + taskContext: { phase: 'read' as const }, + budget: { maxTools: 5, minReadTools: 3 }, + }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + const nodeIds = nodeResult.selected.map((s: SelectionEntry) => s.operationId); + + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + const pyIds = pyResult.selected.map((s) => s.operationId); + + expect(pyIds).toEqual(nodeIds); + expect(nodeIds.length).toBeLessThanOrEqual(5); + }); + + test('maxTools=1: only 1 tool selected', async () => { + const input = { + provider: 'generic' as const, + profile: 'intent' as const, + taskContext: { phase: 'mutate' as const }, + budget: { maxTools: 1, minReadTools: 0 }, + }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + + expect(nodeResult.selected.length).toBe(1); + expect(pyResult.selected.length).toBe(1); + expect(pyResult.selected[0].operationId).toBe(nodeResult.selected[0].operationId); + }); +}); + +describe('chooseTools parity — policy overrides', () => { + test('forceExclude removes tool from both runtimes', async () => { + const input = { + provider: 'generic' as const, + profile: 'intent' as const, + taskContext: { phase: 'read' as const }, + policy: { forceExclude: ['get_document_info'] }, + }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + const nodeIds = nodeResult.selected.map((s: SelectionEntry) => s.operationId); + + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + const pyIds = pyResult.selected.map((s) => s.operationId); + + expect(nodeIds).not.toContain('doc.info'); + expect(pyIds).not.toContain('doc.info'); + expect(pyIds).toEqual(nodeIds); + }); + + test('forceInclude adds tool in both runtimes', async () => { + const input = { + provider: 'generic' as const, + profile: 'intent' as const, + taskContext: { phase: 'read' as const }, + policy: { forceInclude: ['insert_content'] }, + }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + const nodeIds = nodeResult.selected.map((s: SelectionEntry) => s.operationId); + + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + const pyIds = pyResult.selected.map((s) => s.operationId); + + // insert_content is normally excluded in read phase (it's a mutation). + // forceInclude should still add it. + expect(nodeIds).toContain('doc.insert'); + expect(pyIds).toContain('doc.insert'); + expect(pyIds).toEqual(nodeIds); + }); +}); + +describe('chooseTools parity — capability filtering', () => { + test('hasComments=false excludes comment tools in both runtimes', async () => { + const input = { + provider: 'generic' as const, + profile: 'intent' as const, + taskContext: { phase: 'mutate' as const }, + documentFeatures: { + hasTables: false, + hasLists: false, + hasComments: false, + hasTrackedChanges: false, + isEmptyDocument: false, + }, + }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + const nodeIds = nodeResult.selected.map((s: SelectionEntry) => s.operationId); + + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + const pyIds = pyResult.selected.map((s) => s.operationId); + + // No comment operations should be selected + const commentOps = nodeIds.filter((id: string) => id.startsWith('doc.comments.')); + expect(commentOps.length).toBe(0); + expect(pyIds).toEqual(nodeIds); + }); + + test('selectionMeta matches between runtimes', async () => { + const input = { + provider: 'generic' as const, + profile: 'operation' as const, + taskContext: { phase: 'locate' as const }, + budget: { maxTools: 8 }, + }; + + const { chooseTools } = await nodeTools(); + const nodeResult = await chooseTools(input); + + const pyResult = (await callPython({ action: 'chooseTools', input })) as ChooseResult; + + expect(pyResult.selectionMeta).toEqual(nodeResult.selectionMeta); + }); +}); + +describe('inferDocumentFeatures parity', () => { + test('standard doc.info response', async () => { + const infoResult = { + counts: { words: 500, paragraphs: 12, tables: 2, comments: 3, lists: 5, trackedChanges: 1 }, + }; + + const { inferDocumentFeatures } = await nodeTools(); + const nodeFeatures = inferDocumentFeatures(infoResult); + + const pyFeatures = await callPython({ action: 'inferDocumentFeatures', infoResult }); + + expect(pyFeatures).toEqual(nodeFeatures); + expect(nodeFeatures.hasTables).toBe(true); + expect(nodeFeatures.hasComments).toBe(true); + expect(nodeFeatures.hasLists).toBe(true); + expect(nodeFeatures.hasTrackedChanges).toBe(true); + expect(nodeFeatures.isEmptyDocument).toBe(false); + }); + + test('empty document', async () => { + const infoResult = { + counts: { words: 0, paragraphs: 1, tables: 0, comments: 0, lists: 0, trackedChanges: 0 }, + }; + + const { inferDocumentFeatures } = await nodeTools(); + const nodeFeatures = inferDocumentFeatures(infoResult); + + const pyFeatures = await callPython({ action: 'inferDocumentFeatures', infoResult }); + + expect(pyFeatures).toEqual(nodeFeatures); + expect(nodeFeatures.isEmptyDocument).toBe(true); + expect(nodeFeatures.hasTables).toBe(false); + }); + + test('missing counts keys', async () => { + const infoResult = { counts: {} }; + + const { inferDocumentFeatures } = await nodeTools(); + const nodeFeatures = inferDocumentFeatures(infoResult); + + const pyFeatures = await callPython({ action: 'inferDocumentFeatures', infoResult }); + + expect(pyFeatures).toEqual(nodeFeatures); + }); + + test('null info result', async () => { + const { inferDocumentFeatures } = await nodeTools(); + const nodeFeatures = inferDocumentFeatures(null); + + const pyFeatures = await callPython({ action: 'inferDocumentFeatures', infoResult: null }); + + expect(pyFeatures).toEqual(nodeFeatures); + }); +}); + +describe('Tool name resolution parity', () => { + test('all tool names in name map resolve identically', async () => { + const nameMap = JSON.parse( + readFileSync(path.join(REPO_ROOT, 'packages/sdk/tools/tool-name-map.json'), 'utf8'), + ) as Record; + + const { resolveToolOperation } = await nodeTools(); + + // Test a representative sample (first 10 entries) + const entries = Object.entries(nameMap).slice(0, 10); + for (const [toolName, expectedOpId] of entries) { + const nodeResult = await resolveToolOperation(toolName); + + const pyResult = await callPython({ action: 'resolveToolOperation', toolName }); + + expect(nodeResult).toBe(expectedOpId); + expect(pyResult).toBe(expectedOpId); + } + }); + + test('unknown tool name returns null in both runtimes', async () => { + const { resolveToolOperation } = await nodeTools(); + const nodeResult = await resolveToolOperation('nonexistent_tool_xyz'); + + const pyResult = await callPython({ action: 'resolveToolOperation', toolName: 'nonexistent_tool_xyz' }); + + expect(nodeResult).toBeNull(); + expect(pyResult).toBeNull(); + }); +}); + +describe('Constraint validation parity', () => { + test('requiresOneOf: missing required group rejects in both runtimes', async () => { + // doc.find has requiresOneOf: [["type", "query"]] — must provide at least one + const args = { limit: 10 }; + + const { dispatchSuperDocTool } = await nodeTools(); + let nodeError: { code?: string } | null = null; + try { + await dispatchSuperDocTool({ doc: {} }, 'find_content', args); + } catch (error: unknown) { + nodeError = error as { code?: string }; + } + + const pyResult = (await callPython({ + action: 'validateDispatchArgs', + operationId: 'doc.find', + args, + })) as { rejected?: boolean; code?: string }; + + expect(nodeError).not.toBeNull(); + expect(nodeError!.code).toBe('INVALID_ARGUMENT'); + expect(pyResult.rejected).toBe(true); + expect(pyResult.code).toBe('INVALID_ARGUMENT'); + }); + + test('unknown param rejected in both runtimes', async () => { + const args = { unknownParam: 'value' }; + + const { dispatchSuperDocTool } = await nodeTools(); + let nodeError: { code?: string } | null = null; + try { + await dispatchSuperDocTool({ doc: {} }, 'get_document_info', args); + } catch (error: unknown) { + nodeError = error as { code?: string }; + } + + const pyResult = (await callPython({ + action: 'validateDispatchArgs', + operationId: 'doc.info', + args, + })) as { rejected?: boolean; code?: string }; + + expect(nodeError).not.toBeNull(); + expect(nodeError!.code).toBe('INVALID_ARGUMENT'); + expect(pyResult.rejected).toBe(true); + expect(pyResult.code).toBe('INVALID_ARGUMENT'); + }); + + test('valid args pass in both runtimes', async () => { + // doc.find with just query (satisfies requiresOneOf) + const args = { query: 'test' }; + + const pyResult = await callPython({ + action: 'validateDispatchArgs', + operationId: 'doc.find', + args, + }); + + // When validation passes, helper returns 'passed' + expect(pyResult).toBe('passed'); + }); +}); + +// -------------------------------------------------------------------------- +// Python session targeting and collab guard +// -------------------------------------------------------------------------- + +describe('Python session targeting and collab guard', () => { + test('doc.session.setDefault is session-bound (derives sessionId)', async () => { + const result = await callPython({ + action: 'isSessionBound', + operationId: 'doc.session.setDefault', + }); + expect(result).toBe(true); + }); + + test('doc.open is NOT session-bound', async () => { + const result = await callPython({ + action: 'isSessionBound', + operationId: 'doc.open', + }); + expect(result).toBe(false); + }); + + test('all doc-backed session ops are session-bound', async () => { + const sessionOps = [ + 'doc.status', + 'doc.save', + 'doc.close', + 'doc.info', + 'doc.find', + 'doc.session.save', + 'doc.session.close', + 'doc.session.setDefault', + ]; + for (const opId of sessionOps) { + const result = await callPython({ + action: 'isSessionBound', + operationId: opId, + }); + expect(result).toBe(true); + } + }); + + test('collab session rejected for session-bound op', async () => { + const result = (await callPython({ + action: 'assertCollabRejection', + operationId: 'doc.session.setDefault', + sessionId: 'test-collab-session', + })) as { rejected: boolean; code?: string }; + expect(result).toEqual({ rejected: true, code: 'NOT_SUPPORTED' }); + }); +}); diff --git a/packages/sdk/codegen/src/generate-all.mjs b/packages/sdk/codegen/src/generate-all.mjs new file mode 100644 index 0000000000..ac56f7d728 --- /dev/null +++ b/packages/sdk/codegen/src/generate-all.mjs @@ -0,0 +1,55 @@ +import path from 'node:path'; +import { mkdir, writeFile } from 'node:fs/promises'; +import { loadContract, REPO_ROOT } from './shared.mjs'; +import { generateNodeSdk } from './generate-node.mjs'; +import { generatePythonSdk } from './generate-python.mjs'; +import { generateToolCatalogs } from './generate-tool-catalogs.mjs'; + +/** + * When SDK_CODEGEN_OUTPUT_ROOT is set (for --check mode), redirect outputs + * to subdirectories under that root instead of the real repo paths. + */ +const outputRoot = process.env.SDK_CODEGEN_OUTPUT_ROOT; + +function redirectedWriteGeneratedFile(filePath, content) { + const relToRepo = path.relative(REPO_ROOT, filePath); + let destPath; + + if (relToRepo.startsWith(path.join('packages', 'sdk', 'langs', 'node', 'src', 'generated'))) { + const relPart = path.relative(path.join(REPO_ROOT, 'packages/sdk/langs/node/src/generated'), filePath); + destPath = path.join(outputRoot, 'node-generated', relPart); + } else if (relToRepo.startsWith(path.join('packages', 'sdk', 'langs', 'python', 'superdoc', 'generated'))) { + const relPart = path.relative(path.join(REPO_ROOT, 'packages/sdk/langs/python/superdoc/generated'), filePath); + destPath = path.join(outputRoot, 'python-generated', relPart); + } else if (relToRepo.startsWith(path.join('packages', 'sdk', 'tools'))) { + const relPart = path.relative(path.join(REPO_ROOT, 'packages/sdk/tools'), filePath); + destPath = path.join(outputRoot, 'tools', relPart); + } else { + destPath = path.join(outputRoot, 'other', path.basename(filePath)); + } + + return mkdir(path.dirname(destPath), { recursive: true }) + .then(() => writeFile(destPath, content, 'utf8')); +} + +async function main() { + const contract = await loadContract(); + + // Set global redirect function for --check mode (shared.mjs reads this) + if (outputRoot) { + globalThis.__SDK_CODEGEN_WRITE_FN = redirectedWriteGeneratedFile; + } + + await Promise.all([ + generateNodeSdk(contract), + generatePythonSdk(contract), + generateToolCatalogs(contract), + ]); + + console.log('Generated Node + Python SDKs + tool catalogs from contract.'); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/packages/sdk/codegen/src/generate-node.mjs b/packages/sdk/codegen/src/generate-node.mjs new file mode 100644 index 0000000000..9dd1704f84 --- /dev/null +++ b/packages/sdk/codegen/src/generate-node.mjs @@ -0,0 +1,213 @@ +import path from 'node:path'; +import { + camelCase, + createOperationTree, + loadContract, + pascalCase, + REPO_ROOT, + sanitizeOperationId, + toNodeType, + writeGeneratedFile, +} from './shared.mjs'; + +const NODE_GENERATED_DIR = path.join(REPO_ROOT, 'packages/sdk/langs/node/src/generated'); + +// --------------------------------------------------------------------------- +// contract.ts — embedded contract JSON +// --------------------------------------------------------------------------- + +function generateContractTs(contract) { + const contractForEmbed = { + contractVersion: contract.contractVersion, + cli: contract.cli, + protocol: contract.protocol, + operations: contract.operations, + }; + + return [ + '/* eslint-disable */', + '// Auto-generated by packages/sdk/codegen/src/generate-node.mjs', + '', + `export const CONTRACT = ${JSON.stringify(contractForEmbed, null, 2)} as const;`, + '', + 'export type Contract = typeof CONTRACT;', + `export type OperationEntry = Contract['operations'][keyof Contract['operations']];`, + '', + ].join('\n'); +} + +// --------------------------------------------------------------------------- +// Type generation utilities +// --------------------------------------------------------------------------- + +function toTsType(typeSpec, indent = '') { + if (!typeSpec) return 'unknown'; + + if (Object.prototype.hasOwnProperty.call(typeSpec, 'const')) { + return JSON.stringify(typeSpec.const); + } + + if (Array.isArray(typeSpec.oneOf)) { + const variants = typeSpec.oneOf.map((v) => toTsType(v, indent)); + return variants.map((v) => (v.includes('\n') ? `(${v})` : v)).join(' | '); + } + + if (typeSpec.enum && Array.isArray(typeSpec.enum)) { + return typeSpec.enum.map((v) => JSON.stringify(v)).join(' | '); + } + + switch (typeSpec.type) { + case 'string': + return 'string'; + case 'number': + case 'integer': + return 'number'; + case 'boolean': + return 'boolean'; + case 'null': + return 'null'; + case 'array': + return `Array<${toTsType(typeSpec.items, indent)}>`; + case 'object': { + const required = new Set(typeSpec.required ?? []); + const props = Object.entries(typeSpec.properties ?? {}); + if (props.length === 0) return 'Record'; + const lines = ['{']; + for (const [name, propSpec] of props) { + const opt = required.has(name) ? '' : '?'; + lines.push(`${indent} ${name}${opt}: ${toTsType(propSpec, `${indent} `)};`); + } + lines.push(`${indent}}`); + return lines.join('\n'); + } + default: + return 'unknown'; + } +} + +// --------------------------------------------------------------------------- +// Param interface generation (from params[] — transport plane) +// --------------------------------------------------------------------------- + +function generateParamInterface(operationId, operation) { + const name = `Doc${pascalCase(sanitizeOperationId(operationId))}Params`; + const lines = [`export interface ${name} {`]; + + for (const param of operation.params ?? []) { + const opt = param.required ? '' : '?'; + let paramType; + if (param.type === 'json' && param.schema) { + paramType = toTsType(param.schema, ' '); + } else { + paramType = toNodeType(param.type); + } + lines.push(` ${param.name}${opt}: ${paramType};`); + } + + lines.push('}'); + return { name, source: lines.join('\n') }; +} + +// --------------------------------------------------------------------------- +// Result type generation (successSchema ?? outputSchema — schema plane) +// --------------------------------------------------------------------------- + +function generateResultType(operationId, operation) { + const name = `Doc${pascalCase(sanitizeOperationId(operationId))}Result`; + const schema = operation.successSchema ?? operation.outputSchema; + + if (!schema) { + throw new Error(`Operation ${operationId} missing both successSchema and outputSchema`); + } + + const body = toTsType(schema); + return { name, source: `export type ${name} = ${body};` }; +} + +// --------------------------------------------------------------------------- +// Client tree rendering +// --------------------------------------------------------------------------- + +function renderTreeNode(treeNode, paramTypeMap, resultTypeMap, indent = ' ') { + const entries = Object.entries(treeNode); + const rendered = entries.map(([key, value]) => { + if (value.__operation) { + const op = value.__operation; + const typeName = paramTypeMap.get(op.id); + const resultTypeName = resultTypeMap.get(op.id); + const hasRequired = (op.params ?? []).some((p) => p.required); + const paramsArg = hasRequired ? `params: ${typeName}` : `params: ${typeName} = {}`; + return `${indent}${camelCase(key)}: (${paramsArg}, options?: InvokeOptions) => runtime.invoke<${resultTypeName}>(CONTRACT.operations[${JSON.stringify(op.id)}], params as unknown as Record, options),`; + } + + const nested = renderTreeNode(value, paramTypeMap, resultTypeMap, `${indent} `); + return `${indent}${camelCase(key)}: {\n${nested}\n${indent}},`; + }); + + return rendered.join('\n'); +} + +// --------------------------------------------------------------------------- +// client.ts generation +// --------------------------------------------------------------------------- + +function generateClientTs(contract) { + const paramInterfaces = []; + const resultTypes = []; + const paramTypeMap = new Map(); + const resultTypeMap = new Map(); + + for (const [operationId, operation] of Object.entries(contract.operations)) { + const { name: pName, source: pSource } = generateParamInterface(operationId, operation); + paramTypeMap.set(operationId, pName); + paramInterfaces.push(pSource); + + const { name: rName, source: rSource } = generateResultType(operationId, operation); + resultTypeMap.set(operationId, rName); + resultTypes.push(rSource); + } + + const tree = createOperationTree(contract.operations); + const treeSource = renderTreeNode(tree, paramTypeMap, resultTypeMap); + + return [ + '/* eslint-disable */', + '// Auto-generated by packages/sdk/codegen/src/generate-node.mjs', + '', + "import { CONTRACT } from './contract.js';", + "import type { SuperDocRuntime, InvokeOptions } from '../runtime/process.js';", + '', + paramInterfaces.join('\n\n'), + '', + resultTypes.join('\n\n'), + '', + 'export function createDocApi(runtime: SuperDocRuntime) {', + ' return {', + treeSource, + ' };', + '}', + '', + 'export type SuperDocDocApi = ReturnType;', + '', + ].join('\n'); +} + +// --------------------------------------------------------------------------- +// Entry +// --------------------------------------------------------------------------- + +export async function generateNodeSdk(contract) { + const contractContent = generateContractTs(contract); + const clientContent = generateClientTs(contract); + + await Promise.all([ + writeGeneratedFile(path.join(NODE_GENERATED_DIR, 'contract.ts'), contractContent), + writeGeneratedFile(path.join(NODE_GENERATED_DIR, 'client.ts'), clientContent), + ]); +} + +if (import.meta.url.endsWith(process.argv[1]?.replace(/^file:\/\//, '') ?? '')) { + const contract = await loadContract(); + await generateNodeSdk(contract); + console.log('Generated Node SDK files.'); +} diff --git a/packages/sdk/codegen/src/generate-python.mjs b/packages/sdk/codegen/src/generate-python.mjs new file mode 100644 index 0000000000..989dde524b --- /dev/null +++ b/packages/sdk/codegen/src/generate-python.mjs @@ -0,0 +1,297 @@ +import path from 'node:path'; +import { + camelCase, + createOperationTree, + loadContract, + pascalCase, + REPO_ROOT, + sanitizeOperationId, + writeGeneratedFile, +} from './shared.mjs'; + +const PYTHON_GENERATED_DIR = path.join(REPO_ROOT, 'packages/sdk/langs/python/superdoc/generated'); + +// --------------------------------------------------------------------------- +// contract.py — embedded contract dict +// --------------------------------------------------------------------------- + +function generateContractPy(contract) { + const payload = JSON.stringify(contract); + return [ + '# Auto-generated by packages/sdk/codegen/src/generate-python.mjs', + '', + 'import json', + '', + `CONTRACT = json.loads(${JSON.stringify(payload)})`, + '', + 'OPERATION_INDEX = {op_id: op for op_id, op in CONTRACT["operations"].items()}', + '', + ].join('\n'); +} + +// --------------------------------------------------------------------------- +// Python type mapping +// --------------------------------------------------------------------------- + +function toPythonLiteral(value) { + if (typeof value === 'string') return JSON.stringify(value); + if (typeof value === 'number') return String(value); + if (typeof value === 'boolean') return value ? 'True' : 'False'; + return 'None'; +} + +function toPythonType(typeSpec, classNameBase, generatedClasses, classBlocks) { + if (!typeSpec) return 'Any'; + + if (Object.prototype.hasOwnProperty.call(typeSpec, 'const')) { + return `Literal[${toPythonLiteral(typeSpec.const)}]`; + } + + if (Array.isArray(typeSpec.oneOf)) { + const variants = typeSpec.oneOf.map((v, i) => + toPythonType(v, `${classNameBase}Variant${i + 1}`, generatedClasses, classBlocks), + ); + return variants.join(' | '); + } + + if (typeSpec.enum && Array.isArray(typeSpec.enum)) { + return typeSpec.enum.map((v) => `Literal[${toPythonLiteral(v)}]`).join(' | '); + } + + switch (typeSpec.type) { + case 'string': + return 'str'; + case 'number': + case 'integer': + return 'int | float'; + case 'boolean': + return 'bool'; + case 'null': + return 'None'; + case 'json': + return 'Any'; + case 'array': + return `list[${toPythonType(typeSpec.items, `${classNameBase}Item`, generatedClasses, classBlocks)}]`; + case 'object': { + const className = classNameBase; + if (!generatedClasses.has(className)) { + generatedClasses.add(className); + const lines = [`${className} = TypedDict(`, ` ${JSON.stringify(className)},`, ' {']; + const properties = Object.entries(typeSpec.properties ?? {}); + if (properties.length === 0) { + lines.push(' },'); + lines.push(' total=False,'); + lines.push(')'); + } else { + for (const [name, propSpec] of properties) { + const propType = toPythonType( + propSpec, + `${className}${pascalCase(name)}`, + generatedClasses, + classBlocks, + ); + lines.push(` ${JSON.stringify(name)}: ${propType},`); + } + lines.push(' },'); + lines.push(' total=False,'); + lines.push(')'); + } + classBlocks.push(lines.join('\n')); + } + return className; + } + default: + return 'Any'; + } +} + +// --------------------------------------------------------------------------- +// Param type spec helpers +// --------------------------------------------------------------------------- + +function paramTypeSpec(param) { + if (param.type === 'string') return { type: 'string' }; + if (param.type === 'number') return { type: 'number' }; + if (param.type === 'boolean') return { type: 'boolean' }; + if (param.type === 'string[]') return { type: 'array', items: { type: 'string' } }; + if (param.type === 'json' && param.schema) return param.schema; + return { type: 'json' }; +} + +function buildParamsObjectSpec(operation) { + const properties = {}; + const required = []; + + for (const param of operation.params ?? []) { + properties[param.name] = paramTypeSpec(param); + if (param.required) required.push(param.name); + } + + return { type: 'object', properties, required }; +} + +// --------------------------------------------------------------------------- +// Response and param type generation +// --------------------------------------------------------------------------- + +function generateResponseTypes(operations, generatedClasses, classBlocks) { + const map = new Map(); + + for (const [operationId, operation] of Object.entries(operations)) { + const resultClassName = `Doc${pascalCase(sanitizeOperationId(operationId))}Result`; + const schema = operation.successSchema ?? operation.outputSchema; + if (!schema) { + throw new Error(`Operation ${operationId} missing both successSchema and outputSchema`); + } + map.set(operationId, toPythonType(schema, resultClassName, generatedClasses, classBlocks)); + } + + return map; +} + +function generateParamTypes(operations, generatedClasses, classBlocks) { + const map = new Map(); + + for (const [operationId, operation] of Object.entries(operations)) { + const paramsClassName = `Doc${pascalCase(sanitizeOperationId(operationId))}Params`; + const paramsType = toPythonType( + buildParamsObjectSpec(operation), + paramsClassName, + generatedClasses, + classBlocks, + ); + map.set(operationId, paramsType); + } + + return map; +} + +// --------------------------------------------------------------------------- +// Class generation +// --------------------------------------------------------------------------- + +function classNameFor(pathParts, asyncMode) { + const prefix = asyncMode ? '_Async' : '_Sync'; + return `${prefix}${pathParts.map((p) => pascalCase(p)).join('')}Api`; +} + +function renderClass(treeNode, pathParts, asyncMode, resultTypeMap, paramTypeMap) { + const className = classNameFor(pathParts, asyncMode); + const lines = [`class ${className}:`, ' def __init__(self, runtime):', ' self._runtime = runtime', '']; + + for (const [key, value] of Object.entries(treeNode)) { + if (value.__operation) { + const methodName = camelCase(key); + const operationId = value.__operation.id; + const resultType = resultTypeMap.get(operationId) ?? 'dict[str, Any]'; + const paramsType = paramTypeMap.get(operationId) ?? 'dict[str, Any]'; + + if (asyncMode) { + lines.push( + ` async def ${methodName}(self, params: ${paramsType} | None = None, *, timeout_ms=None, stdin_bytes=None) -> ${resultType}:`, + ); + lines.push( + ` return await self._runtime.invoke(${JSON.stringify(operationId)}, params or {}, timeout_ms=timeout_ms, stdin_bytes=stdin_bytes)`, + ); + } else { + lines.push( + ` def ${methodName}(self, params: ${paramsType} | None = None, *, timeout_ms=None, stdin_bytes=None) -> ${resultType}:`, + ); + lines.push( + ` return self._runtime.invoke(${JSON.stringify(operationId)}, params or {}, timeout_ms=timeout_ms, stdin_bytes=stdin_bytes)`, + ); + } + lines.push(''); + continue; + } + + const propertyName = camelCase(key); + const nestedClassName = classNameFor([...pathParts, key], asyncMode); + lines.push(' @property'); + lines.push(` def ${propertyName}(self):`); + lines.push(` return ${nestedClassName}(self._runtime)`); + lines.push(''); + } + + return lines.join('\n').trimEnd(); +} + +function renderAllClasses(treeNode, pathParts, asyncMode, resultTypeMap, paramTypeMap) { + const blocks = [renderClass(treeNode, pathParts, asyncMode, resultTypeMap, paramTypeMap)]; + + for (const [key, value] of Object.entries(treeNode)) { + if (value.__operation) continue; + blocks.push(''); + blocks.push(renderAllClasses(value, [...pathParts, key], asyncMode, resultTypeMap, paramTypeMap)); + } + + return blocks.join('\n'); +} + +// --------------------------------------------------------------------------- +// client.py generation +// --------------------------------------------------------------------------- + +function generateClientPy(contract) { + const tree = createOperationTree(contract.operations); + const generatedClasses = new Set(); + const classBlocks = []; + const resultTypeMap = generateResponseTypes(contract.operations, generatedClasses, classBlocks); + const paramTypeMap = generateParamTypes(contract.operations, generatedClasses, classBlocks); + const sharedTypes = classBlocks.join('\n\n'); + const syncClasses = renderAllClasses(tree, ['doc'], false, resultTypeMap, paramTypeMap); + const asyncClasses = renderAllClasses(tree, ['doc'], true, resultTypeMap, paramTypeMap); + + return [ + '# Auto-generated by packages/sdk/codegen/src/generate-python.mjs', + '', + 'from __future__ import annotations', + '', + 'from typing import Any, Literal, TypedDict', + '', + 'from ..runtime import SuperDocSyncRuntime, SuperDocAsyncRuntime', + '', + sharedTypes, + '', + syncClasses, + '', + asyncClasses, + '', + '', + 'class SuperDocClient:', + ' def __init__(self, *, env=None, default_change_mode=None):', + ' self._runtime = SuperDocSyncRuntime(env=env, default_change_mode=default_change_mode)', + ' self.doc = _SyncDocApi(self._runtime)', + '', + '', + 'class AsyncSuperDocClient:', + ' def __init__(self, *, env=None, default_change_mode=None):', + ' self._runtime = SuperDocAsyncRuntime(env=env, default_change_mode=default_change_mode)', + ' self.doc = _AsyncDocApi(self._runtime)', + '', + ].join('\n'); +} + +// --------------------------------------------------------------------------- +// Entry +// --------------------------------------------------------------------------- + +export async function generatePythonSdk(contract) { + const contractContent = generateContractPy(contract); + const clientContent = generateClientPy(contract); + + await Promise.all([ + writeGeneratedFile(path.join(PYTHON_GENERATED_DIR, 'contract.py'), contractContent), + writeGeneratedFile(path.join(PYTHON_GENERATED_DIR, 'client.py'), clientContent), + writeGeneratedFile( + path.join(PYTHON_GENERATED_DIR, '__init__.py'), + 'from .client import SuperDocClient, AsyncSuperDocClient\n', + ), + ]); +} + +if (import.meta.url.endsWith(process.argv[1]?.replace(/^file:\/\//, '') ?? '')) { + const contract = await loadContract(); + await generatePythonSdk(contract); + console.log('Generated Python SDK files.'); +} diff --git a/packages/sdk/codegen/src/generate-tool-catalogs.mjs b/packages/sdk/codegen/src/generate-tool-catalogs.mjs new file mode 100644 index 0000000000..a49eb59a0d --- /dev/null +++ b/packages/sdk/codegen/src/generate-tool-catalogs.mjs @@ -0,0 +1,338 @@ +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { loadContract, REPO_ROOT, sanitizeOperationId, writeGeneratedFile } from './shared.mjs'; + +const TOOLS_OUTPUT_DIR = path.join(REPO_ROOT, 'packages/sdk/tools'); +const DOCAPI_TOOLS_PATH = path.join( + REPO_ROOT, + 'packages/document-api/generated/manifests/document-api-tools.json', +); + +const NAME_POLICY_VERSION = 'v1'; +const EXPOSURE_VERSION = 'v1'; + +// --------------------------------------------------------------------------- +// Intent naming — read from contract's intentName field, fallback to derivation +// --------------------------------------------------------------------------- + +function toIntentName(operationId, operation) { + if (operation.intentName) { + return operation.intentName; + } + // Fallback: strip 'doc.' prefix and convert dots/camelCase to snake_case + return sanitizeOperationId(operationId) + .replace(/\./g, '_') + .replace(/([a-z])([A-Z])/g, '$1_$2') + .toLowerCase(); +} + +// Operation name is simpler: just replace dots with underscores +function toOperationToolName(operationId) { + return operationId.replace(/\./g, '_'); +} + +// --------------------------------------------------------------------------- +// Tools policy — shared data that both runtimes consume from tools-policy.json +// --------------------------------------------------------------------------- + +const TOOLS_POLICY = { + policyVersion: 'v1', + phases: { + read: { + include: ['introspection', 'query'], + exclude: ['mutation', 'trackChanges', 'session', 'create', 'comments', 'format'], + priority: ['query', 'introspection'], + }, + locate: { + include: ['query'], + exclude: ['mutation', 'trackChanges', 'session', 'create', 'comments', 'format'], + priority: ['query'], + }, + mutate: { + include: ['query', 'mutation', 'format', 'comments', 'create'], + exclude: ['session'], + priority: ['query', 'mutation', 'create', 'format', 'comments'], + }, + review: { + include: ['query', 'trackChanges', 'comments'], + exclude: ['mutation', 'create', 'session', 'format'], + priority: ['trackChanges', 'comments', 'query'], + }, + }, + defaults: { + maxToolsByProfile: { intent: 12, operation: 16 }, + minReadTools: 2, + foundationalOperationIds: ['doc.info', 'doc.find'], + chooserDecisionVersion: 'v1', + }, + capabilityFeatures: { + comments: ['hasComments'], + trackChanges: ['hasTrackedChanges'], + lists: ['hasLists'], + }, +}; + +// --------------------------------------------------------------------------- +// Category inference for capabilities +// --------------------------------------------------------------------------- + +const CAPABILITY_FEATURES = TOOLS_POLICY.capabilityFeatures; + +function inferRequiredCapabilities(category) { + return CAPABILITY_FEATURES[category] ?? []; +} + +function inferCapabilities(operation) { + const capabilities = new Set(); + const params = operation.params ?? []; + const paramNames = new Set(params.map((p) => p.name)); + + if (paramNames.has('doc')) capabilities.add('stateless-doc'); + if (paramNames.has('sessionId')) capabilities.add('session-targeting'); + if (paramNames.has('expectedRevision')) capabilities.add('optimistic-concurrency'); + if (paramNames.has('changeMode')) capabilities.add('tracked-change-mode'); + if (paramNames.has('dryRun')) capabilities.add('dry-run'); + if (paramNames.has('out')) capabilities.add('output-path'); + if (operation.category === 'comments') capabilities.add('comments'); + if (operation.category === 'trackChanges') capabilities.add('track-changes'); + if (operation.category === 'session') capabilities.add('session-management'); + if (operation.category === 'create') capabilities.add('structural-create'); + if (operation.category === 'query') capabilities.add('search'); + if (operation.category === 'introspection') capabilities.add('introspection'); + + return Array.from(capabilities).sort(); +} + +function inferSessionRequirements(operation) { + const params = operation.params ?? []; + const paramNames = new Set(params.map((p) => p.name)); + return { + requiresOpenContext: paramNames.has('doc') || paramNames.has('sessionId'), + supportsSessionTargeting: paramNames.has('sessionId'), + }; +} + +// --------------------------------------------------------------------------- +// Build input schema from CLI params (for CLI-only ops or as fallback) +// --------------------------------------------------------------------------- + +function buildInputSchemaFromParams(operation) { + const properties = {}; + const required = []; + + for (const param of operation.params ?? []) { + // Skip params annotated as not agent-visible (transport-envelope details). + if (param.agentVisible === false) { + continue; + } + + let schema; + if (param.type === 'string') schema = { type: 'string' }; + else if (param.type === 'number') schema = { type: 'number' }; + else if (param.type === 'boolean') schema = { type: 'boolean' }; + else if (param.type === 'string[]') schema = { type: 'array', items: { type: 'string' } }; + else if (param.type === 'json' && param.schema) schema = param.schema; + else schema = {}; + + if (param.description) schema.description = param.description; + properties[param.name] = schema; + if (param.required) required.push(param.name); + } + + const result = { type: 'object', properties }; + if (required.length > 0) result.required = required; + result.additionalProperties = false; + return result; +} + +// --------------------------------------------------------------------------- +// Load document-api tools indexed by name +// --------------------------------------------------------------------------- + +async function loadDocApiTools() { + const raw = await readFile(DOCAPI_TOOLS_PATH, 'utf8'); + const manifest = JSON.parse(raw); + const index = new Map(); + for (const tool of manifest.tools ?? []) { + index.set(tool.name, tool); + } + return index; +} + +// --------------------------------------------------------------------------- +// Build unified catalog entry +// --------------------------------------------------------------------------- + +function buildCatalogEntry(operationId, operation, docApiTool, profile) { + const toolName = profile === 'intent' ? toIntentName(operationId, operation) : toOperationToolName(operationId); + + // Input schema: always derive from CLI params so field names match the dispatcher + // contract (doc-api inputSchema uses different names e.g. commentId vs id). + const inputSchema = buildInputSchemaFromParams(operation); + + // Output schema from contract + const outputSchema = operation.successSchema ?? operation.outputSchema ?? {}; + + return { + operationId, + toolName, + profile, + source: profile === 'intent' ? 'intent' : 'operation', + description: operation.description ?? '', + inputSchema, + outputSchema, + mutates: operation.mutates ?? false, + category: operation.category ?? 'misc', + capabilities: inferCapabilities(operation), + constraints: operation.constraints ?? undefined, + errors: docApiTool?.possibleFailureCodes ?? [], + examples: [], + commandTokens: operation.commandTokens ?? [], + profileTags: [], + requiredCapabilities: inferRequiredCapabilities(operation.category), + sessionRequirements: inferSessionRequirements(operation), + intentId: profile === 'intent' ? toIntentName(operationId, operation) : undefined, + }; +} + +// --------------------------------------------------------------------------- +// Provider formatters +// --------------------------------------------------------------------------- + +function toOpenAiTool(entry) { + return { + type: 'function', + function: { + name: entry.toolName, + description: entry.description, + parameters: entry.inputSchema, + }, + }; +} + +function toAnthropicTool(entry) { + return { + name: entry.toolName, + description: entry.description, + input_schema: entry.inputSchema, + }; +} + +function toVercelTool(entry) { + return { + type: 'function', + function: { + name: entry.toolName, + description: entry.description, + parameters: entry.inputSchema, + }, + }; +} + +function toGenericTool(entry) { + return { + name: entry.toolName, + description: entry.description, + parameters: entry.inputSchema, + returns: entry.outputSchema, + metadata: { + operationId: entry.operationId, + profile: entry.profile, + mutates: entry.mutates, + category: entry.category, + capabilities: entry.capabilities, + constraints: entry.constraints, + requiredCapabilities: entry.requiredCapabilities, + profileTags: entry.profileTags, + examples: entry.examples, + commandTokens: entry.commandTokens, + }, + }; +} + +// --------------------------------------------------------------------------- +// Main generation +// --------------------------------------------------------------------------- + +export async function generateToolCatalogs(contract) { + const docApiTools = await loadDocApiTools(); + + const intentTools = []; + const operationTools = []; + + for (const [operationId, operation] of Object.entries(contract.operations)) { + // Map to doc-api tool by stripping 'doc.' prefix + const docApiName = operationId.replace(/^doc\./, ''); + const docApiTool = docApiTools.get(docApiName); + + intentTools.push(buildCatalogEntry(operationId, operation, docApiTool, 'intent')); + operationTools.push(buildCatalogEntry(operationId, operation, docApiTool, 'operation')); + } + + // Full catalog + const catalog = { + contractVersion: contract.contractVersion, + generatedAt: null, + namePolicyVersion: NAME_POLICY_VERSION, + exposureVersion: EXPOSURE_VERSION, + toolCount: intentTools.length + operationTools.length, + profiles: { + intent: { name: 'intent', tools: intentTools }, + operation: { name: 'operation', tools: operationTools }, + }, + }; + + // Tool name -> operation ID map + const toolNameMap = {}; + for (const tool of intentTools) { + toolNameMap[tool.toolName] = tool.operationId; + } + for (const tool of operationTools) { + toolNameMap[tool.toolName] = tool.operationId; + } + + // Provider bundles + const providers = { + openai: { formatter: toOpenAiTool, file: 'tools.openai.json' }, + anthropic: { formatter: toAnthropicTool, file: 'tools.anthropic.json' }, + vercel: { formatter: toVercelTool, file: 'tools.vercel.json' }, + generic: { formatter: toGenericTool, file: 'tools.generic.json' }, + }; + + // Tools policy with contract hash + const policy = { + ...TOOLS_POLICY, + contractHash: contract.sourceHash, + }; + + const writes = [ + writeGeneratedFile(path.join(TOOLS_OUTPUT_DIR, 'catalog.json'), JSON.stringify(catalog, null, 2) + '\n'), + writeGeneratedFile( + path.join(TOOLS_OUTPUT_DIR, 'tool-name-map.json'), + JSON.stringify(toolNameMap, null, 2) + '\n', + ), + writeGeneratedFile( + path.join(TOOLS_OUTPUT_DIR, 'tools-policy.json'), + JSON.stringify(policy, null, 2) + '\n', + ), + ]; + + for (const [, { formatter, file }] of Object.entries(providers)) { + const bundle = { + contractVersion: contract.contractVersion, + profiles: { + intent: intentTools.map(formatter), + operation: operationTools.map(formatter), + }, + }; + writes.push(writeGeneratedFile(path.join(TOOLS_OUTPUT_DIR, file), JSON.stringify(bundle, null, 2) + '\n')); + } + + await Promise.all(writes); +} + +if (import.meta.url.endsWith(process.argv[1]?.replace(/^file:\/\//, '') ?? '')) { + const contract = await loadContract(); + await generateToolCatalogs(contract); + console.log('Generated tool catalog files.'); +} diff --git a/packages/sdk/codegen/src/shared.mjs b/packages/sdk/codegen/src/shared.mjs new file mode 100644 index 0000000000..d55ebb7f07 --- /dev/null +++ b/packages/sdk/codegen/src/shared.mjs @@ -0,0 +1,89 @@ +import { readFile, writeFile, mkdir } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export const REPO_ROOT = path.resolve(__dirname, '../../../../'); +export const CONTRACT_PATH = path.join(REPO_ROOT, 'apps/cli/generated/sdk-contract.json'); + +export function pascalCase(value) { + return value + .replace(/[^a-zA-Z0-9]+/g, ' ') + .split(' ') + .filter(Boolean) + .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) + .join(''); +} + +export function camelCase(value) { + const p = pascalCase(value); + return p.charAt(0).toLowerCase() + p.slice(1); +} + +export async function loadContract() { + const raw = await readFile(CONTRACT_PATH, 'utf8'); + return JSON.parse(raw); +} + +export async function writeGeneratedFile(filePath, content) { + // Allow generate-all.mjs to redirect writes for --check mode + if (globalThis.__SDK_CODEGEN_WRITE_FN) { + return globalThis.__SDK_CODEGEN_WRITE_FN(filePath, content); + } + await mkdir(path.dirname(filePath), { recursive: true }); + await writeFile(filePath, content, 'utf8'); +} + +/** + * Strip 'doc.' prefix and replace dots with spaces for naming. + * E.g. "doc.comments.add" -> "comments add" + */ +export function sanitizeOperationId(operationId) { + return operationId.replace(/^doc\./, '').replace(/\./g, ' '); +} + +export function toNodeType(paramType) { + switch (paramType) { + case 'string': + return 'string'; + case 'number': + return 'number'; + case 'boolean': + return 'boolean'; + case 'string[]': + return 'string[]'; + case 'json': + return 'Record | unknown[]'; + default: + return 'unknown'; + } +} + +/** + * Build a nested operation tree from the flat operations object. + * New contract format: operations is Record. + */ +export function createOperationTree(operations) { + const root = {}; + + for (const [operationId, operation] of Object.entries(operations)) { + const pathParts = operationId.split('.').slice(1); // strip 'doc.' + let node = root; + + for (let i = 0; i < pathParts.length; i += 1) { + const part = pathParts[i]; + const isLeaf = i === pathParts.length - 1; + + if (isLeaf) { + node[part] = { __operation: { ...operation, id: operationId } }; + } else { + node[part] = node[part] ?? {}; + node = node[part]; + } + } + } + + return root; +} diff --git a/packages/sdk/langs/node/.gitignore b/packages/sdk/langs/node/.gitignore new file mode 100644 index 0000000000..849ddff3b7 --- /dev/null +++ b/packages/sdk/langs/node/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/sdk/langs/node/README.md b/packages/sdk/langs/node/README.md new file mode 100644 index 0000000000..8d2243716a --- /dev/null +++ b/packages/sdk/langs/node/README.md @@ -0,0 +1,116 @@ +# @superdoc-dev/sdk + +Programmatic SDK for deterministic DOCX operations through SuperDoc's Document API. + +## Install + +```bash +npm install @superdoc-dev/sdk +``` + +The package automatically installs a native CLI binary for your platform via optionalDependencies. Supported platforms: + +| Platform | Package | +|----------|---------| +| macOS (Apple Silicon) | `@superdoc-dev/sdk-darwin-arm64` | +| macOS (Intel) | `@superdoc-dev/sdk-darwin-x64` | +| Linux (x64) | `@superdoc-dev/sdk-linux-x64` | +| Linux (ARM64) | `@superdoc-dev/sdk-linux-arm64` | +| Windows (x64) | `@superdoc-dev/sdk-windows-x64` | + +## Quick Start + +```ts +import { createSuperDocClient } from '@superdoc-dev/sdk'; + +const client = createSuperDocClient(); +await client.connect(); + +await client.doc.open({ doc: './contract.docx' }); + +const info = await client.doc.info(); +console.log(info.counts); + +const results = await client.doc.find({ query: { kind: 'text', pattern: 'termination' } }); + +await client.doc.replace({ + target: results.context[0].textRanges[0], + text: 'expiration', +}); + +await client.doc.save({ inPlace: true }); +await client.doc.close(); +await client.dispose(); +``` + +## API + +### Client + +```ts +import { SuperDocClient, createSuperDocClient } from '@superdoc-dev/sdk'; + +const client = createSuperDocClient(options?); +await client.connect(); // start the host process +await client.dispose(); // shut down gracefully +``` + +All document operations are on `client.doc`: + +```ts +client.doc.open(params) +client.doc.find(params) +client.doc.insert(params) +// ... etc +``` + +### Operations + +| Category | Operations | +|----------|-----------| +| **Query** | `find`, `getNode`, `getNodeById`, `info` | +| **Mutation** | `insert`, `replace`, `delete` | +| **Format** | `format.bold`, `format.italic`, `format.underline`, `format.strikethrough` | +| **Create** | `create.paragraph` | +| **Lists** | `lists.list`, `lists.get`, `lists.insert`, `lists.setType`, `lists.indent`, `lists.outdent`, `lists.restart`, `lists.exit` | +| **Comments** | `comments.add`, `comments.edit`, `comments.reply`, `comments.move`, `comments.resolve`, `comments.remove`, `comments.setInternal`, `comments.setActive`, `comments.goTo`, `comments.get`, `comments.list` | +| **Track Changes** | `trackChanges.list`, `trackChanges.get`, `trackChanges.accept`, `trackChanges.reject`, `trackChanges.acceptAll`, `trackChanges.rejectAll` | +| **Lifecycle** | `open`, `save`, `close` | +| **Session** | `session.list`, `session.save`, `session.close`, `session.setDefault` | +| **Introspection** | `status`, `describe`, `describeCommand` | + +### AI Tool Integration + +The SDK includes built-in support for exposing document operations as AI tool definitions: + +```ts +import { chooseTools, dispatchSuperDocTool, inferDocumentFeatures } from '@superdoc-dev/sdk'; + +// Get tool definitions for your AI provider +const { tools, selected } = await chooseTools({ + provider: 'openai', // 'openai' | 'anthropic' | 'vercel' | 'generic' + profile: 'intent', // human-friendly tool names + taskContext: { phase: 'mutate' }, + documentFeatures: inferDocumentFeatures(await client.doc.info()), +}); + +// Dispatch a tool call from the AI model +const result = await dispatchSuperDocTool(client, toolName, args); +``` + +| Function | Description | +|----------|-------------| +| `chooseTools(input)` | Select tools filtered by phase, capabilities, and budget | +| `listTools(provider, options?)` | List all tool definitions for a provider | +| `dispatchSuperDocTool(client, toolName, args)` | Execute a tool call against a client | +| `resolveToolOperation(toolName)` | Map a tool name to its operation ID | +| `getToolCatalog(options?)` | Load the full tool catalog | +| `inferDocumentFeatures(infoResult)` | Derive feature flags from `doc.info` output | + +## Part of SuperDoc + +This SDK is part of [SuperDoc](https://github.com/superdoc-dev/superdoc) — an open source document editor bringing Microsoft Word to the web. + +## License + +AGPL-3.0 · [Enterprise license available](https://superdoc.dev) diff --git a/packages/sdk/langs/node/package.json b/packages/sdk/langs/node/package.json new file mode 100644 index 0000000000..fc42b46b1e --- /dev/null +++ b/packages/sdk/langs/node/package.json @@ -0,0 +1,35 @@ +{ + "name": "@superdoc-dev/sdk", + "version": "1.0.0-alpha.6", + "private": false, + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "files": [ + "dist", + "tools" + ], + "scripts": { + "build": "tsc", + "typecheck": "tsc --noEmit", + "prepack": "rm -rf tools && cp -r ../../tools ./tools && rm -f ./tools/__init__.py", + "postpack": "rm -rf tools && ln -s ../../tools tools" + }, + "devDependencies": { + "@types/bun": "catalog:", + "@types/node": "catalog:", + "typescript": "catalog:" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/sdk/langs/node/skills/editing-docx.md b/packages/sdk/langs/node/skills/editing-docx.md new file mode 100644 index 0000000000..db5a836ff1 --- /dev/null +++ b/packages/sdk/langs/node/skills/editing-docx.md @@ -0,0 +1,31 @@ +# Editing DOCX Documents with SuperDoc SDK + +You are a document editing assistant using the SuperDoc SDK. You have access to tools +that let you open, read, search, and modify `.docx` files programmatically. + +## Workflow + +1. **Open** the document with `doc.open` +2. **Inspect** it with `doc.info` to understand structure +3. **Find** content with `doc.find` using text search or node type queries +4. **Modify** content using `doc.insert`, `doc.replace`, `doc.delete`, or formatting operations +5. **Save** changes with `doc.save` +6. **Close** when done with `doc.close` + +## Key Operations + +- `doc.find` — Search by text pattern, node type, or structured query +- `doc.getNode` — Get a specific node by address +- `doc.insert` — Insert text at a position +- `doc.replace` — Replace content at a position +- `doc.delete` — Delete content at a position +- `doc.format.*` — Apply bold, italic, underline, strikethrough +- `doc.comments.*` — Add, edit, resolve, remove comments +- `doc.trackChanges.*` — Accept/reject tracked changes + +## Best Practices + +- Always open before operating, save when done +- Use `doc.find` to locate content before modifying +- Use `doc.info` to check document capabilities +- Handle errors gracefully — operations may fail if targets are invalid diff --git a/packages/sdk/langs/node/src/index.ts b/packages/sdk/langs/node/src/index.ts new file mode 100644 index 0000000000..c0901411de --- /dev/null +++ b/packages/sdk/langs/node/src/index.ts @@ -0,0 +1,44 @@ +import { createDocApi } from './generated/client.js'; +import { SuperDocRuntime, type SuperDocClientOptions } from './runtime/process.js'; + +/** + * High-level client for interacting with SuperDoc documents via the CLI. + * + * Provides a typed `doc` API for opening, querying, and mutating documents. + * Call {@link connect} before operations and {@link dispose} when finished + * to manage the host process lifecycle. + */ +export class SuperDocClient { + private readonly runtime: SuperDocRuntime; + readonly doc: ReturnType; + + constructor(options: SuperDocClientOptions = {}) { + this.runtime = new SuperDocRuntime(options); + this.doc = createDocApi(this.runtime); + } + + async connect(): Promise { + await this.runtime.connect(); + } + + async dispose(): Promise { + await this.runtime.dispose(); + } +} + +export function createSuperDocClient(options: SuperDocClientOptions = {}): SuperDocClient { + return new SuperDocClient(options); +} + +export { getSkill, installSkill, listSkills } from './skills.js'; +export { + chooseTools, + dispatchSuperDocTool, + getToolCatalog, + inferDocumentFeatures, + listTools, + resolveToolOperation, +} from './tools.js'; +export { SuperDocCliError } from './runtime/errors.js'; +export type { InvokeOptions, OperationSpec, OperationParamSpec, SuperDocClientOptions } from './runtime/process.js'; +export type { DocumentFeatures, ToolChooserInput, ToolPhase, ToolProfile, ToolProvider } from './tools.js'; diff --git a/packages/sdk/langs/node/src/runtime/__tests__/transport-common.test.ts b/packages/sdk/langs/node/src/runtime/__tests__/transport-common.test.ts new file mode 100644 index 0000000000..fa3753611d --- /dev/null +++ b/packages/sdk/langs/node/src/runtime/__tests__/transport-common.test.ts @@ -0,0 +1,163 @@ +import { describe, expect, test } from 'bun:test'; +import { buildOperationArgv, resolveInvocation, type OperationSpec } from '../transport-common.js'; + +const makeOp = (overrides: Partial = {}): OperationSpec => ({ + operationId: 'doc.test', + commandTokens: ['test'], + params: [], + ...overrides, +}); + +describe('resolveInvocation', () => { + test('returns bare binary for non-script paths', () => { + const result = resolveInvocation('/usr/local/bin/superdoc'); + expect(result.command).toBe('/usr/local/bin/superdoc'); + expect(result.prefixArgs).toEqual([]); + }); + + test('wraps .js files with node', () => { + const result = resolveInvocation('/path/to/cli.js'); + expect(result.command).toBe('node'); + expect(result.prefixArgs).toEqual(['/path/to/cli.js']); + }); + + test('wraps .ts files with bun', () => { + const result = resolveInvocation('/path/to/cli.ts'); + expect(result.command).toBe('bun'); + expect(result.prefixArgs).toEqual(['/path/to/cli.ts']); + }); +}); + +describe('buildOperationArgv', () => { + test('starts with commandTokens', () => { + const op = makeOp({ commandTokens: ['format', 'bold'] }); + const argv = buildOperationArgv(op, {}, {}, undefined); + expect(argv[0]).toBe('format'); + expect(argv[1]).toBe('bold'); + }); + + test('appends --output json', () => { + const argv = buildOperationArgv(makeOp(), {}, {}, undefined); + expect(argv).toContain('--output'); + expect(argv[argv.indexOf('--output') + 1]).toBe('json'); + }); + + test('encodes doc positional param', () => { + const op = makeOp({ + params: [{ name: 'doc', kind: 'doc', type: 'string' }], + }); + const argv = buildOperationArgv(op, { doc: 'report.docx' }, {}, undefined); + expect(argv).toContain('report.docx'); + }); + + test('encodes string flag param', () => { + const op = makeOp({ + params: [{ name: 'pattern', kind: 'flag', flag: 'pattern', type: 'string' }], + }); + const argv = buildOperationArgv(op, { pattern: 'hello' }, {}, undefined); + expect(argv).toContain('--pattern'); + expect(argv[argv.indexOf('--pattern') + 1]).toBe('hello'); + }); + + test('encodes boolean flag param as explicit true/false', () => { + const op = makeOp({ + params: [{ name: 'caseSensitive', kind: 'flag', flag: 'case-sensitive', type: 'boolean' }], + }); + + const argvTrue = buildOperationArgv(op, { caseSensitive: true }, {}, undefined); + expect(argvTrue).toContain('--case-sensitive'); + expect(argvTrue[argvTrue.indexOf('--case-sensitive') + 1]).toBe('true'); + + const argvFalse = buildOperationArgv(op, { caseSensitive: false }, {}, undefined); + expect(argvFalse).toContain('--case-sensitive'); + expect(argvFalse[argvFalse.indexOf('--case-sensitive') + 1]).toBe('false'); + }); + + test('encodes string[] flag with repeated flags', () => { + const op = makeOp({ + params: [{ name: 'tags', kind: 'flag', flag: 'tag', type: 'string[]' }], + }); + const argv = buildOperationArgv(op, { tags: ['a', 'b', 'c'] }, {}, undefined); + const tagIndices = argv.reduce((acc, v, i) => (v === '--tag' ? [...acc, i] : acc), []); + expect(tagIndices.length).toBe(3); + expect(argv[tagIndices[0] + 1]).toBe('a'); + expect(argv[tagIndices[1] + 1]).toBe('b'); + expect(argv[tagIndices[2] + 1]).toBe('c'); + }); + + test('encodes json flag as stringified JSON', () => { + const op = makeOp({ + params: [{ name: 'query', kind: 'jsonFlag', flag: 'query-json', type: 'json' }], + }); + const data = { select: { type: 'text' } }; + const argv = buildOperationArgv(op, { query: data }, {}, undefined); + expect(argv).toContain('--query-json'); + expect(argv[argv.indexOf('--query-json') + 1]).toBe(JSON.stringify(data)); + }); + + test('skips null/undefined params', () => { + const op = makeOp({ + params: [ + { name: 'pattern', kind: 'flag', flag: 'pattern', type: 'string' }, + { name: 'mode', kind: 'flag', flag: 'mode', type: 'string' }, + ], + }); + const argv = buildOperationArgv(op, { pattern: 'hello' }, {}, undefined); + expect(argv).toContain('--pattern'); + expect(argv).not.toContain('--mode'); + }); + + test('appends timeout-ms when specified in options', () => { + const argv = buildOperationArgv(makeOp(), {}, { timeoutMs: 5000 }, undefined); + expect(argv).toContain('--timeout-ms'); + expect(argv[argv.indexOf('--timeout-ms') + 1]).toBe('5000'); + }); + + test('appends runtime timeout when no per-call override', () => { + const argv = buildOperationArgv(makeOp(), {}, {}, 10000); + expect(argv).toContain('--timeout-ms'); + expect(argv[argv.indexOf('--timeout-ms') + 1]).toBe('10000'); + }); + + test('per-call timeout overrides runtime timeout', () => { + const argv = buildOperationArgv(makeOp(), {}, { timeoutMs: 3000 }, 10000); + expect(argv).toContain('--timeout-ms'); + expect(argv[argv.indexOf('--timeout-ms') + 1]).toBe('3000'); + }); + + test('injects defaultChangeMode when operation supports it and user did not specify', () => { + const op = makeOp({ + params: [ + { name: 'doc', kind: 'doc', type: 'string' }, + { name: 'changeMode', kind: 'flag', flag: 'change-mode', type: 'string' }, + ], + }); + const argv = buildOperationArgv(op, { doc: 'test.docx' }, {}, undefined, 'tracked'); + expect(argv).toContain('--change-mode'); + expect(argv[argv.indexOf('--change-mode') + 1]).toBe('tracked'); + }); + + test('does not inject defaultChangeMode when user explicitly passes changeMode', () => { + const op = makeOp({ + params: [ + { name: 'doc', kind: 'doc', type: 'string' }, + { name: 'changeMode', kind: 'flag', flag: 'change-mode', type: 'string' }, + ], + }); + const argv = buildOperationArgv(op, { doc: 'test.docx', changeMode: 'direct' }, {}, undefined, 'tracked'); + expect(argv).toContain('--change-mode'); + // Should use user's value, not the default + expect(argv[argv.indexOf('--change-mode') + 1]).toBe('direct'); + // Should only appear once + const count = argv.filter((v) => v === '--change-mode').length; + expect(count).toBe(1); + }); + + test('does not inject defaultChangeMode when operation does not support it', () => { + const op = makeOp({ + params: [{ name: 'doc', kind: 'doc', type: 'string' }], + }); + const argv = buildOperationArgv(op, { doc: 'test.docx' }, {}, undefined, 'tracked'); + expect(argv).not.toContain('--change-mode'); + }); +}); diff --git a/packages/sdk/langs/node/src/runtime/embedded-cli.ts b/packages/sdk/langs/node/src/runtime/embedded-cli.ts new file mode 100644 index 0000000000..085cc29096 --- /dev/null +++ b/packages/sdk/langs/node/src/runtime/embedded-cli.ts @@ -0,0 +1,102 @@ +import { chmodSync, existsSync } from 'node:fs'; +import { createRequire } from 'node:module'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { SuperDocCliError } from './errors.js'; + +const require = createRequire(import.meta.url); + +type SupportedTarget = 'darwin-arm64' | 'darwin-x64' | 'linux-x64' | 'linux-arm64' | 'windows-x64'; + +const TARGET_TO_PACKAGE: Record = { + 'darwin-arm64': '@superdoc-dev/sdk-darwin-arm64', + 'darwin-x64': '@superdoc-dev/sdk-darwin-x64', + 'linux-x64': '@superdoc-dev/sdk-linux-x64', + 'linux-arm64': '@superdoc-dev/sdk-linux-arm64', + 'windows-x64': '@superdoc-dev/sdk-windows-x64', +}; + +const TARGET_TO_DIR: Record = { + 'darwin-arm64': 'sdk-darwin-arm64', + 'darwin-x64': 'sdk-darwin-x64', + 'linux-x64': 'sdk-linux-x64', + 'linux-arm64': 'sdk-linux-arm64', + 'windows-x64': 'sdk-windows-x64', +}; + +function resolveTarget(): SupportedTarget | null { + const platform = process.platform; + const arch = process.arch; + + if (platform === 'darwin' && arch === 'arm64') return 'darwin-arm64'; + if (platform === 'darwin' && arch === 'x64') return 'darwin-x64'; + if (platform === 'linux' && arch === 'x64') return 'linux-x64'; + if (platform === 'linux' && arch === 'arm64') return 'linux-arm64'; + if (platform === 'win32' && arch === 'x64') return 'windows-x64'; + + return null; +} + +function binaryNameForTarget(target: SupportedTarget): string { + return target === 'windows-x64' ? 'superdoc.exe' : 'superdoc'; +} + +function ensureExecutable(binaryPath: string): void { + if (process.platform === 'win32') return; + try { + chmodSync(binaryPath, 0o755); + } catch { + // Non-fatal: if chmod fails, spawn() will surface the real execution error. + } +} + +function resolveFromPlatformPackage(target: SupportedTarget): string | null { + const pkg = TARGET_TO_PACKAGE[target]; + const binaryName = binaryNameForTarget(target); + + try { + return require.resolve(`${pkg}/bin/${binaryName}`); + } catch { + return null; + } +} + +function resolveFromWorkspaceFallback(target: SupportedTarget): string | null { + const binaryName = binaryNameForTarget(target); + const dirName = TARGET_TO_DIR[target]; + const filePath = path.resolve(fileURLToPath(new URL('../../platforms', import.meta.url)), dirName, 'bin', binaryName); + if (!existsSync(filePath)) return null; + return filePath; +} + +/** + * Resolve the path to the embedded SuperDoc CLI binary for the current platform. + */ +export function resolveEmbeddedCliBinary(): string { + const target = resolveTarget(); + if (!target) { + throw new SuperDocCliError('No embedded SuperDoc CLI binary is available for this platform.', { + code: 'UNSUPPORTED_PLATFORM', + details: { + platform: process.platform, + arch: process.arch, + }, + }); + } + + const platformPackagePath = resolveFromPlatformPackage(target); + const resolvedPath = platformPackagePath ?? resolveFromWorkspaceFallback(target); + + if (!resolvedPath) { + throw new SuperDocCliError('Embedded SuperDoc CLI binary is missing for this platform.', { + code: 'CLI_BINARY_MISSING', + details: { + target, + packageName: TARGET_TO_PACKAGE[target], + }, + }); + } + + ensureExecutable(resolvedPath); + return resolvedPath; +} diff --git a/packages/sdk/langs/node/src/runtime/errors.ts b/packages/sdk/langs/node/src/runtime/errors.ts new file mode 100644 index 0000000000..b582b2c2e3 --- /dev/null +++ b/packages/sdk/langs/node/src/runtime/errors.ts @@ -0,0 +1,19 @@ +/** + * Error thrown by the SuperDoc SDK when a CLI operation fails. + * + * Includes a machine-readable `code` for programmatic error handling + * and optional `details` with structured diagnostic context. + */ +export class SuperDocCliError extends Error { + readonly code: string; + readonly details?: unknown; + readonly exitCode?: number; + + constructor(message: string, options: { code: string; details?: unknown; exitCode?: number }) { + super(message); + this.name = 'SuperDocCliError'; + this.code = options.code; + this.details = options.details; + this.exitCode = options.exitCode; + } +} diff --git a/packages/sdk/langs/node/src/runtime/host.ts b/packages/sdk/langs/node/src/runtime/host.ts new file mode 100644 index 0000000000..1b93e65b38 --- /dev/null +++ b/packages/sdk/langs/node/src/runtime/host.ts @@ -0,0 +1,456 @@ +import { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'; +import { createInterface, type Interface as ReadlineInterface } from 'node:readline'; +import { + buildOperationArgv, + resolveInvocation, + type ChangeMode, + type InvokeOptions, + type OperationSpec, + type SuperDocClientOptions, +} from './transport-common.js'; +import { SuperDocCliError } from './errors.js'; + +type PendingRequest = { + resolve: (value: unknown) => void; + reject: (error: SuperDocCliError) => void; + timer: NodeJS.Timeout; +}; + +type JsonRpcErrorData = { + cliCode?: unknown; + message?: unknown; + details?: unknown; + exitCode?: unknown; +}; + +type JsonRpcError = { + code: number; + message: string; + data?: JsonRpcErrorData; +}; + +const HOST_PROTOCOL_VERSION = '1.0'; +const REQUIRED_FEATURES = ['cli.invoke', 'host.shutdown']; +const CHANGE_MODES: readonly ChangeMode[] = ['direct', 'tracked']; + +const JSON_RPC_TIMEOUT_CODE = -32011; + +/** + * Transport that communicates with a long-lived CLI host process over JSON-RPC stdio. + */ +export class HostTransport { + private readonly cliBin: string; + private readonly env?: Record; + private readonly startupTimeoutMs: number; + private readonly shutdownTimeoutMs: number; + private readonly requestTimeoutMs?: number; + private readonly watchdogTimeoutMs: number; + private readonly maxQueueDepth: number; + private readonly defaultChangeMode?: ChangeMode; + + private child: ChildProcessWithoutNullStreams | null = null; + private stdoutReader: ReadlineInterface | null = null; + private readonly pending = new Map(); + private nextRequestId = 1; + private connecting: Promise | null = null; + private stopping = false; + + constructor(options: { cliBin: string } & SuperDocClientOptions) { + this.cliBin = options.cliBin; + this.env = options.env; + + this.startupTimeoutMs = options.startupTimeoutMs ?? 5_000; + this.shutdownTimeoutMs = options.shutdownTimeoutMs ?? 5_000; + this.requestTimeoutMs = options.requestTimeoutMs; + this.watchdogTimeoutMs = options.watchdogTimeoutMs ?? 30_000; + this.maxQueueDepth = options.maxQueueDepth ?? 100; + if (options.defaultChangeMode != null && !CHANGE_MODES.includes(options.defaultChangeMode)) { + throw new SuperDocCliError('defaultChangeMode must be "direct" or "tracked".', { + code: 'INVALID_ARGUMENT', + details: { defaultChangeMode: options.defaultChangeMode }, + }); + } + this.defaultChangeMode = options.defaultChangeMode; + } + + async connect(): Promise { + await this.ensureConnected(); + } + + async dispose(): Promise { + if (!this.child) return; + + this.stopping = true; + + const child = this.child; + try { + await this.sendJsonRpcRequest('host.shutdown', {}, this.shutdownTimeoutMs); + } catch { + // ignore and force shutdown below + } + + await new Promise((resolve) => { + const timer = setTimeout(() => { + child.kill('SIGKILL'); + resolve(); + }, this.shutdownTimeoutMs); + + child.once('close', () => { + clearTimeout(timer); + resolve(); + }); + }); + + this.cleanupProcess(null); + this.stopping = false; + } + + async invoke>( + operation: OperationSpec, + params: Record = {}, + options: InvokeOptions = {}, + ): Promise { + await this.ensureConnected(); + + const argv = buildOperationArgv(operation, params, options, this.requestTimeoutMs, this.defaultChangeMode); + const stdinBase64 = options.stdinBytes ? Buffer.from(options.stdinBytes).toString('base64') : ''; + const watchdogTimeout = this.resolveWatchdogTimeout(options.timeoutMs); + + const response = await this.sendJsonRpcRequest( + 'cli.invoke', + { + argv, + stdinBase64, + }, + watchdogTimeout, + ); + + if (typeof response !== 'object' || response == null || Array.isArray(response)) { + throw new SuperDocCliError('Host returned invalid cli.invoke result.', { + code: 'HOST_PROTOCOL_ERROR', + details: { result: response }, + }); + } + + const resultRecord = response as Record; + return resultRecord.data as TData; + } + + private async ensureConnected(): Promise { + if (this.child && !this.child.killed) { + return; + } + + if (this.connecting) { + await this.connecting; + return; + } + + this.connecting = this.startHostProcess(); + try { + await this.connecting; + } finally { + this.connecting = null; + } + } + + private async startHostProcess(): Promise { + const { command, prefixArgs } = resolveInvocation(this.cliBin); + const args = [...prefixArgs, 'host', '--stdio']; + + const child = spawn(command, args, { + env: { + ...process.env, + ...(this.env ?? {}), + }, + stdio: ['pipe', 'pipe', 'pipe'], + }); + + this.child = child; + + const stdoutReader = createInterface({ + input: child.stdout, + crlfDelay: Number.POSITIVE_INFINITY, + }); + this.stdoutReader = stdoutReader; + + stdoutReader.on('line', (line) => { + this.onStdoutLine(line); + }); + + child.stderr.on('data', () => { + // stderr intentionally ignored in host mode + }); + + child.on('error', (error) => { + this.handleDisconnect( + new SuperDocCliError('Host process failed.', { + code: 'HOST_DISCONNECTED', + details: { + message: error instanceof Error ? error.message : String(error), + }, + }), + ); + }); + + child.on('close', (code, signal) => { + if (this.stopping) { + this.cleanupProcess(null); + return; + } + + this.handleDisconnect( + new SuperDocCliError('Host process disconnected.', { + code: 'HOST_DISCONNECTED', + details: { exitCode: code, signal }, + }), + ); + }); + + try { + const capabilities = await this.sendJsonRpcRequest('host.capabilities', {}, this.startupTimeoutMs); + this.assertCapabilities(capabilities); + } catch (error) { + const normalized = + error instanceof SuperDocCliError + ? error + : new SuperDocCliError('Host handshake failed.', { + code: 'HOST_HANDSHAKE_FAILED', + details: { + message: error instanceof Error ? error.message : String(error), + }, + }); + this.handleDisconnect(normalized); + throw normalized; + } + } + + private assertCapabilities(response: unknown): void { + if (typeof response !== 'object' || response == null || Array.isArray(response)) { + throw new SuperDocCliError('Host capabilities response is invalid.', { + code: 'HOST_HANDSHAKE_FAILED', + details: { response }, + }); + } + + const record = response as Record; + const protocolVersion = record.protocolVersion; + const features = record.features; + + if (protocolVersion !== HOST_PROTOCOL_VERSION) { + throw new SuperDocCliError('Host protocol version is unsupported.', { + code: 'HOST_HANDSHAKE_FAILED', + details: { + expected: HOST_PROTOCOL_VERSION, + actual: protocolVersion, + }, + }); + } + + if (!Array.isArray(features) || features.some((f) => typeof f !== 'string')) { + throw new SuperDocCliError('Host capabilities.features must be a string array.', { + code: 'HOST_HANDSHAKE_FAILED', + details: { features }, + }); + } + + for (const requiredFeature of REQUIRED_FEATURES) { + if (!features.includes(requiredFeature)) { + throw new SuperDocCliError(`Host does not support required feature: ${requiredFeature}`, { + code: 'HOST_HANDSHAKE_FAILED', + details: { features }, + }); + } + } + } + + private resolveWatchdogTimeout(timeoutMsOverride: number | undefined): number { + if (timeoutMsOverride != null) { + return Math.max(this.watchdogTimeoutMs, timeoutMsOverride + 1_000); + } + + if (this.requestTimeoutMs != null) { + return Math.max(this.watchdogTimeoutMs, this.requestTimeoutMs + 1_000); + } + + return this.watchdogTimeoutMs; + } + + private async sendJsonRpcRequest(method: string, params: unknown, watchdogTimeoutMs: number): Promise { + const child = this.child; + if (!child || !child.stdin.writable) { + throw new SuperDocCliError('Host process is not available.', { + code: 'HOST_DISCONNECTED', + }); + } + + if (this.pending.size >= this.maxQueueDepth) { + throw new SuperDocCliError('Host request queue is full.', { + code: 'HOST_QUEUE_FULL', + details: { maxQueueDepth: this.maxQueueDepth }, + }); + } + + const id = this.nextRequestId; + this.nextRequestId += 1; + + const payload = JSON.stringify({ + jsonrpc: '2.0', + id, + method, + params, + }); + + const promise = new Promise((resolve, reject) => { + const timer = setTimeout(() => { + this.pending.delete(id); + + reject( + new SuperDocCliError(`Host watchdog timed out waiting for ${method}.`, { + code: 'HOST_TIMEOUT', + details: { method, timeoutMs: watchdogTimeoutMs }, + }), + ); + + this.handleDisconnect( + new SuperDocCliError('Host watchdog timeout; host process will be restarted on next request.', { + code: 'HOST_DISCONNECTED', + details: { method, timeoutMs: watchdogTimeoutMs }, + }), + ); + }, watchdogTimeoutMs); + + this.pending.set(id, { resolve, reject, timer }); + + child.stdin.write(`${payload}\n`, (error) => { + if (!error) return; + + const pending = this.pending.get(id); + if (!pending) return; + + clearTimeout(pending.timer); + this.pending.delete(id); + reject( + new SuperDocCliError('Failed to write request to host process.', { + code: 'HOST_DISCONNECTED', + details: { method, message: error.message }, + }), + ); + }); + }); + + return promise; + } + + private onStdoutLine(line: string): void { + let parsed: unknown; + try { + parsed = JSON.parse(line); + } catch { + return; + } + + if (typeof parsed !== 'object' || parsed == null || Array.isArray(parsed)) { + return; + } + + const record = parsed as Record; + if (record.jsonrpc !== '2.0') { + return; + } + + // Notification (no id) — reserved for future eventing + if ('method' in record && !('id' in record)) { + return; + } + + const idRaw = record.id; + if (typeof idRaw !== 'number') { + return; + } + + const pending = this.pending.get(idRaw); + if (!pending) { + return; + } + + clearTimeout(pending.timer); + this.pending.delete(idRaw); + + if ('error' in record) { + pending.reject(this.mapJsonRpcError(record.error)); + return; + } + + pending.resolve(record.result); + } + + private mapJsonRpcError(rawError: unknown): SuperDocCliError { + if (typeof rawError !== 'object' || rawError == null || Array.isArray(rawError)) { + return new SuperDocCliError('Host returned an unknown JSON-RPC error.', { + code: 'HOST_PROTOCOL_ERROR', + details: { error: rawError }, + }); + } + + const error = rawError as JsonRpcError; + const data = error.data as JsonRpcErrorData | undefined; + const cliCode = typeof data?.cliCode === 'string' ? data.cliCode : undefined; + const cliMessage = typeof data?.message === 'string' ? data.message : undefined; + const exitCode = typeof data?.exitCode === 'number' ? data.exitCode : undefined; + + if (cliCode) { + return new SuperDocCliError(cliMessage ?? error.message ?? 'Command failed.', { + code: cliCode, + details: data?.details, + exitCode, + }); + } + + if (error.code === JSON_RPC_TIMEOUT_CODE) { + return new SuperDocCliError(error.message, { + code: 'TIMEOUT', + details: data, + }); + } + + return new SuperDocCliError(error.message, { + code: 'COMMAND_FAILED', + details: data, + }); + } + + private handleDisconnect(error: SuperDocCliError): void { + this.cleanupProcess(error); + } + + private cleanupProcess(error: SuperDocCliError | null): void { + const child = this.child; + if (child) { + child.removeAllListeners(); + child.kill('SIGKILL'); + } + + this.child = null; + + if (this.stdoutReader) { + this.stdoutReader.removeAllListeners(); + this.stdoutReader.close(); + this.stdoutReader = null; + } + + const pendingEntries = Array.from(this.pending.values()); + this.pending.clear(); + + const rejection = + error ?? + new SuperDocCliError('Host process was disposed while request was in flight.', { + code: 'HOST_DISCONNECTED', + }); + + for (const pending of pendingEntries) { + clearTimeout(pending.timer); + pending.reject(rejection); + } + } +} diff --git a/packages/sdk/langs/node/src/runtime/process.ts b/packages/sdk/langs/node/src/runtime/process.ts new file mode 100644 index 0000000000..ca517c3144 --- /dev/null +++ b/packages/sdk/langs/node/src/runtime/process.ts @@ -0,0 +1,40 @@ +import { HostTransport } from './host.js'; +import { resolveEmbeddedCliBinary } from './embedded-cli.js'; +import type { InvokeOptions, OperationParamSpec, OperationSpec, SuperDocClientOptions } from './transport-common.js'; + +/** + * Internal runtime that delegates CLI invocations to a persistent host transport. + * + * Resolves the CLI binary and creates a {@link HostTransport} that communicates + * with a long-lived `superdoc host --stdio` process. + */ +export class SuperDocRuntime { + private readonly transport: HostTransport; + + constructor(options: SuperDocClientOptions = {}) { + const cliBin = options.env?.SUPERDOC_CLI_BIN ?? process.env.SUPERDOC_CLI_BIN ?? resolveEmbeddedCliBinary(); + + this.transport = new HostTransport({ + cliBin, + ...options, + }); + } + + async connect(): Promise { + await this.transport.connect(); + } + + async dispose(): Promise { + await this.transport.dispose(); + } + + async invoke>( + operation: OperationSpec, + params: Record = {}, + options: InvokeOptions = {}, + ): Promise { + return this.transport.invoke(operation, params, options); + } +} + +export type { InvokeOptions, OperationParamSpec, OperationSpec, SuperDocClientOptions }; diff --git a/packages/sdk/langs/node/src/runtime/transport-common.ts b/packages/sdk/langs/node/src/runtime/transport-common.ts new file mode 100644 index 0000000000..6df51438de --- /dev/null +++ b/packages/sdk/langs/node/src/runtime/transport-common.ts @@ -0,0 +1,115 @@ +export type ParamType = 'string' | 'number' | 'boolean' | 'json' | 'string[]'; +export type ParamKind = 'doc' | 'flag' | 'jsonFlag'; + +export interface OperationParamSpec { + readonly name: string; + readonly kind: ParamKind; + readonly flag?: string; + readonly type: ParamType; + readonly required?: boolean; +} + +export interface OperationSpec { + readonly operationId: string; + readonly commandTokens: readonly string[]; + readonly params: readonly OperationParamSpec[]; +} + +export interface InvokeOptions { + timeoutMs?: number; + stdinBytes?: Uint8Array; +} + +export type ChangeMode = 'direct' | 'tracked'; + +export interface SuperDocClientOptions { + env?: Record; + startupTimeoutMs?: number; + shutdownTimeoutMs?: number; + requestTimeoutMs?: number; + watchdogTimeoutMs?: number; + maxQueueDepth?: number; + defaultChangeMode?: ChangeMode; +} + +export interface CliInvocation { + command: string; + prefixArgs: string[]; +} + +function hasExtension(filePath: string, extension: string): boolean { + return filePath.toLowerCase().endsWith(extension); +} + +export function resolveInvocation(cliBin: string): CliInvocation { + if (hasExtension(cliBin, '.js')) { + return { command: 'node', prefixArgs: [cliBin] }; + } + + if (hasExtension(cliBin, '.ts')) { + return { command: 'bun', prefixArgs: [cliBin] }; + } + + return { command: cliBin, prefixArgs: [] }; +} + +/** + * Build the CLI argument vector for an operation invocation. + * + * Key design choices vs old SDK: + * - changeMode injection BEFORE argv loop, not after. changeMode is already a + * param in operationSpec.params (envelope param for mutations). Appending after + * the loop would duplicate it. + * - Booleans encoded as `--flag true`/`--flag false` explicitly, matching current CLI. + */ +export function buildOperationArgv( + operation: OperationSpec, + params: Record, + options: InvokeOptions, + runtimeTimeoutMs: number | undefined, + defaultChangeMode?: ChangeMode, +): string[] { + // Inject defaultChangeMode into params BEFORE encoding — single source of truth. + const normalizedParams = + defaultChangeMode != null && params.changeMode == null && operation.params.some((p) => p.name === 'changeMode') + ? { ...params, changeMode: defaultChangeMode } + : params; + + const argv: string[] = [...operation.commandTokens]; + + for (const spec of operation.params) { + const value = normalizedParams[spec.name]; + if (value == null) continue; + + const flag = `--${spec.flag ?? spec.name}`; + + switch (spec.kind) { + case 'doc': + argv.push(String(value)); + break; + case 'flag': + if (spec.type === 'boolean') { + // Explicit true/false — matches current CLI operation-executor.ts. + argv.push(flag, value === true ? 'true' : 'false'); + } else if (spec.type === 'string[]') { + if (Array.isArray(value)) { + for (const entry of value) argv.push(flag, String(entry)); + } + } else { + argv.push(flag, String(value)); + } + break; + case 'jsonFlag': + argv.push(flag, JSON.stringify(value)); + break; + } + } + + const timeoutMs = options.timeoutMs ?? runtimeTimeoutMs; + if (timeoutMs != null) { + argv.push('--timeout-ms', String(timeoutMs)); + } + + argv.push('--output', 'json'); + return argv; +} diff --git a/packages/sdk/langs/node/src/skills.ts b/packages/sdk/langs/node/src/skills.ts new file mode 100644 index 0000000000..502238c07e --- /dev/null +++ b/packages/sdk/langs/node/src/skills.ts @@ -0,0 +1,171 @@ +import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { SuperDocCliError } from './runtime/errors.js'; + +// Resolve skills directory relative to package root (works from both src/ and dist/) +const skillsDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'skills'); +const SKILL_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/; +const SUPPORTED_SKILL_RUNTIMES = ['claude'] as const; +const SUPPORTED_INSTALL_SCOPES = ['project', 'user'] as const; + +type SkillRuntime = (typeof SUPPORTED_SKILL_RUNTIMES)[number]; +type SkillInstallScope = (typeof SUPPORTED_INSTALL_SCOPES)[number]; + +export interface InstallSkillOptions { + runtime?: SkillRuntime; + scope?: SkillInstallScope; + targetDir?: string; + cwd?: string; + homeDir?: string; + overwrite?: boolean; +} + +export interface InstalledSkillResult { + name: string; + runtime: SkillRuntime; + scope: SkillInstallScope | 'custom'; + path: string; + written: boolean; + overwritten: boolean; +} + +function resolveSkillFilePath(skillName: string): string { + const filePath = path.resolve(skillsDir, `${skillName}.md`); + const root = `${skillsDir}${path.sep}`; + if (!filePath.startsWith(root)) { + throw new SuperDocCliError('Skill name resolved outside SDK skill directory.', { + code: 'INVALID_ARGUMENT', + details: { skillName }, + }); + } + return filePath; +} + +function normalizeSkillName(name: string): string { + const normalized = name.trim(); + if (!normalized || !SKILL_NAME_RE.test(normalized)) { + throw new SuperDocCliError('Skill name is required.', { + code: 'INVALID_ARGUMENT', + details: { name }, + }); + } + return normalized; +} + +export function listSkills(): string[] { + try { + return readdirSync(skillsDir) + .filter((entry) => path.extname(entry) === '.md') + .map((entry) => path.basename(entry, '.md')) + .sort(); + } catch (error) { + throw new SuperDocCliError('Unable to enumerate SDK skills.', { + code: 'SKILL_IO_ERROR', + details: { + skillsDir, + message: error instanceof Error ? error.message : String(error), + }, + }); + } +} + +export function getSkill(name: string): string { + const normalized = normalizeSkillName(name); + const filePath = resolveSkillFilePath(normalized); + try { + return readFileSync(filePath, 'utf8'); + } catch (error) { + const nodeError = error as NodeJS.ErrnoException; + if (nodeError?.code === 'ENOENT') { + let available: string[] = []; + try { + available = listSkills(); + } catch { + // Keep available empty + } + throw new SuperDocCliError('Requested SDK skill was not found.', { + code: 'SKILL_NOT_FOUND', + details: { name: normalized, available }, + }); + } + + throw new SuperDocCliError('Unable to read SDK skill file.', { + code: 'SKILL_IO_ERROR', + details: { + name: normalized, + message: error instanceof Error ? error.message : String(error), + }, + }); + } +} + +export function installSkill(name: string, options: InstallSkillOptions = {}): InstalledSkillResult { + const normalizedName = normalizeSkillName(name); + const runtime = options.runtime ?? 'claude'; + if (!(SUPPORTED_SKILL_RUNTIMES as readonly string[]).includes(runtime)) { + throw new SuperDocCliError('Unsupported skill runtime.', { + code: 'INVALID_ARGUMENT', + details: { runtime, supportedRuntimes: [...SUPPORTED_SKILL_RUNTIMES] }, + }); + } + + const scope = options.scope ?? 'project'; + if (!(SUPPORTED_INSTALL_SCOPES as readonly string[]).includes(scope)) { + throw new SuperDocCliError('Unsupported skill install scope.', { + code: 'INVALID_ARGUMENT', + details: { scope, supportedScopes: [...SUPPORTED_INSTALL_SCOPES] }, + }); + } + + const skillsRoot = + options.targetDir !== undefined + ? path.resolve(options.targetDir) + : scope === 'user' + ? path.resolve(options.homeDir ?? os.homedir(), '.claude', 'skills') + : path.resolve(options.cwd ?? process.cwd(), '.claude', 'skills'); + + const skillFile = path.join(skillsRoot, normalizedName, 'SKILL.md'); + const overwrite = options.overwrite ?? true; + const alreadyExists = existsSync(skillFile); + + if (!overwrite && alreadyExists) { + return { + name: normalizedName, + runtime, + scope: options.targetDir !== undefined ? 'custom' : scope, + path: skillFile, + written: false, + overwritten: false, + }; + } + + try { + const content = getSkill(name); + mkdirSync(path.dirname(skillFile), { recursive: true }); + writeFileSync(skillFile, content, 'utf8'); + } catch (error) { + if (error instanceof SuperDocCliError) throw error; + + throw new SuperDocCliError('Unable to install SDK skill.', { + code: 'SKILL_IO_ERROR', + details: { + name: normalizedName, + runtime, + scope: options.targetDir !== undefined ? 'custom' : scope, + path: skillFile, + message: error instanceof Error ? error.message : String(error), + }, + }); + } + + return { + name: normalizedName, + runtime, + scope: options.targetDir !== undefined ? 'custom' : scope, + path: skillFile, + written: true, + overwritten: alreadyExists, + }; +} diff --git a/packages/sdk/langs/node/src/tools.ts b/packages/sdk/langs/node/src/tools.ts new file mode 100644 index 0000000000..7c83149254 --- /dev/null +++ b/packages/sdk/langs/node/src/tools.ts @@ -0,0 +1,524 @@ +import { readFile } from 'node:fs/promises'; +import { readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { CONTRACT } from './generated/contract.js'; +import type { InvokeOptions } from './runtime/process.js'; +import { SuperDocCliError } from './runtime/errors.js'; + +export type ToolProvider = 'openai' | 'anthropic' | 'vercel' | 'generic'; +export type ToolProfile = 'intent' | 'operation'; +export type ToolPhase = 'read' | 'locate' | 'mutate' | 'review'; + +export type DocumentFeatures = { + hasTables: boolean; + hasLists: boolean; + hasComments: boolean; + hasTrackedChanges: boolean; + isEmptyDocument: boolean; +}; + +export type ToolChooserInput = { + provider: ToolProvider; + profile?: ToolProfile; + documentFeatures?: Partial; + taskContext?: { + phase?: ToolPhase; + previousToolCalls?: Array<{ toolName: string; ok: boolean }>; + }; + budget?: { + maxTools?: number; + minReadTools?: number; + }; + policy?: { + includeCategories?: string[]; + excludeCategories?: string[]; + allowMutatingTools?: boolean; + forceInclude?: string[]; + forceExclude?: string[]; + }; +}; + +export type ToolCatalog = { + contractVersion: string; + generatedAt: string | null; + namePolicyVersion: string; + exposureVersion: string; + toolCount: number; + profiles: { + intent: { name: 'intent'; tools: ToolCatalogEntry[] }; + operation: { name: 'operation'; tools: ToolCatalogEntry[] }; + }; +}; + +type ToolCatalogEntry = { + operationId: string; + toolName: string; + profile: ToolProfile; + source: 'operation' | 'intent'; + description: string; + inputSchema: Record; + outputSchema: Record; + mutates: boolean; + category: string; + capabilities: string[]; + constraints?: Record; + errors: string[]; + examples: Array<{ description: string; args: Record }>; + commandTokens: string[]; + profileTags: string[]; + requiredCapabilities: Array; + sessionRequirements: { + requiresOpenContext: boolean; + supportsSessionTargeting: boolean; + }; + intentId?: string; +}; + +// Resolve tools directory relative to package root (works from both src/ and dist/) +const toolsDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'tools'); +const providerFileByName: Record = { + openai: 'tools.openai.json', + anthropic: 'tools.anthropic.json', + vercel: 'tools.vercel.json', + generic: 'tools.generic.json', +}; + +// Policy is loaded from the generated tools-policy.json artifact. +type ToolsPolicy = { + policyVersion: string; + contractHash: string; + phases: Record; + defaults: { + maxToolsByProfile: Record; + minReadTools: number; + foundationalOperationIds: string[]; + chooserDecisionVersion: string; + }; + capabilityFeatures: Record; +}; + +let _policyCache: ToolsPolicy | null = null; +function loadPolicy(): ToolsPolicy { + if (_policyCache) return _policyCache; + const raw = readFileSync(path.join(toolsDir, 'tools-policy.json'), 'utf8'); + _policyCache = JSON.parse(raw) as ToolsPolicy; + return _policyCache; +} + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value != null && !Array.isArray(value); +} + +function isPresent(value: unknown): boolean { + if (value == null) return false; + if (Array.isArray(value)) return value.length > 0; + return true; +} + +function extractProviderToolName(tool: Record): string | null { + // Anthropic / Generic: top-level name + if (typeof tool.name === 'string') return tool.name; + // OpenAI / Vercel: nested under function.name + if (isRecord(tool.function) && typeof (tool.function as Record).name === 'string') { + return (tool.function as Record).name as string; + } + return null; +} + +function invalidArgument(message: string, details?: Record): never { + throw new SuperDocCliError(message, { code: 'INVALID_ARGUMENT', details }); +} + +async function readJson(fileName: string): Promise { + const filePath = path.join(toolsDir, fileName); + let raw = ''; + try { + raw = await readFile(filePath, 'utf8'); + } catch (error) { + throw new SuperDocCliError('Unable to load packaged tool artifact.', { + code: 'TOOLS_ASSET_NOT_FOUND', + details: { + filePath, + message: error instanceof Error ? error.message : String(error), + }, + }); + } + + try { + return JSON.parse(raw) as T; + } catch (error) { + throw new SuperDocCliError('Packaged tool artifact is invalid JSON.', { + code: 'TOOLS_ASSET_INVALID', + details: { + filePath, + message: error instanceof Error ? error.message : String(error), + }, + }); + } +} + +async function loadProviderBundle(provider: ToolProvider): Promise<{ + contractVersion: string; + profiles: Record; +}> { + return readJson(providerFileByName[provider]); +} + +async function loadToolNameMap(): Promise> { + return readJson>('tool-name-map.json'); +} + +async function loadCatalog(): Promise { + return readJson('catalog.json'); +} + +function normalizeFeatures(features?: Partial): DocumentFeatures { + return { + hasTables: Boolean(features?.hasTables), + hasLists: Boolean(features?.hasLists), + hasComments: Boolean(features?.hasComments), + hasTrackedChanges: Boolean(features?.hasTrackedChanges), + isEmptyDocument: Boolean(features?.isEmptyDocument), + }; +} + +function stableSortByPhasePriority(entries: ToolCatalogEntry[], priorityOrder: string[]): ToolCatalogEntry[] { + const priority = new Map(priorityOrder.map((category, index) => [category, index])); + return [...entries].sort((a, b) => { + const aPriority = priority.get(a.category) ?? Number.MAX_SAFE_INTEGER; + const bPriority = priority.get(b.category) ?? Number.MAX_SAFE_INTEGER; + if (aPriority !== bPriority) return aPriority - bPriority; + return a.toolName.localeCompare(b.toolName); + }); +} + +type ContractOperation = (typeof CONTRACT.operations)[keyof typeof CONTRACT.operations]; + +const OPERATION_INDEX: Record = Object.fromEntries( + Object.entries(CONTRACT.operations).map(([id, op]) => [id, op]), +); + +function validateDispatchArgs(operationId: string, args: Record): void { + const operation = OPERATION_INDEX[operationId]; + if (!operation) { + invalidArgument(`Unknown operation id ${operationId}.`); + } + + // Unknown-param rejection + const allowedParams = new Set(operation.params.map((param) => String(param.name))); + for (const key of Object.keys(args)) { + if (!allowedParams.has(key)) { + invalidArgument(`Unexpected parameter ${key} for ${operationId}.`); + } + } + + // Required-param enforcement + for (const param of operation.params) { + if ('required' in param && Boolean(param.required) && args[param.name] == null) { + invalidArgument(`Missing required parameter ${param.name} for ${operationId}.`); + } + } + + // Constraint validation (CLI handles schema-level type validation authoritatively) + const constraints = 'constraints' in operation ? (operation as Record).constraints : undefined; + if (!constraints || !isRecord(constraints)) return; + + const mutuallyExclusive = Array.isArray(constraints.mutuallyExclusive) ? constraints.mutuallyExclusive : []; + const requiresOneOf = Array.isArray(constraints.requiresOneOf) ? constraints.requiresOneOf : []; + const requiredWhen = Array.isArray(constraints.requiredWhen) ? constraints.requiredWhen : []; + + for (const group of mutuallyExclusive) { + if (!Array.isArray(group)) continue; + const present = group.filter((name: string) => isPresent(args[name])); + if (present.length > 1) { + invalidArgument(`Arguments are mutually exclusive for ${operationId}: ${group.join(', ')}`, { + operationId, + group, + }); + } + } + + for (const group of requiresOneOf) { + if (!Array.isArray(group)) continue; + const hasAny = group.some((name: string) => isPresent(args[name])); + if (!hasAny) { + invalidArgument(`One of the following arguments is required for ${operationId}: ${group.join(', ')}`, { + operationId, + group, + }); + } + } + + for (const rule of requiredWhen) { + if (!isRecord(rule)) continue; + const whenValue = args[rule.whenParam as string]; + let shouldRequire = false; + if (Object.prototype.hasOwnProperty.call(rule, 'equals')) { + shouldRequire = whenValue === rule.equals; + } else if (Object.prototype.hasOwnProperty.call(rule, 'present')) { + const present = rule.present === true; + shouldRequire = present ? isPresent(whenValue) : !isPresent(whenValue); + } else { + shouldRequire = isPresent(whenValue); + } + + if (shouldRequire && !isPresent(args[rule.param as string])) { + invalidArgument(`Argument ${rule.param} is required by constraints for ${operationId}.`, { + operationId, + rule, + }); + } + } +} + +function resolveDocApiMethod( + client: { doc: Record }, + operationId: string, +): (args: unknown, options?: InvokeOptions) => Promise { + const tokens = operationId.split('.').slice(1); + let cursor: unknown = client.doc; + + for (const token of tokens) { + if (!isRecord(cursor) || !(token in cursor)) { + throw new SuperDocCliError(`No SDK doc method found for operation ${operationId}.`, { + code: 'TOOL_DISPATCH_NOT_FOUND', + details: { operationId, token }, + }); + } + cursor = cursor[token]; + } + + if (typeof cursor !== 'function') { + throw new SuperDocCliError(`Resolved member for ${operationId} is not callable.`, { + code: 'TOOL_DISPATCH_NOT_FOUND', + details: { operationId }, + }); + } + + return cursor as (args: unknown, options?: InvokeOptions) => Promise; +} + +export async function getToolCatalog(options: { profile?: ToolProfile } = {}): Promise { + const catalog = await loadCatalog(); + if (!options.profile) return catalog; + + return { + ...catalog, + profiles: { + intent: options.profile === 'intent' ? catalog.profiles.intent : { name: 'intent', tools: [] }, + operation: options.profile === 'operation' ? catalog.profiles.operation : { name: 'operation', tools: [] }, + }, + }; +} + +export async function listTools(provider: ToolProvider, options: { profile?: ToolProfile } = {}): Promise { + const profile = options.profile ?? 'intent'; + const bundle = await loadProviderBundle(provider); + const tools = bundle.profiles[profile]; + if (!Array.isArray(tools)) { + throw new SuperDocCliError('Tool provider bundle is missing profile tools.', { + code: 'TOOLS_ASSET_INVALID', + details: { provider, profile }, + }); + } + return tools; +} + +export async function resolveToolOperation(toolName: string): Promise { + const map = await loadToolNameMap(); + return typeof map[toolName] === 'string' ? map[toolName] : null; +} + +export function inferDocumentFeatures(infoResult: Record | null | undefined): DocumentFeatures { + if (!isRecord(infoResult)) { + return { + hasTables: false, + hasLists: false, + hasComments: false, + hasTrackedChanges: false, + isEmptyDocument: false, + }; + } + + const counts = isRecord(infoResult.counts) ? infoResult.counts : {}; + const words = typeof counts.words === 'number' ? counts.words : 0; + const paragraphs = typeof counts.paragraphs === 'number' ? counts.paragraphs : 0; + const tables = typeof counts.tables === 'number' ? counts.tables : 0; + const comments = typeof counts.comments === 'number' ? counts.comments : 0; + const lists = + typeof counts.lists === 'number' ? counts.lists : typeof counts.listItems === 'number' ? counts.listItems : 0; + const trackedChanges = + typeof counts.trackedChanges === 'number' + ? counts.trackedChanges + : typeof counts.tracked_changes === 'number' + ? counts.tracked_changes + : 0; + + return { + hasTables: tables > 0, + hasLists: lists > 0, + hasComments: comments > 0, + hasTrackedChanges: trackedChanges > 0, + isEmptyDocument: words === 0 && paragraphs <= 1, + }; +} + +export async function chooseTools(input: ToolChooserInput): Promise<{ + tools: unknown[]; + selected: Array<{ + operationId: string; + toolName: string; + category: string; + mutates: boolean; + profile: ToolProfile; + }>; + excluded: Array<{ toolName: string; reason: string }>; + selectionMeta: { + profile: ToolProfile; + phase: ToolPhase; + maxTools: number; + minReadTools: number; + selectedCount: number; + decisionVersion: string; + provider: ToolProvider; + }; +}> { + const catalog = await loadCatalog(); + const policy = loadPolicy(); + const profile = input.profile ?? 'intent'; + const phase = input.taskContext?.phase ?? 'read'; + const phasePolicy = policy.phases[phase]; + const featureMap = normalizeFeatures(input.documentFeatures); + + const maxTools = Math.max(1, input.budget?.maxTools ?? policy.defaults.maxToolsByProfile[profile]); + const minReadTools = Math.max(0, input.budget?.minReadTools ?? policy.defaults.minReadTools); + + const includeCategories = new Set(input.policy?.includeCategories ?? phasePolicy.include); + const excludeCategories = new Set([...(input.policy?.excludeCategories ?? []), ...phasePolicy.exclude]); + const allowMutatingTools = input.policy?.allowMutatingTools ?? phase === 'mutate'; + + const excluded: Array<{ toolName: string; reason: string }> = []; + const profileTools = catalog.profiles[profile].tools; + const indexByToolName = new Map(profileTools.map((tool) => [tool.toolName, tool])); + + let candidates = profileTools.filter((tool) => { + if (tool.requiredCapabilities.some((capability) => !featureMap[capability])) { + excluded.push({ toolName: tool.toolName, reason: 'missing-required-capability' }); + return false; + } + + if (!allowMutatingTools && tool.mutates) { + excluded.push({ toolName: tool.toolName, reason: 'mutations-disabled' }); + return false; + } + + if (includeCategories.size > 0 && !includeCategories.has(tool.category)) { + excluded.push({ toolName: tool.toolName, reason: 'category-not-included' }); + return false; + } + + if (excludeCategories.has(tool.category)) { + excluded.push({ toolName: tool.toolName, reason: 'phase-category-excluded' }); + return false; + } + + return true; + }); + + const forceExclude = new Set(input.policy?.forceExclude ?? []); + candidates = candidates.filter((tool) => { + if (!forceExclude.has(tool.toolName)) return true; + excluded.push({ toolName: tool.toolName, reason: 'force-excluded' }); + return false; + }); + + for (const forcedToolName of input.policy?.forceInclude ?? []) { + const forced = indexByToolName.get(forcedToolName); + if (!forced) { + excluded.push({ toolName: forcedToolName, reason: 'not-in-profile' }); + continue; + } + candidates.push(forced); + } + + candidates = [...new Map(candidates.map((tool) => [tool.toolName, tool])).values()]; + + const selected: ToolCatalogEntry[] = []; + const foundationalIds = new Set(policy.defaults.foundationalOperationIds); + const foundational = candidates.filter((tool) => foundationalIds.has(tool.operationId)); + for (const tool of foundational) { + if (selected.length >= minReadTools || selected.length >= maxTools) break; + selected.push(tool); + } + + const remaining = stableSortByPhasePriority( + candidates.filter((tool) => !selected.some((entry) => entry.toolName === tool.toolName)), + phasePolicy.priority, + ); + + for (const tool of remaining) { + if (selected.length >= maxTools) { + excluded.push({ toolName: tool.toolName, reason: 'budget-trim' }); + continue; + } + selected.push(tool); + } + + const bundle = await loadProviderBundle(input.provider); + const providerTools = Array.isArray(bundle.profiles[profile]) ? bundle.profiles[profile] : []; + const providerIndex = new Map( + providerTools + .filter((tool): tool is Record => isRecord(tool)) + .map((tool) => [extractProviderToolName(tool), tool] as const) + .filter((entry): entry is [string, Record] => entry[0] !== null), + ); + + const selectedProviderTools = selected + .map((tool) => providerIndex.get(tool.toolName)) + .filter((tool): tool is Record => Boolean(tool)); + + return { + tools: selectedProviderTools, + selected: selected.map((tool) => ({ + operationId: tool.operationId, + toolName: tool.toolName, + category: tool.category, + mutates: tool.mutates, + profile: tool.profile, + })), + excluded, + selectionMeta: { + profile, + phase, + maxTools, + minReadTools, + selectedCount: selected.length, + decisionVersion: policy.defaults.chooserDecisionVersion, + provider: input.provider, + }, + }; +} + +export async function dispatchSuperDocTool( + client: { doc: Record }, + toolName: string, + args: Record = {}, + invokeOptions?: InvokeOptions, +): Promise { + const operationId = await resolveToolOperation(toolName); + if (!operationId) { + throw new SuperDocCliError(`Unknown SuperDoc tool: ${toolName}`, { + code: 'TOOL_NOT_FOUND', + details: { toolName }, + }); + } + + if (!isRecord(args)) { + invalidArgument(`Tool arguments for ${toolName} must be an object.`); + } + + validateDispatchArgs(operationId, args); + const method = resolveDocApiMethod(client, operationId); + return method(args, invokeOptions); +} diff --git a/packages/sdk/langs/node/tools b/packages/sdk/langs/node/tools new file mode 120000 index 0000000000..31941e941d --- /dev/null +++ b/packages/sdk/langs/node/tools @@ -0,0 +1 @@ +../../tools \ No newline at end of file diff --git a/packages/sdk/langs/node/tsconfig.json b/packages/sdk/langs/node/tsconfig.json new file mode 100644 index 0000000000..6db4a5d2f2 --- /dev/null +++ b/packages/sdk/langs/node/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "nodenext", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "isolatedModules": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src"], + "exclude": ["src/**/__tests__"] +} diff --git a/packages/sdk/langs/python/pyproject.toml b/packages/sdk/langs/python/pyproject.toml new file mode 100644 index 0000000000..baec92ce07 --- /dev/null +++ b/packages/sdk/langs/python/pyproject.toml @@ -0,0 +1,35 @@ +[build-system] +requires = ["setuptools>=70.1", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "superdoc-sdk" +version = "1.0.0-alpha.6" +description = "SuperDoc SDK (CLI-backed)" +requires-python = ">=3.9" +license = "AGPL-3.0" +authors = [{ name = "SuperDoc" }] + +[tool.setuptools] +packages = [ + "superdoc", + "superdoc.generated", + "superdoc.skills", + "superdoc.tools", + "superdoc._vendor", + "superdoc._vendor.cli", +] + +[tool.setuptools.package-data] +superdoc = [ + "_vendor/cli/*/superdoc", + "_vendor/cli/*/superdoc.exe", + "skills/*.md", + "tools/*.json", +] + +[tool.cibuildwheel] +build = "cp39-* cp310-* cp311-* cp312-* cp313-*" +skip = "pp* *-musllinux_*" +build-verbosity = 1 +test-command = "python -c \"import superdoc; print('superdoc-sdk wheel smoke ok')\"" diff --git a/packages/sdk/langs/python/superdoc/__init__.py b/packages/sdk/langs/python/superdoc/__init__.py new file mode 100644 index 0000000000..19fcb31f31 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/__init__.py @@ -0,0 +1,28 @@ +from .errors import SuperDocError +from .generated.client import AsyncSuperDocClient, SuperDocClient +from .skill_api import get_skill, install_skill, list_skills +from .tools_api import ( + choose_tools, + dispatch_superdoc_tool, + dispatch_superdoc_tool_async, + get_tool_catalog, + infer_document_features, + list_tools, + resolve_tool_operation, +) + +__all__ = [ + "SuperDocClient", + "AsyncSuperDocClient", + "SuperDocError", + "get_skill", + "install_skill", + "list_skills", + "get_tool_catalog", + "list_tools", + "resolve_tool_operation", + "infer_document_features", + "choose_tools", + "dispatch_superdoc_tool", + "dispatch_superdoc_tool_async", +] diff --git a/packages/sdk/langs/python/superdoc/_vendor/__init__.py b/packages/sdk/langs/python/superdoc/_vendor/__init__.py new file mode 100644 index 0000000000..1941d3842f --- /dev/null +++ b/packages/sdk/langs/python/superdoc/_vendor/__init__.py @@ -0,0 +1 @@ +# Vendored dependencies. diff --git a/packages/sdk/langs/python/superdoc/_vendor/cli/.gitignore b/packages/sdk/langs/python/superdoc/_vendor/cli/.gitignore new file mode 100644 index 0000000000..eef9780c59 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/_vendor/cli/.gitignore @@ -0,0 +1,3 @@ +# Vendored CLI binaries are platform-specific and not committed +* +!.gitignore diff --git a/packages/sdk/langs/python/superdoc/embedded_cli.py b/packages/sdk/langs/python/superdoc/embedded_cli.py new file mode 100644 index 0000000000..31448e9675 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/embedded_cli.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +import os +import platform +from importlib import resources +from pathlib import Path +from typing import Optional + +from .errors import SuperDocError + + +def _normalized_machine(value: str) -> str: + normalized = value.strip().lower() + if normalized in {'x86_64', 'amd64'}: + return 'x64' + if normalized in {'aarch64', 'arm64'}: + return 'arm64' + return normalized + + +def _resolve_target() -> Optional[str]: + system = platform.system().lower() + machine = _normalized_machine(platform.machine()) + + if system == 'darwin' and machine == 'arm64': + return 'darwin-arm64' + if system == 'darwin' and machine == 'x64': + return 'darwin-x64' + if system == 'linux' and machine == 'x64': + return 'linux-x64' + if system == 'linux' and machine == 'arm64': + return 'linux-arm64' + if system == 'windows' and machine == 'x64': + return 'windows-x64' + + return None + + +def _resolve_binary_name(target: str) -> str: + return 'superdoc.exe' if target.startswith('windows-') else 'superdoc' + + +def _resource_to_path(resource) -> Optional[Path]: + try: + candidate = Path(str(resource)) + except Exception: + return None + + return candidate if candidate.exists() else None + + +def resolve_embedded_cli_path() -> str: + target = _resolve_target() + if target is None: + raise SuperDocError( + 'No embedded SuperDoc CLI binary is available for this platform.', + code='UNSUPPORTED_PLATFORM', + details={'platform': platform.system(), 'machine': platform.machine()}, + ) + + binary_name = _resolve_binary_name(target) + resource = resources.files('superdoc').joinpath('_vendor', 'cli', target, binary_name) + binary_path = _resource_to_path(resource) + + if binary_path is None: + raise SuperDocError( + 'Embedded SuperDoc CLI binary is missing for this platform.', + code='CLI_BINARY_MISSING', + details={'target': target, 'binary': binary_name}, + ) + + if os.name != 'nt': + try: + mode = binary_path.stat().st_mode + os.chmod(binary_path, mode | 0o111) + except Exception: + pass + + return str(binary_path) diff --git a/packages/sdk/langs/python/superdoc/errors.py b/packages/sdk/langs/python/superdoc/errors.py new file mode 100644 index 0000000000..e453597584 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/errors.py @@ -0,0 +1,6 @@ +class SuperDocError(Exception): + def __init__(self, message: str, code: str, details=None, exit_code=None): + super().__init__(message) + self.code = code + self.details = details + self.exit_code = exit_code diff --git a/packages/sdk/langs/python/superdoc/runtime.py b/packages/sdk/langs/python/superdoc/runtime.py new file mode 100644 index 0000000000..2a6d7739c2 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/runtime.py @@ -0,0 +1,355 @@ +from __future__ import annotations + +import asyncio +import hashlib +import json +import os +import subprocess +from typing import Any, Dict, Literal, Mapping, Optional, Tuple + +from .embedded_cli import resolve_embedded_cli_path +from .errors import SuperDocError +from .generated.contract import CONTRACT, OPERATION_INDEX + +ChangeMode = Literal['direct', 'tracked'] + + +def _resolve_invocation(cli_bin: str) -> Tuple[str, list]: + lower = cli_bin.lower() + if lower.endswith('.js'): + return 'node', [cli_bin] + if lower.endswith('.ts'): + return 'bun', [cli_bin] + return cli_bin, [] + + +def _encode_param(args: list, spec: Dict[str, Any], value: Any) -> None: + if value is None: + if spec.get('required'): + raise SuperDocError(f"Missing required parameter: {spec['name']}", code='INVALID_ARGUMENT') + return + + kind = spec['kind'] + param_type = spec['type'] + + if kind == 'doc': + args.append(str(value)) + return + + flag = f"--{spec.get('flag') or spec['name']}" + + if param_type == 'boolean': + # Explicit true/false — matches current CLI operation-executor.ts. + args.extend([flag, 'true' if value else 'false']) + return + + if param_type == 'string[]': + if not isinstance(value, list): + raise SuperDocError(f"Parameter {spec['name']} must be a list.", code='INVALID_ARGUMENT') + for item in value: + args.extend([flag, str(item)]) + return + + if param_type == 'json': + args.extend([flag, json.dumps(value)]) + return + + args.extend([flag, str(value)]) + + +def _normalize_default_change_mode(default_change_mode: Optional[str]) -> Optional[ChangeMode]: + if default_change_mode is None: + return None + if default_change_mode in ('direct', 'tracked'): + return default_change_mode + raise SuperDocError( + 'default_change_mode must be "direct" or "tracked".', + code='INVALID_ARGUMENT', + details={'defaultChangeMode': default_change_mode}, + ) + + +def _apply_default_change_mode( + operation: Dict[str, Any], payload: Dict[str, Any], default_change_mode: Optional[ChangeMode] +) -> Dict[str, Any]: + if default_change_mode is None: + return payload + + if payload.get('changeMode') is not None: + return payload + + supports_change_mode = any(spec.get('name') == 'changeMode' for spec in operation.get('params', [])) + if not supports_change_mode: + return payload + + return {**payload, 'changeMode': default_change_mode} + + +def _parse_envelope(stdout: str, stderr: str) -> Dict[str, Any]: + payload = stdout or stderr + if not payload.strip(): + raise SuperDocError('CLI returned no JSON envelope.', code='COMMAND_FAILED', details={'stdout': stdout, 'stderr': stderr}) + + attempts: list = [payload.strip()] + lines = payload.splitlines() + for index, line in enumerate(lines): + if not line.strip().startswith('{'): + continue + attempts.append('\n'.join(lines[index:]).strip()) + + for candidate in attempts: + if not candidate: + continue + try: + parsed = json.loads(candidate) + if isinstance(parsed, dict) and 'ok' in parsed: + return parsed + except Exception: + continue + + raise SuperDocError( + 'CLI returned invalid JSON envelope.', + code='JSON_PARSE_ERROR', + details={'stdout': stdout, 'stderr': stderr, 'message': 'Failed to parse envelope JSON.'}, + ) + + +# Explicit exception set — these ops have sessionId but are NOT auto-targeted. +# doc.open: requires explicit doc+session coordination, never auto-resolves session. +_SESSION_BOUND_EXCEPTIONS = {'doc.open'} + + +def _derive_session_bound_ids(): + ops = CONTRACT.get('operations', {}) + return { + op_id for op_id, op in ops.items() + if op_id not in _SESSION_BOUND_EXCEPTIONS + and any( + isinstance(p, dict) and p.get('name') == 'sessionId' + for p in op.get('params', []) + ) + } + + +_SESSION_BOUND_OPERATION_IDS = _derive_session_bound_ids() + + +def _normalized_version(version: str) -> Optional[Tuple[int, int, int]]: + if not isinstance(version, str): + return None + + core = version.split('-', 1)[0] + parts = core.split('.') + if len(parts) < 3: + return None + + try: + return int(parts[0]), int(parts[1]), int(parts[2]) + except Exception: + return None + + +def _ensure_cli_version_compatible(envelope: Dict[str, Any]) -> None: + cli = CONTRACT.get('cli', {}) + min_version = cli.get('minVersion') + if not isinstance(min_version, str): + return + + meta = envelope.get('meta') + if not isinstance(meta, dict): + return + + cli_version = meta.get('version') + if not isinstance(cli_version, str): + return + if cli_version == '0.0.0': + return + + parsed_cli = _normalized_version(cli_version) + parsed_min = _normalized_version(min_version) + if not parsed_cli or not parsed_min: + return + + if parsed_cli < parsed_min: + raise SuperDocError( + f"CLI version {cli_version} is older than minimum required {min_version}.", + code='CLI_VERSION_UNSUPPORTED', + details={'cliVersion': cli_version, 'minVersion': min_version}, + ) + + +def _get_state_root(env: Mapping[str, str]) -> str: + override = env.get('SUPERDOC_CLI_STATE_DIR') or os.environ.get('SUPERDOC_CLI_STATE_DIR') + if override: + return os.path.abspath(override) + return os.path.join(os.path.expanduser('~'), '.superdoc-cli', 'state', 'v1') + + +def _read_text(path: str) -> Optional[str]: + try: + with open(path, 'r', encoding='utf-8') as handle: + return handle.read() + except Exception: + return None + + +def _read_json(path: str) -> Optional[Dict[str, Any]]: + raw = _read_text(path) + if raw is None: + return None + + try: + parsed = json.loads(raw) + except Exception: + return None + + if not isinstance(parsed, dict): + return None + return parsed + + +def _resolve_active_session_id(env: Mapping[str, str]) -> Optional[str]: + project_root = os.path.abspath(os.getcwd()) + project_hash = hashlib.sha256(project_root.encode('utf-8')).hexdigest()[:16] + active_path = os.path.join(_get_state_root(env), 'projects', project_hash, 'active-session') + raw = _read_text(active_path) + if not raw: + return None + session_id = raw.strip() + return session_id or None + + +def _is_collab_session(session_id: str, env: Mapping[str, str]) -> bool: + metadata_path = os.path.join(_get_state_root(env), 'contexts', session_id, 'metadata.json') + metadata = _read_json(metadata_path) + if not metadata: + return False + return metadata.get('sessionType') == 'collab' + + +def _target_session_id(operation_id: str, params: Dict[str, Any], env: Mapping[str, str]) -> Optional[str]: + if operation_id == 'doc.session.close': + value = params.get('sessionId') + if isinstance(value, str) and value: + return value + return None + + if operation_id not in _SESSION_BOUND_OPERATION_IDS: + return None + + if params.get('doc') is not None: + return None + + value = params.get('sessionId') + if isinstance(value, str) and value: + return value + return _resolve_active_session_id(env) + + +def _reject_python_collaboration(operation_id: str, params: Dict[str, Any], env: Mapping[str, str]) -> None: + if operation_id == 'doc.open': + for field in ('collaboration', 'collabUrl', 'collabDocumentId'): + if params.get(field) is not None: + raise SuperDocError( + 'Collaboration is not supported in the Python SDK.', + code='NOT_SUPPORTED', + details={'operation': operation_id, 'field': field}, + ) + return + + session_id = _target_session_id(operation_id, params, env) + if not session_id: + return + + if _is_collab_session(session_id, env): + raise SuperDocError( + 'Collaboration sessions are not supported in the Python SDK.', + code='NOT_SUPPORTED', + details={'operation': operation_id, 'sessionId': session_id}, + ) + + +class SuperDocSyncRuntime: + def __init__(self, *, env: Optional[Mapping[str, str]] = None, default_change_mode: Optional[str] = None): + self._env = dict(env or {}) + self._cli_bin = self._env.get('SUPERDOC_CLI_BIN') or os.environ.get('SUPERDOC_CLI_BIN') or resolve_embedded_cli_path() + self._default_change_mode = _normalize_default_change_mode(default_change_mode) + + def invoke(self, operation_id: str, params: Optional[Dict[str, Any]] = None, *, timeout_ms: Optional[int] = None, stdin_bytes: Optional[bytes] = None) -> Dict[str, Any]: + operation = OPERATION_INDEX[operation_id] + command, prefix = _resolve_invocation(self._cli_bin) + + args: list = [*prefix, *operation['commandTokens']] + payload = _apply_default_change_mode(operation, params or {}, self._default_change_mode) + _reject_python_collaboration(operation_id, payload, self._env) + for spec in operation['params']: + _encode_param(args, spec, payload.get(spec['name'])) + + if timeout_ms is not None: + args.extend(['--timeout-ms', str(timeout_ms)]) + args.extend(['--output', 'json']) + + completed = subprocess.run( + [command, *args], + input=stdin_bytes, + capture_output=True, + env={**os.environ, **self._env}, + check=False, + ) + + envelope = _parse_envelope(completed.stdout.decode('utf-8', errors='replace'), completed.stderr.decode('utf-8', errors='replace')) + _ensure_cli_version_compatible(envelope) + if envelope.get('ok'): + return envelope['data'] + + error = envelope.get('error', {}) + raise SuperDocError( + error.get('message', 'Unknown CLI error'), + code=error.get('code', 'COMMAND_FAILED'), + details=error.get('details'), + exit_code=completed.returncode, + ) + + +class SuperDocAsyncRuntime: + def __init__(self, *, env: Optional[Mapping[str, str]] = None, default_change_mode: Optional[str] = None): + self._env = dict(env or {}) + self._cli_bin = self._env.get('SUPERDOC_CLI_BIN') or os.environ.get('SUPERDOC_CLI_BIN') or resolve_embedded_cli_path() + self._default_change_mode = _normalize_default_change_mode(default_change_mode) + + async def invoke(self, operation_id: str, params: Optional[Dict[str, Any]] = None, *, timeout_ms: Optional[int] = None, stdin_bytes: Optional[bytes] = None) -> Dict[str, Any]: + operation = OPERATION_INDEX[operation_id] + command, prefix = _resolve_invocation(self._cli_bin) + + args: list = [*prefix, *operation['commandTokens']] + payload = _apply_default_change_mode(operation, params or {}, self._default_change_mode) + _reject_python_collaboration(operation_id, payload, self._env) + for spec in operation['params']: + _encode_param(args, spec, payload.get(spec['name'])) + + if timeout_ms is not None: + args.extend(['--timeout-ms', str(timeout_ms)]) + args.extend(['--output', 'json']) + + process = await asyncio.create_subprocess_exec( + command, + *args, + stdin=asyncio.subprocess.PIPE, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + env={**os.environ, **self._env}, + ) + + stdout, stderr = await process.communicate(stdin_bytes) + envelope = _parse_envelope(stdout.decode('utf-8', errors='replace'), stderr.decode('utf-8', errors='replace')) + _ensure_cli_version_compatible(envelope) + if envelope.get('ok'): + return envelope['data'] + + error = envelope.get('error', {}) + raise SuperDocError( + error.get('message', 'Unknown CLI error'), + code=error.get('code', 'COMMAND_FAILED'), + details=error.get('details'), + exit_code=process.returncode, + ) diff --git a/packages/sdk/langs/python/superdoc/skill_api.py b/packages/sdk/langs/python/superdoc/skill_api.py new file mode 100644 index 0000000000..b01fc5a74b --- /dev/null +++ b/packages/sdk/langs/python/superdoc/skill_api.py @@ -0,0 +1,154 @@ +from __future__ import annotations + +import os +from pathlib import Path +import re +from importlib import resources +from typing import Literal, TypedDict + +from .errors import SuperDocError + +_SKILL_NAME_RE = re.compile(r'^[A-Za-z0-9][A-Za-z0-9_-]*$') +_SUPPORTED_SKILL_RUNTIMES = ('claude',) +_SUPPORTED_INSTALL_SCOPES = ('project', 'user') +SkillRuntime = Literal['claude'] +SkillInstallScope = Literal['project', 'user'] + + +class InstalledSkillResult(TypedDict): + name: str + runtime: SkillRuntime + scope: Literal['project', 'user', 'custom'] + path: str + written: bool + overwritten: bool + + +def _normalize_skill_name(name: str) -> str: + normalized = name.strip() + if not normalized or _SKILL_NAME_RE.fullmatch(normalized) is None: + raise SuperDocError('Skill name is required.', code='INVALID_ARGUMENT', details={'name': name}) + return normalized + + +def _available_skills_for_error() -> list: + try: + return list_skills() + except SuperDocError: + return [] + + +def list_skills() -> list: + result: list = [] + try: + directory = resources.files('superdoc').joinpath('skills') + for entry in directory.iterdir(): + name = entry.name + if Path(name).suffix == '.md': + result.append(Path(name).stem) + except Exception as error: + raise SuperDocError( + 'Unable to enumerate SDK skills.', + code='SKILL_IO_ERROR', + details={'message': str(error)}, + ) from error + + result.sort() + return result + + +def get_skill(name: str) -> str: + normalized = _normalize_skill_name(name) + + resource = resources.files('superdoc').joinpath('skills', f'{normalized}.md') + try: + return resource.read_text(encoding='utf-8') + except FileNotFoundError as error: + raise SuperDocError( + 'Requested SDK skill was not found.', + code='SKILL_NOT_FOUND', + details={'name': normalized, 'available': _available_skills_for_error()}, + ) from error + except Exception as error: + raise SuperDocError( + 'Unable to read SDK skill file.', + code='SKILL_IO_ERROR', + details={'name': normalized, 'message': str(error)}, + ) from error + + +def install_skill( + name: str, + *, + runtime: SkillRuntime = 'claude', + scope: SkillInstallScope = 'project', + target_dir: str | None = None, + cwd: str | None = None, + home_dir: str | None = None, + overwrite: bool = True, +) -> InstalledSkillResult: + normalized = _normalize_skill_name(name) + + if runtime not in _SUPPORTED_SKILL_RUNTIMES: + raise SuperDocError( + 'Unsupported skill runtime.', + code='INVALID_ARGUMENT', + details={'runtime': runtime, 'supportedRuntimes': list(_SUPPORTED_SKILL_RUNTIMES)}, + ) + + if scope not in _SUPPORTED_INSTALL_SCOPES: + raise SuperDocError( + 'Unsupported skill install scope.', + code='INVALID_ARGUMENT', + details={'scope': scope, 'supportedScopes': list(_SUPPORTED_INSTALL_SCOPES)}, + ) + + if target_dir is not None: + skills_root = Path(target_dir).resolve() + result_scope: Literal['project', 'user', 'custom'] = 'custom' + elif scope == 'user': + skills_root = Path(home_dir or str(Path.home())).resolve() / '.claude' / 'skills' + result_scope = 'user' + else: + skills_root = Path(cwd or os.getcwd()).resolve() / '.claude' / 'skills' + result_scope = 'project' + + skill_path = skills_root / normalized / 'SKILL.md' + existed = skill_path.exists() + if existed and not overwrite: + return { + 'name': normalized, + 'runtime': runtime, + 'scope': result_scope, + 'path': str(skill_path), + 'written': False, + 'overwritten': False, + } + + try: + content = get_skill(normalized) + skill_path.parent.mkdir(parents=True, exist_ok=True) + skill_path.write_text(content, encoding='utf-8') + except SuperDocError: + raise + except Exception as error: + raise SuperDocError( + 'Unable to install SDK skill.', + code='SKILL_IO_ERROR', + details={ + 'name': normalized, + 'runtime': runtime, + 'scope': result_scope, + 'path': str(skill_path), + 'message': str(error), + }, + ) from error + + return { + 'name': normalized, + 'runtime': runtime, + 'scope': result_scope, + 'path': str(skill_path), + 'written': True, + 'overwritten': existed, + } diff --git a/packages/sdk/langs/python/superdoc/skills/__init__.py b/packages/sdk/langs/python/superdoc/skills/__init__.py new file mode 100644 index 0000000000..e5499ee9bb --- /dev/null +++ b/packages/sdk/langs/python/superdoc/skills/__init__.py @@ -0,0 +1 @@ +# Skill prompt templates. diff --git a/packages/sdk/langs/python/superdoc/skills/editing-docx.md b/packages/sdk/langs/python/superdoc/skills/editing-docx.md new file mode 100644 index 0000000000..db5a836ff1 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/skills/editing-docx.md @@ -0,0 +1,31 @@ +# Editing DOCX Documents with SuperDoc SDK + +You are a document editing assistant using the SuperDoc SDK. You have access to tools +that let you open, read, search, and modify `.docx` files programmatically. + +## Workflow + +1. **Open** the document with `doc.open` +2. **Inspect** it with `doc.info` to understand structure +3. **Find** content with `doc.find` using text search or node type queries +4. **Modify** content using `doc.insert`, `doc.replace`, `doc.delete`, or formatting operations +5. **Save** changes with `doc.save` +6. **Close** when done with `doc.close` + +## Key Operations + +- `doc.find` — Search by text pattern, node type, or structured query +- `doc.getNode` — Get a specific node by address +- `doc.insert` — Insert text at a position +- `doc.replace` — Replace content at a position +- `doc.delete` — Delete content at a position +- `doc.format.*` — Apply bold, italic, underline, strikethrough +- `doc.comments.*` — Add, edit, resolve, remove comments +- `doc.trackChanges.*` — Accept/reject tracked changes + +## Best Practices + +- Always open before operating, save when done +- Use `doc.find` to locate content before modifying +- Use `doc.info` to check document capabilities +- Handle errors gracefully — operations may fail if targets are invalid diff --git a/packages/sdk/langs/python/superdoc/test_parity_helper.py b/packages/sdk/langs/python/superdoc/test_parity_helper.py new file mode 100644 index 0000000000..065f24ea64 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/test_parity_helper.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +""" +Parity test helper — reads JSON commands from stdin, executes Python SDK +functions, and writes JSON results to stdout. + +Used by cross-lang-parity.test.ts to compare Node and Python behavior. +""" + +from __future__ import annotations + +import json +import sys +import traceback + + +def main() -> None: + raw = sys.stdin.read() + command = json.loads(raw) + action = command.get('action') + + try: + if action == 'chooseTools': + from superdoc.tools_api import choose_tools + result = choose_tools(command['input']) + # Strip non-comparable fields (provider tools depend on JSON ordering) + result.pop('tools', None) + print(json.dumps({'ok': True, 'result': result})) + + elif action == 'validateDispatchArgs': + from superdoc.tools_api import _validate_dispatch_args + try: + _validate_dispatch_args(command['operationId'], command['args']) + print(json.dumps({'ok': True, 'result': 'passed'})) + except Exception as exc: + code = getattr(exc, 'code', None) or 'UNKNOWN' + print(json.dumps({'ok': True, 'result': {'rejected': True, 'code': code, 'message': str(exc)}})) + + elif action == 'resolveToolOperation': + from superdoc.tools_api import resolve_tool_operation + result = resolve_tool_operation(command['toolName']) + print(json.dumps({'ok': True, 'result': result})) + + elif action == 'inferDocumentFeatures': + from superdoc.tools_api import infer_document_features + result = infer_document_features(command['infoResult']) + print(json.dumps({'ok': True, 'result': result})) + + elif action == 'isSessionBound': + from superdoc.runtime import _SESSION_BOUND_OPERATION_IDS + operation_id = command['operationId'] + result = operation_id in _SESSION_BOUND_OPERATION_IDS + print(json.dumps({'ok': True, 'result': result})) + + elif action == 'assertCollabRejection': + import os + import tempfile + from superdoc.runtime import _reject_python_collaboration + from superdoc.errors import SuperDocError + + operation_id = command['operationId'] + session_id = command['sessionId'] + + # Create a temp state dir with a collab metadata.json + with tempfile.TemporaryDirectory() as tmpdir: + ctx_dir = os.path.join(tmpdir, 'contexts', session_id) + os.makedirs(ctx_dir, exist_ok=True) + meta_path = os.path.join(ctx_dir, 'metadata.json') + with open(meta_path, 'w') as f: + json.dump({'sessionType': 'collab'}, f) + + env = {'SUPERDOC_CLI_STATE_DIR': tmpdir} + params = {'sessionId': session_id} + try: + _reject_python_collaboration(operation_id, params, env) + print(json.dumps({'ok': True, 'result': {'rejected': False}})) + except SuperDocError as exc: + print(json.dumps({'ok': True, 'result': {'rejected': True, 'code': exc.code}})) + + else: + print(json.dumps({'ok': False, 'error': f'Unknown action: {action}'})) + + except Exception: + print(json.dumps({'ok': False, 'error': traceback.format_exc()})) + + +if __name__ == '__main__': + main() diff --git a/packages/sdk/langs/python/superdoc/tools b/packages/sdk/langs/python/superdoc/tools new file mode 120000 index 0000000000..c92f4172df --- /dev/null +++ b/packages/sdk/langs/python/superdoc/tools @@ -0,0 +1 @@ +../../../tools \ No newline at end of file diff --git a/packages/sdk/langs/python/superdoc/tools_api.py b/packages/sdk/langs/python/superdoc/tools_api.py new file mode 100644 index 0000000000..be7e6e7c60 --- /dev/null +++ b/packages/sdk/langs/python/superdoc/tools_api.py @@ -0,0 +1,537 @@ +from __future__ import annotations + +import inspect +import json +from importlib import resources +from typing import Any, Dict, List, Literal, Mapping, Optional, TypedDict, cast + +from .errors import SuperDocError +from .generated.contract import OPERATION_INDEX + +ToolProvider = Literal['openai', 'anthropic', 'vercel', 'generic'] +ToolProfile = Literal['intent', 'operation'] +ToolPhase = Literal['read', 'locate', 'mutate', 'review'] + + +class DocumentFeatures(TypedDict): + hasTables: bool + hasLists: bool + hasComments: bool + hasTrackedChanges: bool + isEmptyDocument: bool + + +class ToolChooserPolicy(TypedDict, total=False): + includeCategories: List[str] + excludeCategories: List[str] + allowMutatingTools: bool + forceInclude: List[str] + forceExclude: List[str] + + +class ToolChooserBudget(TypedDict, total=False): + maxTools: int + minReadTools: int + + +class ToolChooserTaskContext(TypedDict, total=False): + phase: ToolPhase + previousToolCalls: List[Dict[str, Any]] + + +class ToolChooserInput(TypedDict, total=False): + provider: ToolProvider + profile: ToolProfile + documentFeatures: DocumentFeatures + taskContext: ToolChooserTaskContext + budget: ToolChooserBudget + policy: ToolChooserPolicy + + +# Policy is loaded from the generated tools-policy.json artifact. +_policy_cache: Optional[Dict[str, Any]] = None + + +def _load_policy() -> Dict[str, Any]: + global _policy_cache + if _policy_cache is not None: + return _policy_cache + _policy_cache = _read_json_asset('tools-policy.json') + return _policy_cache + +PROVIDER_FILE: Dict[ToolProvider, str] = { + 'openai': 'tools.openai.json', + 'anthropic': 'tools.anthropic.json', + 'vercel': 'tools.vercel.json', + 'generic': 'tools.generic.json', +} + + +def _read_json_asset(name: str) -> Dict[str, Any]: + resource = resources.files('superdoc').joinpath('tools', name) + try: + raw = resource.read_text(encoding='utf-8') + except FileNotFoundError as error: + raise SuperDocError( + 'Unable to load packaged tool artifact.', + code='TOOLS_ASSET_NOT_FOUND', + details={'file': name}, + ) from error + except Exception as error: + raise SuperDocError( + 'Unable to read packaged tool artifact.', + code='TOOLS_ASSET_NOT_FOUND', + details={'file': name, 'message': str(error)}, + ) from error + + try: + parsed = json.loads(raw) + except Exception as error: + raise SuperDocError( + 'Packaged tool artifact is invalid JSON.', + code='TOOLS_ASSET_INVALID', + details={'file': name, 'message': str(error)}, + ) from error + + if not isinstance(parsed, dict): + raise SuperDocError( + 'Packaged tool artifact root must be an object.', + code='TOOLS_ASSET_INVALID', + details={'file': name}, + ) + + return cast(Dict[str, Any], parsed) + + +def get_tool_catalog(options: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + profile = (options or {}).get('profile') + catalog = _read_json_asset('catalog.json') + if profile not in ('intent', 'operation', None): + raise SuperDocError( + 'profile must be "intent" or "operation".', + code='INVALID_ARGUMENT', + details={'profile': profile}, + ) + + if profile is None: + return catalog + + filtered = dict(catalog) + profiles = catalog.get('profiles') if isinstance(catalog.get('profiles'), dict) else {} + filtered['profiles'] = { + 'intent': profiles.get('intent') if profile == 'intent' else {'name': 'intent', 'tools': []}, + 'operation': profiles.get('operation') if profile == 'operation' else {'name': 'operation', 'tools': []}, + } + return filtered + + +def list_tools(provider: ToolProvider, options: Optional[Dict[str, Any]] = None) -> List[Dict[str, Any]]: + profile = (options or {}).get('profile', 'intent') + if profile not in ('intent', 'operation'): + raise SuperDocError( + 'profile must be "intent" or "operation".', + code='INVALID_ARGUMENT', + details={'profile': profile}, + ) + + bundle = _read_json_asset(PROVIDER_FILE[provider]) + profiles = bundle.get('profiles') + if not isinstance(profiles, dict): + raise SuperDocError('Tool provider artifact is missing profiles.', code='TOOLS_ASSET_INVALID', details={'provider': provider}) + + tools = profiles.get(profile) + if not isinstance(tools, list): + raise SuperDocError('Tool provider artifact profile is invalid.', code='TOOLS_ASSET_INVALID', details={'provider': provider, 'profile': profile}) + + return cast(List[Dict[str, Any]], tools) + + +def resolve_tool_operation(tool_name: str) -> Optional[str]: + mapping = _read_json_asset('tool-name-map.json') + value = mapping.get(tool_name) + return value if isinstance(value, str) else None + + +def infer_document_features(info_result: Optional[Mapping[str, Any]]) -> DocumentFeatures: + if not isinstance(info_result, dict): + return { + 'hasTables': False, + 'hasLists': False, + 'hasComments': False, + 'hasTrackedChanges': False, + 'isEmptyDocument': False, + } + + counts: Mapping[str, Any] = {} + if isinstance(info_result.get('counts'), dict): + counts = cast(Mapping[str, Any], info_result['counts']) + + words = counts.get('words') if isinstance(counts.get('words'), (int, float)) else 0 + paragraphs = counts.get('paragraphs') if isinstance(counts.get('paragraphs'), (int, float)) else 0 + tables = counts.get('tables') if isinstance(counts.get('tables'), (int, float)) else 0 + comments = counts.get('comments') if isinstance(counts.get('comments'), (int, float)) else 0 + lists = counts.get('lists') if isinstance(counts.get('lists'), (int, float)) else counts.get('listItems', 0) + tracked = counts.get('trackedChanges') if isinstance(counts.get('trackedChanges'), (int, float)) else counts.get('tracked_changes', 0) + + return { + 'hasTables': bool(tables and tables > 0), + 'hasLists': bool(lists and lists > 0), + 'hasComments': bool(comments and comments > 0), + 'hasTrackedChanges': bool(tracked and tracked > 0), + 'isEmptyDocument': bool(words == 0 and paragraphs <= 1), + } + + +def _normalize_features(features: Optional[Mapping[str, Any]]) -> DocumentFeatures: + return { + 'hasTables': bool(features.get('hasTables')) if features else False, + 'hasLists': bool(features.get('hasLists')) if features else False, + 'hasComments': bool(features.get('hasComments')) if features else False, + 'hasTrackedChanges': bool(features.get('hasTrackedChanges')) if features else False, + 'isEmptyDocument': bool(features.get('isEmptyDocument')) if features else False, + } + + +def _priority_sort(tools: List[Dict[str, Any]], priority: List[str]) -> List[Dict[str, Any]]: + priority_index = {category: index for index, category in enumerate(priority)} + return sorted( + tools, + key=lambda tool: ( + priority_index.get(str(tool.get('category')), 10_000), + str(tool.get('toolName', '')), + ), + ) + + +def _extract_provider_tool_name(tool: Dict[str, Any]) -> Optional[str]: + """Extract tool name from provider-specific format. + + Anthropic / Generic: top-level ``name``. + OpenAI / Vercel: nested under ``function.name``. + """ + name = tool.get('name') + if isinstance(name, str): + return name + fn = tool.get('function') + if isinstance(fn, dict): + fn_name = fn.get('name') + if isinstance(fn_name, str): + return fn_name + return None + + +def choose_tools(input: ToolChooserInput) -> Dict[str, Any]: + provider = input.get('provider') + if provider not in ('openai', 'anthropic', 'vercel', 'generic'): + raise SuperDocError('provider is required.', code='INVALID_ARGUMENT', details={'provider': provider}) + + profile = cast(ToolProfile, input.get('profile', 'intent')) + if profile not in ('intent', 'operation'): + raise SuperDocError('profile must be "intent" or "operation".', code='INVALID_ARGUMENT', details={'profile': profile}) + + task_context = input.get('taskContext', {}) + phase = cast(ToolPhase, task_context.get('phase', 'read')) + if phase not in ('read', 'locate', 'mutate', 'review'): + raise SuperDocError('phase must be read|locate|mutate|review.', code='INVALID_ARGUMENT', details={'phase': phase}) + + catalog = _read_json_asset('catalog.json') + tools_policy = _load_policy() + profile_tools = ( + catalog.get('profiles', {}).get(profile, {}).get('tools') + if isinstance(catalog.get('profiles'), dict) + else [] + ) + if not isinstance(profile_tools, list): + raise SuperDocError('Catalog profile tools are invalid.', code='TOOLS_ASSET_INVALID', details={'profile': profile}) + + policy = input.get('policy', {}) + budget = input.get('budget', {}) + + defaults = tools_policy.get('defaults', {}) + max_by_profile = defaults.get('maxToolsByProfile', {}) + max_tools = int(budget.get('maxTools', max_by_profile.get(profile, 12))) + min_read_tools = int(budget.get('minReadTools', defaults.get('minReadTools', 2))) + max_tools = max(1, max_tools) + min_read_tools = max(0, min_read_tools) + + phase_policy = tools_policy.get('phases', {}).get(phase, {'include': [], 'exclude': [], 'priority': []}) + include_categories = set(policy.get('includeCategories') or phase_policy['include']) + exclude_categories = set((policy.get('excludeCategories') or []) + phase_policy['exclude']) + allow_mutating_tools = bool(policy.get('allowMutatingTools', phase == 'mutate')) + + features = _normalize_features(input.get('documentFeatures')) + excluded: List[Dict[str, str]] = [] + + def should_include(tool: Dict[str, Any]) -> bool: + required_caps = tool.get('requiredCapabilities') + if isinstance(required_caps, list): + for capability in required_caps: + if isinstance(capability, str) and capability in features and not features[capability]: + excluded.append({'toolName': str(tool.get('toolName')), 'reason': 'missing-required-capability'}) + return False + + if not allow_mutating_tools and bool(tool.get('mutates')): + excluded.append({'toolName': str(tool.get('toolName')), 'reason': 'mutations-disabled'}) + return False + + category = str(tool.get('category', '')) + if include_categories and category not in include_categories: + excluded.append({'toolName': str(tool.get('toolName')), 'reason': 'category-not-included'}) + return False + + if category in exclude_categories: + excluded.append({'toolName': str(tool.get('toolName')), 'reason': 'phase-category-excluded'}) + return False + + return True + + candidates = [tool for tool in profile_tools if isinstance(tool, dict) and should_include(cast(Dict[str, Any], tool))] + + force_exclude = set(policy.get('forceExclude') or []) + filtered: List[Dict[str, Any]] = [] + for tool in candidates: + name = str(tool.get('toolName')) + if name in force_exclude: + excluded.append({'toolName': name, 'reason': 'force-excluded'}) + continue + filtered.append(tool) + + index_by_name = {str(tool.get('toolName')): tool for tool in profile_tools if isinstance(tool, dict)} + for forced_name in policy.get('forceInclude') or []: + forced = index_by_name.get(str(forced_name)) + if forced is None: + excluded.append({'toolName': str(forced_name), 'reason': 'not-in-profile'}) + continue + filtered.append(forced) + + deduped: Dict[str, Dict[str, Any]] = {} + for tool in filtered: + deduped[str(tool.get('toolName'))] = tool + candidates = list(deduped.values()) + + selected: List[Dict[str, Any]] = [] + foundational_ids = set(defaults.get('foundationalOperationIds', [])) + foundational = [tool for tool in candidates if str(tool.get('operationId')) in foundational_ids] + for tool in foundational: + if len(selected) >= min_read_tools or len(selected) >= max_tools: + break + selected.append(tool) + + remaining = [tool for tool in _priority_sort(candidates, phase_policy['priority']) if str(tool.get('toolName')) not in {str(item.get('toolName')) for item in selected}] + + for tool in remaining: + if len(selected) >= max_tools: + excluded.append({'toolName': str(tool.get('toolName')), 'reason': 'budget-trim'}) + continue + selected.append(tool) + + provider_bundle = _read_json_asset(PROVIDER_FILE[provider]) + provider_profiles = provider_bundle.get('profiles') if isinstance(provider_bundle.get('profiles'), dict) else {} + provider_tools = provider_profiles.get(profile) if isinstance(provider_profiles, dict) else [] + provider_index: Dict[str, Dict[str, Any]] = {} + for tool in provider_tools: + if not isinstance(tool, dict): + continue + name = _extract_provider_tool_name(tool) + if name is not None: + provider_index[name] = tool + + selected_provider_tools = [provider_index[name] for name in [str(tool.get('toolName')) for tool in selected] if name in provider_index] + + return { + 'tools': selected_provider_tools, + 'selected': [ + { + 'operationId': str(tool.get('operationId')), + 'toolName': str(tool.get('toolName')), + 'category': str(tool.get('category')), + 'mutates': bool(tool.get('mutates')), + 'profile': str(tool.get('profile')), + } + for tool in selected + ], + 'excluded': excluded, + 'selectionMeta': { + 'profile': profile, + 'phase': phase, + 'maxTools': max_tools, + 'minReadTools': min_read_tools, + 'selectedCount': len(selected), + 'decisionVersion': defaults.get('chooserDecisionVersion', 'v1'), + 'provider': provider, + }, + } + + +def _validate_dispatch_args(operation_id: str, args: Dict[str, Any]) -> None: + operation = OPERATION_INDEX.get(operation_id) + if not isinstance(operation, dict): + raise SuperDocError('Unknown operation id.', code='INVALID_ARGUMENT', details={'operationId': operation_id}) + + params = operation.get('params') + if not isinstance(params, list): + raise SuperDocError('Operation params are invalid.', code='INVALID_ARGUMENT', details={'operationId': operation_id}) + + # Unknown-param rejection + allowed = {param.get('name') for param in params if isinstance(param, dict) and isinstance(param.get('name'), str)} + for key in args.keys(): + if key not in allowed: + raise SuperDocError( + f'Unexpected parameter {key} for {operation_id}.', + code='INVALID_ARGUMENT', + details={'operationId': operation_id, 'param': key}, + ) + + # Required-param enforcement + for param in params: + if not isinstance(param, dict): + continue + name = param.get('name') + if not isinstance(name, str): + continue + if bool(param.get('required')) and args.get(name) is None: + raise SuperDocError( + f'Missing required parameter {name} for {operation_id}.', + code='INVALID_ARGUMENT', + details={'operationId': operation_id, 'param': name}, + ) + + # Constraint validation (CLI handles schema-level type validation authoritatively) + constraints = operation.get('constraints') if isinstance(operation.get('constraints'), dict) else None + if constraints is None: + return + + def _is_present(val: Any) -> bool: + if val is None: + return False + if isinstance(val, list): + return len(val) > 0 + return True + + mutually_exclusive = constraints.get('mutuallyExclusive') if isinstance(constraints.get('mutuallyExclusive'), list) else [] + requires_one_of = constraints.get('requiresOneOf') if isinstance(constraints.get('requiresOneOf'), list) else [] + required_when = constraints.get('requiredWhen') if isinstance(constraints.get('requiredWhen'), list) else [] + + for group in mutually_exclusive: + if not isinstance(group, list): + continue + present = [name for name in group if _is_present(args.get(name))] + if len(present) > 1: + raise SuperDocError( + f'Arguments are mutually exclusive for {operation_id}: {", ".join(group)}', + code='INVALID_ARGUMENT', + details={'operationId': operation_id, 'group': group}, + ) + + for group in requires_one_of: + if not isinstance(group, list): + continue + has_any = any(_is_present(args.get(name)) for name in group) + if not has_any: + raise SuperDocError( + f'One of the following arguments is required for {operation_id}: {", ".join(group)}', + code='INVALID_ARGUMENT', + details={'operationId': operation_id, 'group': group}, + ) + + for rule in required_when: + if not isinstance(rule, dict): + continue + when_param = rule.get('whenParam') + when_value = args.get(when_param) if isinstance(when_param, str) else None + should_require = False + if 'equals' in rule: + should_require = when_value == rule['equals'] + elif 'present' in rule: + if rule['present'] is True: + should_require = _is_present(when_value) + else: + should_require = not _is_present(when_value) + else: + should_require = _is_present(when_value) + + param_name = rule.get('param') + if should_require and isinstance(param_name, str) and not _is_present(args.get(param_name)): + raise SuperDocError( + f'Argument {param_name} is required by constraints for {operation_id}.', + code='INVALID_ARGUMENT', + details={'operationId': operation_id, 'rule': rule}, + ) + + +def _resolve_doc_method(client: Any, operation_id: str) -> Any: + doc = getattr(client, 'doc', None) + if doc is None: + raise SuperDocError('Client has no doc API.', code='TOOL_DISPATCH_NOT_FOUND', details={'operationId': operation_id}) + + cursor = doc + for token in operation_id.split('.')[1:]: + if not hasattr(cursor, token): + raise SuperDocError( + 'No SDK doc method found for operation.', + code='TOOL_DISPATCH_NOT_FOUND', + details={'operationId': operation_id, 'token': token}, + ) + cursor = getattr(cursor, token) + + if not callable(cursor): + raise SuperDocError( + 'Resolved SDK doc member is not callable.', + code='TOOL_DISPATCH_NOT_FOUND', + details={'operationId': operation_id}, + ) + + return cursor + + +def dispatch_superdoc_tool( + client: Any, + tool_name: str, + args: Optional[Dict[str, Any]] = None, + invoke_options: Optional[Dict[str, Any]] = None, +) -> Any: + operation_id = resolve_tool_operation(tool_name) + if operation_id is None: + raise SuperDocError('Unknown SuperDoc tool.', code='TOOL_NOT_FOUND', details={'toolName': tool_name}) + + payload = args or {} + if not isinstance(payload, dict): + raise SuperDocError('Tool arguments must be an object.', code='INVALID_ARGUMENT', details={'toolName': tool_name}) + + _validate_dispatch_args(operation_id, payload) + method = _resolve_doc_method(client, operation_id) + + if inspect.iscoroutinefunction(method): + raise SuperDocError( + 'dispatch_superdoc_tool cannot call async methods. Use dispatch_superdoc_tool_async.', + code='INVALID_ARGUMENT', + details={'toolName': tool_name, 'operationId': operation_id}, + ) + + kwargs = dict(invoke_options or {}) + return method(payload, **kwargs) + + +async def dispatch_superdoc_tool_async( + client: Any, + tool_name: str, + args: Optional[Dict[str, Any]] = None, + invoke_options: Optional[Dict[str, Any]] = None, +) -> Any: + operation_id = resolve_tool_operation(tool_name) + if operation_id is None: + raise SuperDocError('Unknown SuperDoc tool.', code='TOOL_NOT_FOUND', details={'toolName': tool_name}) + + payload = args or {} + if not isinstance(payload, dict): + raise SuperDocError('Tool arguments must be an object.', code='INVALID_ARGUMENT', details={'toolName': tool_name}) + + _validate_dispatch_args(operation_id, payload) + method = _resolve_doc_method(client, operation_id) + kwargs = dict(invoke_options or {}) + + result = method(payload, **kwargs) + if inspect.isawaitable(result): + return await result + + return result diff --git a/packages/sdk/langs/python/superdoc_sdk.egg-info/PKG-INFO b/packages/sdk/langs/python/superdoc_sdk.egg-info/PKG-INFO new file mode 100644 index 0000000000..b82210040a --- /dev/null +++ b/packages/sdk/langs/python/superdoc_sdk.egg-info/PKG-INFO @@ -0,0 +1,7 @@ +Metadata-Version: 2.4 +Name: superdoc-sdk +Version: 1.0.0a4 +Summary: SuperDoc SDK (CLI-backed) +Author: SuperDoc +License-Expression: AGPL-3.0 +Requires-Python: >=3.9 diff --git a/packages/sdk/langs/python/superdoc_sdk.egg-info/SOURCES.txt b/packages/sdk/langs/python/superdoc_sdk.egg-info/SOURCES.txt new file mode 100644 index 0000000000..d854f528f5 --- /dev/null +++ b/packages/sdk/langs/python/superdoc_sdk.egg-info/SOURCES.txt @@ -0,0 +1,26 @@ +pyproject.toml +superdoc/__init__.py +superdoc/embedded_cli.py +superdoc/errors.py +superdoc/runtime.py +superdoc/skill_api.py +superdoc/test_parity_helper.py +superdoc/tools_api.py +superdoc/_vendor/__init__.py +superdoc/_vendor/cli/__init__.py +superdoc/generated/__init__.py +superdoc/generated/client.py +superdoc/generated/contract.py +superdoc/skills/__init__.py +superdoc/skills/editing-docx.md +superdoc/tools/catalog.json +superdoc/tools/tool-name-map.json +superdoc/tools/tools-policy.json +superdoc/tools/tools.anthropic.json +superdoc/tools/tools.generic.json +superdoc/tools/tools.openai.json +superdoc/tools/tools.vercel.json +superdoc_sdk.egg-info/PKG-INFO +superdoc_sdk.egg-info/SOURCES.txt +superdoc_sdk.egg-info/dependency_links.txt +superdoc_sdk.egg-info/top_level.txt \ No newline at end of file diff --git a/packages/sdk/langs/python/superdoc_sdk.egg-info/dependency_links.txt b/packages/sdk/langs/python/superdoc_sdk.egg-info/dependency_links.txt new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/packages/sdk/langs/python/superdoc_sdk.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/packages/sdk/langs/python/superdoc_sdk.egg-info/top_level.txt b/packages/sdk/langs/python/superdoc_sdk.egg-info/top_level.txt new file mode 100644 index 0000000000..9c5371f4dd --- /dev/null +++ b/packages/sdk/langs/python/superdoc_sdk.egg-info/top_level.txt @@ -0,0 +1 @@ +superdoc diff --git a/packages/sdk/package.json b/packages/sdk/package.json new file mode 100644 index 0000000000..09439e928f --- /dev/null +++ b/packages/sdk/package.json @@ -0,0 +1,15 @@ +{ + "name": "@superdoc-dev/sdk-workspace", + "version": "1.0.0-alpha.6", + "private": true, + "type": "module", + "scripts": { + "version:sync": "node scripts/sync-sdk-version.mjs", + "version:set": "node scripts/sync-sdk-version.mjs --set", + "generate": "node scripts/sdk-generate.mjs", + "validate": "node scripts/sdk-validate.mjs", + "build:node": "pnpm --prefix langs/node run build", + "release": "node scripts/sdk-release.mjs", + "release:dry": "node scripts/sdk-release.mjs --dry-run" + } +} diff --git a/packages/sdk/scripts/sdk-generate.mjs b/packages/sdk/scripts/sdk-generate.mjs new file mode 100644 index 0000000000..7d080c2a3f --- /dev/null +++ b/packages/sdk/scripts/sdk-generate.mjs @@ -0,0 +1,172 @@ +#!/usr/bin/env node + +/** + * SDK generation pipeline. + * + * Normal mode: + * 1. Run cli:export-sdk-contract (writes sdk-contract.json) + * 2. Run codegen generate-all.mjs (writes generated client + tool catalog files) + * + * Check mode (--check): + * 1. Run cli:export-sdk-contract --check + * 2. Re-generate to a temp directory and byte-compare with on-disk artifacts + * 3. Exit 0 only if all artifacts are current + */ + +import { execFile } from 'node:child_process'; +import { readFile, readdir, mkdtemp, rm } from 'node:fs/promises'; +import os from 'node:os'; +import path from 'node:path'; +import { promisify } from 'node:util'; +import { fileURLToPath } from 'node:url'; + +const execFileAsync = promisify(execFile); + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const REPO_ROOT = path.resolve(__dirname, '../../../'); +const checkMode = process.argv.includes('--check'); + +async function run(command, args, { cwd = REPO_ROOT } = {}) { + console.log(` > ${command} ${args.join(' ')}`); + const { stdout, stderr } = await execFileAsync(command, args, { cwd, env: process.env }); + if (stdout.trim()) console.log(stdout.trim()); + if (stderr.trim()) console.error(stderr.trim()); +} + +/** + * Recursively collect all files under `dir`, returning paths relative to `dir`. + */ +async function collectFiles(dir) { + const entries = await readdir(dir, { withFileTypes: true }); + const files = []; + for (const entry of entries) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + for (const nested of await collectFiles(full)) { + files.push(path.join(entry.name, nested)); + } + } else { + files.push(entry.name); + } + } + return files.sort(); +} + +/** + * Compare generated artifacts against checked-in versions. + * Returns an array of mismatched relative paths. + */ +async function diffGeneratedArtifacts(tempRoot) { + const drifted = []; + + // Artifact groups: [tempSubDir, repoSubDir] + const artifactDirs = [ + [path.join(tempRoot, 'node-generated'), path.join(REPO_ROOT, 'packages/sdk/langs/node/src/generated')], + [path.join(tempRoot, 'python-generated'), path.join(REPO_ROOT, 'packages/sdk/langs/python/superdoc/generated')], + [path.join(tempRoot, 'tools'), path.join(REPO_ROOT, 'packages/sdk/tools')], + ]; + + for (const [tempDir, repoDir] of artifactDirs) { + let tempFiles = []; + let repoFiles = []; + try { + tempFiles = await collectFiles(tempDir); + } catch { + // temp dir may not exist for some groups + } + try { + repoFiles = await collectFiles(repoDir); + } catch { + // repo dir may not exist + } + + // Forward check: every generated file must match repo + for (const relPath of tempFiles) { + // Skip __init__.py and other non-generated files + if (relPath === '__init__.py') continue; + + const tempFile = path.join(tempDir, relPath); + const repoFile = path.join(repoDir, relPath); + + let tempContent, repoContent; + try { + [tempContent, repoContent] = await Promise.all([ + readFile(tempFile, 'utf8'), + readFile(repoFile, 'utf8'), + ]); + } catch { + drifted.push(relPath); + continue; + } + + if (tempContent !== repoContent) { + drifted.push(relPath); + } + } + + // Reverse check: repo files absent from generated output are stale + const tempFileSet = new Set(tempFiles); + for (const relPath of repoFiles) { + if (relPath === '__init__.py') continue; + if (!tempFileSet.has(relPath)) { + drifted.push(`${relPath} (stale — no longer generated)`); + } + } + } + + return drifted; +} + +async function main() { + if (checkMode) { + console.log('SDK generate --check: verifying generated artifacts are current...'); + + // Step 1: Verify CLI contract is current + await run('bun', [ + path.join(REPO_ROOT, 'apps/cli/scripts/export-sdk-contract.ts'), + '--check', + ]); + + // Step 2: Re-generate to temp dir and byte-compare + const tempDir = await mkdtemp(path.join(os.tmpdir(), 'sdk-check-')); + try { + // Set env to redirect codegen output to temp dir + const env = { + ...process.env, + SDK_CODEGEN_OUTPUT_ROOT: tempDir, + }; + await execFileAsync('node', [ + path.join(REPO_ROOT, 'packages/sdk/codegen/src/generate-all.mjs'), + ], { cwd: REPO_ROOT, env }); + + const drifted = await diffGeneratedArtifacts(tempDir); + if (drifted.length > 0) { + throw new Error(`Generated artifacts are stale:\n ${drifted.join('\n ')}\n\n Run 'pnpm run generate:all' to update.`); + } + } finally { + await rm(tempDir, { recursive: true, force: true }); + } + + console.log('SDK generate --check passed.'); + } else { + console.log('SDK generate: producing generated artifacts...'); + + // Step 1: Export CLI contract + await run('bun', [ + path.join(REPO_ROOT, 'apps/cli/scripts/export-sdk-contract.ts'), + ]); + + // Step 2: Run codegen + await run('node', [ + path.join(REPO_ROOT, 'packages/sdk/codegen/src/generate-all.mjs'), + ]); + + console.log('SDK generate complete.'); + } +} + +main().catch((error) => { + console.error(error.message ?? error); + process.exitCode = 1; +}); diff --git a/packages/sdk/scripts/sdk-release.mjs b/packages/sdk/scripts/sdk-release.mjs new file mode 100644 index 0000000000..c125664921 --- /dev/null +++ b/packages/sdk/scripts/sdk-release.mjs @@ -0,0 +1,139 @@ +#!/usr/bin/env node + +import { execFile } from 'node:child_process'; +import { mkdir, rm, cp, symlink, lstat } from 'node:fs/promises'; +import path from 'node:path'; +import { promisify } from 'node:util'; +import { fileURLToPath } from 'node:url'; + +const execFileAsync = promisify(execFile); + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const REPO_ROOT = path.resolve(__dirname, '../../../'); +const NODE_SDK_DIR = path.join(REPO_ROOT, 'packages/sdk/langs/node'); +const PYTHON_SDK_DIR = path.join(REPO_ROOT, 'packages/sdk/langs/python'); +const TOOLS_SOURCE = path.join(REPO_ROOT, 'packages/sdk/tools'); +const NPM_CACHE_DIR = path.join(REPO_ROOT, '.cache', 'npm'); + +const argv = process.argv.slice(2); +const dryRun = argv.includes('--dry-run'); + +function parseArgValue(name) { + const index = argv.indexOf(name); + if (index === -1) return null; + const value = argv[index + 1]; + if (!value || value.startsWith('-')) { + throw new Error(`Missing value for ${name}`); + } + return value; +} + +async function run(command, args, { cwd = REPO_ROOT, env = {} } = {}) { + console.log(` > ${command} ${args.join(' ')}`); + const { stdout, stderr } = await execFileAsync(command, args, { + cwd, + env: { ...process.env, ...env }, + }); + if (stdout.trim()) console.log(stdout.trim()); + if (stderr.trim()) console.error(stderr.trim()); +} + +/** + * Replace a symlink with a real copy of the tools directory for packaging, + * then restore the symlink when done. + */ +async function withMaterializedTools(symlinkPath, relativeTarget, fn) { + let wasSymlink = false; + try { + const stat = await lstat(symlinkPath); + wasSymlink = stat.isSymbolicLink(); + } catch { + // path doesn't exist — nothing to restore + } + + if (wasSymlink) { + await rm(symlinkPath, { recursive: true, force: true }); + } + await cp(TOOLS_SOURCE, symlinkPath, { recursive: true }); + // Remove Python-only __init__.py from Node copies + try { await rm(path.join(symlinkPath, '__init__.py'), { force: true }); } catch { /* noop */ } + + try { + await fn(); + } finally { + if (wasSymlink) { + await rm(symlinkPath, { recursive: true, force: true }); + await symlink(relativeTarget, symlinkPath); + } + } +} + +async function main() { + const distTag = parseArgValue('--tag') ?? process.env.RELEASE_DIST_TAG ?? 'latest'; + + if (!dryRun) { + const npmToken = process.env.NODE_AUTH_TOKEN ?? process.env.NPM_TOKEN; + if (!npmToken) { + throw new Error('Missing npm auth token. Set NODE_AUTH_TOKEN or NPM_TOKEN before sdk:release.'); + } + } + + console.log(`SDK release pipeline${dryRun ? ' (dry-run)' : ''}...`); + + // Shared steps + await run('node', [path.join(REPO_ROOT, 'packages/sdk/scripts/sync-sdk-version.mjs')]); + await run('node', [path.join(REPO_ROOT, 'scripts/generate-all.mjs')]); + await run('node', [path.join(REPO_ROOT, 'packages/sdk/scripts/sdk-validate.mjs')]); + + // --- Node SDK --- + console.log('\n--- Node SDK ---'); + await run('pnpm', ['run', 'build'], { cwd: NODE_SDK_DIR }); + + await mkdir(NPM_CACHE_DIR, { recursive: true }); + + const publishArgs = [ + 'publish', + '--access', + 'public', + '--tag', + distTag, + '--no-git-checks', + ]; + if (dryRun) publishArgs.push('--dry-run'); + + await run('pnpm', publishArgs, { + cwd: NODE_SDK_DIR, + env: { + npm_config_cache: NPM_CACHE_DIR, + NODE_AUTH_TOKEN: process.env.NODE_AUTH_TOKEN ?? process.env.NPM_TOKEN ?? '', + }, + }); + + // --- Python SDK --- + // Python publishing is handled by the release-sdk.yml workflow via PyPI trusted publishing (OIDC). + // This script only builds the wheel for local verification. + console.log('\n--- Python SDK (build only — publish via release-sdk.yml workflow) ---'); + const pythonToolsSymlink = path.join(PYTHON_SDK_DIR, 'superdoc', 'tools'); + + await withMaterializedTools(pythonToolsSymlink, '../../../tools', async () => { + await rm(path.join(PYTHON_SDK_DIR, 'dist'), { recursive: true, force: true }); + await rm(path.join(PYTHON_SDK_DIR, 'build'), { recursive: true, force: true }); + + await run('python3', ['-m', 'build'], { cwd: PYTHON_SDK_DIR }); + console.log(' Python wheel built. Use the release-sdk.yml workflow to publish to PyPI.'); + + // Clean build artifacts + await rm(path.join(PYTHON_SDK_DIR, 'dist'), { recursive: true, force: true }); + await rm(path.join(PYTHON_SDK_DIR, 'build'), { recursive: true, force: true }); + await rm(path.join(PYTHON_SDK_DIR, 'superdoc_sdk.egg-info'), { recursive: true, force: true }); + try { await rm(path.join(PYTHON_SDK_DIR, 'setup.py'), { force: true }); } catch { /* noop */ } + }); + + console.log(`\nSDK release${dryRun ? ' dry-run' : ''} complete.`); +} + +main().catch((error) => { + console.error(error.message ?? error); + process.exitCode = 1; +}); diff --git a/packages/sdk/scripts/sdk-validate.mjs b/packages/sdk/scripts/sdk-validate.mjs new file mode 100644 index 0000000000..44dda84315 --- /dev/null +++ b/packages/sdk/scripts/sdk-validate.mjs @@ -0,0 +1,293 @@ +#!/usr/bin/env node + +/** + * SDK validation pipeline. + * + * Checks: + * 1. CLI export contract is current (--check) + * 2. Contract JSON loads and has required structure + * 3. All operations have outputSchema + * 4. Node SDK typechecks (tsc --noEmit) + * 5. Python SDK imports successfully + * 6. Tool catalog operation count matches contract + * 7. Tool name map covers all operations + * 8. Provider bundles are consistent + * 9. Node/Python parity — both generated clients expose same operations + * 10. Catalog input schemas present and required params match contract + * 11. Skill files only reference existing operations (fails on unknown refs) + * 12. Provider tool name extraction smoke test + * 13. Node npm pack includes required tools/*.json assets + * 14. SDK test suite passes (contract-integrity + cross-lang parity) + */ + +import { execFile } from 'node:child_process'; +import { readFile, readdir } from 'node:fs/promises'; +import path from 'node:path'; +import { promisify } from 'node:util'; +import { fileURLToPath } from 'node:url'; + +const execFileAsync = promisify(execFile); + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const REPO_ROOT = path.resolve(__dirname, '../../../'); + +let failures = 0; +let passes = 0; + +async function check(name, fn) { + try { + await fn(); + passes += 1; + console.log(` ✓ ${name}`); + } catch (error) { + failures += 1; + console.error(` ✗ ${name}`); + console.error(` ${error.message ?? error}`); + } +} + +async function run(command, args, { cwd = REPO_ROOT } = {}) { + const { stdout } = await execFileAsync(command, args, { cwd, env: process.env }); + return stdout.trim(); +} + +async function readJson(filePath) { + return JSON.parse(await readFile(filePath, 'utf8')); +} + +async function main() { + console.log('SDK validation...\n'); + + // 1. Contract freshness + await check('CLI export contract is current', async () => { + await run('bun', [ + path.join(REPO_ROOT, 'apps/cli/scripts/export-sdk-contract.ts'), + '--check', + ]); + }); + + // 2. Load contract and verify structure + const contractPath = path.join(REPO_ROOT, 'apps/cli/generated/sdk-contract.json'); + let contract; + await check('Contract JSON loads and has operations', async () => { + contract = await readJson(contractPath); + const opCount = Object.keys(contract.operations).length; + if (opCount === 0) throw new Error('Contract has zero operations'); + if (!contract.contractVersion) throw new Error('Missing contractVersion'); + if (!contract.cli) throw new Error('Missing cli metadata'); + if (!contract.protocol) throw new Error('Missing protocol metadata'); + }); + + // 3. All operations have outputSchema + await check('All operations have outputSchema', async () => { + for (const [id, op] of Object.entries(contract.operations)) { + if (!op.outputSchema) throw new Error(`${id} missing outputSchema`); + } + }); + + // 4. Node SDK typecheck + await check('Node SDK typechecks (tsc --noEmit)', async () => { + await run('npx', ['tsc', '--noEmit'], { + cwd: path.join(REPO_ROOT, 'packages/sdk/langs/node'), + }); + }); + + // 5. Python SDK imports + await check('Python SDK imports successfully', async () => { + await run('python3', [ + '-c', + 'from superdoc import SuperDocClient, AsyncSuperDocClient, SuperDocError, get_tool_catalog, list_tools, resolve_tool_operation, choose_tools, dispatch_superdoc_tool, dispatch_superdoc_tool_async, infer_document_features', + ], { + cwd: path.join(REPO_ROOT, 'packages/sdk/langs/python'), + }); + }); + + // 6. Tool catalog integrity + await check('Tool catalog operation count matches contract', async () => { + const catalog = await readJson(path.join(REPO_ROOT, 'packages/sdk/tools/catalog.json')); + const contractOpCount = Object.keys(contract.operations).length; + const intentToolCount = catalog.profiles.intent.tools.length; + const operationToolCount = catalog.profiles.operation.tools.length; + + if (intentToolCount !== contractOpCount) { + throw new Error(`Intent tools (${intentToolCount}) != contract ops (${contractOpCount})`); + } + if (operationToolCount !== contractOpCount) { + throw new Error(`Operation tools (${operationToolCount}) != contract ops (${contractOpCount})`); + } + }); + + // 7. Tool name map covers all operations + await check('Tool name map covers all operations', async () => { + const nameMap = await readJson(path.join(REPO_ROOT, 'packages/sdk/tools/tool-name-map.json')); + const contractOps = new Set(Object.keys(contract.operations)); + const mappedOps = new Set(Object.values(nameMap)); + + for (const opId of contractOps) { + if (!mappedOps.has(opId)) { + throw new Error(`Operation ${opId} not covered by any tool name`); + } + } + }); + + // 8. Provider bundles exist and have correct profile counts + await check('Provider bundles are consistent', async () => { + const providers = ['openai', 'anthropic', 'vercel', 'generic']; + const contractOpCount = Object.keys(contract.operations).length; + + for (const provider of providers) { + const bundle = await readJson(path.join(REPO_ROOT, `packages/sdk/tools/tools.${provider}.json`)); + if (!bundle.profiles) throw new Error(`${provider} bundle missing profiles`); + if (!Array.isArray(bundle.profiles.intent)) throw new Error(`${provider} bundle missing intent tools`); + if (!Array.isArray(bundle.profiles.operation)) throw new Error(`${provider} bundle missing operation tools`); + if (bundle.profiles.intent.length !== contractOpCount) { + throw new Error(`${provider} intent tool count mismatch`); + } + if (bundle.profiles.operation.length !== contractOpCount) { + throw new Error(`${provider} operation tool count mismatch`); + } + } + }); + + // 9. Node/Python parity — generated clients expose same operations + await check('Node/Python generated clients have matching operation counts', async () => { + const nodeContract = await readFile( + path.join(REPO_ROOT, 'packages/sdk/langs/node/src/generated/contract.ts'), + 'utf8', + ); + const pythonContract = await readFile( + path.join(REPO_ROOT, 'packages/sdk/langs/python/superdoc/generated/contract.py'), + 'utf8', + ); + + // Count operation IDs in each generated contract. + // Node: pretty-printed JSON → "operationId": "doc.find" + // Python: escaped JSON string → \"operationId\":\"doc.find\" + const nodeOps = (nodeContract.match(/"operationId":\s*"doc\.[^"]+"/g) ?? []).length; + const pythonOps = (pythonContract.match(/\\"operationId\\":\\"doc\.[^\\]+\\"/g) ?? []).length; + + if (nodeOps === 0) throw new Error('Node contract has zero operation references'); + if (pythonOps === 0) throw new Error('Python contract has zero operation references'); + if (nodeOps !== pythonOps) { + throw new Error(`Node (${nodeOps}) and Python (${pythonOps}) operation counts differ`); + } + }); + + // 10. All catalog tools have input schemas and required params match contract + await check('Catalog input schemas present and required params match contract', async () => { + const catalog = await readJson(path.join(REPO_ROOT, 'packages/sdk/tools/catalog.json')); + + for (const profileKey of ['intent', 'operation']) { + for (const tool of catalog.profiles[profileKey].tools) { + if (!tool.inputSchema || typeof tool.inputSchema !== 'object') { + throw new Error(`${tool.operationId} (${profileKey}) missing inputSchema`); + } + + // Verify required params from contract appear as required in inputSchema + const contractOp = contract.operations[tool.operationId]; + if (!contractOp) continue; + + const contractRequired = (contractOp.params ?? []) + .filter((p) => p.required === true) + .map((p) => p.name) + // Exclude transport-envelope params that are intentionally omitted from tool schemas + .filter((name) => !['out', 'json', 'expectedRevision', 'changeMode', 'dryRun'].includes(name)); + + const schemaRequired = new Set(tool.inputSchema.required ?? []); + for (const name of contractRequired) { + // Only check if the param is in the schema properties (some params are omitted by design) + if (tool.inputSchema.properties && name in tool.inputSchema.properties && !schemaRequired.has(name)) { + throw new Error( + `${tool.operationId} (${profileKey}): param "${name}" is required in contract but not in inputSchema`, + ); + } + } + } + } + }); + + // 11. Skill files only reference existing operations + await check('Skill files reference valid operations', async () => { + const skillDirs = [ + path.join(REPO_ROOT, 'packages/sdk/langs/node/skills'), + path.join(REPO_ROOT, 'packages/sdk/langs/python/superdoc/skills'), + ]; + const validOps = new Set(Object.keys(contract.operations)); + const unknownRefs = []; + + for (const dir of skillDirs) { + let files; + try { + files = await readdir(dir); + } catch { + continue; + } + for (const file of files) { + if (!file.endsWith('.md')) continue; + const content = await readFile(path.join(dir, file), 'utf8'); + // Match operation-style references: doc.something.something + const opRefs = content.match(/\bdoc\.\w+(?:\.\w+)*/g) ?? []; + for (const ref of opRefs) { + if (validOps.has(ref)) continue; + // Must have at least one dot beyond doc. to look like an operation + if (ref.split('.').length < 2) continue; + // Allow namespace prefixes (e.g., doc.format is a prefix of doc.format.bold) + const isNamespacePrefix = [...validOps].some((op) => op.startsWith(ref + '.')); + if (isNamespacePrefix) continue; + unknownRefs.push(`${path.basename(dir)}/${file}: ${ref}`); + } + } + } + + if (unknownRefs.length > 0) { + throw new Error(`Skill files reference unknown operations:\n ${unknownRefs.join('\n ')}`); + } + }); + + // 12. Provider tool name extraction smoke test + await check('OpenAI/Vercel tools have extractable names', async () => { + const openaiBundle = await readJson(path.join(REPO_ROOT, 'packages/sdk/tools/tools.openai.json')); + const nameMap = await readJson(path.join(REPO_ROOT, 'packages/sdk/tools/tool-name-map.json')); + + for (const tool of openaiBundle.profiles.intent) { + const name = tool?.function?.name ?? tool?.name; + if (typeof name !== 'string' || !name) { + throw new Error('OpenAI intent tool missing extractable name'); + } + if (!(name in nameMap)) { + throw new Error(`OpenAI tool name "${name}" not in tool-name-map`); + } + } + }); + + // 13. Node package tarball includes required tools/*.json assets + await check('Node npm pack includes tools/*.json assets', async () => { + const npmCacheDir = path.join(REPO_ROOT, '.cache', 'npm'); + const { stdout } = await execFileAsync('npm', ['pack', '--dry-run', '--json'], { + cwd: path.join(REPO_ROOT, 'packages/sdk/langs/node'), + env: { ...process.env, npm_config_cache: npmCacheDir }, + }); + const packOutput = JSON.parse(stdout); + const files = (packOutput[0]?.files ?? []).map((f) => f.path); + + const requiredTools = ['catalog.json', 'tool-name-map.json', 'tools.openai.json', 'tools.anthropic.json', 'tools.vercel.json', 'tools.generic.json']; + const missing = requiredTools.filter((name) => !files.some((f) => f === `tools/${name}`)); + if (missing.length > 0) { + throw new Error(`Node tarball missing tools: ${missing.join(', ')}. Check symlinks and prepack script.`); + } + }); + + // 14. Run SDK test suite (contract-integrity + cross-lang parity) + await check('SDK test suite passes (bun test)', async () => { + await run('bun', ['test', path.join(REPO_ROOT, 'packages/sdk/codegen/src/__tests__/')]); + }); + + console.log(`\n${passes} passed, ${failures} failed`); + if (failures > 0) process.exitCode = 1; +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/packages/sdk/scripts/sync-sdk-version.mjs b/packages/sdk/scripts/sync-sdk-version.mjs new file mode 100644 index 0000000000..b4a6baea26 --- /dev/null +++ b/packages/sdk/scripts/sync-sdk-version.mjs @@ -0,0 +1,137 @@ +#!/usr/bin/env node + +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const REPO_ROOT = path.resolve(__dirname, '../../../'); + +const SDK_WORKSPACE_PACKAGE = path.join(REPO_ROOT, 'packages/sdk/package.json'); +const NODE_PACKAGE = path.join(REPO_ROOT, 'packages/sdk/langs/node/package.json'); +const PYPROJECT_FILE = path.join(REPO_ROOT, 'packages/sdk/langs/python/pyproject.toml'); +const LEGACY_VERSION_FILE = path.join(REPO_ROOT, 'packages/sdk/version.json'); + +const OPTIONAL_PLATFORM_PACKAGES = [ + '@superdoc-dev/sdk-darwin-arm64', + '@superdoc-dev/sdk-darwin-x64', + '@superdoc-dev/sdk-linux-arm64', + '@superdoc-dev/sdk-linux-x64', + '@superdoc-dev/sdk-windows-x64', +]; + +const SEMVER_RE = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/; + +function parseSetVersion(argv) { + const setIndex = argv.indexOf('--set'); + if (setIndex !== -1) { + const value = argv[setIndex + 1]; + if (!value || value.startsWith('-')) { + throw new Error('Missing value for --set'); + } + return value; + } + + if (argv.length === 1 && !argv[0].startsWith('-')) { + return argv[0]; + } + + return null; +} + +function assertSemver(version) { + if (!SEMVER_RE.test(version)) { + throw new Error(`Invalid semantic version: "${version}"`); + } +} + +async function readJson(filePath) { + return JSON.parse(await readFile(filePath, 'utf8')); +} + +async function writeJson(filePath, data) { + await writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8'); +} + +function escapeRegExp(value) { + return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +async function syncNodePackage(version) { + const raw = await readFile(NODE_PACKAGE, 'utf8'); + const packageVersionRe = /("version"\s*:\s*")([^"]*)(")/; + if (!packageVersionRe.test(raw)) { + throw new Error(`Could not find version in ${NODE_PACKAGE}`); + } + + let next = raw.replace(packageVersionRe, `$1${version}$3`); + for (const packageName of OPTIONAL_PLATFORM_PACKAGES) { + const optionalDepRe = new RegExp(`("${escapeRegExp(packageName)}"\\s*:\\s*")([^"]*)(")`); + if (optionalDepRe.test(next)) { + next = next.replace(optionalDepRe, `$1${version}$3`); + } + } + + if (next !== raw) { + await writeFile(NODE_PACKAGE, next, 'utf8'); + } +} + +async function syncPythonPackage(version) { + const raw = await readFile(PYPROJECT_FILE, 'utf8'); + const versionLineRe = /^version\s*=\s*"[^"]*"/m; + if (!versionLineRe.test(raw)) { + throw new Error(`Could not find [project].version in ${PYPROJECT_FILE}`); + } + + const next = raw.replace(versionLineRe, `version = "${version}"`); + if (next !== raw) { + await writeFile(PYPROJECT_FILE, next, 'utf8'); + } +} + +async function syncLegacyVersionFile(version) { + try { + const versionState = await readJson(LEGACY_VERSION_FILE); + if (versionState.sdkVersion !== version) { + versionState.sdkVersion = version; + await writeJson(LEGACY_VERSION_FILE, versionState); + } + } catch { + // Legacy file is optional for compatibility with old tooling. + } +} + +async function main() { + const argv = process.argv.slice(2); + const requestedVersion = parseSetVersion(argv); + + const workspacePackage = await readJson(SDK_WORKSPACE_PACKAGE); + let version = workspacePackage.version; + + if (requestedVersion) { + assertSemver(requestedVersion); + version = requestedVersion; + if (workspacePackage.version !== version) { + workspacePackage.version = version; + await writeJson(SDK_WORKSPACE_PACKAGE, workspacePackage); + } + } + + if (typeof version !== 'string' || !version.trim()) { + throw new Error(`Missing "version" in ${SDK_WORKSPACE_PACKAGE}`); + } + assertSemver(version); + + await syncNodePackage(version); + await syncPythonPackage(version); + await syncLegacyVersionFile(version); + + console.log(`Synchronized SDK versions from packages/sdk/package.json -> ${version}`); +} + +main().catch((error) => { + console.error(error instanceof Error ? error.message : error); + process.exitCode = 1; +}); diff --git a/packages/sdk/tools/__init__.py b/packages/sdk/tools/__init__.py new file mode 100644 index 0000000000..930a8de1f0 --- /dev/null +++ b/packages/sdk/tools/__init__.py @@ -0,0 +1 @@ +# This file makes the tools directory a Python package for importlib.resources. diff --git a/packages/sdk/version.json b/packages/sdk/version.json new file mode 100644 index 0000000000..2354492e3a --- /dev/null +++ b/packages/sdk/version.json @@ -0,0 +1,3 @@ +{ + "sdkVersion": "1.0.0-alpha.6" +} diff --git a/packages/superdoc/src/super-editor.js b/packages/superdoc/src/super-editor.js index 0610ac54f8..1d6514db72 100644 --- a/packages/superdoc/src/super-editor.js +++ b/packages/superdoc/src/super-editor.js @@ -1,4 +1 @@ export * from '@superdoc/super-editor'; -export * from '@superdoc/super-editor/docx-zipper'; -export * from '@superdoc/super-editor/toolbar'; -export * from '@superdoc/super-editor/file-zipper'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 569047d054..9390c74e53 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ catalogs: version: 19.8.1 '@eslint/js': specifier: ^9.31.0 - version: 9.39.2 + version: 9.39.3 '@floating-ui/dom': specifier: ^1.7.0 version: 1.7.5 @@ -32,7 +32,7 @@ catalogs: version: 53.0.0 '@playwright/test': specifier: ^1.57.0 - version: 1.58.1 + version: 1.58.2 '@semantic-release/changelog': specifier: ^6.0.3 version: 6.0.3 @@ -50,25 +50,25 @@ catalogs: version: 14.6.1 '@types/bun': specifier: ^1.3.8 - version: 1.3.8 + version: 1.3.9 '@types/node': specifier: 22.19.2 version: 22.19.2 '@types/react': specifier: ^19.2.6 - version: 19.2.11 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 version: 19.2.3 '@typescript-eslint/eslint-plugin': specifier: ^8.49.0 - version: 8.54.0 + version: 8.56.0 '@typescript-eslint/parser': specifier: ^8.49.0 - version: 8.54.0 + version: 8.56.0 '@vitejs/plugin-react': specifier: ^5.1.1 - version: 5.1.3 + version: 5.1.4 '@vitejs/plugin-vue': specifier: 6.0.2 version: 6.0.2 @@ -92,7 +92,7 @@ catalogs: version: 16.6.1 eslint: specifier: ^9.39.1 - version: 9.39.2 + version: 9.39.3 eslint-config-prettier: specifier: ^9.1.0 version: 9.1.2 @@ -143,7 +143,7 @@ catalogs: version: 2.43.2 nodemon: specifier: ^3.1.10 - version: 3.1.11 + version: 3.1.13 patch-package: specifier: ^8.0.1 version: 8.0.1 @@ -158,7 +158,7 @@ catalogs: version: 7.1.0 playwright: specifier: ^1.56.0 - version: 1.58.1 + version: 1.58.2 postcss-nested: specifier: ^6.0.1 version: 6.2.0 @@ -212,7 +212,7 @@ catalogs: version: 1.11.0 prosemirror-view: specifier: ^1.33.8 - version: 1.41.5 + version: 1.41.6 react: specifier: 19.2.4 version: 19.2.4 @@ -260,7 +260,7 @@ catalogs: version: 5.9.3 typescript-eslint: specifier: ^8.49.0 - version: 8.54.0 + version: 8.56.0 unified: specifier: 11.0.5 version: 11.0.5 @@ -326,7 +326,7 @@ importers: version: 19.8.1 '@eslint/js': specifier: 'catalog:' - version: 9.39.2 + version: 9.39.3 '@semantic-release/changelog': specifier: 'catalog:' version: 6.0.3(semantic-release@24.2.9(typescript@5.9.3)) @@ -338,28 +338,28 @@ importers: version: 22.19.2 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-v8': specifier: 'catalog:' - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) eslint: specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) + version: 9.39.3(jiti@2.6.1) eslint-config-prettier: specifier: 'catalog:' - version: 9.1.2(eslint@9.39.2(jiti@2.6.1)) + version: 9.1.2(eslint@9.39.3(jiti@2.6.1)) eslint-import-resolver-typescript: specifier: 'catalog:' - version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-import-x: specifier: 'catalog:' - version: 4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + version: 4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-jsdoc: specifier: 'catalog:' - version: 54.7.0(eslint@9.39.2(jiti@2.6.1)) + version: 54.7.0(eslint@9.39.3(jiti@2.6.1)) happy-dom: specifier: 20.4.0 version: 20.4.0 @@ -395,16 +395,16 @@ importers: version: 5.9.3 typescript-eslint: specifier: 'catalog:' - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) verdaccio: specifier: 'catalog:' version: 6.2.5(typanion@3.14.0) vite-plugin-node-polyfills: specifier: 'catalog:' - version: 0.25.0(rollup@4.57.1)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.25.0(rollup@4.58.0)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: canvas: specifier: 3.2.0 @@ -433,7 +433,7 @@ importers: version: link:../../packages/super-editor '@types/bun': specifier: 'catalog:' - version: 1.3.8 + version: 1.3.9 '@types/node': specifier: 'catalog:' version: 22.19.2 @@ -443,22 +443,6 @@ importers: typescript: specifier: 'catalog:' version: 5.9.3 - optionalDependencies: - '@superdoc-dev/cli-darwin-arm64': - specifier: workspace:* - version: link:platforms/cli-darwin-arm64 - '@superdoc-dev/cli-darwin-x64': - specifier: workspace:* - version: link:platforms/cli-darwin-x64 - '@superdoc-dev/cli-linux-arm64': - specifier: workspace:* - version: link:platforms/cli-linux-arm64 - '@superdoc-dev/cli-linux-x64': - specifier: workspace:* - version: link:platforms/cli-linux-x64 - '@superdoc-dev/cli-windows-x64': - specifier: workspace:* - version: link:platforms/cli-windows-x64 apps/docs: devDependencies: @@ -467,7 +451,7 @@ importers: version: 14.0.3 mintlify: specifier: ^4.2.331 - version: 4.2.331(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + version: 4.2.368(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) remark-mdx: specifier: ^3.1.1 version: 3.1.1 @@ -495,7 +479,7 @@ importers: version: 22.19.2 '@types/vscode': specifier: ^1.107.0 - version: 1.108.1 + version: 1.109.0 '@vscode/vsce': specifier: ^2.32.0 version: 2.32.0 @@ -516,7 +500,7 @@ importers: version: 53.0.0 '@playwright/test': specifier: 'catalog:' - version: 1.58.1 + version: 1.58.2 jszip: specifier: 'catalog:' version: 3.10.1 @@ -525,7 +509,7 @@ importers: version: 8.0.1 playwright: specifier: 'catalog:' - version: 1.58.1 + version: 1.58.2 vue: specifier: 3.5.25 version: 3.5.25(typescript@5.9.3) @@ -535,19 +519,19 @@ importers: version: 22.19.2 '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) jimp: specifier: 'catalog:' version: 1.6.0 nodemon: specifier: 'catalog:' - version: 3.1.11 + version: 3.1.13 pixelmatch: specifier: 'catalog:' version: 7.1.0 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) e2e-tests/templates/vue: dependencies: @@ -563,16 +547,16 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) examples/__tests__: devDependencies: '@playwright/test': specifier: ^1.50.0 - version: 1.58.1 + version: 1.58.2 serve: specifier: ^14.2.0 version: 14.2.5 @@ -584,16 +568,16 @@ importers: version: 22.19.2 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) '@vitejs/plugin-vue': specifier: 'catalog:' version: 6.0.2(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) eslint: specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) + version: 9.39.3(jiti@2.6.1) prosemirror-model: specifier: 'catalog:' version: 1.25.4 @@ -602,19 +586,19 @@ importers: version: 1.4.4 prosemirror-view: specifier: 'catalog:' - version: 1.41.5 + version: 1.41.6 superdoc: specifier: 'workspace:' version: link:../superdoc tsup: specifier: 'catalog:' - version: 8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: 'catalog:' version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) vue: specifier: 3.5.25 version: 3.5.25(typescript@5.9.3) @@ -636,34 +620,34 @@ importers: version: 22.19.2 '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-v8': specifier: 'catalog:' - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) concurrently: specifier: 'catalog:' version: 9.2.1 eslint: specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) + version: 9.39.3(jiti@2.6.1) eslint-config-prettier: specifier: 'catalog:' - version: 9.1.2(eslint@9.39.2(jiti@2.6.1)) + version: 9.1.2(eslint@9.39.3(jiti@2.6.1)) nodemon: specifier: 'catalog:' - version: 3.1.11 + version: 3.1.13 prettier: specifier: ^3.5.3 version: 3.8.1 tsup: specifier: 'catalog:' - version: 8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: 'catalog:' version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/document-api: {} @@ -674,25 +658,25 @@ importers: version: 6.9.1 '@testing-library/react': specifier: 'catalog:' - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@testing-library/user-event': specifier: 'catalog:' version: 14.6.1(@testing-library/dom@10.4.1) '@types/react': specifier: 'catalog:' - version: 19.2.11 + version: 19.2.14 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.11) + version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) eslint-plugin-react: specifier: 'catalog:' - version: 7.37.5(eslint@9.39.2(jiti@2.6.1)) + version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-react-hooks: specifier: 'catalog:' - version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) + version: 7.0.1(eslint@9.39.3(jiti@2.6.1)) jsdom: specifier: 27.3.0 version: 27.3.0(canvas@3.2.0) @@ -710,13 +694,13 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) + version: 4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/esign/demo: dependencies: @@ -741,19 +725,19 @@ importers: devDependencies: '@types/react': specifier: 'catalog:' - version: 19.2.11 + version: 19.2.14 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.11) + version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages/esign/demo/server: dependencies: @@ -778,7 +762,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/layout-bridge: dependencies: @@ -809,13 +793,13 @@ importers: version: 22.19.2 tsup: specifier: 'catalog:' - version: 8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: 'catalog:' version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/layout-engine: dependencies: @@ -867,7 +851,7 @@ importers: devDependencies: vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/pm-adapter: dependencies: @@ -907,7 +891,7 @@ importers: version: link:../painters/dom vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/style-engine: dependencies: @@ -923,7 +907,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/tests: dependencies: @@ -959,32 +943,32 @@ importers: dependencies: superdoc: specifier: '>=1.0.0' - version: 1.11.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) + version: 1.15.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) devDependencies: '@testing-library/react': specifier: 'catalog:' - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/node': specifier: 'catalog:' version: 22.19.2 '@types/react': specifier: 'catalog:' - version: 19.2.11 + version: 19.2.14 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.11) + version: 19.2.3(@types/react@19.2.14) '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) eslint: specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) + version: 9.39.3(jiti@2.6.1) happy-dom: specifier: 20.4.0 version: 20.4.0 @@ -999,13 +983,29 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) + version: 4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + + packages/sdk: {} + + packages/sdk/codegen: {} + + packages/sdk/langs/node: + devDependencies: + '@types/bun': + specifier: 'catalog:' + version: 1.3.9 + '@types/node': + specifier: 'catalog:' + version: 22.19.2 + typescript: + specifier: 'catalog:' + version: 5.9.3 packages/super-editor: dependencies: @@ -1071,7 +1071,7 @@ importers: version: 1.11.0 prosemirror-view: specifier: 'catalog:' - version: 1.41.5 + version: 1.41.6 rehype-parse: specifier: 'catalog:' version: 9.0.1 @@ -1098,7 +1098,7 @@ importers: version: 1.6.11 y-prosemirror: specifier: 'catalog:' - version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) + version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) yjs: specifier: 'catalog:' version: 13.6.19 @@ -1141,7 +1141,7 @@ importers: version: link:../word-layout '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) '@vue/test-utils': specifier: 'catalog:' version: 2.4.6 @@ -1168,13 +1168,13 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-node-polyfills: specifier: 'catalog:' - version: 0.25.0(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1) + version: 0.25.0(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) y-protocols: specifier: 'catalog:' version: 1.0.7(yjs@13.6.19) @@ -1210,7 +1210,7 @@ importers: version: 3.5.25(typescript@5.9.3) y-prosemirror: specifier: 'catalog:' - version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) + version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) y-websocket: specifier: 'catalog:' version: 3.0.0(yjs@13.6.19) @@ -1232,7 +1232,7 @@ importers: version: link:../super-editor '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) '@vue/test-utils': specifier: 'catalog:' version: 2.4.6 @@ -1244,7 +1244,7 @@ importers: version: 3.10.1 nodemon: specifier: 'catalog:' - version: 3.1.11 + version: 3.1.13 pdfjs-dist: specifier: 'catalog:' version: 5.4.624 @@ -1262,22 +1262,22 @@ importers: version: 1.4.4 rollup-plugin-visualizer: specifier: 'catalog:' - version: 5.14.0(rollup@4.57.1) + version: 5.14.0(rollup@4.58.0) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) + version: 4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) vite-plugin-node-polyfills: specifier: 'catalog:' - version: 0.25.0(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1) + version: 0.25.0(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) xml-js: specifier: 'catalog:' version: 1.6.11 @@ -1286,7 +1286,7 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.58.1 + version: 1.58.2 serve: specifier: ^14.2.0 version: 14.2.5 @@ -1298,25 +1298,25 @@ importers: version: 6.9.1 '@testing-library/react': specifier: 'catalog:' - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@testing-library/user-event': specifier: 'catalog:' version: 14.6.1(@testing-library/dom@10.4.1) '@types/react': specifier: 'catalog:' - version: 19.2.11 + version: 19.2.14 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.11) + version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) eslint-plugin-react: specifier: 'catalog:' - version: 7.37.5(eslint@9.39.2(jiti@2.6.1)) + version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-react-hooks: specifier: 'catalog:' - version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) + version: 7.0.1(eslint@9.39.3(jiti@2.6.1)) jsdom: specifier: 27.3.0 version: 27.3.0(canvas@3.2.0) @@ -1334,13 +1334,13 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) + version: 4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/template-builder/demo: dependencies: @@ -1359,25 +1359,25 @@ importers: devDependencies: '@types/react': specifier: 'catalog:' - version: 19.2.11 + version: 19.2.14 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.11) + version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages/word-layout: devDependencies: vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) shared/common: devDependencies: @@ -1392,7 +1392,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) vue: specifier: 3.5.25 version: 3.5.25(typescript@5.9.3) @@ -1414,10 +1414,10 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.58.1 + version: 1.58.2 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) tests/visual: dependencies: @@ -1427,13 +1427,13 @@ importers: devDependencies: '@aws-sdk/client-s3': specifier: ^3.988.0 - version: 3.988.0 + version: 3.995.0 '@clack/prompts': specifier: ^1.0.0 - version: 1.0.0 + version: 1.0.1 '@playwright/test': specifier: 'catalog:' - version: 1.58.1 + version: 1.58.2 dotenv: specifier: 'catalog:' version: 16.6.1 @@ -1442,7 +1442,7 @@ importers: version: 4.21.0 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages: @@ -1452,8 +1452,8 @@ packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@alcalzone/ansi-tokenize@0.2.4': - resolution: {integrity: sha512-HTgrrTgZ9Jgeo6Z3oqbQ7lifOVvRR14vaDuBGPPUxk9Thm+vObaO4QfYYYWw4Zo5CWQDBEfsinFA6Gre+AqwNQ==} + '@alcalzone/ansi-tokenize@0.2.5': + resolution: {integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==} engines: {node: '>=18'} '@alloc/quick-lru@5.2.0': @@ -1467,20 +1467,14 @@ packages: '@ark/schema@0.55.0': resolution: {integrity: sha512-IlSIc0FmLKTDGr4I/FzNHauMn0MADA6bCjT1wauu4k6MyxhC1R9gz0olNpIRvK7lGGDwtc/VO0RUDNvVQW5WFg==} - '@ark/schema@0.56.0': - resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} - '@ark/util@0.55.0': resolution: {integrity: sha512-aWFNK7aqSvqFtVsl1xmbTjGbg91uqtJV7Za76YGNEwIO4qLjMfyY8flmmbhooYMuqPCO2jyxu8hve943D+w3bA==} - '@ark/util@0.56.0': - resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==} - - '@asamuzakjp/css-color@4.1.1': - resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==} + '@asamuzakjp/css-color@4.1.2': + resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} - '@asamuzakjp/dom-selector@6.7.7': - resolution: {integrity: sha512-8CO/UQ4tzDd7ula+/CVimJIVWez99UJlbMyIgk8xOnhAVPKLnBZmUFYVgugS441v2ZqUq5EnSh6B0Ua0liSFAA==} + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -1488,9 +1482,6 @@ packages: '@asyncapi/parser@3.4.0': resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==} - '@asyncapi/specs@6.11.1': - resolution: {integrity: sha512-A3WBLqAKGoJ2+6FWFtpjBlCQ1oFCcs4GxF7zsIGvNqp/klGUHjlA3aAcZ9XMMpLGE8zPeYDz2x9FmO6DSuKraQ==} - '@asyncapi/specs@6.8.1': resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} @@ -1517,52 +1508,52 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-s3@3.988.0': - resolution: {integrity: sha512-mt7AdkieJJ5hEKeCxH4sdTTd679shUjo/cUvNY0fUHgQIPZa1jRuekTXnRytRrEwdrZWJDx56n1S8ism2uX7jg==} + '@aws-sdk/client-s3@3.995.0': + resolution: {integrity: sha512-r+t8qrQ0m9zoovYOH+wilp/glFRB/E+blsDyWzq2C+9qmyhCAQwaxjLaHM8T/uluAmhtZQIYqOH9ILRnvWtRNw==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-sso@3.988.0': - resolution: {integrity: sha512-ThqQ7aF1k0Zz4yJRwegHw+T1rM3a7ZPvvEUSEdvn5Z8zTeWgJAbtqW/6ejPsMLmFOlHgNcwDQN/e69OvtEOoIQ==} + '@aws-sdk/client-sso@3.993.0': + resolution: {integrity: sha512-VLUN+wIeNX24fg12SCbzTUBnBENlL014yMKZvRhPkcn4wHR6LKgNrjsG3fZ03Xs0XoKaGtNFi1VVrq666sGBoQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.8': - resolution: {integrity: sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==} + '@aws-sdk/core@3.973.11': + resolution: {integrity: sha512-wdQ8vrvHkKIV7yNUKXyjPWKCdYEUrZTHJ8Ojd5uJxXp9vqPCkUR1dpi1NtOLcrDgueJH7MUH5lQZxshjFPSbDA==} engines: {node: '>=20.0.0'} '@aws-sdk/crc64-nvme@3.972.0': resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.6': - resolution: {integrity: sha512-+dYEBWgTqkQQHFUllvBL8SLyXyLKWdxLMD1LmKJRvmb0NMJuaJFG/qg78C+LE67eeGbipYcE+gJ48VlLBGHlMw==} + '@aws-sdk/credential-provider-env@3.972.9': + resolution: {integrity: sha512-ZptrOwQynfupubvcngLkbdIq/aXvl/czdpEG8XJ8mN8Nb19BR0jaK0bR+tfuMU36Ez9q4xv7GGkHFqEEP2hUUQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.8': - resolution: {integrity: sha512-z3QkozMV8kOFisN2pgRag/f0zPDrw96mY+ejAM0xssV/+YQ2kklbylRNI/TcTQUDnGg0yPxNjyV6F2EM2zPTwg==} + '@aws-sdk/credential-provider-http@3.972.11': + resolution: {integrity: sha512-hECWoOoH386bGr89NQc9vA/abkGf5TJrMREt+lhNcnSNmoBS04fK7vc3LrJBSQAUGGVj0Tz3f4dHB3w5veovig==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.6': - resolution: {integrity: sha512-6tkIYFv3sZH1XsjQq+veOmx8XWRnyqTZ5zx/sMtdu/xFRIzrJM1Y2wAXeCJL1rhYSB7uJSZ1PgALI2WVTj78ow==} + '@aws-sdk/credential-provider-ini@3.972.9': + resolution: {integrity: sha512-zr1csEu9n4eDiHMTYJabX1mDGuGLgjgUnNckIivvk43DocJC9/f6DefFrnUPZXE+GHtbW50YuXb+JIxKykU74A==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.6': - resolution: {integrity: sha512-LXsoBoaTSGHdRCQXlWSA0CHHh05KWncb592h9ElklnPus++8kYn1Ic6acBR4LKFQ0RjjMVgwe5ypUpmTSUOjPA==} + '@aws-sdk/credential-provider-login@3.972.9': + resolution: {integrity: sha512-m4RIpVgZChv0vWS/HKChg1xLgZPpx8Z+ly9Fv7FwA8SOfuC6I3htcSaBz2Ch4bneRIiBUhwP4ziUo0UZgtJStQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.7': - resolution: {integrity: sha512-PuJ1IkISG7ZDpBFYpGotaay6dYtmriBYuHJ/Oko4VHxh8YN5vfoWnMNYFEWuzOfyLmP7o9kDVW0BlYIpb3skvw==} + '@aws-sdk/credential-provider-node@3.972.10': + resolution: {integrity: sha512-70nCESlvnzjo4LjJ8By8MYIiBogkYPSXl3WmMZfH9RZcB/Nt9qVWbFpYj6Fk1vLa4Vk8qagFVeXgxdieMxG1QA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.6': - resolution: {integrity: sha512-Yf34cjIZJHVnD92jnVYy3tNjM+Q4WJtffLK2Ehn0nKpZfqd1m7SI0ra22Lym4C53ED76oZENVSS2wimoXJtChQ==} + '@aws-sdk/credential-provider-process@3.972.9': + resolution: {integrity: sha512-gOWl0Fe2gETj5Bk151+LYKpeGi2lBDLNu+NMNpHRlIrKHdBmVun8/AalwMK8ci4uRfG5a3/+zvZBMpuen1SZ0A==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.6': - resolution: {integrity: sha512-2+5UVwUYdD4BBOkLpKJ11MQ8wQeyJGDVMDRH5eWOULAh9d6HJq07R69M/mNNMC9NTjr3mB1T0KGDn4qyQh5jzg==} + '@aws-sdk/credential-provider-sso@3.972.9': + resolution: {integrity: sha512-ey7S686foGTArvFhi3ifQXmgptKYvLSGE2250BAQceMSXZddz7sUSNERGJT2S7u5KIe/kgugxrt01hntXVln6w==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.6': - resolution: {integrity: sha512-pdJzwKtlDxBnvZ04pWMqttijmkUIlwOsS0GcxCjzEVyUMpARysl0S0ks74+gs2Pdev3Ujz+BTAjOc1tQgAxGqA==} + '@aws-sdk/credential-provider-web-identity@3.972.9': + resolution: {integrity: sha512-8LnfS76nHXoEc9aRRiMMpxZxJeDG0yusdyo3NvPhCgESmBUgpMa4luhGbClW5NoX/qRcGxxM6Z/esqANSNMTow==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-bucket-endpoint@3.972.3': @@ -1573,8 +1564,8 @@ packages: resolution: {integrity: sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.972.6': - resolution: {integrity: sha512-g5DadWO58IgQKuq+uLL3pLohOwLiA67gB49xj8694BW+LpHLNu/tjCqwLfIaWvZyABbv0LXeNiiTuTnjdgkZWw==} + '@aws-sdk/middleware-flexible-checksums@3.972.9': + resolution: {integrity: sha512-E663+r/UQpvF3aJkD40p5ZANVQFsUcbE39jifMtN7wc0t1M0+2gJJp3i75R49aY9OiSX5lfVyPUNjN/BNRCCZA==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-host-header@3.972.3': @@ -1593,32 +1584,32 @@ packages: resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.8': - resolution: {integrity: sha512-/yJdahpN/q3Dc88qXBTQVZfnXryLnxfCoP4hGClbKjuF0VCMxrz3il7sj0GhIkEQt5OM5+lA88XrvbjjuwSxIg==} + '@aws-sdk/middleware-sdk-s3@3.972.11': + resolution: {integrity: sha512-Qr0T7ZQTRMOuR6ahxEoJR1thPVovfWrKB2a6KBGR+a8/ELrFodrgHwhq50n+5VMaGuLtGhHiISU3XGsZmtmVXQ==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-ssec@3.972.3': resolution: {integrity: sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.8': - resolution: {integrity: sha512-3PGL+Kvh1PhB0EeJeqNqOWQgipdqFheO4OUKc6aYiFwEpM5t9AyE5hjjxZ5X6iSj8JiduWFZLPwASzF6wQRgFg==} + '@aws-sdk/middleware-user-agent@3.972.11': + resolution: {integrity: sha512-R8CvPsPHXwzIHCAza+bllY6PrctEk4lYq/SkHJz9NLoBHCcKQrbOcsfXxO6xmipSbUNIbNIUhH0lBsJGgsRdiw==} engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.988.0': - resolution: {integrity: sha512-OgYV9k1oBCQ6dOM+wWAMNNehXA8L4iwr7ydFV+JDHyuuu0Ko7tDXnLEtEmeQGYRcAFU3MGasmlBkMB8vf4POrg==} + '@aws-sdk/nested-clients@3.993.0': + resolution: {integrity: sha512-iOq86f2H67924kQUIPOAvlmMaOAvOLoDOIb66I2YqSUpMYB6ufiuJW3RlREgskxv86S5qKzMnfy/X6CqMjK6XQ==} engines: {node: '>=20.0.0'} '@aws-sdk/region-config-resolver@3.972.3': resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.988.0': - resolution: {integrity: sha512-SXwhbe2v0Jno7QLIBmZWAL2eVzGmXkfLLy0WkM6ZJVhE0SFUcnymDwMUA1oMDUvyArzvKBiU8khQ2ImheCKOHQ==} + '@aws-sdk/signature-v4-multi-region@3.995.0': + resolution: {integrity: sha512-9Qx5JcAucnxnomREPb2D6L8K8GLG0rknt3+VK/BU3qTUynAcV4W21DQ04Z2RKDw+DYpW88lsZpXbVetWST2WUg==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.988.0': - resolution: {integrity: sha512-xvXVlRVKHnF2h6fgWBm64aPP5J+58aJyGfRrQa/uFh8a9mcK68mLfJOYq+ZSxQy/UN3McafJ2ILAy7IWzT9kRw==} + '@aws-sdk/token-providers@3.993.0': + resolution: {integrity: sha512-+35g4c+8r7sB9Sjp1KPdM8qxGn6B/shBjJtEUN4e+Edw9UEQlZKIzioOGu3UAbyE0a/s450LdLZr4wbJChtmww==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.973.1': @@ -1629,8 +1620,12 @@ packages: resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-endpoints@3.988.0': - resolution: {integrity: sha512-HuXu4boeUWU0DQiLslbgdvuQ4ZMCo4Lsk97w8BIUokql2o9MvjE5dwqI5pzGt0K7afO1FybjidUQVTMLuZNTOA==} + '@aws-sdk/util-endpoints@3.993.0': + resolution: {integrity: sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/util-endpoints@3.995.0': + resolution: {integrity: sha512-aym/pjB8SLbo9w2nmkrDdAAVKVlf7CM71B9mKhjDbJTzwpSFBPHqJIMdDyj0mLumKC0aIVDr1H6U+59m9GvMFw==} engines: {node: '>=20.0.0'} '@aws-sdk/util-locate-window@3.965.4': @@ -1640,8 +1635,8 @@ packages: '@aws-sdk/util-user-agent-browser@3.972.3': resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} - '@aws-sdk/util-user-agent-node@3.972.6': - resolution: {integrity: sha512-966xH8TPqkqOXP7EwnEThcKKz0SNP9kVJBKd9M8bNXE4GSqVouMKKnFBwYnzbWVKuLXubzX5seokcX4a0JLJIA==} + '@aws-sdk/util-user-agent-node@3.972.10': + resolution: {integrity: sha512-LVXzICPlsheET+sE6tkcS47Q5HkSTrANIlqL1iFxGAY/wRQ236DX/PCAK56qMh9QJoXAfXfoRW0B0Og4R+X7Nw==} engines: {node: '>=20.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1649,8 +1644,8 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.4': - resolution: {integrity: sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==} + '@aws-sdk/xml-builder@3.972.5': + resolution: {integrity: sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.3': @@ -1689,16 +1684,16 @@ packages: resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} - '@azure/msal-browser@4.28.1': - resolution: {integrity: sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==} + '@azure/msal-browser@4.28.2': + resolution: {integrity: sha512-6vYUMvs6kJxJgxaCmHn/F8VxjLHNh7i9wzfwPGf8kyBJ8Gg2yvBXx175Uev8LdrD1F5C4o7qHa2CC4IrhGE1XQ==} engines: {node: '>=0.8.0'} - '@azure/msal-common@15.14.1': - resolution: {integrity: sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==} + '@azure/msal-common@15.14.2': + resolution: {integrity: sha512-n8RBJEUmd5QotoqbZfd+eGBkzuFI1KX6jw2b3WcpSyGjwmzoeI/Jb99opIBPHpb8y312NB+B6+FGi2ZVSR8yfA==} engines: {node: '>=0.8.0'} - '@azure/msal-node@3.8.6': - resolution: {integrity: sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==} + '@azure/msal-node@3.8.7': + resolution: {integrity: sha512-a+Xnrae+uwLnlw68bplS1X4kuJ9F/7K6afuMFyRkNIskhjgDezl5Fhrx+1pmAlDmC0VaaAxjRQMp1OmcqVwkIg==} engines: {node: '>=16'} '@babel/code-frame@7.29.0': @@ -1795,11 +1790,11 @@ packages: '@canvas/image-data@1.1.0': resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==} - '@clack/core@1.0.0': - resolution: {integrity: sha512-Orf9Ltr5NeiEuVJS8Rk2XTw3IxNC2Bic3ash7GgYeA8LJ/zmSNpSQ/m5UAhe03lA6KFgklzZ5KTHs4OAMA/SAQ==} + '@clack/core@1.0.1': + resolution: {integrity: sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==} - '@clack/prompts@1.0.0': - resolution: {integrity: sha512-rWPXg9UaCFqErJVQ+MecOaWsozjaxol4yjnmYcGNipAWzdaWa2x+VJmKfGq7L0APwBohQOYdHC+9RO4qRXej+A==} + '@clack/prompts@1.0.1': + resolution: {integrity: sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -1884,36 +1879,36 @@ packages: peerDependencies: vue: 3.5.25 - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} - engines: {node: '>=18'} + '@csstools/color-helpers@6.0.1': + resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==} + engines: {node: '>=20.19.0'} - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} - engines: {node: '>=18'} + '@csstools/css-color-parser@4.0.1': + resolution: {integrity: sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': - resolution: {integrity: sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA==} + '@csstools/css-syntax-patches-for-csstree@1.0.27': + resolution: {integrity: sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==} - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} '@cypress/request@3.0.9': resolution: {integrity: sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==} @@ -1941,8 +1936,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1953,8 +1948,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1965,8 +1960,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1977,8 +1972,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1989,8 +1984,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2001,8 +1996,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2013,8 +2008,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2025,8 +2020,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2037,8 +2032,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2049,8 +2044,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2061,8 +2056,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2073,8 +2068,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2085,8 +2080,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2097,8 +2092,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2109,8 +2104,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -2121,8 +2116,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -2133,8 +2128,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -2145,8 +2140,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2157,8 +2152,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -2169,8 +2164,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2181,8 +2176,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -2193,8 +2188,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2205,8 +2200,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2217,8 +2212,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2229,8 +2224,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2241,8 +2236,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2273,8 +2268,8 @@ packages: resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} + '@eslint/js@9.39.3': + resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -2339,248 +2334,111 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} - engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - '@img/sharp-darwin-x64@0.33.5': resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} - cpu: [arm64] - os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} - cpu: [x64] - os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} - cpu: [arm64] - os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} - cpu: [ppc64] - os: [linux] - - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} - cpu: [x64] - os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} - cpu: [arm64] - os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] - '@img/sharp-linux-arm64@0.33.5': resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - '@img/sharp-linux-arm@0.33.5': resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - '@img/sharp-linux-s390x@0.33.5': resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - '@img/sharp-linux-x64@0.33.5': resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - '@img/sharp-wasm32@0.33.5': resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - '@img/sharp-win32-ia32@0.33.5': resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - '@img/sharp-win32-x64@0.33.5': resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - '@inquirer/ansi@1.0.2': resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} engines: {node: '>=18'} @@ -2715,14 +2573,6 @@ packages: '@types/node': optional: true - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.1': - resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2899,11 +2749,11 @@ packages: '@types/react': '>=16' react: '>=16' - '@microsoft/api-extractor-model@7.32.2': - resolution: {integrity: sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==} + '@microsoft/api-extractor-model@7.33.1': + resolution: {integrity: sha512-KX0LI6xzI0gcBOXXmr5mnnbdhsK2W93pqvJo8OgJgWvRRh+wMEp0Ccj38h1XKeJ29E1tuAZKSUOfHUQ1WA8fZg==} - '@microsoft/api-extractor@7.56.1': - resolution: {integrity: sha512-wX9ugJFqhsEWwt+UFTAkvXcBOzSQ1FeKe0ZdwEDKtjsf20Ec2frmCDXPjQwPtSNrpXUy1yQgyaF6YJVuC8gMtg==} + '@microsoft/api-extractor@7.57.2': + resolution: {integrity: sha512-Dih58xLlG+M6k2qVSksk9xJx8HvmJEyK3LcHrcqXE7eK/U7pg/8cTT8j1TKijU4P4639wvCy1zhDuvtjRy+02Q==} hasBin: true '@microsoft/tsdoc-config@0.18.0': @@ -2912,19 +2762,19 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} - '@mintlify/cli@4.0.935': - resolution: {integrity: sha512-mY0T3QOdDNuZlb4qx6GEAq0nSkWQGCn0Ug5kjQH3GjZFeeROm0EDYzoXlwAgLL/DkFEU9GpWmO3kU8EvetXtBw==} + '@mintlify/cli@4.0.971': + resolution: {integrity: sha512-qcnHRjWM8nOoQJ+7AIXv0/CZTpMnQmwgNTj6k2CfYdxUiMKCK11q2LnVLkLI+c1Y/WXr4sriUnjemjbvckUmpQ==} engines: {node: '>=18.0.0'} hasBin: true '@mintlify/common@1.0.661': resolution: {integrity: sha512-/Hdiblzaomp+AWStQ4smhVMgesQhffzQjC9aYBnmLReNdh2Js+ccQFUaWL3TNIxwiS2esaZvsHSV/D+zyRS3hg==} - '@mintlify/common@1.0.713': - resolution: {integrity: sha512-0Ir8BLMVfADPi04/O5jDDemL+dxpNqHgx/JDQALuCFS4ANqHk7C9ES7ifsnt/rjmiiX7kuXSFqoAZrt1WMTLaA==} + '@mintlify/common@1.0.743': + resolution: {integrity: sha512-ZOpps3m6hOG06fGGeX1YmUC38boQ8OvU1L0DsFbwPYH7TFGu4WTqrfWhuJnKzkOJWmrsS5PmJxZQG4IU5nOZKQ==} - '@mintlify/link-rot@3.0.872': - resolution: {integrity: sha512-2KDAD+hTmRZZCq0XCvvG+p/xSn5gtHCkHYA8Zfd2mhHceHCofNikvjffpYKx96eqaNCLhbeUYVnLlquBs820oQ==} + '@mintlify/link-rot@3.0.906': + resolution: {integrity: sha512-ANBO1CTF3F1OQwl7wt3+L7itw4+BTe3VgteqW/JutgRH/OXv+3XpVOPoo52uYCERrQwkrSCoF4jBBL+UfImUZQ==} engines: {node: '>=18.0.0'} '@mintlify/mdx@3.0.4': @@ -2938,19 +2788,19 @@ packages: resolution: {integrity: sha512-LIUkfA7l7ypHAAuOW74ZJws/NwNRqlDRD/U466jarXvvSlGhJec/6J4/I+IEcBvWDnc9anLFKmnGO04jPKgAsg==} engines: {node: '>=18.0.0'} - '@mintlify/models@0.0.268': - resolution: {integrity: sha512-8HDPI3luABg5p/VTVYAOqabqOtcK2jdBuRTYOJiV39QqjQY29Q7kWH697PUokN6CO9uP2CCkPG5O5Gi7QxflWA==} + '@mintlify/models@0.0.273': + resolution: {integrity: sha512-u2azWZWw3HG5HpBgXcwVQuCRWNLgaXCb6iS6+QUPK2XHD7rMw66zismibJtZhiVS/42jlUnx38LIW6BUVoFfgw==} engines: {node: '>=18.0.0'} '@mintlify/openapi-parser@0.0.8': resolution: {integrity: sha512-9MBRq9lS4l4HITYCrqCL7T61MOb20q9IdU7HWhqYMNMM1jGO1nHjXasFy61yZ8V6gMZyyKQARGVoZ0ZrYN48Og==} engines: {node: '>=18'} - '@mintlify/prebuild@1.0.849': - resolution: {integrity: sha512-GlFRJYrS7sIByZXKLa91VeCGruMunbwoxGbWRF5gAiknkuhng9SuX7zB7yTa0J3ApmLO3oZG5baWfzflcQY01w==} + '@mintlify/prebuild@1.0.880': + resolution: {integrity: sha512-cNXXz3oOaZn8GoGNPbDoYG/CVS53FbuEVDDN6hY3bmhZg4VzAZH5IAjj7eUmg9l3BLyILexUfDWuzEv99MhStQ==} - '@mintlify/previewing@4.0.905': - resolution: {integrity: sha512-3PjzszHkvswA742dofEDohINUnlbmi4gnKP9xWK7wA+dLszKJ56BYjm6VCWJjpG3PuO4oPFIS9vI1YRCEM8kRQ==} + '@mintlify/previewing@4.0.937': + resolution: {integrity: sha512-yjbN7c5GtDFByUqXnF4kg4Bd7gf7whv95ciH7ukKi5QFe8xGntW9UlMLer2UvuJzNG7JGvJkRGvsVwUrm3lLXw==} engines: {node: '>=18.0.0'} '@mintlify/scraping@4.0.522': @@ -2958,85 +2808,85 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - '@mintlify/scraping@4.0.574': - resolution: {integrity: sha512-FN2MM8uxBi2Foxpua0UIDLYo4YvcJE/NMwOGfbQ/HWx73eWhsA0LI+uhqpq8ZYqgc4awVif1oKc7OcuEhtY7Kg==} + '@mintlify/scraping@4.0.605': + resolution: {integrity: sha512-pLHEBNZQ+XuDJCZokQt3MjhhK5F8G4Lk9DSDnHp8grDWdIEeYdP/K95jZzNTbpPJx1cVinSEjSsrIasP8Z4S4g==} engines: {node: '>=18.0.0'} hasBin: true '@mintlify/validation@0.1.555': resolution: {integrity: sha512-11QVUReL4N5u8wSCgZt4RN7PA0jYQoMEBZ5IrUp5pgb5ZJBOoGV/vPsQrxPPa1cxsUDAuToNhtGxRQtOav/w8w==} - '@mintlify/validation@0.1.585': - resolution: {integrity: sha512-32mezT7v1dmPQa2DyGDYf0t+HHUbmpShJVnMrxxhXyMHvKUqOu4ENoRCAxRbfc4OLPxAFRB4qEEq2toID+tOHw==} + '@mintlify/validation@0.1.602': + resolution: {integrity: sha512-r8wf9w4IWgcewoN49Ks6r64VBysO7VpgQUsbe9vCXFfZdUegcxFZ2LLIlJVbEgXb14mYQFJRDIfvTfjrtQYRLw==} - '@napi-rs/canvas-android-arm64@0.1.91': - resolution: {integrity: sha512-SLLzXXgSnfct4zy/BVAfweZQkYkPJsNsJ2e5DOE8DFEHC6PufyUrwb12yqeu2So2IOIDpWJJaDAxKY/xpy6MYQ==} + '@napi-rs/canvas-android-arm64@0.1.94': + resolution: {integrity: sha512-YQ6K83RWNMQOtgpk1aIML97QTE3zxPmVCHTi5eA8Nss4+B9JZi5J7LHQr7B5oD7VwSfWd++xsPdUiJ1+frqsMg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@napi-rs/canvas-darwin-arm64@0.1.91': - resolution: {integrity: sha512-bzdbCjIjw3iRuVFL+uxdSoMra/l09ydGNX9gsBxO/zg+5nlppscIpj6gg+nL6VNG85zwUarDleIrUJ+FWHvmuA==} + '@napi-rs/canvas-darwin-arm64@0.1.94': + resolution: {integrity: sha512-h1yl9XjqSrYZAbBUHCVLAhwd2knM8D8xt081Pv40KqNJXfeMmBrhG1SfroRymG2ak+pl42iQlWjFZ2Z8AWFdSw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@napi-rs/canvas-darwin-x64@0.1.91': - resolution: {integrity: sha512-q3qpkpw0IsG9fAS/dmcGIhCVoNxj8ojbexZKWwz3HwxlEWsLncEQRl4arnxrwbpLc2nTNTyj4WwDn7QR5NDAaA==} + '@napi-rs/canvas-darwin-x64@0.1.94': + resolution: {integrity: sha512-rkr/lrafbU0IIHebst+sQJf1HjdHvTMN0GGqWvw5OfaVS0K/sVxhNHtxi8oCfaRSvRE62aJZjWTcdc2ue/o6yw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.91': - resolution: {integrity: sha512-Io3g8wJZVhK8G+Fpg1363BE90pIPqg+ZbeehYNxPWDSzbgwU3xV0l8r/JBzODwC7XHi1RpFEk+xyUTMa2POj6w==} + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.94': + resolution: {integrity: sha512-q95TDo32YkTKdi+Sp2yQ2Npm7pmfKEruNoJ3RUIw1KvQQ9EHKL3fii/iuU60tnzP0W+c8BKN7BFstNFcm2KXCQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@napi-rs/canvas-linux-arm64-gnu@0.1.91': - resolution: {integrity: sha512-HBnto+0rxx1bQSl8bCWA9PyBKtlk2z/AI32r3cu4kcNO+M/5SD4b0v1MWBWZyqMQyxFjWgy3ECyDjDKMC6tY1A==} + '@napi-rs/canvas-linux-arm64-gnu@0.1.94': + resolution: {integrity: sha512-Je5/gKVybWAoIGyDOcJF1zYgBTKWkPIkfOgvCzrQcl8h7DiDvRvEY70EapA+NicGe4X3DW9VsCT34KZJnerShA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-arm64-musl@0.1.91': - resolution: {integrity: sha512-/eJtVe2Xw9A86I4kwXpxxoNagdGclu12/NSMsfoL8q05QmeRCbfjhg1PJS7ENAuAvaiUiALGrbVfeY1KU1gztQ==} + '@napi-rs/canvas-linux-arm64-musl@0.1.94': + resolution: {integrity: sha512-9YleDDauDEZNsFnfz3HyZvp1LK1ECu8N2gDUg1wtL7uWLQv8dUbfVeFtp5HOdxht1o7LsWRmQeqeIbnD4EqE2A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-riscv64-gnu@0.1.91': - resolution: {integrity: sha512-floNK9wQuRWevUhhXRcuis7h0zirdytVxPgkonWO+kQlbvxV7gEUHGUFQyq4n55UHYFwgck1SAfJ1HuXv/+ppQ==} + '@napi-rs/canvas-linux-riscv64-gnu@0.1.94': + resolution: {integrity: sha512-lQUy9Xvz7ch8+0AXq8RkioLD41iQ6EqdKFu5uV40BxkBDijB2SCm1jna/BRhqitQRSjwAk2KlLUxTjHChyfNGg==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@napi-rs/canvas-linux-x64-gnu@0.1.91': - resolution: {integrity: sha512-c3YDqBdf7KETuZy2AxsHFMsBBX1dWT43yFfWUq+j1IELdgesWtxf/6N7csi3VPf6VA3PmnT9EhMyb+M1wfGtqw==} + '@napi-rs/canvas-linux-x64-gnu@0.1.94': + resolution: {integrity: sha512-0IYgyuUaugHdWxXRhDQUCMxTou8kAHHmpIBFtbmdRlciPlfK7AYQW5agvUU1PghPc5Ja3Zzp5qZfiiLu36vIWQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/canvas-linux-x64-musl@0.1.91': - resolution: {integrity: sha512-RpZ3RPIwgEcNBHSHSX98adm+4VP8SMT5FN6250s5jQbWpX/XNUX5aLMfAVJS/YnDjS1QlsCgQxFOPU0aCCWgag==} + '@napi-rs/canvas-linux-x64-musl@0.1.94': + resolution: {integrity: sha512-xuetfzzcflCIiBw2HJlOU4/+zTqhdxoe1BEcwdBsHAd/5wAQ4Pp+FGPi5g74gDvtcXQmTdEU3fLQvHc/j3wbxQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/canvas-win32-arm64-msvc@0.1.91': - resolution: {integrity: sha512-gF8MBp4X134AgVurxqlCdDA2qO0WaDdi9o6Sd5rWRVXRhWhYQ6wkdEzXNLIrmmros0Tsp2J0hQzx4ej/9O8trQ==} + '@napi-rs/canvas-win32-arm64-msvc@0.1.94': + resolution: {integrity: sha512-2F3p8wci4Q4vjbENlQtSibqFWxBdpzYk1c8Jh1mqqLE92rBKElG018dBJ6C8Dp49vE350Hmy5LrfdLgFKMG8sg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@napi-rs/canvas-win32-x64-msvc@0.1.91': - resolution: {integrity: sha512-++gtW9EV/neKI8TshD8WFxzBYALSPag2kFRahIJV+LYsyt5kBn21b1dBhEUDHf7O+wiZmuFCeUa7QKGHnYRZBA==} + '@napi-rs/canvas-win32-x64-msvc@0.1.94': + resolution: {integrity: sha512-hjwaIKMrQLoNiu3724octSGhDVKkBwJtMeQ3qUXOi+y60h2q6Sxq3+MM2za3V88+XQzzwn0DgG0Xo6v6gzV8kQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@napi-rs/canvas@0.1.91': - resolution: {integrity: sha512-eeIe1GoB74P1B0Nkw6pV8BCQ3hfCfvyYr4BntzlCsnFXzVJiPMDnLeIx3gVB0xQMblHYnjK/0nCLvirEhOjr5g==} + '@napi-rs/canvas@0.1.94': + resolution: {integrity: sha512-8jBkvqynXNdQPNZjLJxB/Rp9PdnnMSHFBLzPmMc615nlt/O6w0ergBbkEDEOr8EbjL8nRQDpEklPx4pzD7zrbg==} engines: {node: '>= 10'} '@napi-rs/wasm-runtime@0.2.12': @@ -3065,8 +2915,8 @@ packages: resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.2': - resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} + '@octokit/endpoint@11.0.3': + resolution: {integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==} engines: {node: '>= 20'} '@octokit/graphql@9.0.3': @@ -3085,8 +2935,8 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-retry@8.0.3': - resolution: {integrity: sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==} + '@octokit/plugin-retry@8.1.0': + resolution: {integrity: sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=7' @@ -3101,8 +2951,8 @@ packages: resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.7': - resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==} + '@octokit/request@10.0.8': + resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} engines: {node: '>= 20'} '@octokit/types@15.0.2': @@ -3131,8 +2981,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.58.1': - resolution: {integrity: sha512-6LdVIUERWxQMmUSSQi0I53GgCBYgM2RpGngCPY7hSeju+VrKjq3lvs7HpJoPbDiY5QM5EYRtRX5fvrinnMAz3w==} + '@playwright/test@1.58.2': + resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==} engines: {node: '>=18'} hasBin: true @@ -3457,8 +3307,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.53': resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} - '@rolldown/pluginutils@1.0.0-rc.2': - resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + '@rolldown/pluginutils@1.0.0-rc.3': + resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} '@rollup/plugin-inject@5.0.5': resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} @@ -3478,160 +3328,160 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + '@rollup/rollup-android-arm-eabi@4.58.0': + resolution: {integrity: sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + '@rollup/rollup-android-arm64@4.58.0': + resolution: {integrity: sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + '@rollup/rollup-darwin-arm64@4.58.0': + resolution: {integrity: sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + '@rollup/rollup-darwin-x64@4.58.0': + resolution: {integrity: sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + '@rollup/rollup-freebsd-arm64@4.58.0': + resolution: {integrity: sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + '@rollup/rollup-freebsd-x64@4.58.0': + resolution: {integrity: sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + '@rollup/rollup-linux-arm-gnueabihf@4.58.0': + resolution: {integrity: sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + '@rollup/rollup-linux-arm-musleabihf@4.58.0': + resolution: {integrity: sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + '@rollup/rollup-linux-arm64-gnu@4.58.0': + resolution: {integrity: sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + '@rollup/rollup-linux-arm64-musl@4.58.0': + resolution: {integrity: sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + '@rollup/rollup-linux-loong64-gnu@4.58.0': + resolution: {integrity: sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + '@rollup/rollup-linux-loong64-musl@4.58.0': + resolution: {integrity: sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + '@rollup/rollup-linux-ppc64-gnu@4.58.0': + resolution: {integrity: sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + '@rollup/rollup-linux-ppc64-musl@4.58.0': + resolution: {integrity: sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + '@rollup/rollup-linux-riscv64-gnu@4.58.0': + resolution: {integrity: sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + '@rollup/rollup-linux-riscv64-musl@4.58.0': + resolution: {integrity: sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + '@rollup/rollup-linux-s390x-gnu@4.58.0': + resolution: {integrity: sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + '@rollup/rollup-linux-x64-gnu@4.58.0': + resolution: {integrity: sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + '@rollup/rollup-linux-x64-musl@4.58.0': + resolution: {integrity: sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + '@rollup/rollup-openbsd-x64@4.58.0': + resolution: {integrity: sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + '@rollup/rollup-openharmony-arm64@4.58.0': + resolution: {integrity: sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + '@rollup/rollup-win32-arm64-msvc@4.58.0': + resolution: {integrity: sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + '@rollup/rollup-win32-ia32-msvc@4.58.0': + resolution: {integrity: sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + '@rollup/rollup-win32-x64-gnu@4.58.0': + resolution: {integrity: sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + '@rollup/rollup-win32-x64-msvc@4.58.0': + resolution: {integrity: sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==} cpu: [x64] os: [win32] - '@rushstack/node-core-library@5.19.1': - resolution: {integrity: sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA==} + '@rushstack/node-core-library@5.20.1': + resolution: {integrity: sha512-QvxZyh+RsTJ77JpQkS9K9lJujh6lj5WyMxieT0bdACtwqxEkGB9zCuSMX5UlXRweaIgSpu1ztdHmhV07fKUpMg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/problem-matcher@0.1.1': - resolution: {integrity: sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==} + '@rushstack/problem-matcher@0.2.1': + resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.6.0': - resolution: {integrity: sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==} + '@rushstack/rig-package@0.7.1': + resolution: {integrity: sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA==} - '@rushstack/terminal@0.21.0': - resolution: {integrity: sha512-cLaI4HwCNYmknM5ns4G+drqdEB6q3dCPV423+d3TZeBusYSSm09+nR7CnhzJMjJqeRcdMAaLnrA4M/3xDz4R3w==} + '@rushstack/terminal@0.22.1': + resolution: {integrity: sha512-Mdtu0VN7v31O5Zcno8ZZH5kQHF13Ez7WN9Aio7nFJVcR36i4bkERionYrWgBDQJ0JdVPLKGecZER/xRU5IvGLw==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@5.2.0': - resolution: {integrity: sha512-lYxCX0nDdkDtCkVpvF0m25ymf66SaMWuppbD6b7MdkIzvGXKBXNIVZlwBH/C0YfkanrupnICWf2n4z3AKSfaHw==} + '@rushstack/ts-command-line@5.3.1': + resolution: {integrity: sha512-mid/JIZSJafwy3x9e4v0wVLuAqSSYYErEHV0HXPALYLSBN13YNkR5caOk0hf97lSRKrxhtvQjGaDKSEelR3sMg==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -3751,8 +3601,8 @@ packages: resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.0': - resolution: {integrity: sha512-Yq4UPVoQICM9zHnByLmG8632t2M0+yap4T7ANVw482J0W7HW0pOuxwVmeOwzJqX2Q89fkXz0Vybz55Wj2Xzrsg==} + '@smithy/core@3.23.2': + resolution: {integrity: sha512-HaaH4VbGie4t0+9nY3tNBRSxVTr96wzIqexUa6C2qx3MPePAuz7lIxPxYtt1Wc//SPfJLNoZJzfdt0B6ksj2jA==} engines: {node: '>=18.0.0'} '@smithy/credential-provider-imds@4.2.8': @@ -3815,12 +3665,12 @@ packages: resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.14': - resolution: {integrity: sha512-FUFNE5KVeaY6U/GL0nzAAHkaCHzXLZcY1EhtQnsAqhD8Du13oPKtMB9/0WK4/LK6a/T5OZ24wPoSShff5iI6Ag==} + '@smithy/middleware-endpoint@4.4.16': + resolution: {integrity: sha512-L5GICFCSsNhbJ5JSKeWFGFy16Q2OhoBizb3X2DrxaJwXSEujVvjG9Jt386dpQn2t7jINglQl0b4K/Su69BdbMA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.31': - resolution: {integrity: sha512-RXBzLpMkIrxBPe4C8OmEOHvS8aH9RUuCOH++Acb5jZDEblxDjyg6un72X9IcbrGTJoiUwmI7hLypNfuDACypbg==} + '@smithy/middleware-retry@4.4.33': + resolution: {integrity: sha512-jLqZOdJhtIL4lnA9hXnAG6GgnJlo1sD3FqsTxm9wSfjviqgWesY/TMBVnT84yr4O0Vfe0jWoXlfFbzsBVph3WA==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.9': @@ -3867,8 +3717,8 @@ packages: resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.11.3': - resolution: {integrity: sha512-Q7kY5sDau8OoE6Y9zJoRGgje8P4/UY0WzH8R2ok0PDh+iJ+ZnEKowhjEqYafVcubkbYxQVaqwm3iufktzhprGg==} + '@smithy/smithy-client@4.11.5': + resolution: {integrity: sha512-xixwBRqoeP2IUgcAl3U9dvJXc+qJum4lzo3maaJxifsZxKUYLfVfCXvhT4/jD01sRrHg5zjd1cw2Zmjr4/SuKQ==} engines: {node: '>=18.0.0'} '@smithy/types@4.12.0': @@ -3903,12 +3753,12 @@ packages: resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.30': - resolution: {integrity: sha512-cMni0uVU27zxOiU8TuC8pQLC1pYeZ/xEMxvchSK/ILwleRd1ugobOcIRr5vXtcRqKd4aBLWlpeBoDPJJ91LQng==} + '@smithy/util-defaults-mode-browser@4.3.32': + resolution: {integrity: sha512-092sjYfFMQ/iaPH798LY/OJFBcYu0sSK34Oy9vdixhsU36zlZu8OcYjF3TD4e2ARupyK7xaxPXl+T0VIJTEkkg==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.33': - resolution: {integrity: sha512-LEb2aq5F4oZUSzWBG7S53d4UytZSkOEJPXcBq/xbG2/TmK9EW5naUZ8lKu1BEyWMzdHIzEVN16M3k8oxDq+DJA==} + '@smithy/util-defaults-mode-node@4.2.35': + resolution: {integrity: sha512-miz/ggz87M8VuM29y7jJZMYkn7+IErM5p5UgKIf8OtqVs/h2bXr1Bt3uTsREsI/4nK8a0PQERbAPsVPVNIsG7Q==} engines: {node: '>=18.0.0'} '@smithy/util-endpoints@3.2.8': @@ -4090,8 +3940,8 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/bun@1.3.8': - resolution: {integrity: sha512-3LvWJ2q5GerAXYxO2mffLTqOzEu5qnhEAlh48Vnu8WQfnmSwbgagjGZV6BoHKJztENYEDn6QmVd949W4uESRJA==} + '@types/bun@1.3.9': + resolution: {integrity: sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -4175,8 +4025,8 @@ packages: '@types/node@22.19.2': resolution: {integrity: sha512-LPM2G3Syo1GLzXLGJAKdqoU35XvrWzGJ21/7sgZTUpbkBaOasTj8tjwn6w+hCkqaa1TfJ/w67rJSwYItlJ2mYw==} - '@types/node@22.19.8': - resolution: {integrity: sha512-ebO/Yl+EAvVe8DnMfi+iaAyIqYdK0q/q0y0rw82INWEKJOBe6b/P3YWE8NW7oOlF/nXFNrHwhARrN/hdgDkraA==} + '@types/node@25.3.0': + resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4189,8 +4039,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.11': - resolution: {integrity: sha512-tORuanb01iEzWvMGVGv2ZDhYZVeRMrw453DCSAIn/5yvcSVnMoUMTyf33nQJLahYEnv9xqrTNbgz4qY5EfSh0g==} + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} '@types/responselike@1.0.0': resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} @@ -4207,8 +4057,8 @@ packages: '@types/urijs@1.19.26': resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==} - '@types/vscode@1.108.1': - resolution: {integrity: sha512-DerV0BbSzt87TbrqmZ7lRDIYaMiqvP8tmJTzW2p49ZBVtGUnGAu2RGQd1Wv4XMzEVUpaHbsemVM5nfuQJj7H6w==} + '@types/vscode@1.109.0': + resolution: {integrity: sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==} '@types/whatwg-mimetype@3.0.2': resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} @@ -4219,72 +4069,72 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.54.0': - resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} + '@typescript-eslint/eslint-plugin@8.56.0': + resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.54.0 - eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/parser': ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.54.0': - resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} + '@typescript-eslint/parser@8.56.0': + resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} + '@typescript-eslint/project-service@8.56.0': + resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} + '@typescript-eslint/scope-manager@8.56.0': + resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} + '@typescript-eslint/tsconfig-utils@8.56.0': + resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.54.0': - resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} + '@typescript-eslint/type-utils@8.56.0': + resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} + '@typescript-eslint/types@8.56.0': + resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} + '@typescript-eslint/typescript-estree@8.56.0': + resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.54.0': - resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} + '@typescript-eslint/utils@8.56.0': + resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} + '@typescript-eslint/visitor-keys@8.56.0': + resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/vfs@1.6.2': - resolution: {integrity: sha512-hoBwJwcbKHmvd2QVebiytN1aELvpk9B74B4L1mFm/XT1Q/VOYAWl2vQ9AWRFtQq8zmz6enTpfTV8WRc4ATjW/g==} + '@typescript/vfs@1.6.4': + resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} peerDependencies: typescript: '*' - '@typespec/ts-http-runtime@0.3.2': - resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} + '@typespec/ts-http-runtime@0.3.3': + resolution: {integrity: sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==} engines: {node: '>=20.0.0'} '@ungap/structured-clone@1.3.0': @@ -4464,8 +4314,8 @@ packages: resolution: {integrity: sha512-EgyazlL0VejvZqWZ6KL3ig27Yl8RXcwhz1hayuqeAIxaqbsnmSmogL2zKXgGnm9y/A6QkPfZH1BcQoUh1STvtQ==} engines: {node: '>=18'} - '@vitejs/plugin-react@5.1.3': - resolution: {integrity: sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==} + '@vitejs/plugin-react@5.1.4': + resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4655,8 +4505,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true @@ -4717,8 +4567,8 @@ packages: ajv: optional: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -4729,6 +4579,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + alien-signals@0.4.14: resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} @@ -4814,15 +4667,9 @@ packages: arkregex@0.0.3: resolution: {integrity: sha512-bU21QJOJEFJK+BPNgv+5bVXkvRxyAvgnon75D92newgHxkBJTgiFwQxusyViYyJkETsddPlHyspshDQcCzmkNg==} - arkregex@0.0.5: - resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==} - arktype@2.1.27: resolution: {integrity: sha512-enctOHxI4SULBv/TDtCVi5M8oLd4J5SVlPUblXDzSsOYQNMzmVbUosGBnJuZDKmFlN5Ie0/QVEuTE+Z5X1UhsQ==} - arktype@2.1.29: - resolution: {integrity: sha512-jyfKk4xIOzvYNayqnD8ZJQqOwcrTOUbIU4293yrzAjA3O1dWh61j71ArMQ6tS/u4pD7vabSPe7nG3RCyoXW6RQ==} - array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -4943,8 +4790,8 @@ packages: azure-devops-node-api@12.5.0: resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} - b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -4957,6 +4804,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.3: + resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} + engines: {node: 20 || >=22} + bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} peerDependencies: @@ -4965,8 +4816,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.3: - resolution: {integrity: sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==} + bare-fs@4.5.4: + resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -4981,8 +4832,8 @@ packages: bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + bare-stream@2.8.0: + resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -5002,8 +4853,9 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.0: + resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + engines: {node: '>=6.0.0'} hasBin: true basic-ftp@5.1.0: @@ -5036,11 +4888,11 @@ packages: bmp-ts@1.0.9: resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} - bn.js@4.12.2: - resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + bn.js@4.12.3: + resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} - bn.js@5.2.2: - resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + bn.js@5.2.3: + resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -5069,6 +4921,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.2: + resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} + engines: {node: 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -5132,8 +4988,8 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - bun-types@1.3.8: - resolution: {integrity: sha512-fL99nxdOWvV4LqjmC+8Q9kW3M4QTtTR1eePs94v5ctGqU8OeceWrSUaRw3JYb7tU3FkMIAjkueehrHPPPGKi5Q==} + bun-types@1.3.9: + resolution: {integrity: sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg==} bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} @@ -5197,8 +5053,8 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001767: - resolution: {integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==} + caniuse-lite@1.0.30001770: + resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} canvas@3.2.0: resolution: {integrity: sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==} @@ -5464,8 +5320,8 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -5929,8 +5785,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.286: - resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} + electron-to-chromium@1.5.302: + resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -6057,8 +5913,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} hasBin: true @@ -6161,8 +6017,12 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.3: + resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -6318,8 +6178,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.3.4: - resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==} + fast-xml-parser@5.3.6: + resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==} hasBin: true fastq@1.20.1: @@ -6539,8 +6399,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -6579,8 +6439,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.1: - resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==} + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -7332,8 +7192,8 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} isarray@1.0.0: @@ -7494,6 +7354,9 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json-with-bigint@3.5.3: + resolution: {integrity: sha512-QObKu6nxy7NsxqR0VK4rkXnsNr5L9ElJaGEg+ucJ6J7/suoKZ0n+p76cu9aCqowytxEbwYNzvrMerfMkXneF5A==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -7518,8 +7381,8 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jsonpath-plus@10.3.0: - resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} + jsonpath-plus@10.4.0: + resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} engines: {node: '>=18.0.0'} hasBin: true @@ -7853,8 +7716,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.5: - resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -8127,6 +7990,9 @@ packages: micromark-extension-mdx-jsx@3.0.1: resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + micromark-extension-mdx-md@2.0.0: resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} @@ -8335,13 +8201,13 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + minimatch@10.2.1: + resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==} engines: {node: 20 || >=22} - minimatch@10.1.2: - resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} - engines: {node: 20 || >=22} + minimatch@10.2.2: + resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -8373,16 +8239,16 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mintlify@4.2.331: - resolution: {integrity: sha512-57mLAnYuZ9EEpTT84NAgUOFK7SSEM0cuO1J+NxNfywJi/RL+JmDijd9Tv74QHOEUhPwHjKPzOkhYR82vMqIdvw==} + mintlify@4.2.368: + resolution: {integrity: sha512-3LmLU6UeIxrL5AmIfOL3on7IGOWZ63yKVvdtgeaWM8xffO/5Jexs+wzCH7AXTqAk0vcU3w8yyQNlPXAj42Su6A==} engines: {node: '>=18.0.0'} hasBin: true @@ -8466,9 +8332,9 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next-mdx-remote-client@1.1.4: - resolution: {integrity: sha512-psCMdO50tfoT1kAH7OGXZvhyRfiHVK6IqwjmWFV5gtLo4dnqjAgcjcLNeJ92iI26UNlKShxYrBs1GQ6UXxk97A==} - engines: {node: '>=18.18.0'} + next-mdx-remote-client@1.1.6: + resolution: {integrity: sha512-O4HIpi44d6SismhfG5W78aTUfgxfbsj6FgoM4/G3o4Vtcobt0Ej439IiDPkv+IqsmtouVYG1tGAsz1DIuj9Tfg==} + engines: {node: '>=20.9.0'} peerDependencies: react: '>= 18.3.0 < 19.0.0' react-dom: '>= 18.3.0 < 19.0.0' @@ -8499,6 +8365,10 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} + node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -8531,11 +8401,15 @@ packages: resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} engines: {node: '>=10'} - nodemon@3.1.11: - resolution: {integrity: sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==} + nodemon@3.1.13: + resolution: {integrity: sha512-nPN6L7A9cTA3BnJ3zZIibH5FiDh3GbmibeS17bl5YEU1IRO2mcfvR0ZJXH3ndoeKItjUcaX81FSKc/Kq/IiG6g==} engines: {node: '>=10'} hasBin: true + non-error@0.1.0: + resolution: {integrity: sha512-TMB1uHiGsHRGv1uYclfhivcnf0/PdFp2pNqRxXjncaAsjYMoisaQJI+SSZCqRq+VliwRTC8tsMQfmrWjDMhkPQ==} + engines: {node: '>=20'} + nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9179,13 +9053,13 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.58.1: - resolution: {integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==} + playwright-core@1.58.2: + resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} engines: {node: '>=18'} hasBin: true - playwright@1.58.1: - resolution: {integrity: sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==} + playwright@1.58.2: + resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} engines: {node: '>=18'} hasBin: true @@ -9278,6 +9152,7 @@ packages: prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. hasBin: true prelude-ls@1.2.1: @@ -9367,8 +9242,8 @@ packages: prosemirror-transform@1.11.0: resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} - prosemirror-view@1.41.5: - resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} + prosemirror-view@1.41.6: + resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -9431,8 +9306,12 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} + qs@6.14.2: + resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} + engines: {node: '>=0.6'} + + qs@6.15.0: + resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} quansync@0.2.11: @@ -9677,8 +9556,8 @@ packages: remark-math@6.0.0: resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - remark-mdx-remove-esm@1.2.2: - resolution: {integrity: sha512-YSaUwqiuJuD6S9XTAD6zmO4JJJZJgsRAdsl2drZO8/ssAVv0HXAg4vkSgHZAP46ORh8ERPFQrC7JWlbkwBwu1A==} + remark-mdx-remove-esm@1.2.3: + resolution: {integrity: sha512-n6r36SaE+7cno7pmshWbGzYolDVLxJm5EKuw67+q4SPQT6kelNJHyZAiFYYtOB0axh+/1xF4BC57Ec3jncAGXQ==} peerDependencies: unified: ^11 @@ -9703,6 +9582,9 @@ packages: remark-rehype@11.1.1: resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + remark-smartypants@3.0.2: resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} engines: {node: '>=16.0.0'} @@ -9749,8 +9631,9 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolve@2.0.0-next.6: + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} hasBin: true responselike@2.0.1: @@ -9851,8 +9734,8 @@ packages: rollup: optional: true - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + rollup@4.58.0: + resolution: {integrity: sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -9974,6 +9857,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -9982,9 +9870,9 @@ packages: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} - serialize-error@12.0.0: - resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} - engines: {node: '>=18'} + serialize-error@13.0.1: + resolution: {integrity: sha512-bBZaRwLH9PN5HbLCjPId4dP5bNGEtumcErgOX952IsvOhVPrm3/AeK1y0UHA/QaPG701eg0yEnOKsCOC6X/kaA==} + engines: {node: '>=20'} serve-handler@6.1.6: resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} @@ -10032,10 +9920,6 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -10154,8 +10038,8 @@ packages: sonic-boom@3.8.1: resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} - sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -10358,11 +10242,11 @@ packages: resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} engines: {node: '>=18'} - superdoc@1.11.0: - resolution: {integrity: sha512-DY5uObI50Itfxjjog9h8FQKGWLx0o0au2H0h9hbNtBrNXvg8mAeQvekSgYgwmL7xIW+juo/ZMSGY035eLDMmnw==} + superdoc@1.15.0: + resolution: {integrity: sha512-gLFqPYA74my5kE9cYvZWzkbmBBOKH8WqyQDl91EMIHvKS1LLzM959EBhda+BGkoH0i/CYx8CogJfzSO9I6hFLQ==} peerDependencies: '@hocuspocus/provider': ^2.13.6 - pdfjs-dist: '>=4.3.136 <=4.6.82' + pdfjs-dist: ^5.4.296 y-prosemirror: ^1.3.7 yjs: 13.6.19 @@ -10393,6 +10277,10 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tailwindcss@3.4.4: resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} @@ -10416,6 +10304,9 @@ packages: engines: {node: '>=10'} deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -10436,8 +10327,8 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} @@ -10502,15 +10393,15 @@ packages: tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.22: - resolution: {integrity: sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==} + tldts-core@7.0.23: + resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tldts@7.0.22: - resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==} + tldts@7.0.23: + resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} hasBin: true tmp@0.2.5: @@ -10666,6 +10557,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.4.4: + resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} + engines: {node: '>=20'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -10689,11 +10584,11 @@ packages: typed-rest-client@1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} - typescript-eslint@8.54.0: - resolution: {integrity: sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==} + typescript-eslint@8.56.0: + resolution: {integrity: sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' typescript@5.8.2: @@ -10731,14 +10626,17 @@ packages: undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} + underscore@1.13.8: + resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.20.0: - resolution: {integrity: sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} unfetch@4.2.0: @@ -11430,7 +11328,7 @@ snapshots: '@adobe/css-tools@4.4.4': {} - '@alcalzone/ansi-tokenize@0.2.4': + '@alcalzone/ansi-tokenize@0.2.5': dependencies: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 @@ -11446,35 +11344,29 @@ snapshots: dependencies: '@ark/util': 0.55.0 - '@ark/schema@0.56.0': - dependencies: - '@ark/util': 0.56.0 - '@ark/util@0.55.0': {} - '@ark/util@0.56.0': {} - - '@asamuzakjp/css-color@4.1.1': + '@asamuzakjp/css-color@4.1.2': dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 11.2.5 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.6 - '@asamuzakjp/dom-selector@6.7.7': + '@asamuzakjp/dom-selector@6.8.1': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.1.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.5 + lru-cache: 11.2.6 '@asamuzakjp/nwsapi@2.3.9': {} '@asyncapi/parser@3.4.0': dependencies: - '@asyncapi/specs': 6.11.1 + '@asyncapi/specs': 6.8.1 '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 '@stoplight/json': 3.21.0 '@stoplight/json-ref-readers': 1.2.2 @@ -11486,20 +11378,16 @@ snapshots: '@stoplight/types': 13.20.0 '@types/json-schema': 7.0.15 '@types/urijs': 1.19.26 - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-errors: 3.0.0(ajv@8.18.0) + ajv-formats: 2.1.1(ajv@8.18.0) avsc: 5.7.9 - js-yaml: 4.1.1 - jsonpath-plus: 10.3.0 + js-yaml: 4.1.0 + jsonpath-plus: 10.4.0 node-fetch: 2.6.7 transitivePeerDependencies: - encoding - '@asyncapi/specs@6.11.1': - dependencies: - '@types/json-schema': 7.0.15 - '@asyncapi/specs@6.8.1': dependencies: '@types/json-schema': 7.0.15 @@ -11551,31 +11439,31 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.988.0': + '@aws-sdk/client-s3@3.995.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.8 - '@aws-sdk/credential-provider-node': 3.972.7 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/credential-provider-node': 3.972.10 '@aws-sdk/middleware-bucket-endpoint': 3.972.3 '@aws-sdk/middleware-expect-continue': 3.972.3 - '@aws-sdk/middleware-flexible-checksums': 3.972.6 + '@aws-sdk/middleware-flexible-checksums': 3.972.9 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-location-constraint': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-sdk-s3': 3.972.8 + '@aws-sdk/middleware-sdk-s3': 3.972.11 '@aws-sdk/middleware-ssec': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.8 + '@aws-sdk/middleware-user-agent': 3.972.11 '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/signature-v4-multi-region': 3.988.0 + '@aws-sdk/signature-v4-multi-region': 3.995.0 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.988.0 + '@aws-sdk/util-endpoints': 3.995.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.6 + '@aws-sdk/util-user-agent-node': 3.972.10 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/eventstream-serde-browser': 4.2.8 '@smithy/eventstream-serde-config-resolver': 4.3.8 '@smithy/eventstream-serde-node': 4.2.8 @@ -11586,21 +11474,21 @@ snapshots: '@smithy/invalid-dependency': 4.2.8 '@smithy/md5-js': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.14 - '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-endpoint': 4.4.16 + '@smithy/middleware-retry': 4.4.33 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.30 - '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-defaults-mode-browser': 4.3.32 + '@smithy/util-defaults-mode-node': 4.2.35 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -11611,41 +11499,41 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.988.0': + '@aws-sdk/client-sso@3.993.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.8 + '@aws-sdk/middleware-user-agent': 3.972.11 '@aws-sdk/region-config-resolver': 3.972.3 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.988.0 + '@aws-sdk/util-endpoints': 3.993.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.6 + '@aws-sdk/util-user-agent-node': 3.972.10 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.2.8 '@smithy/invalid-dependency': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.14 - '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-endpoint': 4.4.16 + '@smithy/middleware-retry': 4.4.33 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.30 - '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-defaults-mode-browser': 4.3.32 + '@smithy/util-defaults-mode-node': 4.2.35 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -11654,16 +11542,16 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.973.8': + '@aws-sdk/core@3.973.11': dependencies: '@aws-sdk/types': 3.973.1 - '@aws-sdk/xml-builder': 3.972.4 - '@smithy/core': 3.23.0 + '@aws-sdk/xml-builder': 3.972.5 + '@smithy/core': 3.23.2 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-middleware': 4.2.8 @@ -11675,37 +11563,37 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.6': + '@aws-sdk/credential-provider-env@3.972.9': dependencies: - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.8': + '@aws-sdk/credential-provider-http@3.972.11': dependencies: - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/types': 3.973.1 '@smithy/fetch-http-handler': 5.3.9 '@smithy/node-http-handler': 4.4.10 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-stream': 4.5.12 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.6': + '@aws-sdk/credential-provider-ini@3.972.9': dependencies: - '@aws-sdk/core': 3.973.8 - '@aws-sdk/credential-provider-env': 3.972.6 - '@aws-sdk/credential-provider-http': 3.972.8 - '@aws-sdk/credential-provider-login': 3.972.6 - '@aws-sdk/credential-provider-process': 3.972.6 - '@aws-sdk/credential-provider-sso': 3.972.6 - '@aws-sdk/credential-provider-web-identity': 3.972.6 - '@aws-sdk/nested-clients': 3.988.0 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/credential-provider-env': 3.972.9 + '@aws-sdk/credential-provider-http': 3.972.11 + '@aws-sdk/credential-provider-login': 3.972.9 + '@aws-sdk/credential-provider-process': 3.972.9 + '@aws-sdk/credential-provider-sso': 3.972.9 + '@aws-sdk/credential-provider-web-identity': 3.972.9 + '@aws-sdk/nested-clients': 3.993.0 '@aws-sdk/types': 3.973.1 '@smithy/credential-provider-imds': 4.2.8 '@smithy/property-provider': 4.2.8 @@ -11715,10 +11603,10 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.6': + '@aws-sdk/credential-provider-login@3.972.9': dependencies: - '@aws-sdk/core': 3.973.8 - '@aws-sdk/nested-clients': 3.988.0 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/nested-clients': 3.993.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 @@ -11728,14 +11616,14 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.7': + '@aws-sdk/credential-provider-node@3.972.10': dependencies: - '@aws-sdk/credential-provider-env': 3.972.6 - '@aws-sdk/credential-provider-http': 3.972.8 - '@aws-sdk/credential-provider-ini': 3.972.6 - '@aws-sdk/credential-provider-process': 3.972.6 - '@aws-sdk/credential-provider-sso': 3.972.6 - '@aws-sdk/credential-provider-web-identity': 3.972.6 + '@aws-sdk/credential-provider-env': 3.972.9 + '@aws-sdk/credential-provider-http': 3.972.11 + '@aws-sdk/credential-provider-ini': 3.972.9 + '@aws-sdk/credential-provider-process': 3.972.9 + '@aws-sdk/credential-provider-sso': 3.972.9 + '@aws-sdk/credential-provider-web-identity': 3.972.9 '@aws-sdk/types': 3.973.1 '@smithy/credential-provider-imds': 4.2.8 '@smithy/property-provider': 4.2.8 @@ -11745,20 +11633,20 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.972.6': + '@aws-sdk/credential-provider-process@3.972.9': dependencies: - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.6': + '@aws-sdk/credential-provider-sso@3.972.9': dependencies: - '@aws-sdk/client-sso': 3.988.0 - '@aws-sdk/core': 3.973.8 - '@aws-sdk/token-providers': 3.988.0 + '@aws-sdk/client-sso': 3.993.0 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/token-providers': 3.993.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -11767,10 +11655,10 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.6': + '@aws-sdk/credential-provider-web-identity@3.972.9': dependencies: - '@aws-sdk/core': 3.973.8 - '@aws-sdk/nested-clients': 3.988.0 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/nested-clients': 3.993.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -11796,12 +11684,12 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.972.6': + '@aws-sdk/middleware-flexible-checksums@3.972.9': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/crc64-nvme': 3.972.0 '@aws-sdk/types': 3.973.1 '@smithy/is-array-buffer': 4.2.0 @@ -11840,16 +11728,16 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.8': + '@aws-sdk/middleware-sdk-s3@3.972.11': dependencies: - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/types': 3.973.1 '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-config-provider': 4.2.0 '@smithy/util-middleware': 4.2.8 @@ -11863,51 +11751,51 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.8': + '@aws-sdk/middleware-user-agent@3.972.11': dependencies: - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.988.0 - '@smithy/core': 3.23.0 + '@aws-sdk/util-endpoints': 3.993.0 + '@smithy/core': 3.23.2 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.988.0': + '@aws-sdk/nested-clients@3.993.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.8 + '@aws-sdk/core': 3.973.11 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.8 + '@aws-sdk/middleware-user-agent': 3.972.11 '@aws-sdk/region-config-resolver': 3.972.3 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.988.0 + '@aws-sdk/util-endpoints': 3.993.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.6 + '@aws-sdk/util-user-agent-node': 3.972.10 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.2.8 '@smithy/invalid-dependency': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.14 - '@smithy/middleware-retry': 4.4.31 + '@smithy/middleware-endpoint': 4.4.16 + '@smithy/middleware-retry': 4.4.33 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.30 - '@smithy/util-defaults-mode-node': 4.2.33 + '@smithy/util-defaults-mode-browser': 4.3.32 + '@smithy/util-defaults-mode-node': 4.2.35 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -11924,19 +11812,19 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.988.0': + '@aws-sdk/signature-v4-multi-region@3.995.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.8 + '@aws-sdk/middleware-sdk-s3': 3.972.11 '@aws-sdk/types': 3.973.1 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.988.0': + '@aws-sdk/token-providers@3.993.0': dependencies: - '@aws-sdk/core': 3.973.8 - '@aws-sdk/nested-clients': 3.988.0 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/nested-clients': 3.993.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -11954,7 +11842,15 @@ snapshots: dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.988.0': + '@aws-sdk/util-endpoints@3.993.0': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-endpoints': 3.2.8 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.995.0': dependencies: '@aws-sdk/types': 3.973.1 '@smithy/types': 4.12.0 @@ -11973,18 +11869,18 @@ snapshots: bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.972.6': + '@aws-sdk/util-user-agent-node@3.972.10': dependencies: - '@aws-sdk/middleware-user-agent': 3.972.8 + '@aws-sdk/middleware-user-agent': 3.972.11 '@aws-sdk/types': 3.973.1 '@smithy/node-config-provider': 4.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.4': + '@aws-sdk/xml-builder@3.972.5': dependencies: '@smithy/types': 4.12.0 - fast-xml-parser: 5.3.4 + fast-xml-parser: 5.3.6 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.3': {} @@ -12020,7 +11916,7 @@ snapshots: '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.3 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -12032,7 +11928,7 @@ snapshots: '@azure/core-util@1.13.1': dependencies: '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.3 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -12046,8 +11942,8 @@ snapshots: '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@azure/msal-browser': 4.28.1 - '@azure/msal-node': 3.8.6 + '@azure/msal-browser': 4.28.2 + '@azure/msal-node': 3.8.7 open: 10.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -12055,20 +11951,20 @@ snapshots: '@azure/logger@1.3.0': dependencies: - '@typespec/ts-http-runtime': 0.3.2 + '@typespec/ts-http-runtime': 0.3.3 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/msal-browser@4.28.1': + '@azure/msal-browser@4.28.2': dependencies: - '@azure/msal-common': 15.14.1 + '@azure/msal-common': 15.14.2 - '@azure/msal-common@15.14.1': {} + '@azure/msal-common@15.14.2': {} - '@azure/msal-node@3.8.6': + '@azure/msal-node@3.8.7': dependencies: - '@azure/msal-common': 15.14.1 + '@azure/msal-common': 15.14.2 jsonwebtoken: 9.0.3 uuid: 8.3.2 @@ -12190,14 +12086,14 @@ snapshots: '@canvas/image-data@1.1.0': {} - '@clack/core@1.0.0': + '@clack/core@1.0.1': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@1.0.0': + '@clack/prompts@1.0.1': dependencies: - '@clack/core': 1.0.0 + '@clack/core': 1.0.1 picocolors: 1.1.1 sisteransi: 1.0.5 @@ -12225,7 +12121,7 @@ snapshots: '@commitlint/config-validator@19.8.1': dependencies: '@commitlint/types': 19.8.1 - ajv: 8.17.1 + ajv: 8.18.0 '@commitlint/ensure@19.8.1': dependencies: @@ -12246,7 +12142,7 @@ snapshots: '@commitlint/is-ignored@19.8.1': dependencies: '@commitlint/types': 19.8.1 - semver: 7.7.3 + semver: 7.7.4 '@commitlint/lint@19.8.1': dependencies: @@ -12322,27 +12218,27 @@ snapshots: dependencies: vue: 3.5.25(typescript@5.9.3) - '@csstools/color-helpers@5.1.0': {} + '@csstools/color-helpers@6.0.1': {} - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-color-parser@4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 5.1.0 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/color-helpers': 6.0.1 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': {} + '@csstools/css-syntax-patches-for-csstree@1.0.27': {} - '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-tokenizer@4.0.0': {} '@cypress/request@3.0.9': dependencies: @@ -12386,7 +12282,7 @@ snapshots: '@es-joy/jsdoccomment@0.56.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/types': 8.56.0 comment-parser: 1.4.1 esquery: 1.7.0 jsdoc-type-pratt-parser: 5.1.1 @@ -12394,162 +12290,162 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.2': + '@esbuild/aix-ppc64@0.27.3': optional: true '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.2': + '@esbuild/android-arm64@0.27.3': optional: true '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.2': + '@esbuild/android-arm@0.27.3': optional: true '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.2': + '@esbuild/android-x64@0.27.3': optional: true '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.2': + '@esbuild/darwin-arm64@0.27.3': optional: true '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.2': + '@esbuild/darwin-x64@0.27.3': optional: true '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.2': + '@esbuild/freebsd-arm64@0.27.3': optional: true '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.2': + '@esbuild/freebsd-x64@0.27.3': optional: true '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.2': + '@esbuild/linux-arm64@0.27.3': optional: true '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.2': + '@esbuild/linux-arm@0.27.3': optional: true '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.2': + '@esbuild/linux-ia32@0.27.3': optional: true '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.2': + '@esbuild/linux-loong64@0.27.3': optional: true '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.2': + '@esbuild/linux-mips64el@0.27.3': optional: true '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.2': + '@esbuild/linux-ppc64@0.27.3': optional: true '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.2': + '@esbuild/linux-riscv64@0.27.3': optional: true '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.2': + '@esbuild/linux-s390x@0.27.3': optional: true '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.2': + '@esbuild/linux-x64@0.27.3': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.2': + '@esbuild/netbsd-arm64@0.27.3': optional: true '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.2': + '@esbuild/netbsd-x64@0.27.3': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.2': + '@esbuild/openbsd-arm64@0.27.3': optional: true '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.2': + '@esbuild/openbsd-x64@0.27.3': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.2': + '@esbuild/openharmony-arm64@0.27.3': optional: true '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.2': + '@esbuild/sunos-x64@0.27.3': optional: true '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.2': + '@esbuild/win32-arm64@0.27.3': optional: true '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.2': + '@esbuild/win32-ia32@0.27.3': optional: true '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.2': + '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))': dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -12572,7 +12468,7 @@ snapshots: '@eslint/eslintrc@3.3.3': dependencies: - ajv: 6.12.6 + ajv: 6.14.0 debug: 4.4.3(supports-color@5.5.0) espree: 10.4.0 globals: 14.0.0 @@ -12584,7 +12480,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.2': {} + '@eslint/js@9.39.3': {} '@eslint/object-schema@2.1.7': {} @@ -12657,307 +12553,205 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@img/colour@1.0.0': {} - '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true - '@img/sharp-darwin-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - '@img/sharp-libvips-linux-arm@1.0.5': optional: true - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - '@img/sharp-libvips-linux-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - '@img/sharp-linux-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - '@img/sharp-linux-arm@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.0.5 optional: true - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - '@img/sharp-linux-s390x@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - '@img/sharp-linux-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.0.4 optional: true - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - '@img/sharp-wasm32@0.33.5': dependencies: '@emnapi/runtime': 1.8.1 optional: true - '@img/sharp-wasm32@0.34.5': - dependencies: - '@emnapi/runtime': 1.8.1 - optional: true - - '@img/sharp-win32-arm64@0.34.5': - optional: true - '@img/sharp-win32-ia32@0.33.5': optional: true - '@img/sharp-win32-ia32@0.34.5': - optional: true - '@img/sharp-win32-x64@0.33.5': optional: true - '@img/sharp-win32-x64@0.34.5': - optional: true - '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@22.19.8)': + '@inquirer/checkbox@4.3.2(@types/node@25.3.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@25.3.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/confirm@5.1.21(@types/node@22.19.8)': + '@inquirer/confirm@5.1.21(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/core@10.3.2(@types/node@22.19.8)': + '@inquirer/core@10.3.2(@types/node@25.3.0)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@25.3.0) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/editor@4.2.23(@types/node@22.19.8)': + '@inquirer/editor@4.2.23(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/external-editor': 1.0.3(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/expand@4.0.23(@types/node@22.19.8)': + '@inquirer/expand@4.0.23(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/external-editor@1.0.3(@types/node@22.19.8)': + '@inquirer/external-editor@1.0.3(@types/node@25.3.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@22.19.8)': + '@inquirer/input@4.3.1(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/number@3.0.23(@types/node@22.19.8)': + '@inquirer/number@3.0.23(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/password@4.0.23(@types/node@22.19.8)': + '@inquirer/password@4.0.23(@types/node@25.3.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) optionalDependencies: - '@types/node': 22.19.8 - - '@inquirer/prompts@7.9.0(@types/node@22.19.8)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@22.19.8) - '@inquirer/confirm': 5.1.21(@types/node@22.19.8) - '@inquirer/editor': 4.2.23(@types/node@22.19.8) - '@inquirer/expand': 4.0.23(@types/node@22.19.8) - '@inquirer/input': 4.3.1(@types/node@22.19.8) - '@inquirer/number': 3.0.23(@types/node@22.19.8) - '@inquirer/password': 4.0.23(@types/node@22.19.8) - '@inquirer/rawlist': 4.1.11(@types/node@22.19.8) - '@inquirer/search': 3.2.2(@types/node@22.19.8) - '@inquirer/select': 4.4.2(@types/node@22.19.8) + '@types/node': 25.3.0 + + '@inquirer/prompts@7.9.0(@types/node@25.3.0)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@25.3.0) + '@inquirer/confirm': 5.1.21(@types/node@25.3.0) + '@inquirer/editor': 4.2.23(@types/node@25.3.0) + '@inquirer/expand': 4.0.23(@types/node@25.3.0) + '@inquirer/input': 4.3.1(@types/node@25.3.0) + '@inquirer/number': 3.0.23(@types/node@25.3.0) + '@inquirer/password': 4.0.23(@types/node@25.3.0) + '@inquirer/rawlist': 4.1.11(@types/node@25.3.0) + '@inquirer/search': 3.2.2(@types/node@25.3.0) + '@inquirer/select': 4.4.2(@types/node@25.3.0) optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/rawlist@4.1.11(@types/node@22.19.8)': + '@inquirer/rawlist@4.1.11(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/search@3.2.2(@types/node@22.19.8)': + '@inquirer/search@3.2.2(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@25.3.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/select@4.4.2(@types/node@22.19.8)': + '@inquirer/select@4.4.2(@types/node@25.3.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/core': 10.3.2(@types/node@25.3.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@25.3.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@inquirer/type@3.0.10(@types/node@22.19.8)': + '@inquirer/type@3.0.10(@types/node@25.3.0)': optionalDependencies: - '@types/node': 22.19.8 - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.1': - dependencies: - '@isaacs/balanced-match': 4.0.1 + '@types/node': 25.3.0 '@isaacs/cliui@8.0.2': dependencies: @@ -13210,7 +13004,7 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 - acorn: 8.15.0 + acorn: 8.16.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -13219,12 +13013,12 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.15.0) + recma-jsx: 1.0.1(acorn@8.16.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.1 remark-parse: 11.0.0 - remark-rehype: 11.1.1 + remark-rehype: 11.1.2 source-map: 0.7.6 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 @@ -13234,40 +13028,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.11)(react@19.2.3)': + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.2.11 + '@types/react': 19.2.14 react: 19.2.3 - '@microsoft/api-extractor-model@7.32.2(@types/node@22.19.2)': + '@microsoft/api-extractor-model@7.33.1(@types/node@22.19.2)': dependencies: '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2) + '@rushstack/node-core-library': 5.20.1(@types/node@22.19.2) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor-model@7.32.2(@types/node@22.19.8)': + '@microsoft/api-extractor-model@7.33.1(@types/node@25.3.0)': dependencies: '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@22.19.8) + '@rushstack/node-core-library': 5.20.1(@types/node@25.3.0) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.56.1(@types/node@22.19.2)': + '@microsoft/api-extractor@7.57.2(@types/node@22.19.2)': dependencies: - '@microsoft/api-extractor-model': 7.32.2(@types/node@22.19.2) + '@microsoft/api-extractor-model': 7.33.1(@types/node@22.19.2) '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2) - '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.21.0(@types/node@22.19.2) - '@rushstack/ts-command-line': 5.2.0(@types/node@22.19.2) + '@rushstack/node-core-library': 5.20.1(@types/node@22.19.2) + '@rushstack/rig-package': 0.7.1 + '@rushstack/terminal': 0.22.1(@types/node@22.19.2) + '@rushstack/ts-command-line': 5.3.1(@types/node@22.19.2) diff: 8.0.3 lodash: 4.17.23 - minimatch: 10.0.3 + minimatch: 10.2.1 resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 @@ -13275,18 +13069,18 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.56.1(@types/node@22.19.8)': + '@microsoft/api-extractor@7.57.2(@types/node@25.3.0)': dependencies: - '@microsoft/api-extractor-model': 7.32.2(@types/node@22.19.8) + '@microsoft/api-extractor-model': 7.33.1(@types/node@25.3.0) '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@22.19.8) - '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.21.0(@types/node@22.19.8) - '@rushstack/ts-command-line': 5.2.0(@types/node@22.19.8) + '@rushstack/node-core-library': 5.20.1(@types/node@25.3.0) + '@rushstack/rig-package': 0.7.1 + '@rushstack/terminal': 0.22.1(@types/node@25.3.0) + '@rushstack/ts-command-line': 5.3.1(@types/node@25.3.0) diff: 8.0.3 lodash: 4.17.23 - minimatch: 10.0.3 + minimatch: 10.2.1 resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 @@ -13303,23 +13097,24 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} - '@mintlify/cli@4.0.935(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': + '@mintlify/cli@4.0.971(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': dependencies: - '@inquirer/prompts': 7.9.0(@types/node@22.19.8) - '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/link-rot': 3.0.872(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/models': 0.0.268 - '@mintlify/prebuild': 1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/previewing': 4.0.905(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) - '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@inquirer/prompts': 7.9.0(@types/node@25.3.0) + '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/link-rot': 3.0.906(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/models': 0.0.273 + '@mintlify/prebuild': 1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/previewing': 4.0.937(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + '@mintlify/scraping': 4.0.605(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) adm-zip: 0.5.16 chalk: 5.2.0 color: 4.2.3 detect-port: 1.5.1 front-matter: 4.0.2 fs-extra: 11.2.0 - ink: 6.3.0(@types/react@19.2.11)(react@19.2.3) - inquirer: 12.3.0(@types/node@22.19.8) + ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) + inquirer: 12.3.0(@types/node@25.3.0) js-yaml: 4.1.0 mdast-util-mdx-jsx: 3.2.0 react: 19.2.3 @@ -13343,13 +13138,13 @@ snapshots: - typescript - utf-8-validate - '@mintlify/common@1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/common@1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/models': 0.0.255 '@mintlify/openapi-parser': 0.0.8 - '@mintlify/validation': 0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@sindresorhus/slugify': 2.2.0 '@types/mdast': 4.0.4 acorn: 8.11.2 @@ -13403,14 +13198,14 @@ snapshots: - ts-node - typescript - '@mintlify/common@1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/common@1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: '@asyncapi/parser': 3.4.0 '@asyncapi/specs': 6.8.1 - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/models': 0.0.268 + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/models': 0.0.273 '@mintlify/openapi-parser': 0.0.8 - '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@sindresorhus/slugify': 2.2.0 '@types/mdast': 4.0.4 acorn: 8.11.2 @@ -13464,13 +13259,13 @@ snapshots: - ts-node - typescript - '@mintlify/link-rot@3.0.872(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/link-rot@3.0.906(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/prebuild': 1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/previewing': 4.0.905(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) - '@mintlify/scraping': 4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/prebuild': 1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/previewing': 4.0.937(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + '@mintlify/scraping': 4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) fs-extra: 11.1.0 unist-util-visit: 4.1.2 transitivePeerDependencies: @@ -13490,18 +13285,18 @@ snapshots: - typescript - utf-8-validate - '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) '@shikijs/transformers': 3.22.0 '@shikijs/twoslash': 3.22.0(typescript@5.9.3) - arktype: 2.1.29 + arktype: 2.1.27 hast-util-to-string: 3.0.1 mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.1.0 mdast-util-mdx-jsx: 3.2.0 mdast-util-to-hast: 13.2.1 - next-mdx-remote-client: 1.1.4(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5) + next-mdx-remote-client: 1.1.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) rehype-katex: 7.0.1 @@ -13523,7 +13318,7 @@ snapshots: transitivePeerDependencies: - debug - '@mintlify/models@0.0.268': + '@mintlify/models@0.0.273': dependencies: axios: 1.13.2 openapi-types: 12.1.3 @@ -13532,19 +13327,19 @@ snapshots: '@mintlify/openapi-parser@0.0.8': dependencies: - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-draft-04: 1.0.0(ajv@8.18.0) + ajv-formats: 3.0.1(ajv@8.18.0) jsonpointer: 5.0.1 leven: 4.1.0 yaml: 2.8.2 - '@mintlify/prebuild@1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/prebuild@1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/openapi-parser': 0.0.8 - '@mintlify/scraping': 4.0.574(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/scraping': 4.0.605(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) chalk: 5.3.0 favicons: 7.2.0 front-matter: 4.0.2 @@ -13571,11 +13366,11 @@ snapshots: - typescript - utf-8-validate - '@mintlify/previewing@4.0.905(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': + '@mintlify/previewing@4.0.937(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/prebuild': 1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/prebuild': 1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) better-opn: 3.0.2 chalk: 5.2.0 chokidar: 3.5.3 @@ -13583,8 +13378,8 @@ snapshots: front-matter: 4.0.2 fs-extra: 11.1.0 got: 13.0.0 - ink: 6.3.0(@types/react@19.2.11)(react@19.2.3) - ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.11)(react@19.2.3))(react@19.2.3) + ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) + ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) is-online: 10.0.0 js-yaml: 4.1.0 openapi-types: 12.1.3 @@ -13609,9 +13404,9 @@ snapshots: - typescript - utf-8-validate - '@mintlify/scraping@4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/scraping@4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/openapi-parser': 0.0.8 fs-extra: 11.1.1 hast-util-to-mdast: 10.1.0 @@ -13644,9 +13439,9 @@ snapshots: - typescript - utf-8-validate - '@mintlify/scraping@4.0.574(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/scraping@4.0.605(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/openapi-parser': 0.0.8 fs-extra: 11.1.1 hast-util-to-mdast: 10.1.0 @@ -13679,9 +13474,9 @@ snapshots: - typescript - utf-8-validate - '@mintlify/validation@0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/validation@0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/models': 0.0.255 arktype: 2.1.27 js-yaml: 4.1.0 @@ -13701,10 +13496,10 @@ snapshots: - supports-color - typescript - '@mintlify/validation@0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/validation@0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/models': 0.0.268 + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/models': 0.0.273 arktype: 2.1.27 js-yaml: 4.1.0 lcm: 0.0.3 @@ -13723,52 +13518,52 @@ snapshots: - supports-color - typescript - '@napi-rs/canvas-android-arm64@0.1.91': + '@napi-rs/canvas-android-arm64@0.1.94': optional: true - '@napi-rs/canvas-darwin-arm64@0.1.91': + '@napi-rs/canvas-darwin-arm64@0.1.94': optional: true - '@napi-rs/canvas-darwin-x64@0.1.91': + '@napi-rs/canvas-darwin-x64@0.1.94': optional: true - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.91': + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.94': optional: true - '@napi-rs/canvas-linux-arm64-gnu@0.1.91': + '@napi-rs/canvas-linux-arm64-gnu@0.1.94': optional: true - '@napi-rs/canvas-linux-arm64-musl@0.1.91': + '@napi-rs/canvas-linux-arm64-musl@0.1.94': optional: true - '@napi-rs/canvas-linux-riscv64-gnu@0.1.91': + '@napi-rs/canvas-linux-riscv64-gnu@0.1.94': optional: true - '@napi-rs/canvas-linux-x64-gnu@0.1.91': + '@napi-rs/canvas-linux-x64-gnu@0.1.94': optional: true - '@napi-rs/canvas-linux-x64-musl@0.1.91': + '@napi-rs/canvas-linux-x64-musl@0.1.94': optional: true - '@napi-rs/canvas-win32-arm64-msvc@0.1.91': + '@napi-rs/canvas-win32-arm64-msvc@0.1.94': optional: true - '@napi-rs/canvas-win32-x64-msvc@0.1.91': + '@napi-rs/canvas-win32-x64-msvc@0.1.94': optional: true - '@napi-rs/canvas@0.1.91': + '@napi-rs/canvas@0.1.94': optionalDependencies: - '@napi-rs/canvas-android-arm64': 0.1.91 - '@napi-rs/canvas-darwin-arm64': 0.1.91 - '@napi-rs/canvas-darwin-x64': 0.1.91 - '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.91 - '@napi-rs/canvas-linux-arm64-gnu': 0.1.91 - '@napi-rs/canvas-linux-arm64-musl': 0.1.91 - '@napi-rs/canvas-linux-riscv64-gnu': 0.1.91 - '@napi-rs/canvas-linux-x64-gnu': 0.1.91 - '@napi-rs/canvas-linux-x64-musl': 0.1.91 - '@napi-rs/canvas-win32-arm64-msvc': 0.1.91 - '@napi-rs/canvas-win32-x64-msvc': 0.1.91 + '@napi-rs/canvas-android-arm64': 0.1.94 + '@napi-rs/canvas-darwin-arm64': 0.1.94 + '@napi-rs/canvas-darwin-x64': 0.1.94 + '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.94 + '@napi-rs/canvas-linux-arm64-gnu': 0.1.94 + '@napi-rs/canvas-linux-arm64-musl': 0.1.94 + '@napi-rs/canvas-linux-riscv64-gnu': 0.1.94 + '@napi-rs/canvas-linux-x64-gnu': 0.1.94 + '@napi-rs/canvas-linux-x64-musl': 0.1.94 + '@napi-rs/canvas-win32-arm64-msvc': 0.1.94 + '@napi-rs/canvas-win32-x64-msvc': 0.1.94 optional: true '@napi-rs/wasm-runtime@0.2.12': @@ -13803,20 +13598,20 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.2': + '@octokit/endpoint@11.0.3': dependencies: '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -13829,7 +13624,7 @@ snapshots: '@octokit/core': 7.0.6 '@octokit/types': 15.0.2 - '@octokit/plugin-retry@8.0.3(@octokit/core@7.0.6)': + '@octokit/plugin-retry@8.1.0(@octokit/core@7.0.6)': dependencies: '@octokit/core': 7.0.6 '@octokit/request-error': 7.1.0 @@ -13846,12 +13641,13 @@ snapshots: dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.7': + '@octokit/request@10.0.8': dependencies: - '@octokit/endpoint': 11.0.2 + '@octokit/endpoint': 11.0.3 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 + json-with-bigint: 3.5.3 universal-user-agent: 7.0.3 '@octokit/types@15.0.2': @@ -13877,9 +13673,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.58.1': + '@playwright/test@1.58.2': dependencies: - playwright: 1.58.1 + playwright: 1.58.2 '@pnpm/config.env-replace@1.1.0': {} @@ -13901,7 +13697,7 @@ snapshots: extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.3 + semver: 7.7.2 tar-fs: 3.1.1 unbzip2-stream: 1.4.3 yargs: 17.7.2 @@ -13913,188 +13709,188 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-context@1.1.2(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-id@1.1.1(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.3) aria-hidden: 1.2.6 react: 19.2.3 react-dom: 19.2.4(react@19.2.3) - react-remove-scroll: 2.7.2(@types/react@19.2.11)(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.3) '@radix-ui/rect': 1.1.1 react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.3)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.11)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.11)(react@19.2.3)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 '@radix-ui/rect@1.1.1': {} @@ -14143,100 +13939,100 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.53': {} - '@rolldown/pluginutils@1.0.0-rc.2': {} + '@rolldown/pluginutils@1.0.0-rc.3': {} - '@rollup/plugin-inject@5.0.5(rollup@4.57.1)': + '@rollup/plugin-inject@5.0.5(rollup@4.58.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0(rollup@4.58.0) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.57.1 + rollup: 4.58.0 - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': + '@rollup/pluginutils@5.3.0(rollup@4.58.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.58.0 - '@rollup/rollup-android-arm-eabi@4.57.1': + '@rollup/rollup-android-arm-eabi@4.58.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@rollup/rollup-android-arm64@4.58.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@rollup/rollup-darwin-arm64@4.58.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@rollup/rollup-darwin-x64@4.58.0': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@rollup/rollup-freebsd-arm64@4.58.0': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@rollup/rollup-freebsd-x64@4.58.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@rollup/rollup-linux-arm-gnueabihf@4.58.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@rollup/rollup-linux-arm-musleabihf@4.58.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@rollup/rollup-linux-arm64-musl@4.58.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@rollup/rollup-linux-loong64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@rollup/rollup-linux-loong64-musl@4.58.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@rollup/rollup-linux-ppc64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@rollup/rollup-linux-ppc64-musl@4.58.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@rollup/rollup-linux-riscv64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@rollup/rollup-linux-riscv64-musl@4.58.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@rollup/rollup-linux-s390x-gnu@4.58.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@rollup/rollup-linux-x64-musl@4.58.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@rollup/rollup-openbsd-x64@4.58.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@rollup/rollup-openharmony-arm64@4.58.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.58.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@rollup/rollup-win32-ia32-msvc@4.58.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@rollup/rollup-win32-x64-gnu@4.58.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@rollup/rollup-win32-x64-msvc@4.58.0': optional: true - '@rushstack/node-core-library@5.19.1(@types/node@22.19.2)': + '@rushstack/node-core-library@5.20.1(@types/node@22.19.2)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -14249,7 +14045,7 @@ snapshots: optionalDependencies: '@types/node': 22.19.2 - '@rushstack/node-core-library@5.19.1(@types/node@22.19.8)': + '@rushstack/node-core-library@5.20.1(@types/node@25.3.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -14260,49 +14056,49 @@ snapshots: resolve: 1.22.11 semver: 7.5.4 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@rushstack/problem-matcher@0.1.1(@types/node@22.19.2)': + '@rushstack/problem-matcher@0.2.1(@types/node@22.19.2)': optionalDependencies: '@types/node': 22.19.2 - '@rushstack/problem-matcher@0.1.1(@types/node@22.19.8)': + '@rushstack/problem-matcher@0.2.1(@types/node@25.3.0)': optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@rushstack/rig-package@0.6.0': + '@rushstack/rig-package@0.7.1': dependencies: resolve: 1.22.11 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.21.0(@types/node@22.19.2)': + '@rushstack/terminal@0.22.1(@types/node@22.19.2)': dependencies: - '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2) - '@rushstack/problem-matcher': 0.1.1(@types/node@22.19.2) + '@rushstack/node-core-library': 5.20.1(@types/node@22.19.2) + '@rushstack/problem-matcher': 0.2.1(@types/node@22.19.2) supports-color: 8.1.1 optionalDependencies: '@types/node': 22.19.2 - '@rushstack/terminal@0.21.0(@types/node@22.19.8)': + '@rushstack/terminal@0.22.1(@types/node@25.3.0)': dependencies: - '@rushstack/node-core-library': 5.19.1(@types/node@22.19.8) - '@rushstack/problem-matcher': 0.1.1(@types/node@22.19.8) + '@rushstack/node-core-library': 5.20.1(@types/node@25.3.0) + '@rushstack/problem-matcher': 0.2.1(@types/node@25.3.0) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 - '@rushstack/ts-command-line@5.2.0(@types/node@22.19.2)': + '@rushstack/ts-command-line@5.3.1(@types/node@22.19.2)': dependencies: - '@rushstack/terminal': 0.21.0(@types/node@22.19.2) + '@rushstack/terminal': 0.22.1(@types/node@22.19.2) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' - '@rushstack/ts-command-line@5.2.0(@types/node@22.19.8)': + '@rushstack/ts-command-line@5.3.1(@types/node@25.3.0)': dependencies: - '@rushstack/terminal': 0.21.0(@types/node@22.19.8) + '@rushstack/terminal': 0.22.1(@types/node@25.3.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -14367,7 +14163,7 @@ snapshots: dependencies: '@octokit/core': 7.0.6 '@octokit/plugin-paginate-rest': 13.2.1(@octokit/core@7.0.6) - '@octokit/plugin-retry': 8.0.3(@octokit/core@7.0.6) + '@octokit/plugin-retry': 8.1.0(@octokit/core@7.0.6) '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -14399,7 +14195,7 @@ snapshots: read-pkg: 9.0.1 registry-auth-token: 5.1.1 semantic-release: 24.2.9(typescript@5.9.3) - semver: 7.7.3 + semver: 7.7.4 tempy: 3.2.0 '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))': @@ -14503,7 +14299,7 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/core@3.23.0': + '@smithy/core@3.23.2': dependencies: '@smithy/middleware-serde': 4.2.9 '@smithy/protocol-http': 5.3.8 @@ -14607,9 +14403,9 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.14': + '@smithy/middleware-endpoint@4.4.16': dependencies: - '@smithy/core': 3.23.0 + '@smithy/core': 3.23.2 '@smithy/middleware-serde': 4.2.9 '@smithy/node-config-provider': 4.3.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -14618,12 +14414,12 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.31': + '@smithy/middleware-retry@4.4.33': dependencies: '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -14697,10 +14493,10 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.11.3': + '@smithy/smithy-client@4.11.5': dependencies: - '@smithy/core': 3.23.0 - '@smithy/middleware-endpoint': 4.4.14 + '@smithy/core': 3.23.2 + '@smithy/middleware-endpoint': 4.4.16 '@smithy/middleware-stack': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 @@ -14745,20 +14541,20 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.30': + '@smithy/util-defaults-mode-browser@4.3.32': dependencies: '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.33': + '@smithy/util-defaults-mode-node@4.2.35': dependencies: '@smithy/config-resolver': 4.4.6 '@smithy/credential-provider-imds': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.3 + '@smithy/smithy-client': 4.11.5 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -14820,9 +14616,9 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': + '@stoplight/better-ajv-errors@1.0.3(ajv@8.18.0)': dependencies: - ajv: 8.17.1 + ajv: 8.18.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -14842,7 +14638,7 @@ snapshots: dependency-graph: 0.11.0 fast-memoize: 2.5.2 immer: 9.0.21 - lodash: 4.17.23 + lodash: 4.17.21 tslib: 2.8.1 urijs: 1.19.11 @@ -14852,7 +14648,7 @@ snapshots: '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 jsonc-parser: 2.2.1 - lodash: 4.17.23 + lodash: 4.17.21 safe-stable-stringify: 1.1.1 '@stoplight/ordered-object-literal@1.0.5': {} @@ -14861,7 +14657,7 @@ snapshots: '@stoplight/spectral-core@1.21.0': dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0) '@stoplight/json': 3.21.0 '@stoplight/path': 1.3.2 '@stoplight/spectral-parsers': 1.0.5 @@ -14870,11 +14666,11 @@ snapshots: '@stoplight/types': 13.6.0 '@types/es-aggregate-error': 1.0.6 '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-errors: 3.0.0(ajv@8.18.0) + ajv-formats: 2.1.1(ajv@8.18.0) es-aggregate-error: 1.0.14 - jsonpath-plus: 10.3.0 + jsonpath-plus: 10.4.0 lodash: 4.17.23 lodash.topath: 4.5.2 minimatch: 3.1.2 @@ -14896,16 +14692,16 @@ snapshots: '@stoplight/spectral-functions@1.10.1': dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0) '@stoplight/json': 3.21.0 '@stoplight/spectral-core': 1.21.0 '@stoplight/spectral-formats': 1.8.2 '@stoplight/spectral-runtime': 1.1.4 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) - lodash: 4.17.23 + ajv: 8.18.0 + ajv-draft-04: 1.0.0(ajv@8.18.0) + ajv-errors: 3.0.0(ajv@8.18.0) + ajv-formats: 2.1.1(ajv@8.18.0) + lodash: 4.17.21 tslib: 2.8.1 transitivePeerDependencies: - encoding @@ -14933,7 +14729,7 @@ snapshots: '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 abort-controller: 3.0.0 - lodash: 4.17.23 + lodash: 4.17.21 node-fetch: 2.7.0 tslib: 2.8.1 transitivePeerDependencies: @@ -14991,15 +14787,15 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@testing-library/dom': 10.4.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.11 - '@types/react-dom': 19.2.3(@types/react@19.2.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -15043,9 +14839,9 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@types/bun@1.3.8': + '@types/bun@1.3.9': dependencies: - bun-types: 1.3.8 + bun-types: 1.3.9 '@types/chai@5.2.3': dependencies: @@ -15054,13 +14850,13 @@ snapshots: '@types/conventional-commits-parser@5.0.2': dependencies: - '@types/node': 22.19.8 + '@types/node': 22.19.2 '@types/cookie@0.4.1': {} '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 '@types/debug@4.1.12': dependencies: @@ -15070,7 +14866,7 @@ snapshots: '@types/es-aggregate-error@1.0.6': dependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 '@types/estree-jsx@1.0.5': dependencies: @@ -15082,12 +14878,12 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 22.19.8 + '@types/node': 25.3.0 '@types/hast@2.3.10': dependencies: @@ -15121,7 +14917,7 @@ snapshots: '@types/minimatch@6.0.0': dependencies: - minimatch: 10.1.2 + minimatch: 10.2.2 '@types/ms@2.1.0': {} @@ -15135,25 +14931,25 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.19.8': + '@types/node@25.3.0': dependencies: - undici-types: 6.21.0 + undici-types: 7.18.2 '@types/normalize-package-data@2.4.4': {} '@types/parse5@6.0.3': {} - '@types/react-dom@19.2.3(@types/react@19.2.11)': + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - '@types/react@19.2.11': + '@types/react@19.2.14': dependencies: csstype: 3.2.3 '@types/responselike@1.0.0': dependencies: - '@types/node': 22.19.8 + '@types/node': 22.19.2 '@types/supports-color@8.1.3': {} @@ -15163,28 +14959,28 @@ snapshots: '@types/urijs@1.19.26': {} - '@types/vscode@1.108.1': {} + '@types/vscode@1.109.0': {} '@types/whatwg-mimetype@3.0.2': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.8 + '@types/node': 22.19.2 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.8 + '@types/node': 25.3.0 optional: true - '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.0 + eslint: 9.39.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -15192,89 +14988,89 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 debug: 4.4.3(supports-color@5.5.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.54.0': + '@typescript-eslint/scope-manager@8.56.0': dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/visitor-keys': 8.56.0 - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.54.0': {} + '@typescript-eslint/types@8.56.0': {} - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3(supports-color@5.5.0) minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + eslint: 9.39.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.54.0': + '@typescript-eslint/visitor-keys@8.56.0': dependencies: - '@typescript-eslint/types': 8.54.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.56.0 + eslint-visitor-keys: 5.0.1 - '@typescript/vfs@1.6.2(typescript@5.9.3)': + '@typescript/vfs@1.6.4(typescript@5.9.3)': dependencies: debug: 4.4.3(supports-color@5.5.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typespec/ts-http-runtime@0.3.2': + '@typespec/ts-http-runtime@0.3.3': dependencies: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -15500,40 +15296,40 @@ snapshots: lodash: 4.17.21 minimatch: 7.4.6 - '@vitejs/plugin-react@5.1.3(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.2 + '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.2 + '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.25(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.25(typescript@5.9.3) '@vitejs/plugin-vue@6.0.2(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': @@ -15542,7 +15338,7 @@ snapshots: vite: 7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.25(typescript@5.9.3) - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -15557,7 +15353,7 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -15569,21 +15365,21 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -15681,7 +15477,7 @@ snapshots: minimatch: 3.1.2 parse-semver: 1.1.1 read: 1.0.7 - semver: 7.7.3 + semver: 7.7.4 tmp: 0.2.5 typed-rest-client: 1.8.11 url-join: 4.0.1 @@ -15796,13 +15592,13 @@ snapshots: dependencies: acorn: 8.11.2 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn@8.11.2: {} - acorn@8.15.0: {} + acorn@8.16.0: {} address@1.2.2: {} @@ -15835,27 +15631,27 @@ snapshots: optionalDependencies: ajv: 8.13.0 - ajv-draft-04@1.0.0(ajv@8.17.1): + ajv-draft-04@1.0.0(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-errors@3.0.0(ajv@8.17.1): + ajv-errors@3.0.0(ajv@8.18.0): dependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-formats@2.1.1(ajv@8.17.1): + ajv-formats@2.1.1(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 ajv-formats@3.0.1(ajv@8.13.0): optionalDependencies: ajv: 8.13.0 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv@6.12.6: + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -15883,6 +15679,13 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + alien-signals@0.4.14: {} ansi-align@3.0.1: @@ -15952,22 +15755,12 @@ snapshots: dependencies: '@ark/util': 0.55.0 - arkregex@0.0.5: - dependencies: - '@ark/util': 0.56.0 - arktype@2.1.27: dependencies: '@ark/schema': 0.55.0 '@ark/util': 0.55.0 arkregex: 0.0.3 - arktype@2.1.29: - dependencies: - '@ark/schema': 0.56.0 - '@ark/util': 0.56.0 - arkregex: 0.0.5 - array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 @@ -16035,7 +15828,7 @@ snapshots: asn1.js@4.10.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -16114,19 +15907,21 @@ snapshots: tunnel: 0.0.6 typed-rest-client: 1.8.11 - b4a@1.7.3: {} + b4a@1.8.0: {} bail@2.0.2: {} balanced-match@1.0.2: {} + balanced-match@4.0.3: {} + bare-events@2.8.2: {} - bare-fs@4.5.3: + bare-fs@4.5.4: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.8.2) + bare-stream: 2.8.0(bare-events@2.8.2) bare-url: 2.3.2 fast-fifo: 1.3.2 transitivePeerDependencies: @@ -16142,9 +15937,10 @@ snapshots: bare-os: 3.6.2 optional: true - bare-stream@2.7.0(bare-events@2.8.2): + bare-stream@2.8.0(bare-events@2.8.2): dependencies: streamx: 2.23.0 + teex: 1.0.1 optionalDependencies: bare-events: 2.8.2 transitivePeerDependencies: @@ -16161,7 +15957,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.0: {} basic-ftp@5.1.0: {} @@ -16191,9 +15987,9 @@ snapshots: bmp-ts@1.0.9: {} - bn.js@4.12.2: {} + bn.js@4.12.3: {} - bn.js@5.2.2: {} + bn.js@5.2.3: {} body-parser@1.20.1: dependencies: @@ -16222,7 +16018,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.14.1 + qs: 6.14.2 raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 @@ -16239,7 +16035,7 @@ snapshots: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.6.2 + chalk: 5.0.1 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 @@ -16255,6 +16051,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.2: + dependencies: + balanced-match: 4.0.3 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -16289,13 +16089,13 @@ snapshots: browserify-rsa@4.1.1: dependencies: - bn.js: 5.2.2 + bn.js: 5.2.3 randombytes: 2.1.0 safe-buffer: 5.2.1 browserify-sign@4.2.5: dependencies: - bn.js: 5.2.2 + bn.js: 5.2.3 browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -16315,9 +16115,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001767 - electron-to-chromium: 1.5.286 + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001770 + electron-to-chromium: 1.5.302 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -16343,17 +16143,17 @@ snapshots: builtin-status-codes@3.0.0: {} - bun-types@1.3.8: + bun-types@1.3.9: dependencies: - '@types/node': 22.19.8 + '@types/node': 22.19.2 bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 - bundle-require@5.1.0(esbuild@0.27.2): + bundle-require@5.1.0(esbuild@0.27.3): dependencies: - esbuild: 0.27.2 + esbuild: 0.27.3 load-tsconfig: 0.2.5 bytes@3.0.0: {} @@ -16409,7 +16209,7 @@ snapshots: camelcase@7.0.1: {} - caniuse-lite@1.0.30001767: {} + caniuse-lite@1.0.30001770: {} canvas@3.2.0: dependencies: @@ -16485,7 +16285,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.20.0 + undici: 7.22.0 whatwg-mimetype: 4.0.0 chokidar@3.5.3: @@ -16693,7 +16493,7 @@ snapshots: confbox@0.1.8: {} - confbox@0.2.2: {} + confbox@0.2.4: {} config-chain@1.1.13: dependencies: @@ -16731,7 +16531,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.7.3 + semver: 7.7.4 conventional-commits-filter@5.0.0: {} @@ -16794,7 +16594,7 @@ snapshots: create-ecdh@4.0.4: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 elliptic: 6.6.1 create-hash@1.2.0: @@ -16869,10 +16669,10 @@ snapshots: cssstyle@5.3.7: dependencies: - '@asamuzakjp/css-color': 4.1.1 - '@csstools/css-syntax-patches-for-csstree': 1.0.26 + '@asamuzakjp/css-color': 4.1.2 + '@csstools/css-syntax-patches-for-csstree': 1.0.27 css-tree: 3.1.0 - lru-cache: 11.2.5 + lru-cache: 11.2.6 csstype@3.0.11: {} @@ -17048,7 +16848,7 @@ snapshots: diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 miller-rabin: 4.0.1 randombytes: 2.1.0 @@ -17182,15 +16982,15 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.1 - semver: 7.7.3 + semver: 7.7.4 ee-first@1.1.1: {} - electron-to-chromium@1.5.286: {} + electron-to-chromium@1.5.302: {} elliptic@6.6.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -17225,7 +17025,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.19 - '@types/node': 22.19.8 + '@types/node': 25.3.0 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -17387,7 +17187,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.15.0 + acorn: 8.16.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 @@ -17420,34 +17220,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.2: + esbuild@0.27.3: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 escalade@3.2.0: {} @@ -17469,77 +17269,77 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.2(eslint@9.39.2(jiti@2.6.1)): + eslint-config-prettier@9.1.2(eslint@9.39.3(jiti@2.6.1)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: - get-tsconfig: 4.13.1 + get-tsconfig: 4.13.6 stable-hash-x: 0.2.0 optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.13.1 + get-tsconfig: 4.13.6 is-bun-module: 2.0.0 stable-hash-x: 0.2.0 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/types': 8.56.0 comment-parser: 1.4.5 debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 - minimatch: 10.1.2 - semver: 7.7.3 + minimatch: 10.2.2 + semver: 7.7.4 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@54.7.0(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-jsdoc@54.7.0(eslint@9.39.3(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.56.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@5.5.0) escape-string-regexp: 4.0.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) espree: 10.4.0 esquery: 1.7.0 parse-imports-exports: 0.2.4 - semver: 7.7.3 + semver: 7.7.4 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.3(jiti@2.6.1)): dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) hermes-parser: 0.25.1 zod: 4.3.6 zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -17547,7 +17347,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.2 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.3(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -17556,7 +17356,7 @@ snapshots: object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 - resolve: 2.0.0-next.5 + resolve: 2.0.0-next.6 semver: 6.3.1 string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 @@ -17570,21 +17370,23 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.2(jiti@2.6.1): + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.3(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 + '@eslint/js': 9.39.3 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 + ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@5.5.0) @@ -17613,8 +17415,8 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -17793,7 +17595,7 @@ snapshots: parseurl: 1.3.3 path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.14.1 + qs: 6.14.2 range-parser: 1.2.1 safe-buffer: 5.2.1 send: 0.19.2 @@ -17844,7 +17646,7 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-parser@5.3.4: + fast-xml-parser@5.3.6: dependencies: strnum: 2.1.2 @@ -17956,7 +17758,7 @@ snapshots: dependencies: magic-string: 0.30.21 mlly: 1.8.0 - rollup: 4.57.1 + rollup: 4.58.0 flat-cache@4.0.1: dependencies: @@ -18082,7 +17884,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} get-intrinsic@1.3.0: dependencies: @@ -18125,7 +17927,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.1: + get-tsconfig@4.13.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -18189,7 +17991,7 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 - minipass: 7.1.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -18314,7 +18116,7 @@ snapshots: happy-dom@20.4.0: dependencies: - '@types/node': 22.19.8 + '@types/node': 22.19.2 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 4.5.0 @@ -18806,15 +18608,15 @@ snapshots: ini@4.1.1: {} - ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.11)(react@19.2.3))(react@19.2.3): + ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: cli-spinners: 2.9.2 - ink: 6.3.0(@types/react@19.2.11)(react@19.2.3) + ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 - ink@6.3.0(@types/react@19.2.11)(react@19.2.3): + ink@6.3.0(@types/react@19.2.14)(react@19.2.3): dependencies: - '@alcalzone/ansi-tokenize': 0.2.4 + '@alcalzone/ansi-tokenize': 0.2.5 ansi-escapes: 7.3.0 ansi-styles: 6.2.3 auto-bind: 5.0.1 @@ -18839,19 +18641,19 @@ snapshots: ws: 8.19.0 yoga-layout: 3.2.1 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 transitivePeerDependencies: - bufferutil - utf-8-validate inline-style-parser@0.2.7: {} - inquirer@12.3.0(@types/node@22.19.8): + inquirer@12.3.0(@types/node@25.3.0): dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.8) - '@inquirer/prompts': 7.9.0(@types/node@22.19.8) - '@inquirer/type': 3.0.10(@types/node@22.19.8) - '@types/node': 22.19.8 + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/prompts': 7.9.0(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) + '@types/node': 25.3.0 ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 @@ -18926,7 +18728,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 is-callable@1.2.7: {} @@ -18965,7 +18767,7 @@ snapshots: is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 is-generator-function@1.1.2: dependencies: @@ -19103,7 +18905,7 @@ snapshots: dependencies: is-docker: 2.2.1 - is-wsl@3.1.0: + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -19248,7 +19050,7 @@ snapshots: jsdom@27.3.0(canvas@3.2.0): dependencies: '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.7.7 + '@asamuzakjp/dom-selector': 6.8.1 cssstyle: 5.3.7 data-urls: 6.0.1 decimal.js: 10.6.0 @@ -19302,6 +19104,8 @@ snapshots: json-stringify-safe@5.0.1: {} + json-with-bigint@3.5.3: {} + json5@2.2.3: {} jsonc-parser@2.2.1: {} @@ -19322,7 +19126,7 @@ snapshots: jsonparse@1.3.1: {} - jsonpath-plus@10.3.0: + jsonpath-plus@10.4.0: dependencies: '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) @@ -19617,7 +19421,7 @@ snapshots: dependencies: graceful-fs: 4.2.11 is-promise: 2.2.2 - lodash: 4.17.23 + lodash: 4.17.21 pify: 3.0.0 steno: 0.4.4 @@ -19627,7 +19431,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.5: {} + lru-cache@11.2.6: {} lru-cache@5.1.1: dependencies: @@ -19659,7 +19463,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 map-cache@0.2.2: {} @@ -19694,7 +19498,7 @@ snapshots: md5.js@1.3.5: dependencies: - hash-base: 3.1.2 + hash-base: 3.0.5 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -20250,6 +20054,19 @@ snapshots: micromark-util-types: 2.0.2 vfile-message: 4.0.3 + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + micromark-extension-mdx-md@2.0.0: dependencies: micromark-util-types: 2.0.2 @@ -20268,10 +20085,10 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) micromark-extension-mdx-expression: 3.0.1 - micromark-extension-mdx-jsx: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 micromark-util-combine-extensions: 2.0.1 @@ -20534,7 +20351,7 @@ snapshots: miller-rabin@4.0.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 brorand: 1.1.0 mime-db@1.33.0: {} @@ -20573,13 +20390,13 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.0.3: + minimatch@10.2.1: dependencies: - '@isaacs/brace-expansion': 5.0.1 + brace-expansion: 5.0.2 - minimatch@10.1.2: + minimatch@10.2.2: dependencies: - '@isaacs/brace-expansion': 5.0.1 + brace-expansion: 5.0.2 minimatch@3.1.2: dependencies: @@ -20609,16 +20426,16 @@ snapshots: minipass@5.0.0: {} - minipass@7.1.2: {} + minipass@7.1.3: {} minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - mintlify@4.2.331(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3): + mintlify@4.2.368(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3): dependencies: - '@mintlify/cli': 4.0.935(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + '@mintlify/cli': 4.0.971(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) transitivePeerDependencies: - '@radix-ui/react-popover' - '@types/node' @@ -20644,7 +20461,7 @@ snapshots: mlly@1.8.0: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 @@ -20710,15 +20527,15 @@ snapshots: netmask@2.0.2: {} - next-mdx-remote-client@1.1.4(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5): + next-mdx-remote-client@1.1.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5): dependencies: '@babel/code-frame': 7.29.0 '@mdx-js/mdx': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.2.11)(react@19.2.3) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) - remark-mdx-remove-esm: 1.2.2(unified@11.0.5) - serialize-error: 12.0.0 + remark-mdx-remove-esm: 1.2.3(unified@11.0.5) + serialize-error: 13.0.1 vfile: 6.0.3 vfile-matter: 5.0.1 transitivePeerDependencies: @@ -20733,7 +20550,7 @@ snapshots: astring: 1.9.0 jsep: 1.4.0 optionalDependencies: - jsonpath-plus: 10.3.0 + jsonpath-plus: 10.4.0 lodash.topath: 4.5.2 nlcst-to-string@4.0.0: @@ -20742,7 +20559,7 @@ snapshots: node-abi@3.87.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 node-addon-api@4.3.0: optional: true @@ -20758,6 +20575,13 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-exports-info@1.6.0: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + node-fetch@2.6.7: dependencies: whatwg-url: 5.0.0 @@ -20807,19 +20631,21 @@ snapshots: util: 0.12.5 vm-browserify: 1.1.2 - nodemon@3.1.11: + nodemon@3.1.13: dependencies: chokidar: 3.6.0 debug: 4.4.3(supports-color@5.5.0) ignore-by-default: 1.0.1 - minimatch: 3.1.2 + minimatch: 10.2.2 pstree.remy: 1.1.8 - semver: 7.7.3 + semver: 7.7.4 simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.1 undefsafe: 2.0.5 + non-error@0.1.0: {} + nopt@7.2.1: dependencies: abbrev: 2.0.0 @@ -20835,13 +20661,13 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -21198,7 +21024,7 @@ snapshots: klaw-sync: 6.0.0 minimist: 1.2.8 open: 7.4.2 - semver: 7.7.3 + semver: 7.7.4 slash: 2.0.0 tmp: 0.2.5 yaml: 2.8.2 @@ -21230,7 +21056,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-to-regexp@0.1.12: {} @@ -21255,7 +21081,7 @@ snapshots: pdfjs-dist@5.4.624: optionalDependencies: - '@napi-rs/canvas': 0.1.91 + '@napi-rs/canvas': 0.1.94 node-readable-to-web-readable-stream: 0.4.2 peek-readable@4.1.0: {} @@ -21314,7 +21140,7 @@ snapshots: quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 - sonic-boom: 4.2.0 + sonic-boom: 4.2.1 thread-stream: 3.1.0 pirates@4.0.7: {} @@ -21344,15 +21170,15 @@ snapshots: pkg-types@2.3.0: dependencies: - confbox: 0.2.2 + confbox: 0.2.4 exsolve: 1.0.8 pathe: 2.0.3 - playwright-core@1.58.1: {} + playwright-core@1.58.2: {} - playwright@1.58.1: + playwright@1.58.2: dependencies: - playwright-core: 1.58.1 + playwright-core: 1.58.2 optionalDependencies: fsevents: 2.3.2 @@ -21480,20 +21306,20 @@ snapshots: dependencies: prosemirror-state: 1.4.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.5 + prosemirror-view: 1.41.6 prosemirror-gapcursor@1.4.0: dependencies: prosemirror-keymap: 1.2.3 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.5 + prosemirror-view: 1.41.6 prosemirror-history@1.5.0: dependencies: prosemirror-state: 1.4.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.5 + prosemirror-view: 1.41.6 rope-sequence: 1.3.4 prosemirror-inputrules@1.5.1: @@ -21524,7 +21350,7 @@ snapshots: dependencies: prosemirror-model: 1.25.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.5 + prosemirror-view: 1.41.6 prosemirror-tables@1.8.5: dependencies: @@ -21532,7 +21358,7 @@ snapshots: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.5 + prosemirror-view: 1.41.6 prosemirror-test-builder@1.1.1: dependencies: @@ -21544,7 +21370,7 @@ snapshots: dependencies: prosemirror-model: 1.25.4 - prosemirror-view@1.41.5: + prosemirror-view@1.41.6: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 @@ -21578,7 +21404,7 @@ snapshots: public-encrypt@4.0.3: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 browserify-rsa: 4.1.1 create-hash: 1.2.0 parse-asn1: 5.1.9 @@ -21649,7 +21475,11 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.14.1: + qs@6.14.2: + dependencies: + side-channel: 1.1.0 + + qs@6.15.0: dependencies: side-channel: 1.1.0 @@ -21718,32 +21548,32 @@ snapshots: react-refresh@0.18.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.11)(react@19.2.3): + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.3): dependencies: react: 19.2.3 - react-style-singleton: 2.2.3(@types/react@19.2.11)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - react-remove-scroll@2.7.2(@types/react@19.2.11)(react@19.2.3): + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.3): dependencies: react: 19.2.3 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.11)(react@19.2.3) - react-style-singleton: 2.2.3(@types/react@19.2.11)(react@19.2.3) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.11)(react@19.2.3) - use-sidecar: 1.1.3(@types/react@19.2.11)(react@19.2.3) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.3) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - react-style-singleton@2.2.3(@types/react@19.2.11)(react@19.2.3): + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.3): dependencies: get-nonce: 1.0.1 react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 react@19.2.3: {} @@ -21833,10 +21663,10 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.15.0): + recma-jsx@1.0.1(acorn@8.16.0): dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -21948,7 +21778,7 @@ snapshots: rehype-stringify@10.0.1: dependencies: '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 + hast-util-to-html: 9.0.4 unified: 11.0.5 remark-frontmatter@5.0.0: @@ -21972,7 +21802,7 @@ snapshots: remark-gfm@4.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.0.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 @@ -22008,7 +21838,7 @@ snapshots: transitivePeerDependencies: - supports-color - remark-mdx-remove-esm@1.2.2(unified@11.0.5): + remark-mdx-remove-esm@1.2.3(unified@11.0.5): dependencies: '@types/mdast': 4.0.4 mdast-util-mdxjs-esm: 2.0.1 @@ -22069,6 +21899,14 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + remark-smartypants@3.0.2: dependencies: retext: 9.0.0 @@ -22130,9 +21968,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + resolve@2.0.0-next.6: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 + node-exports-info: 1.6.0 + object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -22185,7 +22026,7 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 - rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@oxc-project/runtime': 0.101.0 fdir: 6.5.0(picomatch@4.0.3) @@ -22196,13 +22037,13 @@ snapshots: tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.19.2 - esbuild: 0.27.2 + esbuild: 0.27.3 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 yaml: 2.8.2 - rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@oxc-project/runtime': 0.101.0 fdir: 6.5.0(picomatch@4.0.3) @@ -22212,8 +22053,8 @@ snapshots: rolldown: 1.0.0-beta.53 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.19.8 - esbuild: 0.27.2 + '@types/node': 25.3.0 + esbuild: 0.27.3 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 @@ -22246,44 +22087,44 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-visualizer@5.14.0(rollup@4.57.1): + rollup-plugin-visualizer@5.14.0(rollup@4.58.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.57.1 + rollup: 4.58.0 - rollup@4.57.1: + rollup@4.58.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 + '@rollup/rollup-android-arm-eabi': 4.58.0 + '@rollup/rollup-android-arm64': 4.58.0 + '@rollup/rollup-darwin-arm64': 4.58.0 + '@rollup/rollup-darwin-x64': 4.58.0 + '@rollup/rollup-freebsd-arm64': 4.58.0 + '@rollup/rollup-freebsd-x64': 4.58.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.58.0 + '@rollup/rollup-linux-arm-musleabihf': 4.58.0 + '@rollup/rollup-linux-arm64-gnu': 4.58.0 + '@rollup/rollup-linux-arm64-musl': 4.58.0 + '@rollup/rollup-linux-loong64-gnu': 4.58.0 + '@rollup/rollup-linux-loong64-musl': 4.58.0 + '@rollup/rollup-linux-ppc64-gnu': 4.58.0 + '@rollup/rollup-linux-ppc64-musl': 4.58.0 + '@rollup/rollup-linux-riscv64-gnu': 4.58.0 + '@rollup/rollup-linux-riscv64-musl': 4.58.0 + '@rollup/rollup-linux-s390x-gnu': 4.58.0 + '@rollup/rollup-linux-x64-gnu': 4.58.0 + '@rollup/rollup-linux-x64-musl': 4.58.0 + '@rollup/rollup-openbsd-x64': 4.58.0 + '@rollup/rollup-openharmony-arm64': 4.58.0 + '@rollup/rollup-win32-arm64-msvc': 4.58.0 + '@rollup/rollup-win32-ia32-msvc': 4.58.0 + '@rollup/rollup-win32-x64-gnu': 4.58.0 + '@rollup/rollup-win32-x64-msvc': 4.58.0 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -22367,7 +22208,7 @@ snapshots: read-pkg: 5.2.0 registry-auth-token: 4.2.2 semantic-release: 24.2.9(typescript@5.9.3) - semver: 7.7.3 + semver: 7.7.4 tempy: 1.0.1 semantic-release@24.2.9(typescript@5.9.3): @@ -22397,7 +22238,7 @@ snapshots: p-reduce: 3.0.0 read-package-up: 11.0.0 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 semver-diff: 5.0.0 signale: 1.4.0 yargs: 17.7.2 @@ -22407,7 +22248,7 @@ snapshots: semver-diff@5.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 semver-regex@4.0.5: {} @@ -22423,6 +22264,8 @@ snapshots: semver@7.7.3: {} + semver@7.7.4: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -22459,9 +22302,10 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-error@12.0.0: + serialize-error@13.0.1: dependencies: - type-fest: 4.41.0 + non-error: 0.1.0 + type-fest: 5.4.4 serve-handler@6.1.6: dependencies: @@ -22543,13 +22387,13 @@ snapshots: dependencies: decode-ico: 0.4.1 ico-endec: 0.1.6 - sharp: 0.34.5 + sharp: 0.33.5 sharp@0.33.5: dependencies: color: 4.2.3 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -22571,37 +22415,6 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - sharp@0.34.5: - dependencies: - '@img/colour': 1.0.0 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -22681,7 +22494,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 simple-xml-to-json@1.2.3: {} @@ -22754,7 +22567,7 @@ snapshots: dependencies: atomic-sleep: 1.0.0 - sonic-boom@4.2.0: + sonic-boom@4.2.1: dependencies: atomic-sleep: 1.0.0 @@ -22853,7 +22666,7 @@ snapshots: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.3 + text-decoder: 1.2.7 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -22875,7 +22688,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 string.prototype.matchall@4.0.12: @@ -22996,19 +22809,20 @@ snapshots: make-asynchronous: 1.0.1 time-span: 5.1.0 - superdoc@1.11.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): + superdoc@1.15.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): dependencies: '@hocuspocus/provider': 2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) buffer-crc32: 1.0.0 eventemitter3: 5.0.4 jsdom: 27.3.0(canvas@3.2.0) + konva: 10.2.0 naive-ui: 2.43.2(vue@3.5.25(typescript@5.9.3)) pdfjs-dist: 5.4.624 pinia: 2.3.1(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)) rollup-plugin-copy: 3.5.0 uuid: 9.0.1 vue: 3.5.25(typescript@5.9.3) - y-prosemirror: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) + y-prosemirror: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) y-websocket: 3.0.0(yjs@13.6.19) yjs: 13.6.19 transitivePeerDependencies: @@ -23042,6 +22856,8 @@ snapshots: symbol-tree@3.2.4: {} + tagged-tag@1.0.0: {} + tailwindcss@3.4.4: dependencies: '@alloc/quick-lru': 5.2.0 @@ -23081,7 +22897,7 @@ snapshots: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.5.3 + bare-fs: 4.5.4 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller @@ -23098,7 +22914,7 @@ snapshots: tar-stream@3.1.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: @@ -23114,6 +22930,14 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + teex@1.0.1: + dependencies: + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + temp-dir@2.0.0: {} temp-dir@3.0.0: {} @@ -23139,9 +22963,9 @@ snapshots: glob: 10.5.0 minimatch: 9.0.5 - text-decoder@1.2.3: + text-decoder@1.2.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 transitivePeerDependencies: - react-native-b4a @@ -23199,15 +23023,15 @@ snapshots: tldts-core@6.1.86: {} - tldts-core@7.0.22: {} + tldts-core@7.0.23: {} tldts@6.1.86: dependencies: tldts-core: 6.1.86 - tldts@7.0.22: + tldts@7.0.23: dependencies: - tldts-core: 7.0.22 + tldts-core: 7.0.23 tmp@0.2.5: {} @@ -23238,7 +23062,7 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.22 + tldts: 7.0.23 tr46@0.0.3: {} @@ -23268,27 +23092,27 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: - bundle-require: 5.1.0(esbuild@0.27.2) + bundle-require: 5.1.0(esbuild@0.27.3) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3(supports-color@5.5.0) - esbuild: 0.27.2 + esbuild: 0.27.3 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) resolve-from: 5.0.0 - rollup: 4.57.1 + rollup: 4.58.0 source-map: 0.7.6 sucrase: 3.35.1 tinyexec: 0.3.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.56.1(@types/node@22.19.2) + '@microsoft/api-extractor': 7.57.2(@types/node@22.19.2) postcss: 8.5.6 typescript: 5.9.3 transitivePeerDependencies: @@ -23299,8 +23123,8 @@ snapshots: tsx@4.21.0: dependencies: - esbuild: 0.27.2 - get-tsconfig: 4.13.1 + esbuild: 0.27.3 + get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 @@ -23318,7 +23142,7 @@ snapshots: twoslash@0.3.6(typescript@5.9.3): dependencies: - '@typescript/vfs': 1.6.2(typescript@5.9.3) + '@typescript/vfs': 1.6.4(typescript@5.9.3) twoslash-protocol: 0.3.6 typescript: 5.9.3 transitivePeerDependencies: @@ -23342,6 +23166,10 @@ snapshots: type-fest@4.41.0: {} + type-fest@5.4.4: + dependencies: + tagged-tag: 1.0.0 + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -23382,17 +23210,17 @@ snapshots: typed-rest-client@1.8.11: dependencies: - qs: 6.14.1 + qs: 6.15.0 tunnel: 0.0.6 - underscore: 1.13.7 + underscore: 1.13.8 - typescript-eslint@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -23424,11 +23252,13 @@ snapshots: undefsafe@2.0.5: {} - underscore@1.13.7: {} + underscore@1.13.8: {} undici-types@6.21.0: {} - undici@7.20.0: {} + undici-types@7.18.2: {} + + undici@7.22.0: {} unfetch@4.2.0: {} @@ -23519,7 +23349,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 + unist-util-visit-parents: 6.0.1 unist-util-stringify-position@3.0.3: dependencies: @@ -23624,24 +23454,24 @@ snapshots: url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.14.1 + qs: 6.15.0 urlpattern-polyfill@10.0.0: {} - use-callback-ref@1.3.3(@types/react@19.2.11)(react@19.2.3): + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.3): dependencies: react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 - use-sidecar@1.1.3(@types/react@19.2.11)(react@19.2.3): + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.3): dependencies: detect-node-es: 1.1.0 react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.11 + '@types/react': 19.2.14 utif2@4.1.0: dependencies: @@ -23814,13 +23644,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - esbuild @@ -23835,13 +23665,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - esbuild @@ -23856,10 +23686,10 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3): + vite-plugin-dts@4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3): dependencies: - '@microsoft/api-extractor': 7.56.1(@types/node@22.19.2) - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@microsoft/api-extractor': 7.57.2(@types/node@22.19.2) + '@rollup/pluginutils': 5.3.0(rollup@4.58.0) '@volar/typescript': 2.4.28 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 @@ -23869,16 +23699,16 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-dts@4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3): + vite-plugin-dts@4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3): dependencies: - '@microsoft/api-extractor': 7.56.1(@types/node@22.19.8) - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@microsoft/api-extractor': 7.57.2(@types/node@25.3.0) + '@rollup/pluginutils': 5.3.0(rollup@4.58.0) '@volar/typescript': 2.4.28 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 @@ -23888,23 +23718,23 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-node-polyfills@0.25.0(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1): + vite-plugin-node-polyfills@0.25.0(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.57.1) + '@rollup/plugin-inject': 5.0.5(rollup@4.58.0) node-stdlib-browser: 1.3.1 - vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - rollup - vite-plugin-node-polyfills@0.25.0(rollup@4.57.1)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-node-polyfills@0.25.0(rollup@4.58.0)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.57.1) + '@rollup/plugin-inject': 5.0.5(rollup@4.58.0) node-stdlib-browser: 1.3.1 vite: 7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: @@ -23912,11 +23742,11 @@ snapshots: vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: - esbuild: 0.27.2 + esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.57.1 + rollup: 4.58.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.19.2 @@ -23926,11 +23756,11 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23948,8 +23778,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -23970,11 +23800,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23992,12 +23822,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.19.8 + '@types/node': 25.3.0 happy-dom: 20.4.0 jsdom: 27.3.0(canvas@3.2.0) transitivePeerDependencies: @@ -24188,7 +24018,7 @@ snapshots: wsl-utils@0.1.0: dependencies: - is-wsl: 3.1.0 + is-wsl: 3.1.1 xml-js@1.6.11: dependencies: @@ -24214,12 +24044,12 @@ snapshots: xtend@4.0.2: {} - y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19): + y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19): dependencies: lib0: 0.2.117 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.5 + prosemirror-view: 1.41.6 y-protocols: 1.0.7(yjs@13.6.19) yjs: 13.6.19 diff --git a/scripts/generate-all.mjs b/scripts/generate-all.mjs new file mode 100644 index 0000000000..21b7ac236b --- /dev/null +++ b/scripts/generate-all.mjs @@ -0,0 +1,97 @@ +#!/usr/bin/env node + +/** + * Full generation DAG — produces all derived artifacts from source-of-truth inputs. + * + * Phases (sequential — each depends on the previous): + * 1. docapi:sync → packages/document-api/generated/** + apps/docs/document-api/reference/** + * 2. cli:export-sdk-contract → apps/cli/generated/sdk-contract.json + * 3. docs:sync-engine → SDK overview operations table in apps/docs/document-engine/sdks.mdx + * 4. sdk codegen → packages/sdk/langs/{node,python}/…/generated/** + packages/sdk/tools/*.json + * + * Before generation, gitignored output directories are cleaned to prevent stale file accumulation. + * apps/docs/document-api/reference/ is NOT cleaned here — it stays committed (Mintlify deploys from git) + * and docapi:sync handles its contents idempotently. + */ + +import { execFile } from 'node:child_process'; +import { readdir, rm } from 'node:fs/promises'; +import path from 'node:path'; +import { promisify } from 'node:util'; +import { fileURLToPath } from 'node:url'; + +const execFileAsync = promisify(execFile); + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = path.resolve(__dirname, '..'); + +async function run(command, args) { + console.log(` > ${command} ${args.join(' ')}`); + const { stdout, stderr } = await execFileAsync(command, args, { + cwd: REPO_ROOT, + env: process.env, + }); + if (stdout.trim()) console.log(stdout.trim()); + if (stderr.trim()) console.error(stderr.trim()); +} + +/** + * Remove all .json files from a directory while preserving non-json files + * (e.g. __init__.py in packages/sdk/tools/). + */ +async function cleanJsonFiles(dir) { + let entries; + try { + entries = await readdir(dir); + } catch { + return; // directory doesn't exist yet + } + await Promise.all( + entries + .filter((name) => name.endsWith('.json')) + .map((name) => rm(path.join(dir, name), { force: true })), + ); +} + +async function clean() { + console.log('Cleaning gitignored generated output directories...'); + await Promise.all([ + rm(path.join(REPO_ROOT, 'packages/document-api/generated'), { recursive: true, force: true }), + rm(path.join(REPO_ROOT, 'apps/cli/generated'), { recursive: true, force: true }), + rm(path.join(REPO_ROOT, 'packages/sdk/langs/node/src/generated'), { recursive: true, force: true }), + rm(path.join(REPO_ROOT, 'packages/sdk/langs/python/superdoc/generated'), { recursive: true, force: true }), + cleanJsonFiles(path.join(REPO_ROOT, 'packages/sdk/tools')), + // Note: apps/docs/document-api/reference/ is NOT cleaned — it stays committed + // (Mintlify deploys from git) and docapi:sync handles its contents idempotently. + ]); +} + +async function main() { + console.log('generate:all — producing all derived artifacts...\n'); + + // Clean stale outputs + await clean(); + + // Phase 1-2: Document API contract outputs + reference docs + console.log('\n--- Phase 1: docapi:sync ---'); + await run('pnpm', ['run', 'docapi:sync']); + + // Phase 3: CLI SDK contract export + console.log('\n--- Phase 2: cli:export-sdk-contract ---'); + await run('bun', [path.join(REPO_ROOT, 'apps/cli/scripts/export-sdk-contract.ts')]); + + // Phase 4: Docs — SDK overview operations table + console.log('\n--- Phase 3: docs:sync-engine ---'); + await run('pnpm', ['exec', 'tsx', path.join(REPO_ROOT, 'apps/docs/scripts/generate-sdk-overview.ts')]); + + // Phase 5: SDK codegen (Node + Python clients + tool catalogs) + console.log('\n--- Phase 4: sdk codegen ---'); + await run('node', [path.join(REPO_ROOT, 'packages/sdk/codegen/src/generate-all.mjs')]); + + console.log('\ngenerate:all complete.'); +} + +main().catch((error) => { + console.error(error.message ?? error); + process.exitCode = 1; +});