You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maka.apache.org by wy...@apache.org on 2026/10/21 15:43:48 UTC
(maka) branch rust-preview updated: fix(runtime): preserve complete values across supported workflows
This is an automated email from the ASF dual-hosted git repository.
M4n5ter pushed a commit to branch rust-preview
in repository https://gitbox.apache.org/repos/asf/maka.git
The following commit(s) were added to refs/heads/rust-preview by this push:
new e7cbab16a7 fix(runtime): preserve complete values across supported workflows
e7cbab16a7 is described below
commit e7cbab16a7c79b0deb35df60838a1a7492c3000b
Author: Wang <m4...@gmail.com>
AuthorDate: Wed Oct 21 23:14:32 2026 +0800
fix(runtime): preserve complete values across supported workflows
Remove unsupported whole-value, count, depth and elapsed-work limits from
Host services, domain storage, configuration, tools and product consumers.
Keep complete first records advancing through soft page targets, preserve
canonical queries and copy payloads, and replace counter-based traversal
termination with source-bound progress and cycle detection.
Migrate contracts, SDK output and readers together, using forward SQL
migrations to retain existing records and revision semantics. Preserve
permissions, source identity, CAS, replay fences, exact bytes, cancellation
and owned resource admission. Cover the original refusal and truncation
paths alongside their malformed-input and authority controls.
Adopt the published NSH complete-clipboard fix and correct fractional
background cell coverage. Retain bounded display frames and physical
writer custody, and close terminal query and active replay paths. Fix macOS test linkage and controller import resolution
exposed by the integrated build. Refresh documentation and attribution.
Generated-by: Codex
---
.config/nextest.toml | 2 +-
Cargo.lock | 26 +-
Cargo.toml | 21 +-
LICENSE | 8 +
packages/plugin-sdk/scripts/generate.mjs | 30 +-
packages/plugin-sdk/src/configurations.ts | 41 +-
packages/plugin-sdk/src/contracts.ts | 839 +-------------
packages/plugin-sdk/src/generated/methods.ts | 7 +-
packages/plugin-sdk/src/generated/runtime.ts | 1185 +-------------------
packages/plugin-sdk/src/native.ts | 24 +-
platform/capabilities/src/authorization.rs | 10 +-
platform/capabilities/src/call/resources.rs | 6 +-
platform/capabilities/src/credentials.rs | 8 +-
platform/capabilities/src/filesystem/database.rs | 22 +-
.../capabilities/src/filesystem/database/query.rs | 284 +++--
platform/capabilities/src/filesystem/entries.rs | 40 +-
platform/capabilities/src/filesystem/read.rs | 39 +-
platform/capabilities/src/lib.rs | 5 +-
platform/capabilities/src/process.rs | 6 -
platform/capabilities/src/storage.rs | 18 +-
platform/computer-use/src/browser.rs | 20 +-
platform/computer-use/src/browser/ax.rs | 204 ++--
platform/computer-use/src/browser/frames.rs | 41 +-
platform/computer-use/src/desktop.rs | 3 -
platform/computer-use/src/desktop/worker.rs | 19 +-
platform/computer-use/src/macos.rs | 9 +-
platform/computer-use/tests/repl_browser.rs | 5 +-
platform/computer-use/tests/repl_contract.rs | 4 +-
platform/event-log/README.md | 4 +-
platform/event-log/README.zh-CN.md | 4 +-
.../migrations/0037_interaction_records.sql | 130 +++
platform/event-log/src/applications.rs | 52 +-
platform/event-log/src/applications/checkpoints.rs | 51 +-
.../src/applications/checkpoints/tests.rs | 67 +-
platform/event-log/src/applications/intents.rs | 40 +-
.../event-log/src/applications/intents/tests.rs | 88 +-
platform/event-log/src/applications/launch.rs | 66 +-
.../event-log/src/applications/launch/tests.rs | 41 +-
platform/event-log/src/applications/operations.rs | 42 +-
.../event-log/src/applications/operations/tests.rs | 45 +-
platform/event-log/src/applications/tests.rs | 10 +-
platform/event-log/src/artifacts.rs | 13 +-
platform/event-log/src/artifacts/copy.rs | 9 +-
platform/event-log/src/artifacts/history.rs | 3 -
platform/event-log/src/artifacts/read.rs | 6 +-
platform/event-log/src/artifacts/records.rs | 8 +-
platform/event-log/src/bundle.rs | 13 +-
platform/event-log/src/bundle/closure.rs | 36 +-
platform/event-log/src/bundle/closure/members.rs | 11 +-
platform/event-log/src/bundle/export.rs | 93 +-
platform/event-log/src/bundle/format.rs | 61 +-
platform/event-log/src/bundle/import.rs | 9 -
platform/event-log/src/bundle/reader.rs | 71 +-
platform/event-log/src/bundle/relocation.rs | 13 +-
.../event-log/src/bundle/validation/catalog.rs | 4 -
platform/event-log/src/bundle/validation/copies.rs | 8 +-
platform/event-log/src/diagnostics.rs | 24 +-
platform/event-log/src/interactions.rs | 21 +-
platform/event-log/src/interactions/lifecycle.rs | 2 +-
platform/event-log/src/interactions/permissions.rs | 9 +-
platform/event-log/src/interactions/records.rs | 20 +-
.../event-log/src/message_admissions/receipts.rs | 15 +-
platform/event-log/src/message_resolution.rs | 2 +-
platform/event-log/src/observation.rs | 8 +-
platform/event-log/src/observation/delivery.rs | 16 +-
platform/event-log/src/observation/streams.rs | 21 +-
platform/event-log/src/observation/tools.rs | 10 +-
platform/event-log/src/plugins/storage.rs | 15 +-
platform/event-log/src/projects.rs | 12 +-
platform/event-log/src/projects/mutation.rs | 2 +-
platform/event-log/src/projects/relink.rs | 7 +-
platform/event-log/src/sessions.rs | 15 +-
.../event-log/src/sessions/activity/partial.rs | 7 +-
platform/event-log/src/sessions/catalog.rs | 3 -
platform/event-log/src/sessions/copy.rs | 3 -
platform/event-log/src/sessions/import.rs | 7 +-
platform/event-log/src/sessions/metadata.rs | 6 +-
platform/event-log/src/sessions/removal/plan.rs | 5 +-
platform/event-log/src/shell_runs/query.rs | 8 +-
platform/event-log/src/tool_calls.rs | 10 +-
platform/event-log/src/tool_payloads.rs | 8 +-
platform/event-log/src/transcript.rs | 2 -
platform/event-log/src/transcript/active.rs | 6 +-
platform/event-log/src/transcript/emit.rs | 13 +-
platform/event-log/src/transcript/history.rs | 16 +-
platform/event-log/src/transcript/image.rs | 3 +-
platform/event-log/src/transcript/navigation.rs | 7 +-
platform/event-log/src/transcript/search.rs | 8 +-
platform/event-log/src/transcript/source.rs | 23 +-
platform/event-log/src/transcript/tool_metadata.rs | 216 +---
platform/event-log/src/usage/summary.rs | 22 +-
platform/event-log/src/workspace.rs | 3 +-
platform/event-log/tests/artifacts.rs | 124 +-
platform/event-log/tests/artifacts/reads.rs | 12 +-
platform/event-log/tests/bundle.rs | 33 +-
platform/event-log/tests/bundle/tamper.rs | 11 +-
platform/event-log/tests/catalog_partial.rs | 2 +-
platform/event-log/tests/compact_presentation.rs | 2 +-
.../tests/compact_presentation/automatic.rs | 2 +-
platform/event-log/tests/continuation.rs | 2 +-
.../event-log/tests/continuation/handoff_claim.rs | 2 +-
platform/event-log/tests/diagnostics.rs | 31 +-
platform/event-log/tests/executor.rs | 3 +-
platform/event-log/tests/form_interactions.rs | 18 +-
platform/event-log/tests/interaction_lifecycle.rs | 9 +-
platform/event-log/tests/interactions.rs | 37 +-
platform/event-log/tests/k64_workspace.rs | 174 +++
.../event-log/tests/migrations/prior_artifacts.rs | 498 +++++++-
platform/event-log/tests/navigation.rs | 108 ++
platform/event-log/tests/observation.rs | 244 +++-
platform/event-log/tests/observation_tools.rs | 11 +-
platform/event-log/tests/plugins.rs | 124 ++
platform/event-log/tests/session_metadata.rs | 19 +-
platform/event-log/tests/session_prefix.rs | 17 +-
platform/event-log/tests/sessions.rs | 59 +-
platform/event-log/tests/shell_runs.rs | 37 +
platform/event-log/tests/stream_delivery.rs | 131 ++-
platform/event-log/tests/tool_ancestry.rs | 9 +-
platform/event-log/tests/tool_usage.rs | 14 +-
platform/event-log/tests/transcript_index.rs | 40 +-
.../transcript_index/accepted_observations.rs | 2 +-
.../event-log/tests/transcript_index/history.rs | 80 +-
.../tests/transcript_index/interrupted_ancestry.rs | 2 +-
.../tests/transcript_index/large_siblings.rs | 4 +-
.../tests/transcript_index/performance_executor.rs | 2 +-
.../tests/transcript_index/prefix_replay.rs | 2 +-
.../event-log/tests/transcript_index/source.rs | 257 +++--
.../tests/transcript_index/sparse_directory.rs | 2 +-
.../event-log/tests/transcript_tools/payloads.rs | 65 +-
platform/event-log/tests/usage_paging.rs | 22 +-
platform/event-log/tests/visible_tail.rs | 2 +-
platform/host-js/tests/application_services.rs | 60 +-
.../tests/application_services/resource_ingress.rs | 222 +++-
.../tests/application_services/subscriptions.rs | 13 +-
platform/host-runtime/README.md | 2 +-
platform/host-runtime/README.zh-CN.md | 2 +-
platform/host-runtime/src/application.rs | 42 +-
platform/host-runtime/src/application/host.rs | 7 +-
.../host-runtime/src/application/host/access.rs | 2 +-
.../host-runtime/src/application/host/client.rs | 6 +-
.../host-runtime/src/application/host/discovery.rs | 14 +-
.../host-runtime/src/application/host/protocol.rs | 10 +-
.../host-runtime/src/application/host/startup.rs | 10 +-
.../host-runtime/src/application/management.rs | 23 +-
.../src/application/management/download.rs | 17 +-
.../src/application/management/settings.rs | 45 +-
.../src/application/management/tests.rs | 283 +++++
platform/host-runtime/src/application/owner.rs | 19 +-
.../host-runtime/src/application/owner/tests.rs | 8 +
.../src/application/resource_ingress.rs | 89 +-
.../host-runtime/src/application/subscriptions.rs | 28 +-
platform/host-runtime/src/application/transport.rs | 2 -
.../src/application/transport/catalogue.rs | 14 +-
.../src/application/transport/endpoints.rs | 29 +-
.../src/application/transport/policy.rs | 26 +-
platform/host-runtime/src/http.rs | 18 +-
platform/host-runtime/src/http/worker.rs | 9 -
platform/host-runtime/src/ipc/unix.rs | 4 -
.../host-runtime/src/sandbox/windows/accounts.rs | 7 -
.../host-runtime/src/sandbox/windows/policy.rs | 6 -
platform/host-runtime/src/sandbox/windows/store.rs | 17 +-
platform/host-runtime/src/shell.rs | 2 +-
platform/host-runtime/src/shell/control.rs | 2 +-
platform/host-runtime/src/shell/handle.rs | 13 +-
platform/host-runtime/src/shell/request.rs | 19 +-
platform/host-runtime/src/shell/stdin.rs | 7 +-
platform/host-runtime/src/shell/terminal.rs | 28 +
platform/js-runtime/README.md | 2 +-
platform/js-runtime/README.zh-CN.md | 2 +-
platform/js-runtime/src/bridge.rs | 12 +-
platform/js-runtime/src/cell_context.rs | 65 +-
platform/js-runtime/src/evaluate.rs | 6 +-
platform/js-runtime/src/lib.rs | 29 +-
platform/js-runtime/src/plugin.rs | 33 +-
platform/js-runtime/src/plugin/captured.rs | 16 +-
platform/js-runtime/src/plugin/engine.rs | 12 +-
platform/js-runtime/src/plugin/foreground.rs | 20 +-
platform/js-runtime/src/plugin/json.rs | 9 -
platform/js-runtime/src/plugin/request.rs | 5 +-
platform/js-runtime/src/plugin/worker.rs | 2 +-
platform/js-runtime/src/repl.rs | 17 +-
platform/js-runtime/src/result.rs | 54 +-
platform/js-runtime/src/trusted.rs | 1 -
platform/js-runtime/src/trusted/ops.rs | 4 +-
.../js-runtime/tests/integration/cell_context.rs | 9 +-
platform/js-runtime/tests/integration/code_mode.rs | 7 +-
.../tests/integration/plugin_vm/captured.rs | 8 +-
.../tests/integration/plugin_vm/inventory.rs | 36 +
platform/js-runtime/tests/integration/repl.rs | 2 +-
.../tests/integration/result_contract.rs | 205 ++--
platform/network/src/lib.rs | 2 +
platform/network/src/policy.rs | 93 ++
platform/network/src/proxy.rs | 1 -
platform/network/src/websocket.rs | 32 +-
platform/network/tests/environment.rs | 1 +
platform/network/tests/proxy.rs | 13 +-
platform/network/tests/tls_proxy.rs | 1 +
platform/packages/README.md | 2 +
platform/packages/README.zh-CN.md | 2 +
platform/packages/src/bundle.rs | 19 +-
platform/packages/src/io.rs | 122 +-
platform/packages/src/lib.rs | 23 +-
platform/packages/src/manifest.rs | 33 +-
platform/packages/src/path.rs | 1 -
platform/plugin-core/README.md | 2 +
platform/plugin-core/README.zh-CN.md | 2 +
platform/plugin-core/src/composition.rs | 14 +-
platform/plugin-core/src/contract.rs | 2 +-
platform/plugin-core/src/deployment/management.rs | 4 -
.../src/deployment/management/settings.rs | 21 +-
platform/plugin-core/src/lib.rs | 4 +-
platform/plugin-core/src/operation.rs | 9 +-
platform/plugin-core/src/plan.rs | 462 +++++---
platform/plugin-core/src/plan/tests.rs | 344 +++++-
platform/plugin-core/src/scope.rs | 1 -
platform/presentation/src/compact.rs | 4 +-
platform/presentation/src/executor.rs | 31 +-
platform/presentation/src/import.rs | 8 -
platform/presentation/src/lib.rs | 40 +-
platform/presentation/src/step.rs | 69 +-
platform/presentation/src/step/reasoning.rs | 12 +-
platform/presentation/src/tools.rs | 14 -
platform/presentation/src/tools/limits.rs | 37 -
platform/presentation/src/tools/state.rs | 10 +-
platform/presentation/src/user.rs | 4 -
platform/presentation/tests/projection.rs | 58 +-
.../presentation/tests/reference_projection.rs | 24 +-
platform/presentation/tests/tools.rs | 8 +-
platform/presentation/tests/tools/payloads.rs | 26 +-
platform/process/src/bootstrap/channel.rs | 10 +-
platform/process/src/bootstrap/desktop.rs | 9 +-
platform/process/src/bootstrap/runner.rs | 2 +-
platform/process/src/lib.rs | 28 +-
platform/process/tests/foreground.rs | 10 +-
platform/render-terminal/src/application/layout.rs | 20 +-
.../src/application/markdown_text.rs | 19 +-
platform/render-terminal/src/application/paint.rs | 4 +-
.../src/application/reading/find.rs | 74 +-
platform/render-terminal/src/application/run.rs | 2 +-
.../render-terminal/src/application/selection.rs | 3 +-
.../src/application/selection/layout.rs | 2 +-
platform/render-terminal/src/application/source.rs | 18 -
.../render-terminal/src/application/source/diff.rs | 118 +-
.../src/application/tests/reading.rs | 12 +-
.../src/application/tests/reading/find.rs | 47 +-
.../src/application/tests/reading/markdown.rs | 51 +-
.../src/application/tests/source.rs | 16 +-
.../src/application/tests/terminal.rs | 55 +
.../src/application/tests/textarea.rs | 110 ++
.../src/application/textarea/clipboard.rs | 59 +-
platform/render-terminal/src/markdown.rs | 11 +-
platform/render-terminal/src/markdown/fenced.rs | 3 -
platform/render-terminal/src/markdown/prepared.rs | 10 -
.../src/markdown/prepared/operations.rs | 6 -
.../src/markdown/prepared/tables/window.rs | 3 -
.../src/markdown/prepared/tests/budget.rs | 66 +-
platform/render-terminal/src/markdown/table.rs | 76 +-
platform/render-terminal/src/markdown/wrap.rs | 3 -
platform/render-terminal/src/terminal.rs | 78 +-
platform/sandbox/src/filesystem.rs | 13 +-
platform/sandbox/src/filesystem/snapshot.rs | 17 +-
platform/sandbox/src/grant.rs | 5 -
platform/sandbox/src/launch.rs | 2 -
platform/sandbox/src/lib.rs | 2 -
platform/sandbox/src/linux/mounts.rs | 15 +-
platform/sandbox/src/network.rs | 12 +-
platform/sandbox/src/path.rs | 1 -
platform/sandbox/src/seatbelt.rs | 6 -
platform/sandbox/src/seatbelt/glob.rs | 12 -
platform/transport/README.md | 2 +-
platform/transport/README.zh-CN.md | 2 +-
platform/transport/src/connections.rs | 14 +-
platform/transport/tests/owners.rs | 7 +-
platform/ui-js/tests/runtime.rs | 11 +-
platform/ui-js/tests/runtime/actions.rs | 178 ++-
platform/ui-runtime/src/actions.rs | 80 +-
platform/ui-runtime/src/actions/mutations.rs | 13 +-
platform/ui-runtime/src/actions/subscriptions.rs | 2 +-
platform/ui-runtime/src/appearance.rs | 3 +-
platform/ui-runtime/src/budget.rs | 28 +
platform/ui-runtime/src/checkpoint.rs | 28 +-
platform/ui-runtime/src/checkpoint/tests.rs | 27 +-
platform/ui-runtime/src/checkpoint/value.rs | 255 +++--
platform/ui-runtime/src/checkpoint/worker.rs | 45 +-
platform/ui-runtime/src/diff.rs | 14 +-
platform/ui-runtime/src/editor.rs | 4 +-
platform/ui-runtime/src/file.rs | 22 +-
platform/ui-runtime/src/file/selection.rs | 21 +-
platform/ui-runtime/src/frame.rs | 11 +-
platform/ui-runtime/src/input.rs | 20 +-
platform/ui-runtime/src/lib.rs | 9 -
platform/ui-runtime/src/locale.rs | 18 +-
platform/ui-runtime/src/markdown.rs | 11 +-
platform/ui-runtime/src/morph_mark.rs | 8 +-
platform/ui-runtime/src/native.rs | 8 +-
platform/ui-runtime/src/publication.rs | 70 +-
platform/ui-runtime/src/reading.rs | 25 +-
platform/ui-runtime/src/rows.rs | 13 +-
platform/ui-runtime/src/scene.rs | 24 +-
platform/ui-runtime/src/scene/terminal.rs | 189 ++--
platform/ui-runtime/src/selection_menu.rs | 6 +-
platform/ui-runtime/src/shortcut.rs | 3 +-
platform/ui-runtime/src/source.rs | 1 -
platform/ui-runtime/src/terminal.rs | 6 +-
platform/ui-runtime/src/terminal/state.rs | 25 +-
platform/ui-runtime/src/terminal/state/tests.rs | 57 +
platform/ui-runtime/src/text_file.rs | 155 ++-
platform/ui-runtime/src/textarea.rs | 57 +-
platform/ui-runtime/src/tree.rs | 27 +-
plugins/agent/acp-executor/engine/README.md | 2 +
plugins/agent/acp-executor/engine/README.zh-CN.md | 2 +
.../acp-executor/engine/src/callbacks/read.rs | 15 +-
plugins/agent/acp-executor/engine/src/driver.rs | 25 +-
.../acp-executor/engine/src/driver/attachments.rs | 22 -
.../acp-executor/engine/src/driver/configure.rs | 2 +-
.../agent/acp-executor/engine/src/driver/events.rs | 4 +-
plugins/agent/acp-executor/engine/src/driver/v2.rs | 10 +-
plugins/agent/acp-executor/engine/src/install.rs | 14 +-
.../acp-executor/engine/src/install/archive.rs | 39 +-
plugins/agent/acp-executor/engine/src/lib.rs | 5 +-
.../agent/acp-executor/engine/src/projection.rs | 57 +-
.../agent/acp-executor/engine/src/projection/v2.rs | 5 +-
.../engine/src/projection/v2/messages.rs | 15 -
.../acp-executor/engine/src/projection/v2/tools.rs | 19 -
.../agent/acp-executor/engine/src/setup/auth.rs | 32 +-
.../acp-executor/engine/src/setup/protocol.rs | 76 +-
plugins/agent/acp-executor/engine/src/transport.rs | 10 -
plugins/agent/agent-screen/actions.ts | 12 +-
plugins/agent/agent-screen/locale.ts | 2 -
plugins/agent/agent-screen/messages.ts | 27 -
plugins/agent/api/README.md | 6 +-
plugins/agent/api/README.zh-CN.md | 6 +-
plugins/agent/api/src/contract.rs | 104 +-
plugins/agent/api/src/contract_compaction.rs | 2 +-
plugins/agent/api/src/contract_execution.rs | 18 +-
plugins/agent/api/src/contract_files.rs | 4 -
plugins/agent/api/src/contract_fork.rs | 11 +-
plugins/agent/api/src/contract_imports.rs | 15 +-
plugins/agent/api/src/contract_interactions.rs | 9 +-
plugins/agent/api/src/contract_projects.rs | 8 +-
plugins/agent/api/src/contract_scheduler.rs | 4 +-
plugins/agent/api/src/executor.rs | 40 +-
plugins/agent/api/src/executor/setup.rs | 4 +-
plugins/agent/api/src/workhub/contract.rs | 6 +-
plugins/agent/api/src/workhub/graph.rs | 12 +-
plugins/agent/api/src/workhub/presets.rs | 8 +-
plugins/agent/api/tests/k64_contract_closure.rs | 78 ++
plugins/agent/assistant/src/plan.rs | 3 +-
plugins/agent/assistant/src/plan/artifact.rs | 2 +-
plugins/agent/assistant/src/plan/owner.rs | 14 +-
plugins/agent/assistant/src/plan/repository.rs | 15 +-
plugins/agent/assistant/src/recall/passages.rs | 8 +-
plugins/agent/assistant/src/recall/rank.rs | 171 ++-
plugins/agent/assistant/src/recall/reader.rs | 53 +-
plugins/agent/assistant/src/recall/search.rs | 4 +-
plugins/agent/assistant/src/recall/types.rs | 51 +-
plugins/agent/assistant/tests/plan_history.rs | 14 +-
plugins/agent/composer/component.ts | 50 +-
plugins/agent/engine/src/executor.rs | 7 +-
plugins/agent/engine/src/executor/output.rs | 20 +-
plugins/agent/engine/src/lib.rs | 6 +-
.../tests/integration/attachment_projection.rs | 2 +-
.../tests/integration/auto_context/background.rs | 2 +-
plugins/agent/engine/tests/integration/executor.rs | 32 +-
.../engine/tests/integration/session_import.rs | 3 +-
plugins/agent/execution-picker/index.ts | 2 +-
plugins/agent/facts/README.md | 2 +
plugins/agent/facts/README.zh-CN.md | 2 +
plugins/agent/facts/src/accounting/activity.rs | 4 +-
plugins/agent/facts/src/archive.rs | 58 +-
plugins/agent/facts/src/archive/encoding.rs | 131 ++-
plugins/agent/facts/src/archive/reference.rs | 10 +-
plugins/agent/facts/src/artifact.rs | 19 +-
plugins/agent/facts/src/attachment.rs | 1 -
plugins/agent/facts/src/capability/form.rs | 5 +-
plugins/agent/facts/src/capability/form_decode.rs | 49 +-
.../facts/src/capability/form_result_decode.rs | 15 +-
.../agent/facts/src/capability/form_validation.rs | 200 ++--
plugins/agent/facts/src/capability/json.rs | 9 +-
plugins/agent/facts/src/composition.rs | 4 +-
plugins/agent/facts/src/configuration.rs | 4 +-
.../src/configuration/credential_validation.rs | 9 -
plugins/agent/facts/src/configuration/headers.rs | 5 -
.../agent/facts/src/configuration/model_catalog.rs | 11 +-
.../agent/facts/src/configuration/model_info.rs | 12 +-
.../facts/src/configuration/model_validation.rs | 5 +-
.../agent/facts/src/configuration/onboarding.rs | 1 -
plugins/agent/facts/src/configuration/policy.rs | 2 -
.../agent/facts/src/configuration/policy/codec.rs | 36 +-
.../src/configuration/policy/network_update.rs | 4 +-
.../agent/facts/src/configuration/validation.rs | 82 +-
plugins/agent/facts/src/display.rs | 9 +-
plugins/agent/facts/src/event_write.rs | 21 +-
plugins/agent/facts/src/executor.rs | 19 +-
plugins/agent/facts/src/executor/output.rs | 21 +-
plugins/agent/facts/src/handoff/execution.rs | 10 +-
plugins/agent/facts/src/input.rs | 19 +-
plugins/agent/facts/src/input/selections.rs | 19 +-
plugins/agent/facts/src/input/sources.rs | 11 +-
plugins/agent/facts/src/interaction.rs | 19 +-
plugins/agent/facts/src/interaction/decode.rs | 6 +-
plugins/agent/facts/src/interaction/question.rs | 18 +-
plugins/agent/facts/src/interaction/validation.rs | 35 +-
plugins/agent/facts/src/message.rs | 5 +-
plugins/agent/facts/src/model/assembly.rs | 1 -
plugins/agent/facts/src/model/assembly/identity.rs | 62 +-
plugins/agent/facts/src/model/request.rs | 12 +-
plugins/agent/facts/src/oauth.rs | 4 +-
plugins/agent/facts/src/pricing.rs | 6 +-
plugins/agent/facts/src/pricing/quote.rs | 1 -
plugins/agent/facts/src/provider.rs | 14 +-
plugins/agent/facts/src/read.rs | 2 -
plugins/agent/facts/src/read/page.rs | 83 +-
plugins/agent/facts/src/terminal/input.rs | 45 +-
plugins/agent/facts/src/tool_output.rs | 4 +-
plugins/agent/facts/src/tool_output/audio.rs | 82 +-
plugins/agent/facts/src/tool_output/durable.rs | 176 +--
plugins/agent/facts/src/tool_output/mcp.rs | 159 +--
plugins/agent/facts/src/tool_output/media.rs | 10 -
plugins/agent/form-editor/index.ts | 23 +-
plugins/agent/graph/src/coordinator.rs | 6 -
plugins/agent/graph/src/decision.rs | 14 +-
plugins/agent/graph/src/lib.rs | 8 +-
plugins/agent/graph/src/repository.rs | 3 -
plugins/agent/graph/src/schedule.rs | 41 +-
plugins/agent/graph/src/settings.rs | 10 +-
plugins/agent/graph/tests/repository.rs | 2 +-
plugins/agent/model/README.md | 2 +
plugins/agent/model/README.zh-CN.md | 2 +
plugins/agent/model/src/lib.rs | 21 +-
plugins/agent/model/src/network.rs | 49 +-
plugins/agent/model/src/reasoning.rs | 6 -
plugins/agent/model/src/stream_tests.rs | 6 +-
.../model/tests/integration/provider_responses.rs | 68 ++
.../model/tests/integration/provider_stream.rs | 71 +-
plugins/agent/native/src/executor/attachments.rs | 6 +-
plugins/agent/native/src/executor/setup.rs | 6 +-
plugins/agent/native/src/model/diagnostics.rs | 1 +
plugins/agent/native/src/owner.rs | 21 +-
plugins/agent/native/src/owner/assistant.rs | 12 +-
plugins/agent/native/src/owner/attachments.rs | 3 -
plugins/agent/native/src/owner/execution.rs | 11 +-
plugins/agent/native/src/owner/files.rs | 6 +-
plugins/agent/native/src/owner/goal/tools.rs | 4 +-
plugins/agent/native/src/owner/imports.rs | 30 +-
plugins/agent/native/src/owner/imports/access.rs | 5 +-
plugins/agent/native/src/owner/projects.rs | 13 +-
plugins/agent/native/src/owner/recall.rs | 18 +-
plugins/agent/native/src/owner/scheduler.rs | 8 +-
.../agent/native/src/owner/scheduler/dispatch.rs | 2 +-
.../agent/native/src/owner/scheduler/repository.rs | 22 +-
plugins/agent/native/src/owner/skills.rs | 6 +-
.../agent/native/src/owner/tests/attachments.rs | 38 +-
plugins/agent/native/src/owner/tests/catalog.rs | 39 +-
plugins/agent/native/src/owner/tests/execution.rs | 4 +-
plugins/agent/native/src/owner/tests/executor.rs | 39 +-
.../agent/native/src/owner/tests/executor/acp.rs | 39 +-
.../agent/native/src/owner/tests/file_browsing.rs | 12 +-
plugins/agent/native/src/owner/tests/files.rs | 6 +-
.../agent/native/src/owner/tests/history_search.rs | 17 +-
plugins/agent/native/src/owner/tests/images.rs | 20 +-
plugins/agent/native/src/owner/tests/imports.rs | 30 +-
plugins/agent/native/src/owner/tests/jev.rs | 136 +++
plugins/agent/native/src/owner/tests/projects.rs | 15 +-
plugins/agent/native/src/owner/tests/recall.rs | 4 +-
plugins/agent/native/src/owner/tests/scheduler.rs | 12 +-
plugins/agent/native/src/owner/tests/selection.rs | 36 +-
.../agent/native/src/owner/tests/service_tools.rs | 1 -
plugins/agent/native/src/owner/tests/settings.rs | 60 +-
plugins/agent/native/src/owner/tests/skills.rs | 6 +-
plugins/agent/native/src/owner/tests/terminal.rs | 47 +
plugins/agent/native/src/owner/tests/workhub.rs | 87 +-
plugins/agent/native/src/owner/tests/worktrees.rs | 19 +-
plugins/agent/native/src/service.rs | 23 +-
plugins/agent/native/src/service/diagnostics.rs | 2 +-
plugins/agent/native/src/tools/shell.rs | 23 +-
plugins/agent/native/src/workhub/presets.rs | 39 +-
plugins/agent/native/src/workhub/tasks.rs | 34 +-
plugins/agent/native/src/workhub/tasks/catalog.rs | 10 -
.../agent/native/src/workhub/tasks/dependencies.rs | 4 +-
plugins/agent/native/src/workhub/tasks/graph.rs | 5 -
.../agent/native/src/workhub/tasks/graph/tools.rs | 15 +-
.../agent/native/src/workhub/tasks/preparation.rs | 58 +-
plugins/agent/ports/src/execution/attachment.rs | 5 -
plugins/agent/ports/src/execution/root.rs | 2 +-
plugins/agent/ports/src/executor.rs | 17 +-
plugins/agent/ports/src/provider/authentication.rs | 3 +-
plugins/agent/ports/src/provider/configuration.rs | 10 +-
plugins/agent/ports/src/provider/inspection.rs | 8 -
plugins/agent/ports/src/session/history.rs | 4 +-
plugins/agent/providers/README.md | 2 +
plugins/agent/providers/README.zh-CN.md | 2 +
plugins/agent/providers/src/api.rs | 2 +-
plugins/agent/providers/src/api/authentication.rs | 4 +-
plugins/agent/providers/src/api/discovery/pages.rs | 56 +-
plugins/agent/providers/src/api/effects.rs | 3 -
plugins/agent/providers/src/api/inventory.rs | 20 +-
plugins/agent/providers/src/codex.rs | 3 +-
plugins/agent/providers/src/codex/inventory.rs | 7 -
plugins/agent/providers/src/codex/login.rs | 76 +-
plugins/agent/providers/src/codex/provider.rs | 3 -
plugins/agent/providers/tests/api/discovery.rs | 29 +-
plugins/agent/question-editor/index.ts | 3 +-
plugins/agent/responses/src/decode.rs | 35 +-
plugins/agent/responses/src/sse.rs | 8 +-
plugins/agent/responses/src/stream.rs | 24 +-
plugins/agent/responses/src/transport/cache.rs | 2 +-
plugins/agent/responses/src/transport/connect.rs | 15 +-
plugins/agent/scheduler/engine/src/command.rs | 6 +-
plugins/agent/scheduler/engine/src/cron.rs | 70 +-
plugins/agent/scheduler/engine/src/lib.rs | 2 -
.../agent/scheduler/engine/src/owner/dispatch.rs | 16 +-
plugins/agent/scheduler/engine/src/plan.rs | 20 +-
plugins/agent/scheduler/engine/src/plan/edit.rs | 10 +-
plugins/agent/scheduler/engine/src/repository.rs | 10 +-
plugins/agent/scheduler/engine/src/schedule.rs | 56 +-
plugins/agent/scheduler/engine/src/task.rs | 60 +-
plugins/agent/scheduler/engine/src/view.rs | 75 +-
.../engine/tests/integration/persistence.rs | 126 +++
plugins/agent/scheduler/operations.ts | 12 +-
plugins/agent/session-import/README.md | 2 +
plugins/agent/session-import/README.zh-CN.md | 2 +
plugins/agent/session-import/src/catalog.rs | 20 +-
plugins/agent/session-import/src/catalog/codex.rs | 10 +-
.../agent/session-import/src/catalog/summary.rs | 1 -
plugins/agent/session-import/src/source.rs | 22 +-
plugins/agent/session-import/src/transcript.rs | 6 +-
plugins/agent/session-import/tests/catalog.rs | 12 +-
plugins/agent/subagent-settings/index.ts | 9 +-
plugins/agent/tools/src/cell.rs | 7 +-
plugins/agent/tools/src/cell/session.rs | 1 -
plugins/agent/tools/tests/integration/cells.rs | 2 +-
.../tools/tests/integration/large_child_output.rs | 20 +-
plugins/interactions/api/src/forms.rs | 3 +-
.../native/src/questions/projection.rs | 13 +-
.../native/src/questions/projection/tests.rs | 32 +-
plugins/settings/connection-form/events.ts | 1 -
plugins/settings/connection-form/locale.ts | 2 -
plugins/settings/connection-form/operations.ts | 36 +-
plugins/settings/connections/locale.ts | 2 -
plugins/settings/credential/index.ts | 4 -
plugins/settings/credential/locale.ts | 2 -
plugins/settings/insights/events.ts | 7 +-
plugins/settings/insights/operations.ts | 7 +-
plugins/settings/insights/state.ts | 1 -
plugins/settings/models/index.ts | 7 +-
plugins/settings/models/locale.ts | 2 -
plugins/settings/native/README.md | 2 +
plugins/settings/native/README.zh-CN.md | 2 +
plugins/settings/native/src/connections.rs | 12 +-
plugins/settings/native/src/contract.rs | 21 +-
plugins/settings/native/src/credential.rs | 12 +-
plugins/settings/native/src/credential/tests.rs | 10 +-
plugins/settings/native/src/network.rs | 2 +-
plugins/settings/native/src/preferences.rs | 4 -
plugins/settings/native/src/setup.rs | 14 +-
plugins/settings/network-settings/index.ts | 4 +-
plugins/settings/search.ts | 6 +-
plugins/settings/store/README.md | 2 +
plugins/settings/store/README.zh-CN.md | 2 +
.../migrations/0003_complete_configuration.sql | 88 ++
plugins/settings/store/src/access/record.rs | 25 +-
plugins/settings/store/src/catalog.rs | 24 +-
plugins/settings/store/src/connection_test.rs | 4 +-
plugins/settings/store/src/effect_snapshot.rs | 2 +-
plugins/settings/store/src/model_catalog.rs | 10 -
plugins/settings/store/src/model_catalog/entry.rs | 5 +-
plugins/settings/store/src/model_fetch.rs | 4 +-
plugins/settings/store/src/oauth/enrollment.rs | 12 +-
.../settings/store/src/oauth/enrollment/commit.rs | 6 -
.../settings/store/src/oauth/enrollment/receipt.rs | 10 -
plugins/settings/store/src/onboarding.rs | 3 -
plugins/settings/store/src/onboarding/commit.rs | 5 +-
plugins/settings/store/src/plugin_authorization.rs | 3 -
plugins/settings/store/src/plugin_credentials.rs | 5 -
plugins/settings/store/src/policy.rs | 26 +-
plugins/settings/store/src/pricing.rs | 5 +-
plugins/settings/store/src/projection.rs | 12 +-
plugins/settings/store/src/vault/write.rs | 22 +-
plugins/settings/store/tests/catalog_changes.rs | 54 +
plugins/settings/store/tests/catalog_projection.rs | 21 +
.../store/tests/connection_test/headers.rs | 29 +-
plugins/settings/store/tests/migrations.rs | 117 ++
plugins/settings/store/tests/oauth.rs | 13 +-
plugins/settings/store/tests/oauth_login.rs | 29 +-
.../settings/store/tests/plugin_authorization.rs | 9 +-
plugins/settings/store/tests/pricing.rs | 61 +-
plugins/settings/store/tests/runtime_policy.rs | 2 +-
plugins/shared/appearance-editor.ts | 8 +-
plugins/shared/contracts.ts | 48 +-
.../shared/locale-catalogs/appearance-editor.ts | 2 -
plugins/shared/locale-messages.ts | 5 -
plugins/shared/message-copy.ts | 27 +-
plugins/shared/tui-messages.ts | 5 -
plugins/skills/api/src/contract.rs | 26 +-
plugins/skills/api/src/contract/model.rs | 5 +-
plugins/skills/api/src/contract/preparation.rs | 4 +-
plugins/skills/core/README.md | 2 +-
plugins/skills/core/README.zh-CN.md | 2 +-
plugins/skills/core/build.rs | 18 -
plugins/skills/core/src/catalog.rs | 1 -
plugins/skills/core/src/context.rs | 18 +-
plugins/skills/core/src/discovery.rs | 43 +-
plugins/skills/core/src/discovery/origin.rs | 37 +-
plugins/skills/core/src/discovery/source.rs | 55 +-
plugins/skills/core/src/discovery/sources.rs | 20 +-
plugins/skills/core/src/document.rs | 23 +-
plugins/skills/core/src/invocation.rs | 74 +-
plugins/skills/core/src/invocation/tokens.rs | 1 -
plugins/skills/core/src/publication.rs | 10 +-
plugins/skills/core/src/publication/directory.rs | 81 +-
plugins/skills/core/src/publication/journal.rs | 5 +-
plugins/skills/core/src/publication/receipt.rs | 33 +-
plugins/skills/core/src/publication/tree.rs | 136 +--
plugins/skills/core/src/resources.rs | 316 ++----
plugins/skills/core/src/types.rs | 63 +-
plugins/skills/core/src/types/receipt.rs | 28 +-
plugins/skills/core/src/yaml.rs | 35 +-
plugins/skills/core/tests/discovery.rs | 29 +-
plugins/skills/native/src/imports.rs | 14 +-
plugins/skills/native/src/lib.rs | 33 +-
plugins/skills/native/src/management/tests.rs | 3 +-
plugins/skills/native/src/model.rs | 29 +-
plugins/skills/native/src/preferences.rs | 11 +-
plugins/skills/native/src/sources.rs | 2 +-
plugins/skills/skill-library/index.ts | 15 +-
plugins/skills/skill-library/locale.ts | 4 -
plugins/workhub/core/src/control.rs | 5 +-
plugins/workhub/core/src/decision.rs | 28 +-
plugins/workhub/core/src/feedback.rs | 6 +-
plugins/workhub/core/src/repository.rs | 3 -
plugins/workhub/core/src/results.rs | 4 +-
plugins/workhub/core/src/selection.rs | 4 +-
plugins/workspace/api/src/computer.rs | 14 +-
plugins/workspace/api/src/jev.rs | 4 +-
plugins/workspace/api/src/protocol.rs | 10 +-
plugins/workspace/api/src/terminal.rs | 1 -
plugins/workspace/support/README.md | 4 +-
plugins/workspace/support/README.zh-CN.md | 4 +-
plugins/workspace/support/src/lib.rs | 16 +-
.../workspace-computer/native/src/evaluate.rs | 5 +-
plugins/workspace/workspace-files/engine/README.md | 2 +
.../workspace-files/engine/README.zh-CN.md | 2 +
.../workspace/workspace-files/engine/src/files.rs | 7 +-
.../workspace-files/engine/src/files/preview.rs | 32 +-
.../workspace/workspace-files/engine/src/grep.rs | 188 ++--
.../workspace-files/engine/src/grep/filter.rs | 37 +-
.../workspace-files/engine/src/grep/matches.rs | 29 +-
.../workspace-files/engine/src/mutation.rs | 112 +-
.../workspace/workspace-files/engine/src/patch.rs | 32 +-
.../workspace/workspace-files/engine/src/path.rs | 5 -
.../workspace/workspace-files/engine/src/scoped.rs | 4 +-
.../workspace-files/engine/src/scoped/directory.rs | 4 +
.../workspace/workspace-files/engine/src/search.rs | 243 ++--
.../workspace-files/engine/src/search/pattern.rs | 6 +-
.../workspace-files/engine/src/workspace.rs | 25 +-
.../engine/src/workspace/directory.rs | 4 +-
.../engine/src/workspace/project.rs | 4 +-
.../workspace/workspace-files/engine/src/write.rs | 7 +-
.../workspace-files/engine/src/write_target.rs | 3 +-
.../workspace/workspace-files/engine/tests/grep.rs | 21 +-
.../engine/tests/grep_completeness.rs | 16 +-
.../workspace-files/engine/tests/k64_complete.rs | 325 ++++++
.../workspace-files/engine/tests/write.rs | 12 +-
plugins/workspace/workspace-files/native/README.md | 2 +
.../workspace-files/native/README.zh-CN.md | 2 +
.../workspace-files/native/src/attachments.rs | 2 +-
plugins/workspace/workspace-jev/engine/README.md | 2 +
.../workspace/workspace-jev/engine/README.zh-CN.md | 2 +
.../workspace/workspace-jev/engine/src/decision.rs | 26 +-
.../workspace/workspace-jev/engine/src/settings.rs | 19 +-
plugins/workspace/workspace-jev/native/README.md | 2 +
.../workspace/workspace-jev/native/README.zh-CN.md | 2 +
plugins/workspace/workspace-jev/native/src/lib.rs | 4 -
.../workspace-processes/native/src/lib.rs | 15 +-
.../workspace-processes/native/src/protocol.rs | 4 +-
.../native/src/terminal/controller.rs | 6 +-
.../workspace/workspace-web/api/src/contract.rs | 2 +-
plugins/workspace/workspace-web/api/src/probe.rs | 5 +-
plugins/workspace/workspace-web/api/src/search.rs | 9 +-
plugins/workspace/workspace-web/native/README.md | 2 +
.../workspace/workspace-web/native/README.zh-CN.md | 2 +
.../workspace/workspace-web/native/src/fetch.rs | 32 +-
.../workspace-web/native/src/fetch/document.rs | 45 +-
plugins/workspace/workspace-web/native/src/host.rs | 8 +-
.../workspace-web/native/src/host/check.rs | 1 -
.../workspace/workspace-web/native/src/search.rs | 36 +-
.../workspace/workspace-web/native/tests/http.rs | 36 +-
products/maka/acp/src/content.rs | 60 +-
products/maka/acp/src/content/io.rs | 33 +-
products/maka/bundle/tests/timeline.test.mjs | 115 ++
products/maka/cli/THIRD_PARTY_NOTICES.txt | 14 +-
products/maka/cli/notices.json | 136 ++-
.../maka/cli/src/application/product/public.rs | 1 -
.../maka/cli/src/application/product/update.rs | 3 -
products/maka/cli/src/code.rs | 8 +-
products/maka/cli/src/deployment/connect.rs | 2 +-
products/maka/cli/src/distribution.rs | 60 +-
products/maka/cli/src/distribution/archive.rs | 99 +-
products/maka/cli/src/startup.rs | 5 +-
products/maka/cli/tests/integration/candidate.rs | 6 +-
.../maka/cli/tests/integration/candidate/owned.rs | 47 +-
.../maka/cli/tests/integration/terminal_shell.rs | 1 +
products/maka/client/src/journal.rs | 34 +-
products/maka/client/src/lib.rs | 20 +-
products/maka/client/src/tests/drafts.rs | 17 +-
products/maka/client/src/tests/settings.rs | 14 +-
products/maka/desktop-shell/app/archived.js | 7 +-
products/maka/desktop-shell/app/composer.js | 25 +-
products/maka/desktop-shell/app/directories.js | 33 +-
products/maka/desktop-shell/app/files.js | 134 +--
products/maka/desktop-shell/app/find.js | 39 +-
products/maka/desktop-shell/app/messages.js | 20 -
products/maka/desktop-shell/app/search.js | 11 +-
products/maka/desktop-shell/app/sessions.js | 29 +-
products/maka/desktop-shell/app/subagents.js | 14 +-
products/maka/desktop-shell/src/files.rs | 73 +-
.../budget.rs => products/maka/native/build.rs | 7 +-
products/maka/terminal-shell/README.md | 6 +-
products/maka/terminal-shell/README.zh-CN.md | 6 +-
products/maka/terminal-shell/app/App.tsx | 31 +-
products/maka/terminal-shell/app/Conversation.tsx | 93 +-
products/maka/terminal-shell/app/CurrentDiff.tsx | 29 +-
products/maka/terminal-shell/app/CurrentFile.tsx | 39 +-
.../maka/terminal-shell/app/GeneralSettings.tsx | 5 +-
.../maka/terminal-shell/app/InteractionPanel.tsx | 20 +-
products/maka/terminal-shell/app/MessageCopy.tsx | 3 -
products/maka/terminal-shell/app/ModelSelect.tsx | 1 -
products/maka/terminal-shell/app/ModelSettings.tsx | 9 +-
.../maka/terminal-shell/app/NetworkSettings.tsx | 2 +-
.../maka/terminal-shell/app/PluginSettings.tsx | 10 +-
.../maka/terminal-shell/app/SessionActions.tsx | 12 +-
.../maka/terminal-shell/app/WorkspaceBrowser.tsx | 51 +-
.../maka/terminal-shell/app/attachmentDraft.ts | 3 +-
products/maka/terminal-shell/app/browsing.ts | 9 -
.../maka/terminal-shell/app/generalSettings.ts | 6 -
products/maka/terminal-shell/app/history.ts | 16 +-
products/maka/terminal-shell/app/host.ts | 2 -
.../maka/terminal-shell/app/interaction-form.ts | 24 +-
products/maka/terminal-shell/app/pluginSettings.ts | 3 +-
.../maka/terminal-shell/app/sessionLifecycle.ts | 3 +-
products/maka/terminal-shell/app/settings.ts | 2 +-
products/maka/terminal-shell/app/toolActivity.ts | 7 +-
.../maka/terminal-shell/src/bindings/assets.rs | 31 +-
products/maka/terminal-shell/src/bindings/files.rs | 11 +-
.../maka/terminal-shell/src/bindings/uploads.rs | 1 -
products/maka/terminal-shell/src/terminal.rs | 8 +-
.../maka/terminal-shell/src/terminal/graphics.rs | 203 ++--
products/maka/terminal-shell/src/terminal/input.rs | 23 +-
.../maka/terminal-shell/src/terminal/output.rs | 66 +-
.../maka/terminal-shell/src/terminal/pixels.rs | 2 +-
.../terminal-shell/src/terminal/pixels/session.rs | 3 -
products/maka/terminal-shell/src/terminal/ui.rs | 153 +--
products/maka/terminal-shell/tests/real_host.rs | 136 ++-
products/maka/terminal-shell/tests/support/pty.rs | 4 +
scripts/asf-license-headers.mjs | 1 +
scripts/rust/terminal-interaction-form.test.mjs | 129 +++
scripts/rust/terminal-tool-activity.test.mjs | 104 ++
third-party/gix-index/Cargo.toml | 222 ++++
third-party/gix-index/Cargo.toml.orig | 82 ++
LICENSE => third-party/gix-index/LICENSE-APACHE | 196 ----
third-party/gix-index/LICENSE-MIT | 17 +
third-party/gix-index/README.md | 11 +
third-party/gix-index/SOURCE.md | 47 +
third-party/gix-index/src/access/mod.rs | 708 ++++++++++++
third-party/gix-index/src/access/sparse.rs | 59 +
third-party/gix-index/src/decode/entries.rs | 232 ++++
third-party/gix-index/src/decode/header.rs | 46 +
third-party/gix-index/src/decode/mod.rs | 362 ++++++
third-party/gix-index/src/entry/flags.rs | 175 +++
third-party/gix-index/src/entry/mod.rs | 145 +++
third-party/gix-index/src/entry/mode.rs | 139 +++
third-party/gix-index/src/entry/stat.rs | 207 ++++
third-party/gix-index/src/entry/write.rs | 37 +
third-party/gix-index/src/extension/decode.rs | 85 ++
.../src/extension/end_of_index_entry/decode.rs | 56 +
.../src/extension/end_of_index_entry/mod.rs | 14 +
.../src/extension/end_of_index_entry/write.rs | 29 +
third-party/gix-index/src/extension/fs_monitor.rs | 51 +
.../src/extension/index_entry_offset_table.rs | 43 +
third-party/gix-index/src/extension/iter.rs | 56 +
third-party/gix-index/src/extension/link.rs | 181 +++
third-party/gix-index/src/extension/mod.rs | 100 ++
.../gix-index/src/extension/resolve_undo.rs | 67 ++
third-party/gix-index/src/extension/sparse.rs | 11 +
third-party/gix-index/src/extension/tree/decode.rs | 57 +
third-party/gix-index/src/extension/tree/mod.rs | 29 +
third-party/gix-index/src/extension/tree/verify.rs | 163 +++
third-party/gix-index/src/extension/tree/write.rs | 50 +
.../gix-index/src/extension/untracked_cache.rs | 271 +++++
third-party/gix-index/src/file/init.rs | 116 ++
third-party/gix-index/src/file/mod.rs | 137 +++
third-party/gix-index/src/file/verify.rs | 37 +
third-party/gix-index/src/file/write.rs | 82 ++
third-party/gix-index/src/fs.rs | 216 ++++
third-party/gix-index/src/init.rs | 234 ++++
third-party/gix-index/src/lib.rs | 285 +++++
third-party/gix-index/src/verify.rs | 71 ++
third-party/gix-index/src/write.rs | 221 ++++
third-party/gix-index/upstream.json | 49 +
800 files changed, 17289 insertions(+), 11509 deletions(-)
diff --git a/.config/nextest.toml b/.config/nextest.toml
index 35421f605b..4781b5d012 100644
--- a/.config/nextest.toml
+++ b/.config/nextest.toml
@@ -18,5 +18,5 @@
# These fixtures own multi-threaded Hosts, databases and child processes.
# Account for that work instead of oversubscribing them as single-thread tests.
[[profile.default.overrides]]
-filter = 'package(maka-host-runtime) | package(maka-host-js) | package(maka-agent-native) | (package(maka-agent-engine) & binary(integration)) | (package(maka-cli) & binary(integration))'
+filter = 'package(maka-host-runtime) | package(maka-host-js) | package(maka-agent-native) | (package(maka-agent-engine) & binary(integration)) | (package(maka-cli) & binary(integration)) | (package(maka-terminal-shell) & binary(real_host))'
threads-required = 3
diff --git a/Cargo.lock b/Cargo.lock
index 0e64ebb5b2..9910f10c9e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5374,8 +5374,6 @@ dependencies = [
[[package]]
name = "gix-index"
version = "0.55.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "632e16cb48b0e88a747e106924cb2765194105d8070a7a961b0d080ed806c632"
dependencies = [
"bitflags 2.13.2",
"bstr",
@@ -6316,7 +6314,7 @@ dependencies = [
[[package]]
name = "gpui-fast-wgpu"
version = "0.1.10"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"anyhow",
"bytemuck",
@@ -7717,7 +7715,7 @@ checksum = "ae293c039020f9ec10710af98d29ce6aa2051486638b49c9a6409f3b4a9e98ad"
[[package]]
name = "icy_sixel"
version = "0.5.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"quantette",
"thiserror 2.0.20",
@@ -10961,7 +10959,7 @@ dependencies = [
[[package]]
name = "nsh-base"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"html5ever 0.27.0",
"log",
@@ -10978,7 +10976,7 @@ dependencies = [
[[package]]
name = "nsh-bundler"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"anyhow",
"dunce",
@@ -11003,7 +11001,7 @@ dependencies = [
[[package]]
name = "nsh-core"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"cap-std",
"flate2",
@@ -11026,7 +11024,7 @@ dependencies = [
[[package]]
name = "nsh-engine"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"crossbeam-channel",
"libc",
@@ -11044,7 +11042,7 @@ dependencies = [
[[package]]
name = "nsh-gpui-terminal"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -11061,7 +11059,7 @@ dependencies = [
[[package]]
name = "nsh-js"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"futures-util",
"getrandom 0.4.3",
@@ -11082,7 +11080,7 @@ dependencies = [
[[package]]
name = "nsh-macros"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"imagesize 0.15.0",
"proc-macro2",
@@ -11094,7 +11092,7 @@ dependencies = [
[[package]]
name = "nsh-package"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"base64 0.22.1",
"ed25519-dalek 2.2.0",
@@ -11109,7 +11107,7 @@ dependencies = [
[[package]]
name = "nsh-platform-gpui"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -11141,7 +11139,7 @@ dependencies = [
[[package]]
name = "nsh-platform-tui"
version = "0.1.1"
-source = "git+https://github.com/M4n5ter/nsh?rev=f987cd86eec545581064ae88d44a3e3578430f10#f987cd86eec545581064ae88d44a3e3578430f10"
+source = "git+https://github.com/M4n5ter/nsh?rev=9508a9e65862b7616228be8394ca16867c45df1e#9508a9e65862b7616228be8394ca16867c45df1e"
dependencies = [
"base64 0.22.1",
"crossbeam-channel",
diff --git a/Cargo.toml b/Cargo.toml
index 5cd9b224c8..4791b992f1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,7 +16,7 @@
# under the License.
[workspace]
-exclude = ["third-party/gpui-fast", "third-party/async-io", "third-party/sqlx-sqlite", "third-party/image-webp", "third-party/llrt-crypto", "third-party/termina"]
+exclude = ["third-party/gpui-fast", "third-party/async-io", "third-party/gix-index", "third-party/sqlx-sqlite", "third-party/image-webp", "third-party/llrt-crypto", "third-party/termina"]
default-members = ["products/maka/cli"]
members = [
"plugins/agent/facts",
@@ -92,13 +92,13 @@ publish = false
hex = "0.4.3"
maka-ui-authoring = { path = "plugins/application/authoring/native" }
maka-app-client = { path = "products/maka/client" }
-nsh-core = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10" }
-nsh-engine = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10" }
-nsh-platform-tui = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10" }
-nsh-platform-gpui = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10", default-features = false, features = ["js"] }
-nsh-gpui-terminal = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10" }
-nsh-bundler = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10", default-features = false }
-nsh-base = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10" }
+nsh-core = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e" }
+nsh-engine = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e" }
+nsh-platform-tui = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e" }
+nsh-platform-gpui = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e", default-features = false, features = ["js"] }
+nsh-gpui-terminal = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e" }
+nsh-bundler = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e", default-features = false }
+nsh-base = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e" }
maka-agent-facts = { path = "plugins/agent/facts" }
maka-packages = { path = "platform/packages" }
maka-agent-ports = { path = "plugins/agent/ports" }
@@ -203,6 +203,7 @@ debug = "line-tables-only"
opt-level = 0
[patch.crates-io]
+gix-index = { path = "third-party/gix-index" }
image-webp = { path = "third-party/image-webp" }
sqlx-sqlite = { path = "third-party/sqlx-sqlite" }
async-io = { path = "third-party/async-io" }
@@ -214,8 +215,8 @@ gpui-fast-macos = { path = "third-party/gpui-fast/crates/gpui_macos" }
gpui-fast-windows = { path = "third-party/gpui-fast/crates/gpui_windows" }
gpui-fast-linux = { path = "third-party/gpui-fast/crates/gpui_linux" }
# The terminal backend owns the renderer and bounded image codec.
-gpui-fast-wgpu = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10" }
-icy_sixel = { git = "https://github.com/M4n5ter/nsh", rev = "f987cd86eec545581064ae88d44a3e3578430f10" }
+gpui-fast-wgpu = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e" }
+icy_sixel = { git = "https://github.com/M4n5ter/nsh", rev = "9508a9e65862b7616228be8394ca16867c45df1e" }
gpui-pre-scheduler = { path = "third-party/gpui-fast/crates/scheduler" }
[patch."https://github.com/longbridge/gpui-kit"]
diff --git a/LICENSE b/LICENSE
index 385d56b160..1f03e65732 100644
--- a/LICENSE
+++ b/LICENSE
@@ -371,3 +371,11 @@ https://github.com/helix-editor/termina at revision
Original MIT and MPL license texts, the Crossterm and TermWiz MIT notices,
finite source hashes and the bounded CSI input modifications are preserved in
third-party/termina/{LICENSE-MIT,LICENSE-MPL,README.md,upstream.json,SOURCE.md}.
+
+gix-index long-path source (adapted, Apache License 2.0 OR MIT)
+
+third-party/gix-index contains gix-index 0.55.0 from
+https://github.com/GitoxideLabs/gitoxide at revision
+d2af4ed5532ea660fbd643e48d8925cd88de5ee0. Original license texts,
+finite source hashes and the version 2/3 pathname-padding correction are in
+third-party/gix-index/{LICENSE-APACHE,LICENSE-MIT,upstream.json,SOURCE.md}.
diff --git a/packages/plugin-sdk/scripts/generate.mjs b/packages/plugin-sdk/scripts/generate.mjs
index 65794cd7a8..ec55037065 100644
--- a/packages/plugin-sdk/scripts/generate.mjs
+++ b/packages/plugin-sdk/scripts/generate.mjs
@@ -152,21 +152,23 @@ const object = (properties) => ({
additionalProperties: false,
});
const services = Object.fromEntries(
- ['agent', 'settings', 'settingsAuthentication', 'settingsSetup', 'deploymentManager'].map((service) => [
- service,
- object(
- Object.fromEntries(
- Object.entries(catalog.contracts[service].interface.methods).map(([name, method]) => [
- name,
- object({
- mode: { const: method.mode },
- input: methodSchema(method.input, `${service}_${name}_input_`),
- output: methodSchema(method.output, `${service}_${name}_output_`),
- }),
- ]),
+ ['agent', 'settings', 'settingsAuthentication', 'settingsSetup', 'deploymentManager'].map(
+ (service) => [
+ service,
+ object(
+ Object.fromEntries(
+ Object.entries(catalog.contracts[service].interface.methods).map(([name, method]) => [
+ name,
+ object({
+ mode: { const: method.mode },
+ input: methodSchema(method.input, `${service}_${name}_input_`),
+ output: methodSchema(method.output, `${service}_${name}_output_`),
+ }),
+ ]),
+ ),
),
- ),
- ]),
+ ],
+ ),
);
outputs.set(
new URL('../src/generated/methods.ts', import.meta.url),
diff --git a/packages/plugin-sdk/src/configurations.ts b/packages/plugin-sdk/src/configurations.ts
index 213670d8a1..7e448eba57 100644
--- a/packages/plugin-sdk/src/configurations.ts
+++ b/packages/plugin-sdk/src/configurations.ts
@@ -27,7 +27,6 @@ export const configurations = {
path: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 4096,
},
},
additionalProperties: false,
@@ -76,7 +75,6 @@ export const configurations = {
},
},
minItems: 1,
- maxItems: 32,
},
radius: {
type: 'number',
@@ -91,7 +89,6 @@ export const configurations = {
format: 'uint',
minimum: 0,
},
- maxItems: 32,
},
columns: {
type: 'integer',
@@ -222,7 +219,6 @@ export const configurations = {
'Explicit Library import for immutable skill input preparation and metadata.\nThis does not select model tools or confer a service grant.',
type: ['string', 'null'],
minLength: 1,
- maxLength: 256,
default: null,
},
permissions: {
@@ -264,7 +260,6 @@ export const configurations = {
description: 'Select this home for global instructions and explicit AGENTS.md editing.',
type: ['string', 'null'],
minLength: 1,
- maxLength: 4096,
default: null,
},
},
@@ -275,12 +270,11 @@ export const configurations = {
properties: {
name: {
type: 'string',
- pattern: '^[a-zA-Z][a-zA-Z0-9._:-]{0,127}$',
+ pattern: '^[a-zA-Z][a-zA-Z0-9._:-]*$',
},
import: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
member: {
description: 'Exact member of the explicitly bound import, never a discovery index.',
@@ -310,7 +304,6 @@ export const configurations = {
import: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
member: {
type: 'integer',
@@ -373,7 +366,6 @@ export const configurations = {
'Explicit versioned renderer key, frozen with the call; never inferred from its name.',
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
default: null,
},
title: {
@@ -402,22 +394,18 @@ export const configurations = {
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
description: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
import: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
method: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
additionalProperties: false,
@@ -537,7 +525,6 @@ export const configurations = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 32,
},
network: {
$ref: '#/$defs/Network',
@@ -591,7 +578,6 @@ export const configurations = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -638,7 +624,6 @@ export const configurations = {
type: 'string',
},
description: 'Exactly selected imports of Agent services. Native grants are independent.',
- maxItems: 8,
uniqueItems: true,
},
},
@@ -726,7 +711,6 @@ export const configurations = {
description:
'Explicit Library import for immutable skill input preparation and metadata.\nThis does not select model tools or confer a service grant.',
minLength: 1,
- maxLength: 256,
default: null,
},
permissions: {
@@ -768,7 +752,6 @@ export const configurations = {
type: ['string', 'null'],
description: 'Select this home for global instructions and explicit AGENTS.md editing.',
minLength: 1,
- maxLength: 4096,
default: null,
},
},
@@ -779,12 +762,11 @@ export const configurations = {
properties: {
name: {
type: 'string',
- pattern: '^[a-zA-Z][a-zA-Z0-9._:-]{0,127}$',
+ pattern: '^[a-zA-Z][a-zA-Z0-9._:-]*$',
},
import: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
member: {
type: 'integer',
@@ -814,7 +796,6 @@ export const configurations = {
import: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
member: {
type: 'integer',
@@ -877,7 +858,6 @@ export const configurations = {
description:
'Explicit versioned renderer key, frozen with the call; never inferred from its name.',
minLength: 1,
- maxLength: 128,
default: null,
},
title: {
@@ -906,22 +886,18 @@ export const configurations = {
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
description: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
import: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
method: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
required: ['result', 'confirmation', 'name', 'description', 'import', 'method'],
@@ -986,7 +962,6 @@ export const configurations = {
description:
'Explicit user root; only its standard .maka/skills and .agents/skills collections are scanned.',
minLength: 1,
- maxLength: 4096,
},
projectRoots: {
type: 'array',
@@ -1044,18 +1019,16 @@ export const configurations = {
properties: {
id: {
type: 'string',
- pattern: '^[a-z0-9][a-z0-9_-]{0,63}$',
+ pattern: '^[a-z0-9][a-z0-9_-]*$',
},
label: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
path: {
type: 'string',
description: 'Absolute directory containing skill directories. Captured at activation.',
minLength: 1,
- maxLength: 4096,
},
},
required: ['id', 'label', 'path'],
@@ -1124,14 +1097,12 @@ export const configurations = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 512,
},
denyGlobs: {
type: 'array',
items: {
type: 'string',
},
- maxItems: 128,
},
},
required: ['default', 'rules', 'denyGlobs'],
@@ -1183,7 +1154,6 @@ export const configurations = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -1292,14 +1262,12 @@ export const configurations = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 512,
},
denyGlobs: {
type: 'array',
items: {
type: 'string',
},
- maxItems: 128,
},
},
required: ['default', 'rules', 'denyGlobs'],
@@ -1351,7 +1319,6 @@ export const configurations = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -1470,7 +1437,6 @@ export const configurations = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -1534,7 +1500,6 @@ export const configurations = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
diff --git a/packages/plugin-sdk/src/contracts.ts b/packages/plugin-sdk/src/contracts.ts
index 86ca432dd4..4e4a48bd0e 100644
--- a/packages/plugin-sdk/src/contracts.ts
+++ b/packages/plugin-sdk/src/contracts.ts
@@ -42,7 +42,6 @@ export const contracts = {
},
source: {
type: 'string',
- maxLength: 65536,
},
appearance: {
$ref: '#/$defs/MarkdownAppearance',
@@ -296,7 +295,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -324,7 +322,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -342,7 +339,6 @@ export const contracts = {
properties: {
url: {
type: 'string',
- maxLength: 65536,
},
},
additionalProperties: false,
@@ -365,12 +361,11 @@ export const contracts = {
$schema: 'https://json-schema.org/draft/2020-12/schema',
title: 'MarkdownTextInput',
description:
- "Bounded source-to-readable-text conversion using the presenter's Markdown semantics.",
+ "Complete source-to-readable-text conversion using the presenter's Markdown semantics.",
type: 'object',
properties: {
source: {
type: 'string',
- maxLength: 65536,
},
},
additionalProperties: false,
@@ -385,7 +380,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 65536,
},
kind: {
type: 'string',
@@ -395,17 +389,6 @@ export const contracts = {
additionalProperties: false,
required: ['kind', 'text'],
},
- {
- type: 'object',
- properties: {
- kind: {
- type: 'string',
- const: 'too_large',
- },
- },
- required: ['kind'],
- additionalProperties: false,
- },
],
},
resources: {},
@@ -444,22 +427,19 @@ export const contracts = {
required: ['content', 'appearance', 'ascii', 'disabled', 'focusOnPointer'],
$defs: {
DiffContent: {
- description:
- 'Complete bounded comparisons and structured patches reuse native parsers.',
+ description: 'Complete comparisons and structured patches reuse native parsers.',
oneOf: [
{
type: 'object',
properties: {
source: {
type: 'string',
- maxLength: 65536,
},
rows: {
type: 'array',
items: {
$ref: '#/$defs/DiffRow',
},
- maxItems: 8192,
},
kind: {
type: 'string',
@@ -470,21 +450,17 @@ export const contracts = {
required: ['kind', 'source', 'rows'],
},
{
- description:
- 'Combined inputs must be <= 8192 UTF-8 bytes and <= 256 lines, without NUL.',
+ description: 'Comparisons use complete UTF-8 text without NUL.',
type: 'object',
properties: {
before: {
type: 'string',
- maxLength: 8192,
},
after: {
type: 'string',
- maxLength: 8192,
},
language: {
type: ['string', 'null'],
- maxLength: 128,
},
kind: {
type: 'string',
@@ -501,14 +477,12 @@ export const contracts = {
properties: {
source: {
type: 'string',
- maxLength: 65536,
},
operation: {
$ref: '#/$defs/DiffPatch',
},
language: {
type: ['string', 'null'],
- maxLength: 128,
},
kind: {
type: 'string',
@@ -528,20 +502,17 @@ export const contracts = {
type: 'integer',
format: 'uint32',
minimum: 0,
- maximum: 65536,
},
end: {
type: 'integer',
format: 'uint32',
minimum: 0,
- maximum: 65536,
},
kind: {
$ref: '#/$defs/DiffKind',
},
language: {
type: ['string', 'null'],
- maxLength: 128,
},
},
additionalProperties: false,
@@ -743,7 +714,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -771,7 +741,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -802,36 +771,29 @@ export const contracts = {
label: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
pathLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
browseLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
parentLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
emptyLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
truncatedLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
placeholder: {
type: 'string',
- maxLength: 512,
},
disabled: {
type: 'boolean',
@@ -1080,7 +1042,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -1108,7 +1069,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -1158,7 +1118,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -1201,7 +1160,6 @@ export const contracts = {
properties: {
name: {
type: 'string',
- maxLength: 512,
},
bytes: {
type: 'integer',
@@ -1242,7 +1200,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -1292,7 +1249,6 @@ export const contracts = {
},
source: {
type: 'string',
- maxLength: 65536,
},
appearance: {
$ref: '#/$defs/TextAppearance',
@@ -1464,7 +1420,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -1492,7 +1447,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -1521,12 +1475,10 @@ export const contracts = {
description:
'Changed when the selected canonical resource changes, including read-only views.',
minLength: 1,
- maxLength: 1024,
},
accessibilityLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
output: {
anyOf: [
@@ -1565,7 +1517,7 @@ export const contracts = {
type: 'integer',
format: 'uint16',
minimum: 1,
- maximum: 100,
+ maximum: 65535,
},
tabIndex: {
type: 'integer',
@@ -1756,7 +1708,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -1783,7 +1734,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
type: 'integer',
@@ -2141,7 +2091,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -2169,7 +2118,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -2214,17 +2162,14 @@ export const contracts = {
title: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
copy: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
selectAll: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -2273,20 +2218,18 @@ export const contracts = {
items: {
$ref: '#/$defs/Row',
},
- maxItems: 64,
},
shortcuts: {
type: 'array',
items: {
$ref: '#/$defs/Shortcut',
},
- maxItems: 32,
},
maxRows: {
type: 'integer',
format: 'uint16',
minimum: 1,
- maximum: 64,
+ maximum: 65535,
},
compactBelow: {
description:
@@ -2471,18 +2414,15 @@ export const contracts = {
key: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
text: {
type: 'string',
- maxLength: 1024,
},
actions: {
type: 'array',
items: {
$ref: '#/$defs/RowAction',
},
- maxItems: 8,
},
},
additionalProperties: false,
@@ -2494,11 +2434,9 @@ export const contracts = {
key: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
label: {
type: 'string',
- maxLength: 64,
},
enabled: {
type: 'boolean',
@@ -2525,7 +2463,6 @@ export const contracts = {
input: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
enabled: {
type: 'boolean',
@@ -2551,7 +2488,7 @@ export const contracts = {
type: 'integer',
format: 'uint16',
minimum: 1,
- maximum: 64,
+ maximum: 65535,
},
},
additionalProperties: false,
@@ -2627,12 +2564,10 @@ export const contracts = {
key: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
format: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
command: {
anyOf: [
@@ -2782,7 +2717,6 @@ export const contracts = {
schema: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
},
@@ -2849,7 +2783,6 @@ export const contracts = {
},
text: {
type: 'string',
- maxLength: 16384,
},
kind: {
type: 'string',
@@ -2972,7 +2905,6 @@ export const contracts = {
'read_failed',
'write_failed',
'invalid_file',
- 'too_large',
'invalid_utf8',
'conflict',
'worker_failed',
@@ -3131,7 +3063,6 @@ export const contracts = {
properties: {
query: {
type: 'string',
- maxLength: 512,
},
step: {
$ref: '#/$defs/FindStep',
@@ -3162,8 +3093,6 @@ export const contracts = {
rows: {
type: 'integer',
format: 'int32',
- minimum: -65536,
- maximum: 65536,
},
kind: {
type: 'string',
@@ -3184,7 +3113,6 @@ export const contracts = {
type: 'string',
},
minItems: 1,
- maxItems: 32,
},
offset: {
type: 'integer',
@@ -3215,7 +3143,6 @@ export const contracts = {
key: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -3231,7 +3158,6 @@ export const contracts = {
key: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -3345,7 +3271,6 @@ export const contracts = {
description:
'Direct content child containing the native selection focus. Renderers\nwithout this observation return null. This key conveys no read authority.',
type: ['string', 'null'],
- maxLength: 256,
},
pendingCommand: {
type: ['integer', 'null'],
@@ -3398,7 +3323,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 4096,
},
},
additionalProperties: false,
@@ -3456,7 +3380,6 @@ export const contracts = {
type: 'integer',
format: 'uint32',
minimum: 0,
- maximum: 4096,
},
limited: {
type: 'boolean',
@@ -3490,7 +3413,6 @@ export const contracts = {
type: 'string',
},
minItems: 1,
- maxItems: 32,
},
offset: {
type: 'integer',
@@ -3529,7 +3451,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
appearance: {
$ref: '#/$defs/TextAppearance',
@@ -3584,7 +3505,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -3612,7 +3532,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -3699,11 +3618,9 @@ export const contracts = {
description:
'Exact whitespace-delimited literals rendered and edited as atomic inline tokens.',
type: 'array',
- maxItems: 4096,
items: {
type: 'string',
minLength: 1,
- maxLength: 512,
pattern: '^\\S+$',
},
default: [],
@@ -3722,7 +3639,6 @@ export const contracts = {
accessibilityLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
readOnly: {
type: 'boolean',
@@ -3786,7 +3702,6 @@ export const contracts = {
},
placeholder: {
type: 'string',
- maxLength: 512,
default: '',
},
command: {
@@ -4075,7 +3990,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -4103,7 +4017,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -4348,37 +4261,30 @@ export const contracts = {
title: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
undo: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
redo: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
cut: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
copy: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
paste: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
selectAll: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -4430,7 +4336,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
basedOn: {
type: 'integer',
@@ -4449,7 +4354,6 @@ export const contracts = {
description: 'Correlation with the original native editor, never a resource grant.',
type: 'string',
minLength: 1,
- maxLength: 128,
},
sequence: {
type: 'integer',
@@ -4561,7 +4465,6 @@ export const contracts = {
context: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
allowFiles: {
description: 'Clipboard text remains available when file attachments are disabled.',
@@ -4590,7 +4493,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -4628,12 +4530,10 @@ export const contracts = {
key: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
format: {
type: 'string',
minLength: 1,
- maxLength: 96,
},
dataSource: true,
metadata: true,
@@ -4665,7 +4565,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
version: {
type: 'integer',
@@ -4996,7 +4895,6 @@ export const contracts = {
context: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
selection: {
$ref: '#/$defs/FileObservation',
@@ -5022,7 +4920,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -5065,7 +4962,6 @@ export const contracts = {
properties: {
name: {
type: 'string',
- maxLength: 512,
},
bytes: {
type: 'integer',
@@ -5437,7 +5333,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -5478,7 +5373,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -5534,7 +5428,6 @@ export const contracts = {
accessibilityLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
readOnly: {
type: 'boolean',
@@ -5559,7 +5452,6 @@ export const contracts = {
type: 'integer',
format: 'uint32',
minimum: 1,
- maximum: 65536,
default: 65536,
},
terminalPaste: {
@@ -5569,7 +5461,6 @@ export const contracts = {
},
placeholder: {
type: 'string',
- maxLength: 512,
default: '',
},
command: {
@@ -5823,7 +5714,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -5851,7 +5741,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -5979,37 +5868,30 @@ export const contracts = {
title: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
undo: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
redo: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
cut: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
copy: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
paste: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
selectAll: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -6026,7 +5908,6 @@ export const contracts = {
description: 'Correlation with the original native editor, never a resource grant.',
type: 'string',
minLength: 1,
- maxLength: 128,
},
sequence: {
type: 'integer',
@@ -6141,7 +6022,6 @@ export const contracts = {
text: {
type: 'string',
minLength: 1,
- maxLength: 65536,
},
},
additionalProperties: false,
@@ -6356,7 +6236,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -6412,7 +6291,6 @@ export const contracts = {
accessibilityLabel: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
readOnly: {
type: 'boolean',
@@ -6437,7 +6315,6 @@ export const contracts = {
type: 'integer',
format: 'uint32',
minimum: 1,
- maximum: 65536,
default: 65536,
},
terminalPaste: {
@@ -6447,7 +6324,6 @@ export const contracts = {
},
placeholder: {
type: 'string',
- maxLength: 512,
default: '',
},
command: {
@@ -6701,7 +6577,6 @@ export const contracts = {
items: {
$ref: '#/$defs/FontFamily',
},
- maxItems: 8,
},
size: {
type: 'number',
@@ -6729,7 +6604,6 @@ export const contracts = {
FontFamily: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
Color: {
description: 'Packed RGBA, including explicit alpha zero.',
@@ -6857,37 +6731,30 @@ export const contracts = {
title: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
undo: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
redo: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
cut: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
copy: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
paste: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
selectAll: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -6904,7 +6771,6 @@ export const contracts = {
description: 'Correlation with the original native editor, never a resource grant.',
type: 'string',
minLength: 1,
- maxLength: 128,
},
sequence: {
type: 'integer',
@@ -7019,7 +6885,6 @@ export const contracts = {
text: {
type: 'string',
minLength: 1,
- maxLength: 65536,
},
},
additionalProperties: false,
@@ -7234,7 +7099,6 @@ export const contracts = {
owner: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -7279,7 +7143,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
source: {
$ref: '#/$defs/AgentAttachmentImageSource',
@@ -7302,7 +7165,6 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -7415,7 +7277,6 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -7500,7 +7361,6 @@ export const contracts = {
description:
'Literal, case-sensitive title substring; an empty query matches all titles.',
type: 'string',
- maxLength: 128,
default: '',
},
},
@@ -7530,7 +7390,6 @@ export const contracts = {
cursor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -7549,7 +7408,6 @@ export const contracts = {
cursor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -7568,7 +7426,6 @@ export const contracts = {
cursor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -7616,7 +7473,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -7764,12 +7620,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -7785,12 +7639,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -7836,7 +7688,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -7940,7 +7791,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -8145,7 +7995,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -8220,7 +8069,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -8231,7 +8079,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -8484,7 +8331,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -8559,7 +8405,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -8570,7 +8415,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -8837,12 +8681,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -8858,12 +8700,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -8909,7 +8749,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -9013,7 +8852,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -9189,7 +9027,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
model: {
$ref: '#/$defs/ModelSelection',
@@ -9220,7 +9057,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -9231,7 +9067,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -9337,7 +9172,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -9616,14 +9450,12 @@ export const contracts = {
title: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
labels: {
type: 'array',
items: {
type: 'string',
},
- maxItems: 32,
},
workspace: {
$ref: '#/$defs/AgentWorkspaceSelection',
@@ -9685,7 +9517,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -9703,7 +9534,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -9874,12 +9704,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -9895,12 +9723,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -9946,7 +9772,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -10050,7 +9875,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -10130,7 +9954,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
position: {
$ref: '#/$defs/AgentDiagnosticPosition',
@@ -10549,7 +10372,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -10636,7 +10458,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -10666,7 +10487,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
expectedRevision: {
type: 'integer',
@@ -10689,7 +10509,6 @@ export const contracts = {
messageId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -10705,7 +10524,6 @@ export const contracts = {
messageId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -10721,7 +10539,6 @@ export const contracts = {
messageId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
message: {
type: 'string',
@@ -10847,7 +10664,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
message: {
type: 'string',
@@ -10865,7 +10681,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -11023,9 +10838,6 @@ export const contracts = {
{
$ref: '#/$defs/SkillRequestFailure',
},
- {
- $ref: '#/$defs/SkillOverflowFailure',
- },
],
},
SkillRequestFailure: {
@@ -11051,25 +10863,6 @@ export const contracts = {
'resolution_failed',
],
},
- SkillOverflowFailure: {
- type: 'object',
- properties: {
- reason: {
- $ref: '#/$defs/TooManyRequests',
- },
- requestLimit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- },
- additionalProperties: false,
- required: ['reason', 'requestLimit'],
- },
- TooManyRequests: {
- type: 'string',
- enum: ['too_many_requests'],
- },
SkillInvocationReceipt: {
description:
'Boolean wire discriminants are validated here, not retained as mutable\nbusiness fields beside a contradictory enum variant.',
@@ -11137,27 +10930,6 @@ export const contracts = {
additionalProperties: false,
required: ['invocation', 'request', 'success', 'reason'],
},
- {
- type: 'object',
- properties: {
- invocation: {
- const: 'explicit',
- },
- success: {
- const: false,
- },
- reason: {
- $ref: '#/$defs/TooManyRequests',
- },
- requestLimit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- },
- additionalProperties: false,
- required: ['invocation', 'success', 'reason', 'requestLimit'],
- },
],
},
SkillInvocationMode: {
@@ -11186,12 +10958,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -11283,7 +11053,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
action: {
$ref: '#/$defs/ExecutorSetupAction',
@@ -11313,7 +11082,6 @@ export const contracts = {
methodId: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
kind: {
type: 'string',
@@ -11347,7 +11115,6 @@ export const contracts = {
items: {
$ref: '#/$defs/ExecutorAuthenticationMethod',
},
- maxItems: 32,
},
kind: {
type: 'string',
@@ -11373,7 +11140,6 @@ export const contracts = {
properties: {
diagnostic: {
type: 'string',
- maxLength: 2048,
},
kind: {
type: 'string',
@@ -11394,15 +11160,12 @@ export const contracts = {
properties: {
title: {
type: ['string', 'null'],
- maxLength: 256,
},
name: {
type: 'string',
- maxLength: 256,
},
version: {
type: 'string',
- maxLength: 256,
},
},
required: ['name', 'version'],
@@ -11414,16 +11177,13 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
name: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
description: {
type: ['string', 'null'],
- maxLength: 2048,
},
supported: {
type: 'boolean',
@@ -11441,7 +11201,6 @@ export const contracts = {
properties: {
url: {
type: 'string',
- maxLength: 8192,
},
kind: {
type: 'string',
@@ -11497,7 +11256,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
expectedRevision: {
type: 'integer',
@@ -11510,19 +11268,16 @@ export const contracts = {
'Include history through a complete logical Turn, or all current history when null.',
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
title: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
labels: {
type: 'array',
items: {
type: 'string',
},
- maxItems: 32,
},
},
additionalProperties: false,
@@ -11687,12 +11442,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -11708,12 +11461,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -11759,7 +11510,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -11863,7 +11613,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -12176,12 +11925,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -12197,12 +11944,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -12248,7 +11993,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -12352,7 +12096,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -12433,7 +12176,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -12444,7 +12186,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -12564,7 +12305,6 @@ export const contracts = {
properties: {
bytesBase64: {
type: 'string',
- maxLength: 5464,
},
},
additionalProperties: false,
@@ -12649,7 +12389,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -12708,7 +12447,6 @@ export const contracts = {
properties: {
bytesBase64: {
type: 'string',
- maxLength: 5464,
},
},
additionalProperties: false,
@@ -13133,7 +12871,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
through: {
type: ['integer', 'null'],
@@ -13697,7 +13434,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 32,
},
presentation: {
description:
@@ -13832,7 +13568,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
through: {
type: 'integer',
@@ -13874,7 +13609,6 @@ export const contracts = {
turnId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
position: {
$ref: '#/$defs/HistoryRowPosition',
@@ -13925,7 +13659,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
through: {
type: 'integer',
@@ -14038,7 +13771,6 @@ export const contracts = {
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
location: {
$ref: '#/$defs/AgentImportLocation',
@@ -14084,7 +13816,6 @@ export const contracts = {
title: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -14135,7 +13866,6 @@ export const contracts = {
database: {
type: 'string',
minLength: 1,
- maxLength: 255,
},
kind: {
type: 'string',
@@ -14153,7 +13883,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -14209,12 +13938,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
},
additionalProperties: false,
@@ -14318,7 +14045,6 @@ export const contracts = {
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
location: {
$ref: '#/$defs/AgentImportLocation',
@@ -14326,7 +14052,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
},
additionalProperties: false,
@@ -14371,7 +14096,6 @@ export const contracts = {
database: {
type: 'string',
minLength: 1,
- maxLength: 255,
},
kind: {
type: 'string',
@@ -14389,7 +14113,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -14509,12 +14232,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -14530,12 +14251,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -14581,7 +14300,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -14685,7 +14403,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -14783,7 +14500,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -14870,7 +14586,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -14988,7 +14703,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 1024,
},
includeArchived: {
type: 'boolean',
@@ -15006,12 +14720,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
},
additionalProperties: false,
@@ -15160,7 +14872,6 @@ export const contracts = {
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
location: {
$ref: '#/$defs/AgentImportLocation',
@@ -15168,7 +14879,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
},
additionalProperties: false,
@@ -15213,7 +14923,6 @@ export const contracts = {
database: {
type: 'string',
minLength: 1,
- maxLength: 255,
},
kind: {
type: 'string',
@@ -15231,7 +14940,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -15364,12 +15072,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
},
additionalProperties: false,
@@ -15505,12 +15211,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -15526,12 +15230,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -15577,7 +15279,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -15681,7 +15382,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -15747,12 +15447,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
requestId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -15988,7 +15686,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 32,
},
network: {
$ref: '#/$defs/Network',
@@ -16043,7 +15740,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -16081,7 +15777,6 @@ export const contracts = {
question: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
options: {
type: 'array',
@@ -16101,12 +15796,10 @@ export const contracts = {
label: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
description: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -16638,7 +16331,6 @@ export const contracts = {
description:
'Literal, case-sensitive title substring; an empty query matches all titles.',
type: 'string',
- maxLength: 128,
default: '',
},
},
@@ -16668,7 +16360,6 @@ export const contracts = {
cursor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -16687,7 +16378,6 @@ export const contracts = {
cursor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -16706,7 +16396,6 @@ export const contracts = {
cursor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -16754,7 +16443,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -16902,12 +16590,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -16923,12 +16609,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -16974,7 +16658,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -17078,7 +16761,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -17173,7 +16855,6 @@ export const contracts = {
properties: {
bytesBase64: {
type: 'string',
- maxLength: 5464,
},
},
additionalProperties: false,
@@ -17240,7 +16921,6 @@ export const contracts = {
properties: {
bytesBase64: {
type: 'string',
- maxLength: 5464,
},
},
additionalProperties: false,
@@ -17277,12 +16957,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
messageId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -17426,12 +17104,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -17447,12 +17123,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -17498,7 +17172,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -17602,7 +17275,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -17705,7 +17377,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
expectedRevision: {
type: 'integer',
@@ -17716,14 +17387,12 @@ export const contracts = {
title: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
labels: {
type: 'array',
items: {
type: 'string',
},
- maxItems: 32,
},
},
additionalProperties: false,
@@ -17928,12 +17597,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -17949,12 +17616,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -18000,7 +17665,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -18104,7 +17768,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -18184,7 +17847,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -18358,12 +18020,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -18379,12 +18039,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -18430,7 +18088,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -18534,7 +18191,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -18701,7 +18357,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -18722,7 +18377,6 @@ export const contracts = {
items: {
$ref: '#/$defs/AgentInteractionSummary',
},
- maxItems: 16,
},
},
additionalProperties: false,
@@ -18894,7 +18548,6 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 128,
pattern: '^[A-Za-z0-9_-]+$',
},
title: {
@@ -19188,7 +18841,6 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 128,
pattern: '^[A-Za-z0-9_-]+$',
},
title: {
@@ -19540,7 +19192,6 @@ export const contracts = {
name: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -19613,7 +19264,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -19719,7 +19369,6 @@ export const contracts = {
name: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
archived: {
type: 'boolean',
@@ -19765,7 +19414,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -19849,7 +19497,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -19950,7 +19597,6 @@ export const contracts = {
name: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
archived: {
type: 'boolean',
@@ -19996,7 +19642,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -20036,12 +19681,10 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
name: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
project: {
anyOf: [
@@ -20071,7 +19714,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -20176,12 +19818,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
messageId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
expectedRevision: {
type: 'integer',
@@ -20285,7 +19925,6 @@ export const contracts = {
properties: {
bytesBase64: {
type: 'string',
- maxLength: 5464,
},
},
additionalProperties: false,
@@ -20414,27 +20053,6 @@ export const contracts = {
additionalProperties: false,
required: ['kind', 'bytes'],
},
- {
- type: 'object',
- properties: {
- bytes: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- limit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- kind: {
- type: 'string',
- const: 'too_large',
- },
- },
- additionalProperties: false,
- required: ['kind', 'bytes', 'limit'],
- },
{
type: 'object',
properties: {
@@ -20502,7 +20120,7 @@ export const contracts = {
type: 'integer',
format: 'uint64',
minimum: 0,
- maximum: 52428800,
+ maximum: 9007199254740991,
},
},
additionalProperties: false,
@@ -20514,12 +20132,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -20612,26 +20228,21 @@ export const contracts = {
items: {
type: 'string',
minLength: 1,
- maxLength: 500,
},
minItems: 1,
- maxItems: 8,
},
question: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 500,
},
limit: {
type: ['integer', 'null'],
format: 'uint',
minimum: 1,
- maximum: 25,
},
session_id: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 256,
},
since: {
type: ['integer', 'null'],
@@ -20781,12 +20392,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -20802,12 +20411,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -20853,7 +20460,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -20957,7 +20563,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -21187,12 +20792,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
requestId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
answer: {
$ref: '#/$defs/InteractionAnswer',
@@ -21357,7 +20960,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 32,
},
network: {
$ref: '#/$defs/Network',
@@ -21412,7 +21014,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -21734,7 +21335,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 32,
},
network: {
$ref: '#/$defs/Network',
@@ -21789,7 +21389,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -21827,7 +21426,6 @@ export const contracts = {
question: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
options: {
type: 'array',
@@ -21847,12 +21445,10 @@ export const contracts = {
label: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
description: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -22375,12 +21971,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
sourceInvocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
sourceHighWater: {
description: 'Exact Run-local count returned by execution.',
@@ -22416,7 +22010,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -22427,7 +22020,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -22976,7 +22568,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -23051,7 +22642,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -23062,7 +22652,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -23791,7 +23380,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -23866,7 +23454,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -23877,7 +23464,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -24028,7 +23614,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
through: {
description: 'Original raw-event fence, shared with history reads.',
@@ -24049,11 +23634,9 @@ export const contracts = {
],
},
query: {
- description:
- 'Literal query, additionally limited to 512 UTF-8 bytes; no normalization.',
+ description: 'Literal query; no normalization.',
type: 'string',
minLength: 1,
- maxLength: 512,
},
caseSensitive: {
description:
@@ -24240,12 +23823,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -24291,7 +23872,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -24482,12 +24062,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -24503,12 +24081,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -24554,7 +24130,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -24658,7 +24233,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -24761,7 +24335,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
message: {
type: 'string',
@@ -24778,7 +24351,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -24789,7 +24361,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -24923,9 +24494,6 @@ export const contracts = {
{
$ref: '#/$defs/SkillRequestFailure',
},
- {
- $ref: '#/$defs/SkillOverflowFailure',
- },
],
},
SkillRequestFailure: {
@@ -24951,25 +24519,6 @@ export const contracts = {
'resolution_failed',
],
},
- SkillOverflowFailure: {
- type: 'object',
- properties: {
- reason: {
- $ref: '#/$defs/TooManyRequests',
- },
- requestLimit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- },
- additionalProperties: false,
- required: ['reason', 'requestLimit'],
- },
- TooManyRequests: {
- type: 'string',
- enum: ['too_many_requests'],
- },
SkillInvocationReceipt: {
description:
'Boolean wire discriminants are validated here, not retained as mutable\nbusiness fields beside a contradictory enum variant.',
@@ -25037,27 +24586,6 @@ export const contracts = {
additionalProperties: false,
required: ['invocation', 'request', 'success', 'reason'],
},
- {
- type: 'object',
- properties: {
- invocation: {
- const: 'explicit',
- },
- success: {
- const: false,
- },
- reason: {
- $ref: '#/$defs/TooManyRequests',
- },
- requestLimit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- },
- additionalProperties: false,
- required: ['invocation', 'success', 'reason', 'requestLimit'],
- },
],
},
SkillInvocationMode: {
@@ -25093,7 +24621,6 @@ export const contracts = {
},
query: {
type: 'string',
- maxLength: 4096,
},
},
additionalProperties: false,
@@ -25149,7 +24676,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -25160,7 +24686,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -25176,7 +24701,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -25257,12 +24781,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -25359,7 +24881,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
through: {
type: 'integer',
@@ -25380,7 +24901,6 @@ export const contracts = {
items: {
$ref: '#/$defs/HistorySourceSegment',
},
- maxItems: 16,
default: null,
},
position: {
@@ -25412,7 +24932,6 @@ export const contracts = {
toolUseId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -25475,7 +24994,6 @@ export const contracts = {
anyOf: [
{
type: 'string',
- maxLength: 256,
},
{
type: 'integer',
@@ -25565,7 +25083,6 @@ export const contracts = {
description:
'Complete file-path evidence resolved on the Host for copying only.\nThis is display text, never a filesystem capability or open command.',
type: ['string', 'null'],
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -25636,7 +25153,6 @@ export const contracts = {
items: {
$ref: '#/$defs/HistorySourceSegment',
},
- maxItems: 16,
},
format: {
$ref: '#/$defs/SourceFormat',
@@ -25808,7 +25324,6 @@ export const contracts = {
anyOf: [
{
type: 'string',
- maxLength: 256,
},
{
type: 'integer',
@@ -25863,7 +25378,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 32,
},
presentation: {
description:
@@ -25976,12 +25490,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -26011,7 +25523,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
through: {
type: 'integer',
@@ -26240,18 +25751,16 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
name: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
bytes: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 52428800,
+ maximum: 9007199254740991,
},
digest: {
type: 'string',
@@ -26345,7 +25854,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
after: {
type: 'integer',
@@ -26900,7 +26408,6 @@ export const contracts = {
items: {
$ref: '#/$defs/AgentInteractionSummary',
},
- maxItems: 16,
},
},
additionalProperties: false,
@@ -27036,7 +26543,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
additionalProperties: false,
@@ -27089,7 +26595,6 @@ export const contracts = {
properties: {
bytesBase64: {
type: 'string',
- maxLength: 5464,
},
},
additionalProperties: false,
@@ -27448,7 +26953,6 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 128,
pattern: '^[A-Za-z0-9_-]+$',
},
title: {
@@ -28184,7 +27688,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -28259,7 +27762,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -28270,7 +27772,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -28421,7 +27922,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
target: {
$ref: '#/$defs/AgentWorkTarget',
@@ -28448,7 +27948,6 @@ export const contracts = {
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -28464,7 +27963,6 @@ export const contracts = {
messageId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -28482,7 +27980,6 @@ export const contracts = {
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
offset: {
type: 'integer',
@@ -28648,7 +28145,6 @@ export const contracts = {
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
offset: {
type: 'integer',
@@ -28692,20 +28188,16 @@ export const contracts = {
conversationKey: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
message: {
type: 'string',
- maxLength: 65536,
},
cwd: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
instructions: {
type: ['string', 'null'],
- maxLength: 65536,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -28939,7 +28431,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
expectedGraphId: {
anyOf: [
@@ -28962,7 +28453,6 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
WorkHubGraphAction: {
oneOf: [
@@ -29094,7 +28584,6 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphMode: {
type: 'string',
@@ -29617,7 +29106,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -29735,12 +29223,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
required: ['sessionId', 'turnId'],
@@ -29756,12 +29242,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -29809,7 +29293,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -29913,7 +29396,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -29991,7 +29473,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
graphId: {
anyOf: [
@@ -30021,12 +29502,10 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
},
@@ -30139,7 +29618,6 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphMode: {
type: 'string',
@@ -30190,7 +29668,6 @@ export const contracts = {
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphTarget: {
oneOf: [
@@ -30201,7 +29678,6 @@ export const contracts = {
agentId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -30217,7 +29693,6 @@ export const contracts = {
presetId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -30233,7 +29708,6 @@ export const contracts = {
executorId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -30261,7 +29735,6 @@ export const contracts = {
OperatorId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphWorkState: {
type: 'string',
@@ -30306,7 +29779,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
before: {
type: ['integer', 'null'],
@@ -30373,7 +29845,6 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphMode: {
type: 'string',
@@ -30593,7 +30064,6 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphMode: {
type: 'string',
@@ -30612,7 +30082,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
graphId: {
$ref: '#/$defs/GraphId',
@@ -30623,7 +30092,6 @@ export const contracts = {
resultId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
offset: {
type: 'integer',
@@ -30639,12 +30107,10 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
},
@@ -30677,7 +30143,6 @@ export const contracts = {
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
AgentExecution: {
type: 'object',
@@ -30734,7 +30199,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
graphId: {
$ref: '#/$defs/GraphId',
@@ -30750,12 +30214,10 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
},
@@ -30795,7 +30257,6 @@ export const contracts = {
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphTarget: {
oneOf: [
@@ -30806,7 +30267,6 @@ export const contracts = {
agentId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -30822,7 +30282,6 @@ export const contracts = {
presetId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -30838,7 +30297,6 @@ export const contracts = {
executorId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -30866,7 +30324,6 @@ export const contracts = {
OperatorId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
HistoricalInput: {
type: 'object',
@@ -30878,7 +30335,6 @@ export const contracts = {
resultId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
required: ['sourceGraphId', 'resultId'],
@@ -30886,7 +30342,6 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
},
@@ -30913,7 +30368,6 @@ export const contracts = {
items: {
$ref: '#/$defs/WorkHubPreset',
},
- maxItems: 64,
},
},
required: ['revision', 'entries'],
@@ -30931,22 +30385,18 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 128,
pattern: '^[a-zA-Z0-9._:-]+$',
},
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
description: {
type: 'string',
- maxLength: 4000,
},
worker: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
tools: {
type: 'array',
@@ -31019,7 +30469,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -31102,7 +30551,6 @@ export const contracts = {
rootId: {
type: 'string',
minLength: 1,
- maxLength: 64,
},
segments: {
type: 'array',
@@ -31220,12 +30668,10 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
turnId: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
required: ['sessionId', 'turnId'],
@@ -31241,12 +30687,10 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
thinkingLevel: {
anyOf: [
@@ -31294,7 +30738,6 @@ export const contracts = {
executor: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
settings: {
$ref: '#/$defs/ExecutorSettings',
@@ -31398,7 +30841,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -31483,7 +30925,6 @@ export const contracts = {
items: {
$ref: '#/$defs/WorkHubPreset',
},
- maxItems: 64,
},
},
required: ['revision', 'entries'],
@@ -31501,22 +30942,18 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 128,
pattern: '^[a-zA-Z0-9._:-]+$',
},
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
description: {
type: 'string',
- maxLength: 4000,
},
worker: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
tools: {
type: 'array',
@@ -31624,7 +31061,6 @@ export const contracts = {
items: {
$ref: '#/$defs/WorkHubPreset',
},
- maxItems: 64,
},
},
required: ['revision', 'entries'],
@@ -31640,22 +31076,18 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 128,
pattern: '^[a-zA-Z0-9._:-]+$',
},
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
description: {
type: 'string',
- maxLength: 4000,
},
worker: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
tools: {
type: 'array',
@@ -31738,7 +31170,6 @@ export const contracts = {
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
offset: {
type: 'integer',
@@ -31760,7 +31191,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 16,
},
taskId: {
type: 'string',
@@ -31770,7 +31200,6 @@ export const contracts = {
},
title: {
type: 'string',
- maxLength: 256,
},
acceptedAt: {
type: 'integer',
@@ -31802,7 +31231,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 16,
},
kind: {
type: 'string',
@@ -32211,7 +31639,6 @@ export const contracts = {
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
offset: {
type: 'integer',
@@ -32274,7 +31701,6 @@ export const contracts = {
},
title: {
type: 'string',
- maxLength: 256,
},
acceptedAt: {
type: 'integer',
@@ -32299,7 +31725,6 @@ export const contracts = {
sessionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
graphId: {
anyOf: [
@@ -32329,12 +31754,10 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
},
},
@@ -32447,7 +31870,6 @@ export const contracts = {
GraphId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphMode: {
type: 'string',
@@ -32498,7 +31920,6 @@ export const contracts = {
WorkId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphTarget: {
oneOf: [
@@ -32509,7 +31930,6 @@ export const contracts = {
agentId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -32525,7 +31945,6 @@ export const contracts = {
presetId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -32541,7 +31960,6 @@ export const contracts = {
executorId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
kind: {
type: 'string',
@@ -32569,7 +31987,6 @@ export const contracts = {
OperatorId: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
GraphWorkState: {
type: 'string',
@@ -32637,7 +32054,6 @@ export const contracts = {
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
offset: {
type: 'integer',
@@ -32659,7 +32075,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 16,
},
taskId: {
type: 'string',
@@ -32669,7 +32084,6 @@ export const contracts = {
},
title: {
type: 'string',
- maxLength: 256,
},
acceptedAt: {
type: 'integer',
@@ -32701,7 +32115,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 16,
},
kind: {
type: 'string',
@@ -33110,7 +32523,6 @@ export const contracts = {
invocationId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
offset: {
type: 'integer',
@@ -33173,7 +32585,6 @@ export const contracts = {
},
title: {
type: 'string',
- maxLength: 256,
},
acceptedAt: {
type: 'integer',
@@ -33225,7 +32636,6 @@ export const contracts = {
question: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
options: {
type: 'array',
@@ -33245,12 +32655,10 @@ export const contracts = {
label: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
description: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
required: ['label'],
@@ -33359,14 +32767,12 @@ export const contracts = {
message: {
type: 'string',
minLength: 1,
- maxLength: 2048,
},
fields: {
type: 'array',
items: {
$ref: '#/$defs/FormField',
},
- maxItems: 32,
},
},
required: ['message', 'fields'],
@@ -33729,12 +33135,10 @@ export const contracts = {
reference: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
required: ['kind', 'reference', 'revision'],
@@ -33763,7 +33167,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -33902,12 +33305,10 @@ export const contracts = {
reference: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
required: ['kind', 'reference', 'revision'],
@@ -33936,7 +33337,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -34046,7 +33446,6 @@ export const contracts = {
type: 'integer',
format: 'uint',
minimum: 1,
- maximum: 1048576,
},
digest: {
type: 'string',
@@ -34138,7 +33537,6 @@ export const contracts = {
},
query: {
type: 'string',
- maxLength: 256,
},
cursor: {
anyOf: [
@@ -34179,7 +33577,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -34233,17 +33630,14 @@ export const contracts = {
revision: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
query: {
type: 'string',
- maxLength: 256,
},
offset: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 16384,
},
},
required: ['revision', 'query', 'offset'],
@@ -34402,17 +33796,14 @@ export const contracts = {
revision: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
query: {
type: 'string',
- maxLength: 256,
},
offset: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 16384,
},
},
required: ['revision', 'query', 'offset'],
@@ -34477,7 +33868,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -34533,14 +33923,12 @@ export const contracts = {
description:
'Exact ref from search, or a skill id/name resolved before eligibility checks.',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'string',
description:
'Catalog revision from search or a previous load/resource response.',
minLength: 1,
- maxLength: 128,
},
resource: {
anyOf: [
@@ -34815,14 +34203,12 @@ export const contracts = {
description:
'Exact ref from search, or a skill id/name resolved before eligibility checks.',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'string',
description:
'Catalog revision from search or a previous load/resource response.',
minLength: 1,
- maxLength: 128,
},
resource: {
anyOf: [
@@ -34934,27 +34320,6 @@ export const contracts = {
},
required: ['invocation', 'request', 'success', 'reason'],
},
- {
- type: 'object',
- additionalProperties: false,
- properties: {
- invocation: {
- const: 'explicit',
- },
- success: {
- const: false,
- },
- reason: {
- $ref: '#/$defs/TooManyRequests',
- },
- requestLimit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- },
- required: ['invocation', 'success', 'reason', 'requestLimit'],
- },
],
description:
'Boolean wire discriminants are validated here, not retained as mutable\nbusiness fields beside a contradictory enum variant.',
@@ -34973,10 +34338,6 @@ export const contracts = {
'resolution_failed',
],
},
- TooManyRequests: {
- type: 'string',
- enum: ['too_many_requests'],
- },
},
},
resources: {},
@@ -35037,7 +34398,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -35099,12 +34459,10 @@ export const contracts = {
description:
'Actual selected tools bound to this Library; these names grant no access.',
minLength: 1,
- maxLength: 128,
},
searchTool: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 128,
},
},
required: ['language', 'message'],
@@ -35219,9 +34577,6 @@ export const contracts = {
{
$ref: '#/$defs/SkillRequestFailure',
},
- {
- $ref: '#/$defs/SkillOverflowFailure',
- },
],
},
SkillRequestFailure: {
@@ -35247,25 +34602,6 @@ export const contracts = {
'resolution_failed',
],
},
- SkillOverflowFailure: {
- type: 'object',
- additionalProperties: false,
- properties: {
- reason: {
- $ref: '#/$defs/TooManyRequests',
- },
- requestLimit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- },
- required: ['reason', 'requestLimit'],
- },
- TooManyRequests: {
- type: 'string',
- enum: ['too_many_requests'],
- },
SkillInvocationReceipt: {
anyOf: [
{
@@ -35331,27 +34667,6 @@ export const contracts = {
},
required: ['invocation', 'request', 'success', 'reason'],
},
- {
- type: 'object',
- additionalProperties: false,
- properties: {
- invocation: {
- const: 'explicit',
- },
- success: {
- const: false,
- },
- reason: {
- $ref: '#/$defs/TooManyRequests',
- },
- requestLimit: {
- type: 'integer',
- format: 'uint64',
- minimum: 0,
- },
- },
- required: ['invocation', 'success', 'reason', 'requestLimit'],
- },
],
description:
'Boolean wire discriminants are validated here, not retained as mutable\nbusiness fields beside a contradictory enum variant.',
@@ -35394,12 +34709,10 @@ export const contracts = {
reference: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
required: ['kind', 'reference', 'revision'],
@@ -35430,7 +34743,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -35591,12 +34903,10 @@ export const contracts = {
reference: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
},
required: ['kind', 'reference', 'revision'],
@@ -35625,7 +34935,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -35699,19 +35008,16 @@ export const contracts = {
reference: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'string',
description: 'Complete catalog revision from the list/read response.',
minLength: 1,
- maxLength: 128,
},
offset: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 16777216,
},
},
required: ['reference', 'revision', 'offset'],
@@ -35742,7 +35048,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -36013,7 +35318,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
directoryIdentity: {
type: 'string',
@@ -36066,7 +35370,6 @@ export const contracts = {
properties: {
query: {
type: 'string',
- maxLength: 4096,
},
limit: {
type: ['integer', 'null'],
@@ -36185,7 +35488,6 @@ export const contracts = {
reference: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
revision: {
type: 'integer',
@@ -36717,7 +36019,6 @@ export const contracts = {
callId: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
operation: {
$ref: '#/$defs/NativeOperation',
@@ -36736,7 +36037,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
diff: {
type: 'string',
@@ -36755,7 +36055,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
diff: {
type: 'string',
@@ -36774,7 +36073,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
type: {
type: 'string',
@@ -36832,7 +36130,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
old_string: {
type: 'string',
@@ -36946,7 +36243,6 @@ export const contracts = {
properties: {
pattern: {
type: 'string',
- maxLength: 8192,
},
path: {
type: 'string',
@@ -36954,7 +36250,6 @@ export const contracts = {
},
glob: {
type: 'string',
- maxLength: 4096,
},
},
required: ['pattern'],
@@ -37149,7 +36444,6 @@ export const contracts = {
path: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
content: {
type: 'string',
@@ -37214,7 +36508,6 @@ export const contracts = {
command: {
type: 'string',
minLength: 1,
- maxLength: 65536,
},
login: {
type: 'boolean',
@@ -37225,7 +36518,6 @@ export const contracts = {
type: ['integer', 'null'],
format: 'uint64',
minimum: 1,
- maximum: 86400000,
},
run_in_background: {
type: 'boolean',
@@ -37267,7 +36559,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 32,
},
network: {
$ref: '#/$defs/Network',
@@ -37321,7 +36612,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -37556,7 +36846,6 @@ export const contracts = {
},
actions: {
type: ['array', 'null'],
- maxItems: 64,
items: {
type: 'object',
additionalProperties: false,
@@ -37676,7 +36965,6 @@ export const contracts = {
justification: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 2048,
},
bytes: {
type: ['array', 'null'],
@@ -37703,7 +36991,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 32,
},
network: {
$ref: '#/$defs/Network',
@@ -37757,7 +37044,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -37819,14 +37105,12 @@ export const contracts = {
executable: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
args: {
type: 'array',
items: {
type: 'string',
},
- maxItems: 256,
default: [],
},
env: {
@@ -37947,14 +37231,12 @@ export const contracts = {
executable: {
type: 'string',
minLength: 1,
- maxLength: 4096,
},
args: {
type: 'array',
items: {
type: 'string',
},
- maxItems: 256,
default: [],
},
env: {
@@ -37977,7 +37259,6 @@ export const contracts = {
justification: {
type: ['string', 'null'],
minLength: 1,
- maxLength: 2048,
},
},
required: ['executable'],
@@ -37993,7 +37274,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Rule',
},
- maxItems: 32,
},
network: {
$ref: '#/$defs/Network',
@@ -38047,7 +37327,6 @@ export const contracts = {
items: {
$ref: '#/$defs/Destination',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -38210,7 +37489,6 @@ export const contracts = {
methodId: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
kind: {
type: 'string',
@@ -38244,7 +37522,6 @@ export const contracts = {
items: {
$ref: '#/$defs/ExecutorAuthenticationMethod',
},
- maxItems: 32,
},
kind: {
type: 'string',
@@ -38270,7 +37547,6 @@ export const contracts = {
properties: {
diagnostic: {
type: 'string',
- maxLength: 2048,
},
kind: {
type: 'string',
@@ -38291,15 +37567,12 @@ export const contracts = {
properties: {
title: {
type: ['string', 'null'],
- maxLength: 256,
},
name: {
type: 'string',
- maxLength: 256,
},
version: {
type: 'string',
- maxLength: 256,
},
},
required: ['name', 'version'],
@@ -38311,16 +37584,13 @@ export const contracts = {
id: {
type: 'string',
minLength: 1,
- maxLength: 1024,
},
name: {
type: 'string',
minLength: 1,
- maxLength: 256,
},
description: {
type: ['string', 'null'],
- maxLength: 2048,
},
supported: {
type: 'boolean',
@@ -38338,7 +37608,6 @@ export const contracts = {
properties: {
url: {
type: 'string',
- maxLength: 8192,
},
kind: {
type: 'string',
@@ -38738,7 +38007,6 @@ export const contracts = {
items: {
$ref: '#/$defs/RawAction',
},
- maxItems: 64,
default: [],
},
size: {
@@ -42060,11 +41328,9 @@ export const contracts = {
},
displayName: {
type: 'string',
- maxLength: 256,
},
assistantTone: {
type: 'string',
- maxLength: 4096,
},
workspaceInstructions: {
type: 'boolean',
@@ -42119,7 +41385,7 @@ export const contracts = {
},
includeEditingFacts: {
description:
- 'Opt in to the bounded editing projection; credential reads stay narrow.',
+ 'Opt in to the complete editing projection; credential reads stay narrow.',
type: 'boolean',
default: false,
},
@@ -42250,7 +41516,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 512,
},
modelOverrides: {
type: ['object', 'null'],
@@ -42441,7 +41706,6 @@ export const contracts = {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 1024,
},
kind: {
type: 'string',
@@ -43515,7 +42779,6 @@ export const contracts = {
properties: {
query: {
type: 'string',
- maxLength: 256,
default: '',
},
kind: {
@@ -43553,19 +42816,16 @@ export const contracts = {
properties: {
query: {
type: 'string',
- maxLength: 256,
},
connection: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 1024,
},
model: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 4096,
},
},
additionalProperties: false,
@@ -43659,11 +42919,9 @@ export const contracts = {
},
connectionName: {
type: 'string',
- maxLength: 256,
},
label: {
type: 'string',
- maxLength: 512,
},
thinkingLevels: {
type: 'array',
@@ -43765,7 +43023,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -43776,7 +43033,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -43847,19 +43103,16 @@ export const contracts = {
properties: {
query: {
type: 'string',
- maxLength: 256,
},
connection: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 1024,
},
model: {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 4096,
},
},
additionalProperties: false,
@@ -44208,7 +43461,6 @@ export const contracts = {
type: 'integer',
format: 'uint',
minimum: 0,
- maximum: 1024,
},
},
additionalProperties: false,
@@ -44582,11 +43834,9 @@ export const contracts = {
},
connectionName: {
type: 'string',
- maxLength: 256,
},
label: {
type: 'string',
- maxLength: 512,
},
thinkingLevels: {
type: 'array',
@@ -44688,7 +43938,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -44699,7 +43948,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -44927,7 +44175,6 @@ export const contracts = {
'attempt_conflict',
'connection_changed',
'credential_changed',
- 'capacity',
'slug_taken',
'authentication',
],
@@ -45563,11 +44810,9 @@ export const contracts = {
properties: {
displayName: {
type: 'string',
- maxLength: 256,
},
assistantTone: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -45711,7 +44956,6 @@ export const contracts = {
connectionId: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
revision: {
type: 'integer',
@@ -45722,7 +44966,6 @@ export const contracts = {
modelId: {
type: 'string',
minLength: 1,
- maxLength: 512,
},
},
additionalProperties: false,
@@ -47580,7 +46823,6 @@ export const contracts = {
},
method: {
type: 'string',
- maxLength: 128,
},
},
additionalProperties: false,
@@ -47734,7 +46976,6 @@ export const contracts = {
},
message: {
type: 'string',
- maxLength: 512,
},
kind: {
type: 'string',
@@ -47794,7 +47035,6 @@ export const contracts = {
'attempt_conflict',
'connection_changed',
'credential_changed',
- 'capacity',
'slug_taken',
'authentication',
],
@@ -47812,11 +47052,9 @@ export const contracts = {
properties: {
url: {
type: 'string',
- maxLength: 2048,
},
userCode: {
type: 'string',
- maxLength: 1024,
},
},
additionalProperties: false,
@@ -48532,7 +47770,6 @@ export const contracts = {
$ref: '#/$defs/SettingChange',
},
minItems: 1,
- maxItems: 32,
},
},
additionalProperties: false,
@@ -48556,7 +47793,6 @@ export const contracts = {
type: 'string',
},
minItems: 1,
- maxItems: 16,
},
value: {
description:
@@ -48581,7 +47817,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -48596,7 +47831,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 128,
},
kind: {
type: 'string',
@@ -48679,7 +47913,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -48850,7 +48083,6 @@ export const contracts = {
type: 'string',
},
minItems: 1,
- maxItems: 16,
},
value: {
description:
@@ -48875,7 +48107,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -48890,7 +48121,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 128,
},
kind: {
type: 'string',
@@ -49040,7 +48270,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -49248,7 +48477,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -49398,7 +48626,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -49486,8 +48713,6 @@ export const contracts = {
},
url: {
type: 'string',
- minLength: 1,
- maxLength: 8192,
},
sha256: {
description:
@@ -49543,7 +48768,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -49917,7 +49141,6 @@ export const contracts = {
type: 'string',
},
minItems: 1,
- maxItems: 16,
},
value: {
description:
@@ -49942,7 +49165,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -49957,7 +49179,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 128,
},
kind: {
type: 'string',
@@ -50075,7 +49296,6 @@ export const contracts = {
},
description: {
type: 'string',
- maxLength: 512,
},
kind: {
$ref: '#/$defs/SettingKind',
@@ -50107,7 +49327,6 @@ export const contracts = {
items: {
$ref: '#/$defs/SettingValue',
},
- maxItems: 16,
},
},
additionalProperties: false,
@@ -50134,7 +49353,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -50149,7 +49367,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 128,
},
kind: {
type: 'string',
@@ -51077,7 +50294,6 @@ export const contracts = {
items: {
type: 'string',
},
- maxItems: 16,
},
after: {
type: ['string', 'null'],
@@ -51186,7 +50402,6 @@ export const contracts = {
},
description: {
type: 'string',
- maxLength: 512,
},
kind: {
$ref: '#/$defs/SettingKind',
@@ -51218,7 +50433,6 @@ export const contracts = {
items: {
$ref: '#/$defs/SettingValue',
},
- maxItems: 16,
},
},
additionalProperties: false,
@@ -51245,7 +50459,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -51260,7 +50473,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 128,
},
kind: {
type: 'string',
@@ -51362,7 +50574,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -51457,14 +50668,12 @@ export const contracts = {
items: {
$ref: '#/$defs/RemoteObservation',
},
- maxItems: 128,
},
packages: {
type: 'array',
items: {
$ref: '#/$defs/PackageRef',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -52074,7 +51283,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -52200,7 +51408,6 @@ export const contracts = {
},
diagnostic: {
type: ['string', 'null'],
- maxLength: 512,
},
status: {
type: 'string',
@@ -52961,8 +52168,6 @@ export const contracts = {
},
url: {
type: 'string',
- minLength: 1,
- maxLength: 8192,
},
sha256: {
description:
@@ -53002,14 +52207,12 @@ export const contracts = {
items: {
$ref: '#/$defs/RemoteObservation',
},
- maxItems: 128,
},
packages: {
type: 'array',
items: {
$ref: '#/$defs/PackageRef',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -53657,7 +52860,6 @@ export const contracts = {
type: 'string',
},
minItems: 1,
- maxItems: 16,
},
value: {
description:
@@ -53682,7 +52884,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -53697,7 +52898,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 128,
},
kind: {
type: 'string',
@@ -53752,7 +52952,6 @@ export const contracts = {
$ref: '#/$defs/SettingChange',
},
minItems: 1,
- maxItems: 32,
},
},
additionalProperties: false,
@@ -54215,8 +53414,6 @@ export const contracts = {
},
url: {
type: 'string',
- minLength: 1,
- maxLength: 8192,
},
sha256: {
description:
@@ -54256,14 +53453,12 @@ export const contracts = {
items: {
$ref: '#/$defs/RemoteObservation',
},
- maxItems: 128,
},
packages: {
type: 'array',
items: {
$ref: '#/$defs/PackageRef',
},
- maxItems: 128,
},
},
additionalProperties: false,
@@ -54911,7 +54106,6 @@ export const contracts = {
type: 'string',
},
minItems: 1,
- maxItems: 16,
},
value: {
description:
@@ -54936,7 +54130,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 4096,
},
kind: {
type: 'string',
@@ -54951,7 +54144,6 @@ export const contracts = {
properties: {
text: {
type: 'string',
- maxLength: 128,
},
kind: {
type: 'string',
@@ -55006,7 +54198,6 @@ export const contracts = {
$ref: '#/$defs/SettingChange',
},
minItems: 1,
- maxItems: 32,
},
},
additionalProperties: false,
@@ -55530,7 +54721,6 @@ export const contracts = {
url: {
type: 'string',
minLength: 1,
- maxLength: 8192,
},
},
required: ['url'],
@@ -55580,7 +54770,6 @@ export const contracts = {
url: {
type: 'string',
minLength: 1,
- maxLength: 8192,
},
},
required: ['url'],
@@ -55990,13 +55179,12 @@ export const contracts = {
query: {
type: 'string',
minLength: 1,
- maxLength: 200,
},
limit: {
type: 'integer',
format: 'uint',
minimum: 1,
- maximum: 10,
+ maximum: 20,
default: 5,
},
},
@@ -56146,7 +55334,6 @@ export const contracts = {
url: {
type: 'string',
minLength: 1,
- maxLength: 8192,
},
revision: {
type: ['integer', 'null'],
@@ -56184,7 +55371,6 @@ export const contracts = {
name: {
type: 'string',
minLength: 1,
- maxLength: 128,
},
kind: {
type: 'string',
@@ -56983,7 +56169,6 @@ export const contracts = {
properties: {
code: {
type: 'string',
- maxLength: 65536,
},
timeout_ms: {
type: 'integer',
@@ -56991,13 +56176,11 @@ export const contracts = {
minimum: 1,
description:
'Wall-clock limit including asynchronous waits. Interrupted REPLs require reset.',
- maximum: 120000,
default: 30000,
},
title: {
type: ['string', 'null'],
description: 'Short, user-facing description of this call, in the user’s language.',
- maxLength: 256,
},
},
required: ['code'],
diff --git a/packages/plugin-sdk/src/generated/methods.ts b/packages/plugin-sdk/src/generated/methods.ts
index 7902288bda..e1dd0970a5 100644
--- a/packages/plugin-sdk/src/generated/methods.ts
+++ b/packages/plugin-sdk/src/generated/methods.ts
@@ -67,11 +67,6 @@ export type AgentReadFileOutput_AgentFileReadPart =
bytes: number;
kind: 'binary';
}
- | {
- bytes: number;
- limit: number;
- kind: 'too_large';
- }
| {
fileKind: AgentReadFileOutput_AgentFileKind;
kind: 'unsupported';
@@ -674,7 +669,7 @@ export interface ServiceMethods {
connectionId: string;
revision: number;
/**
- * Opt in to the bounded editing projection; credential reads stay narrow.
+ * Opt in to the complete editing projection; credential reads stay narrow.
*/
includeEditingFacts?: boolean;
};
diff --git a/packages/plugin-sdk/src/generated/runtime.ts b/packages/plugin-sdk/src/generated/runtime.ts
index 114274d1d2..7d102dafd5 100644
--- a/packages/plugin-sdk/src/generated/runtime.ts
+++ b/packages/plugin-sdk/src/generated/runtime.ts
@@ -937,9 +937,6 @@ export type TerminalScene =
* Render a single line, eliding overflow at a complete grapheme.
*/
truncate?: boolean;
- /**
- * @maxItems 64
- */
animation?: TerminalAnimationFrame[];
align?: TerminalAlign & string;
bold?: boolean;
@@ -1101,14 +1098,11 @@ export type FileError =
| 'clipboard_unavailable'
| 'paste_rejected';
/**
- * Complete bounded comparisons and structured patches reuse native parsers.
+ * Complete comparisons and structured patches reuse native parsers.
*/
export type DiffContent =
| {
source: string;
- /**
- * @maxItems 8192
- */
rows: DiffRow[];
kind: 'annotated';
}
@@ -1207,7 +1201,6 @@ export type ReadingTarget =
| {
/**
* @minItems 1
- * @maxItems 32
*/
path: [string, ...string[]];
offset: number;
@@ -1274,7 +1267,6 @@ export type TextFileError =
| 'read_failed'
| 'write_failed'
| 'invalid_file'
- | 'too_large'
| 'invalid_utf8'
| 'conflict'
| 'worker_failed';
@@ -1349,9 +1341,6 @@ export type Network =
| ('denied' | 'allowed')
| {
restricted: {
- /**
- * @maxItems 128
- */
destinations: Destination[];
};
};
@@ -1519,9 +1508,6 @@ export type ExecutorSetupAction =
export type ExecutorSetupResult =
| {
info?: ExecutorSetupInfo | null;
- /**
- * @maxItems 32
- */
methods: ExecutorAuthenticationMethod[];
kind: 'checked';
}
@@ -1756,102 +1742,7 @@ export type AgentRejection =
| 'closed';
export type WorkHubTaskStatus =
| {
- /**
- * @maxItems 16
- */
- dependencies:
- | []
- | [string]
- | [string, string]
- | [string, string, string]
- | [string, string, string, string]
- | [string, string, string, string, string]
- | [string, string, string, string, string, string]
- | [string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string, string]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ];
+ dependencies: string[];
kind: 'blocked';
}
| {
@@ -2709,7 +2600,6 @@ export type SettingsCredentialRejection =
| 'attempt_conflict'
| 'connection_changed'
| 'credential_changed'
- | 'capacity'
| 'slug_taken'
| 'authentication';
export type SettingsLoginFailure = 'cancelled' | 'expired' | 'transport' | 'authentication';
@@ -2934,12 +2824,6 @@ export type SkillInvocationReceipt =
request: string;
success: false;
reason: SkillFailureReason;
- }
- | {
- invocation: 'explicit';
- success: false;
- reason: TooManyRequests;
- requestLimit: number;
};
export type SkillInvocationMode = 'explicit' | 'model_tool';
export type SkillFailureReason =
@@ -2948,7 +2832,6 @@ export type SkillFailureReason =
| 'disabled'
| 'host_incompatible'
| 'resolution_failed';
-export type TooManyRequests = 'too_many_requests';
export type SkillPreparation =
| {
/**
@@ -2963,7 +2846,7 @@ export type SkillPreparation =
invocation: SkillInvocationResult;
kind: 'blocked';
};
-export type SkillInvocationFailure = SkillRequestFailure | SkillOverflowFailure;
+export type SkillInvocationFailure = SkillRequestFailure;
export type AgentSessionFilter = 'all' | 'archived' | 'needs_you';
export type AgentSessionPosition =
| {
@@ -5116,14 +4999,10 @@ export type Identity2 =
* an unrevoked Host record and the issuing principal's current authorization.
*/
export type Id = string;
-export type MarkdownTextResult =
- | {
- text: string;
- kind: 'ready';
- }
- | {
- kind: 'too_large';
- };
+export type MarkdownTextResult = {
+ text: string;
+ kind: 'ready';
+};
export interface ClientDraft {
revision: number;
@@ -5261,13 +5140,7 @@ export interface DeploymentSourceReplace {
*/
export interface DeploymentDocument {
input: CompositionInput;
- /**
- * @maxItems 128
- */
remoteExports: RemoteObservation[];
- /**
- * @maxItems 128
- */
packages: PackageRef[];
}
/**
@@ -5395,100 +5268,8 @@ export interface CompositionEdit {
export interface SettingChange {
/**
* @minItems 1
- * @maxItems 16
*/
- path:
- | [string]
- | [string, string]
- | [string, string, string]
- | [string, string, string, string]
- | [string, string, string, string, string]
- | [string, string, string, string, string, string]
- | [string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string, string]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ];
+ path: [string, ...string[]];
/**
* None removes the field; all other fields retain their original source.
*/
@@ -5499,7 +5280,6 @@ export interface InstanceConfigure {
instance: InstanceId;
/**
* @minItems 1
- * @maxItems 32
*/
changes: [SettingChange, ...SettingChange[]];
}
@@ -5619,102 +5399,7 @@ export interface InstanceSetEnabled {
export interface InstanceSettingsRead {
source: DeploymentRef;
instance: InstanceId;
- /**
- * @maxItems 16
- */
- path:
- | []
- | [string]
- | [string, string]
- | [string, string, string]
- | [string, string, string, string]
- | [string, string, string, string, string]
- | [string, string, string, string, string, string]
- | [string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string, string]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ];
+ path: string[];
after?: string | null;
}
export interface InstanceSettingsPage {
@@ -5763,152 +5448,7 @@ export interface SettingField {
nullable: boolean;
editable: boolean;
value?: SettingValue | null;
- /**
- * @maxItems 16
- */
- options:
- | []
- | [SettingValue]
- | [SettingValue, SettingValue]
- | [SettingValue, SettingValue, SettingValue]
- | [SettingValue, SettingValue, SettingValue, SettingValue]
- | [SettingValue, SettingValue, SettingValue, SettingValue, SettingValue]
- | [SettingValue, SettingValue, SettingValue, SettingValue, SettingValue, SettingValue]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ]
- | [
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- SettingValue,
- ];
+ options: SettingValue[];
}
export interface BindingCandidatesPage {
source: DeploymentRef;
@@ -6214,28 +5754,7 @@ export interface TextAppearance {
}
export interface FontAppearance {
family: FontFamily;
- /**
- * @maxItems 8
- */
- fallbacks:
- | []
- | [FontFamily]
- | [FontFamily, FontFamily]
- | [FontFamily, FontFamily, FontFamily]
- | [FontFamily, FontFamily, FontFamily, FontFamily]
- | [FontFamily, FontFamily, FontFamily, FontFamily, FontFamily]
- | [FontFamily, FontFamily, FontFamily, FontFamily, FontFamily, FontFamily]
- | [FontFamily, FontFamily, FontFamily, FontFamily, FontFamily, FontFamily, FontFamily]
- | [
- FontFamily,
- FontFamily,
- FontFamily,
- FontFamily,
- FontFamily,
- FontFamily,
- FontFamily,
- FontFamily,
- ];
+ fallbacks: FontFamily[];
size: number;
/**
* Line height relative to this font size.
@@ -6251,8 +5770,6 @@ export interface TextareaProps {
appearance: TextareaAppearance;
/**
* Exact whitespace-delimited literals rendered and edited as atomic inline tokens.
- *
- * @maxItems 4096
*/
inlineTokens?: string[];
menu?: TextareaMenu | null;
@@ -6716,9 +6233,6 @@ export interface ReadingViewport {
readingRevision: number;
atStart?: boolean;
atEnd: boolean;
- /**
- * @maxItems 4096
- */
visibleChildKeys: string[];
}
/**
@@ -6746,7 +6260,6 @@ export interface ReadingFind {
export interface ReadingMatch {
/**
* @minItems 1
- * @maxItems 32
*/
path: [string, ...string[]];
offset: number;
@@ -6759,13 +6272,7 @@ export interface RowsProps {
* or selects the first row when there is no current selection.
*/
entry?: string | null;
- /**
- * @maxItems 64
- */
rows: Row[];
- /**
- * @maxItems 32
- */
shortcuts: Shortcut[];
maxRows: number;
/**
@@ -6783,19 +6290,7 @@ export interface RowsProps {
export interface Row {
key: string;
text: string;
- /**
- * @maxItems 8
- */
- actions:
- | []
- | [RowAction]
- | [RowAction, RowAction]
- | [RowAction, RowAction, RowAction]
- | [RowAction, RowAction, RowAction, RowAction]
- | [RowAction, RowAction, RowAction, RowAction, RowAction]
- | [RowAction, RowAction, RowAction, RowAction, RowAction, RowAction]
- | [RowAction, RowAction, RowAction, RowAction, RowAction, RowAction, RowAction]
- | [RowAction, RowAction, RowAction, RowAction, RowAction, RowAction, RowAction, RowAction];
+ actions: RowAction[];
}
export interface RowAction {
key: string;
@@ -6849,13 +6344,9 @@ export interface MorphMarkConfiguration {
export interface MorphShape {
/**
* @minItems 1
- * @maxItems 32
*/
paths: [[number, number][], ...[number, number][][]];
radius: number;
- /**
- * @maxItems 32
- */
miters: number[];
columns: number;
}
@@ -7276,9 +6767,6 @@ export interface ComputerEvaluate {
}
export interface ProtocolProcessLaunch {
executable: string;
- /**
- * @maxItems 256
- */
args?: string[];
env?: {
[k: string]: string | undefined;
@@ -7304,9 +6792,6 @@ export interface AcpAgent {
};
}
export interface Permissions {
- /**
- * @maxItems 32
- */
filesystem: Rule[];
network: Network;
}
@@ -7321,9 +6806,6 @@ export interface Rule {
}
export interface ProtocolProcessRun {
executable: string;
- /**
- * @maxItems 256
- */
args?: string[];
env?: {
[k: string]: string | undefined;
@@ -7351,9 +6833,6 @@ export interface AgentToolNames {
}
export interface WorkHubPresets {
revision: number | null;
- /**
- * @maxItems 64
- */
entries: WorkHubPreset[];
}
export interface WorkHubPreset {
@@ -7701,19 +7180,8 @@ export interface WorkHubConfiguration {
agent: AgentConfiguration;
/**
* Exactly selected imports of Agent services. Native grants are independent.
- *
- * @maxItems 8
*/
- workers:
- | []
- | [string]
- | [string, string]
- | [string, string, string]
- | [string, string, string, string]
- | [string, string, string, string, string]
- | [string, string, string, string, string, string]
- | [string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string];
+ workers: string[];
}
export interface WorkHubTaskRead {
taskId: string;
@@ -7724,102 +7192,7 @@ export interface AgentAnswerCursor {
offset: number;
}
export interface WorkHubTask {
- /**
- * @maxItems 16
- */
- dependencies?:
- | []
- | [string]
- | [string, string]
- | [string, string, string]
- | [string, string, string, string]
- | [string, string, string, string, string]
- | [string, string, string, string, string, string]
- | [string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string, string, string, string]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ]
- | [
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- string,
- ];
+ dependencies?: string[];
taskId: string;
worker: string;
title: string;
@@ -8555,9 +7928,6 @@ export interface ConnectionCredentialTarget {
};
}
export interface SettingsConnectionEditingFacts {
- /**
- * @maxItems 512
- */
enabledModelIds: string[];
modelOverrides: {
[k: string]: ModelOverride | undefined;
@@ -8921,10 +8291,6 @@ export interface SkillRequestFailure {
request: string;
reason: SkillFailureReason;
}
-export interface SkillOverflowFailure {
- reason: TooManyRequests;
- requestLimit: number;
-}
export interface AgentList {
filter: AgentSessionFilter;
position: AgentSessionPosition;
@@ -8945,9 +8311,6 @@ export interface AgentCreate {
*/
tools?: string[] | null;
title: string;
- /**
- * @maxItems 32
- */
labels: string[];
workspace: AgentWorkspaceSelection;
}
@@ -9407,17 +8770,8 @@ export interface AgentScheduledReminder {
export interface RecallQuery {
/**
* @minItems 1
- * @maxItems 8
*/
- terms:
- | [string]
- | [string, string]
- | [string, string, string]
- | [string, string, string, string]
- | [string, string, string, string, string]
- | [string, string, string, string, string, string]
- | [string, string, string, string, string, string, string]
- | [string, string, string, string, string, string, string, string];
+ terms: [string, ...string[]];
question?: string | null;
limit?: number | null;
session_id?: string | null;
@@ -9566,9 +8920,6 @@ export interface AgentFork {
*/
turnId: string | null;
title: string;
- /**
- * @maxItems 32
- */
labels: string[];
}
export interface AgentForkReceipt {
@@ -9601,9 +8952,6 @@ export interface AgentMetadata {
sessionId: string;
expectedRevision: number;
title: string;
- /**
- * @maxItems 32
- */
labels: string[];
}
export interface AgentPermissionChange {
@@ -9679,170 +9027,7 @@ export interface AgentWatch {
}
export interface AgentPendingInteractions {
revision: number;
- /**
- * @maxItems 16
- */
- entries:
- | []
- | [AgentInteractionSummary]
- | [AgentInteractionSummary, AgentInteractionSummary]
- | [AgentInteractionSummary, AgentInteractionSummary, AgentInteractionSummary]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ]
- | [
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- AgentInteractionSummary,
- ];
+ entries: AgentInteractionSummary[];
}
export interface AgentInteractionSummary {
requestId: string;
@@ -9921,9 +9106,6 @@ export interface QuestionAsk {
}
export interface FormAsk {
message: string;
- /**
- * @maxItems 32
- */
fields: FormField[];
}
/**
@@ -9966,13 +9148,7 @@ export interface WorkspaceProcessConfiguration {
*/
export interface Policy {
default: Access;
- /**
- * @maxItems 512
- */
rules: Rule[];
- /**
- * @maxItems 128
- */
denyGlobs: string[];
}
export interface WorkspacePath {
@@ -10122,9 +9298,6 @@ export interface TerminalController {
export interface TerminalControl {
controller: TerminalController;
sequence: number;
- /**
- * @maxItems 64
- */
actions?: RawAction[];
size?: TerminalSize | null;
}
@@ -10400,8 +9573,6 @@ export interface HistoryTool {
export interface HistoryToolCall {
/**
* Recorded ancestors in this Turn, nearest first; display references only.
- *
- * @maxItems 32
*/
ancestorToolUseIds: string[];
/**
@@ -10443,7 +9614,7 @@ export interface AgentHistorySearch {
*/
after?: HistoryRowPosition | null;
/**
- * Literal query, additionally limited to 512 UTF-8 bytes; no normalization.
+ * Literal query; no normalization.
*/
query: string;
/**
@@ -10476,166 +9647,8 @@ export interface AgentHistorySourceRead {
field: SourceField;
/**
* Optional JSON keys/array indices within arguments, result or receipt.
- *
- * @maxItems 16
*/
- path?:
- | []
- | [HistorySourceSegment]
- | [HistorySourceSegment, HistorySourceSegment]
- | [HistorySourceSegment, HistorySourceSegment, HistorySourceSegment]
- | [HistorySourceSegment, HistorySourceSegment, HistorySourceSegment, HistorySourceSegment]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | null;
+ path?: HistorySourceSegment[] | null;
position: SourcePosition;
}
/**
@@ -10668,166 +9681,8 @@ export interface HistorySource {
field: SourceField;
/**
* Omission reads the encoded field. A selected JSON string is literal text.
- *
- * @maxItems 16
*/
- path?:
- | []
- | [HistorySourceSegment]
- | [HistorySourceSegment, HistorySourceSegment]
- | [HistorySourceSegment, HistorySourceSegment, HistorySourceSegment]
- | [HistorySourceSegment, HistorySourceSegment, HistorySourceSegment, HistorySourceSegment]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | [
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- HistorySourceSegment,
- ]
- | null;
+ path?: HistorySourceSegment[] | null;
format: SourceFormat;
offset: number;
totalBytes: number;
@@ -10876,7 +9731,7 @@ export interface ResourceMetadata {
metadata: unknown;
}
/**
- * Bounded source-to-readable-text conversion using the presenter's Markdown semantics.
+ * Complete source-to-readable-text conversion using the presenter's Markdown semantics.
*/
export interface MarkdownTextInput {
source: string;
diff --git a/packages/plugin-sdk/src/native.ts b/packages/plugin-sdk/src/native.ts
index 529bd838cf..72859d2ece 100644
--- a/packages/plugin-sdk/src/native.ts
+++ b/packages/plugin-sdk/src/native.ts
@@ -92,7 +92,7 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
configuration: {
type: 'object';
additionalProperties: false;
- properties: { path: { type: ['string', 'null']; minLength: 1; maxLength: 4096 } };
+ properties: { path: { type: ['string', 'null']; minLength: 1 } };
title: 'TextFileConfiguration';
$schema: 'https://json-schema.org/draft/2020-12/schema';
};
@@ -128,14 +128,9 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
};
};
minItems: 1;
- maxItems: 32;
};
radius: { type: 'number'; format: 'float'; minimum: 0.01; maximum: 0.2 };
- miters: {
- type: 'array';
- items: { type: 'integer'; format: 'uint'; minimum: 0 };
- maxItems: 32;
- };
+ miters: { type: 'array'; items: { type: 'integer'; format: 'uint'; minimum: 0 } };
columns: { type: 'integer'; format: 'uint'; minimum: 32; maximum: 256 };
};
required: ['paths', 'radius', 'miters', 'columns'];
@@ -258,7 +253,7 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
type: 'object';
additionalProperties: false;
properties: {
- filesystem: { type: 'array'; items: { $ref: '#/$defs/Rule' }; maxItems: 32 };
+ filesystem: { type: 'array'; items: { $ref: '#/$defs/Rule' } };
network: { $ref: '#/$defs/Network' };
};
required: ['filesystem', 'network'];
@@ -293,7 +288,6 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
type: 'array';
uniqueItems: true;
items: { $ref: '#/$defs/Destination' };
- maxItems: 128;
};
};
additionalProperties: false;
@@ -491,7 +485,7 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
configuration: {
type: 'object',
additionalProperties: false,
- properties: { path: { type: ['string', 'null'], minLength: 1, maxLength: 4096 } },
+ properties: { path: { type: ['string', 'null'], minLength: 1 } },
title: 'TextFileConfiguration',
$schema: 'https://json-schema.org/draft/2020-12/schema',
},
@@ -527,14 +521,9 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
},
},
minItems: 1,
- maxItems: 32,
},
radius: { type: 'number', format: 'float', minimum: 0.01, maximum: 0.2 },
- miters: {
- type: 'array',
- items: { type: 'integer', format: 'uint', minimum: 0 },
- maxItems: 32,
- },
+ miters: { type: 'array', items: { type: 'integer', format: 'uint', minimum: 0 } },
columns: { type: 'integer', format: 'uint', minimum: 32, maximum: 256 },
},
required: ['paths', 'radius', 'miters', 'columns'],
@@ -656,7 +645,7 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
type: 'object',
additionalProperties: false,
properties: {
- filesystem: { type: 'array', items: { $ref: '#/$defs/Rule' }, maxItems: 32 },
+ filesystem: { type: 'array', items: { $ref: '#/$defs/Rule' } },
network: { $ref: '#/$defs/Network' },
},
required: ['filesystem', 'network'],
@@ -693,7 +682,6 @@ export const nativeImplementations = /* @__PURE__ */ ((): {
type: 'array',
uniqueItems: true,
items: { $ref: '#/$defs/Destination' },
- maxItems: 128,
},
},
additionalProperties: false,
diff --git a/platform/capabilities/src/authorization.rs b/platform/capabilities/src/authorization.rs
index 41e09f53e0..3fee93dec2 100644
--- a/platform/capabilities/src/authorization.rs
+++ b/platform/capabilities/src/authorization.rs
@@ -86,7 +86,6 @@ pub struct Request {
impl Request {
pub fn validate(&self) -> Result<(), crate::Error> {
if self.title.trim().is_empty()
- || self.title.len() > 256
|| self.title.chars().any(char::is_control)
|| self.capabilities.is_empty()
{
@@ -115,7 +114,6 @@ impl Request {
Target::PluginWorkspace { sandbox_mode } => self.validate_mode(*sandbox_mode)?,
Target::Directory { path } => {
if path.is_empty()
- || path.len() > 32 * 1024
|| path.contains('\0')
|| self.capabilities.iter().any(|capability| {
!matches!(capability, Capability::ReadFiles | Capability::WriteFiles)
@@ -133,7 +131,7 @@ impl Request {
match workspace {
WorkspaceTarget::Project { project_id } => crate::name(project_id)?,
WorkspaceTarget::HostPath { path }
- if !path.is_empty() && path.len() <= 32 * 1024 && !path.contains('\0') => {}
+ if !path.is_empty() && !path.contains('\0') => {}
_ => {
return Err(crate::Error::Invalid(
"invalid authorization workspace".into(),
@@ -305,11 +303,7 @@ pub struct SessionBoundary {
impl SessionBoundary {
pub fn validate(&self) -> Result<(), Error> {
name(&self.session_id)?;
- if self.boundary_revision >= (1 << 53)
- || self.cwd.is_empty()
- || self.cwd.len() > 32 * 1024
- || self.cwd.contains('\0')
- {
+ if self.boundary_revision >= (1 << 53) || self.cwd.is_empty() || self.cwd.contains('\0') {
return Err(Error::Invalid("invalid Session execution boundary".into()));
}
Ok(())
diff --git a/platform/capabilities/src/call/resources.rs b/platform/capabilities/src/call/resources.rs
index 7b7cc300b3..bd9963f07e 100644
--- a/platform/capabilities/src/call/resources.rs
+++ b/platform/capabilities/src/call/resources.rs
@@ -60,10 +60,8 @@ impl Resources {
}
pub fn reserve(self: &Arc<Self>) -> Result<Ticket, ToolError> {
let state = self.state.lock().unwrap();
- if state.closed || self.tasks.len() >= 16 {
- return Err(ToolError::Failed(
- "invocation resources closed or full".into(),
- ));
+ if state.closed {
+ return Err(ToolError::Failed("invocation resources closed".into()));
}
Ok(Ticket {
group: self.clone(),
diff --git a/platform/capabilities/src/credentials.rs b/platform/capabilities/src/credentials.rs
index 124723d262..f993560cbc 100644
--- a/platform/capabilities/src/credentials.rs
+++ b/platform/capabilities/src/credentials.rs
@@ -43,14 +43,8 @@ impl Write {
if self
.expected_revision
.is_some_and(|value| value == 0 || value >= (1 << 53) - 1)
- || self
- .secret
- .as_ref()
- .is_some_and(|value| value.len() > 64 * 1024)
{
- return Err(crate::Error::Invalid(
- "credential revision or value exceeds its limit".into(),
- ));
+ return Err(crate::Error::Invalid("invalid credential revision".into()));
}
Ok(())
}
diff --git a/platform/capabilities/src/filesystem/database.rs b/platform/capabilities/src/filesystem/database.rs
index e3cbaa9beb..676e3936f6 100644
--- a/platform/capabilities/src/filesystem/database.rs
+++ b/platform/capabilities/src/filesystem/database.rs
@@ -22,8 +22,6 @@
pub mod query;
use serde::{Deserialize, Serialize};
-pub const MAX_BYTES: usize = 64 * 1024 * 1024;
-pub const MAX_ROWS: usize = 250_000;
#[derive(Deserialize, Serialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -57,13 +55,6 @@ pub struct Table {
pub columns: Vec<String>,
pub rows: Vec<Vec<Cell>>,
}
-#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
-#[serde(rename_all = "snake_case")]
-pub enum Limit {
- Rows,
- Bytes,
- Work,
-}
#[derive(Debug, thiserror::Error)]
pub enum Error {
@@ -77,36 +68,25 @@ pub enum Error {
NotFound,
#[error("invalid database read: {0}")]
Invalid(String),
- #[error("database read limit exceeded: {0:?}")]
- Limit(Limit),
#[error("database read failed: {0}")]
Unavailable(String),
}
impl Read {
pub fn validate(&self) -> Result<(), Error> {
if self.path.is_empty()
- || self.path.len() > 32 * 1024
|| self.path.contains('\0')
|| !std::path::Path::new(&self.path).is_absolute()
|| self.queries.is_empty()
- || self.queries.len() > 16
|| self.queries.iter().any(|query| {
query.sql.trim().is_empty()
|| query.sql.contains('\0')
- || query.parameters.len() > 128
|| query
.parameters
.iter()
.any(|value| matches!(value, Cell::Real(number) if !number.is_finite()))
})
- || serde_json::to_vec(self)
- .map_err(|error| Error::Invalid(error.to_string()))?
- .len()
- > 128 * 1024
{
- return Err(Error::Invalid(
- "invalid path, queries or input budget".into(),
- ));
+ return Err(Error::Invalid("invalid path or queries".into()));
}
Ok(())
}
diff --git a/platform/capabilities/src/filesystem/database/query.rs b/platform/capabilities/src/filesystem/database/query.rs
index ea3c442d10..1350a04b14 100644
--- a/platform/capabilities/src/filesystem/database/query.rs
+++ b/platform/capabilities/src/filesystem/database/query.rs
@@ -17,7 +17,7 @@
* under the License.
*/
-use super::{Cell, Error, Limit, MAX_BYTES, MAX_ROWS, Query, Table};
+use super::{Cell, Error, Query, Table};
use rusqlite::{
Connection, OpenFlags,
fallible_iterator::FallibleIterator,
@@ -25,14 +25,7 @@ use rusqlite::{
limits::Limit as SqlLimit,
types::{ToSqlOutput, ValueRef},
};
-use std::{
- path::Path,
- sync::{
- Arc,
- atomic::{AtomicBool, Ordering},
- },
- time::{Duration, Instant},
-};
+use std::{path::Path, time::Duration};
use tokio_util::sync::CancellationToken;
/// Reads a trusted, already authorized pathname. The embedding must retain its
@@ -42,27 +35,6 @@ pub fn read(
queries: Vec<Query>,
cancelled: &CancellationToken,
stopping: &CancellationToken,
-) -> Result<Vec<Table>, Error> {
- read_with_limits(path, queries, cancelled, stopping, true)
-}
-
-/// Local native imports do not serialize the snapshot through a plugin wire frame.
-/// Read the complete selected history, retaining read-only policy and cancellation.
-pub fn read_import(
- path: &Path,
- queries: Vec<Query>,
- cancelled: &CancellationToken,
- stopping: &CancellationToken,
-) -> Result<Vec<Table>, Error> {
- read_with_limits(path, queries, cancelled, stopping, false)
-}
-
-fn read_with_limits(
- path: &Path,
- queries: Vec<Query>,
- cancelled: &CancellationToken,
- stopping: &CancellationToken,
- bounded: bool,
) -> Result<Vec<Table>, Error> {
if cancelled.is_cancelled() || stopping.is_cancelled() {
return Err(Error::Cancelled);
@@ -74,7 +46,7 @@ fn read_with_limits(
| OpenFlags::SQLITE_OPEN_NOFOLLOW,
)
.map_err(failed)?;
- read_connection(connection, queries, cancelled, stopping, bounded)
+ read_connection(connection, queries, cancelled, stopping)
}
fn read_connection(
@@ -82,7 +54,6 @@ fn read_connection(
queries: Vec<Query>,
cancelled: &CancellationToken,
stopping: &CancellationToken,
- bounded: bool,
) -> Result<Vec<Table>, Error> {
connection
.busy_timeout(Duration::from_millis(250))
@@ -99,59 +70,27 @@ fn read_connection(
connection
.pragma_update(None, "cache_size", -2048)
.map_err(failed)?;
- for (limit, value) in [
- (SqlLimit::SQLITE_LIMIT_LENGTH, 8 * 1024 * 1024),
- (SqlLimit::SQLITE_LIMIT_SQL_LENGTH, 128 * 1024),
- (SqlLimit::SQLITE_LIMIT_COLUMN, 32),
- (SqlLimit::SQLITE_LIMIT_EXPR_DEPTH, 32),
- (SqlLimit::SQLITE_LIMIT_FUNCTION_ARG, 16),
- (SqlLimit::SQLITE_LIMIT_LIKE_PATTERN_LENGTH, 1024),
- (SqlLimit::SQLITE_LIMIT_COMPOUND_SELECT, 32),
- (SqlLimit::SQLITE_LIMIT_VARIABLE_NUMBER, 128),
- (SqlLimit::SQLITE_LIMIT_ATTACHED, 0),
- ] {
- if bounded {
- connection.set_limit(limit, value).map_err(failed)?;
- }
- }
- let deadline = Instant::now() + Duration::from_secs(30);
- let exhausted = Arc::new(AtomicBool::new(false));
- let work_exhausted = exhausted.clone();
+ // Data shape uses SQLite's physical defaults. ATTACH remains forbidden.
+ connection
+ .set_limit(SqlLimit::SQLITE_LIMIT_ATTACHED, 0)
+ .map_err(failed)?;
let abort = cancelled.clone();
let retired = stopping.clone();
- let mut work = 0_u64;
connection
.progress_handler(
1000,
- Some(move || {
- work += 1000;
- if bounded && (work >= 50_000_000 || Instant::now() >= deadline) {
- work_exhausted.store(true, Ordering::Relaxed);
- }
- abort.is_cancelled()
- || retired.is_cancelled()
- || work_exhausted.load(Ordering::Relaxed)
- }),
+ Some(move || abort.is_cancelled() || retired.is_cancelled()),
)
.map_err(failed)?;
connection.execute_batch("BEGIN DEFERRED").map_err(failed)?;
connection.authorizer(Some(authorize)).map_err(failed)?;
- let result = collect(
- &connection,
- queries,
- cancelled,
- stopping,
- bounded.then_some(deadline),
- );
+ let result = collect(&connection, queries, cancelled, stopping);
// Closing the connection releases the read transaction even after a rejected
// statement. Never send user SQL a COMMIT/ROLLBACK or control hook capability.
let closed = connection.close().map_err(|(_, error)| failed(error));
if cancelled.is_cancelled() || stopping.is_cancelled() {
return Err(Error::Cancelled);
}
- if bounded && (exhausted.load(Ordering::Relaxed) || Instant::now() >= deadline) {
- return Err(Error::Limit(Limit::Work));
- }
closed?;
result
}
@@ -218,21 +157,12 @@ fn collect(
queries: Vec<Query>,
cancelled: &CancellationToken,
stopping: &CancellationToken,
- deadline: Option<Instant>,
) -> Result<Vec<Table>, Error> {
let mut tables = Vec::new();
- let mut budget = Budget {
- bytes: 2,
- bounded: deadline.is_some(),
- };
- let mut count = 0;
for query in queries {
if cancelled.is_cancelled() || stopping.is_cancelled() {
return Err(Error::Cancelled);
}
- if deadline.is_some_and(|deadline| Instant::now() >= deadline) {
- return Err(Error::Limit(Limit::Work));
- }
// Batch rejects additional statements instead of silently executing a prefix.
let mut statements = rusqlite::Batch::new(connection, &query.sql);
let mut statement = statements
@@ -252,8 +182,6 @@ fn collect(
.iter()
.map(|column| (*column).into())
.collect();
- budget.add(&columns)?;
- budget.reserve(32)?;
let parameters = query.parameters.iter().map(Parameter).collect::<Vec<_>>();
let mut rows = statement
.query(rusqlite::params_from_iter(parameters.iter()))
@@ -263,25 +191,9 @@ fn collect(
if cancelled.is_cancelled() || stopping.is_cancelled() {
return Err(Error::Cancelled);
}
- if deadline.is_some_and(|deadline| Instant::now() >= deadline) {
- return Err(Error::Limit(Limit::Work));
- }
- count += 1;
- if deadline.is_some() && count > MAX_ROWS {
- return Err(Error::Limit(Limit::Rows));
- }
- budget.reserve(3)?; // Row brackets and separator.
let mut value = Vec::with_capacity(columns.len());
for index in 0..columns.len() {
let field = row.get_ref(index).map_err(failed)?;
- // Check borrowed payloads before allocating; do not materialize an
- // entire oversized row before discovering the output limit.
- if let ValueRef::Text(bytes) | ValueRef::Blob(bytes) = field
- && budget.bounded
- && bytes.len() > MAX_BYTES.saturating_sub(budget.bytes)
- {
- return Err(Error::Limit(Limit::Bytes));
- }
let cell = match field {
ValueRef::Null => Cell::Null,
ValueRef::Integer(value) => Cell::Integer(value),
@@ -296,7 +208,6 @@ fn collect(
),
ValueRef::Blob(bytes) => Cell::Blob(bytes.into()),
};
- budget.add(&cell)?;
value.push(cell);
}
values.push(value);
@@ -320,38 +231,6 @@ impl rusqlite::ToSql for Parameter<'_> {
}))
}
}
-struct Budget {
- bytes: usize,
- bounded: bool,
-}
-impl Budget {
- fn reserve(&mut self, bytes: usize) -> Result<(), Error> {
- if self.bounded && bytes > MAX_BYTES.saturating_sub(self.bytes) {
- return Err(Error::Limit(Limit::Bytes));
- }
- self.bytes += bytes;
- Ok(())
- }
- fn add(&mut self, value: &impl serde::Serialize) -> Result<(), Error> {
- if !self.bounded {
- return Ok(());
- }
- serde_json::to_writer(&mut *self, value).map_err(|_| Error::Limit(Limit::Bytes))?;
- self.reserve(1)
- }
-}
-impl std::io::Write for Budget {
- fn write(&mut self, bytes: &[u8]) -> std::io::Result<usize> {
- if self.bounded && bytes.len() > MAX_BYTES.saturating_sub(self.bytes) {
- return Err(std::io::Error::other("database result byte limit"));
- }
- self.bytes += bytes.len();
- Ok(bytes.len())
- }
- fn flush(&mut self) -> std::io::Result<()> {
- Ok(())
- }
-}
fn failed(error: rusqlite::Error) -> Error {
match error.sqlite_error_code() {
Some(
@@ -360,7 +239,6 @@ fn failed(error: rusqlite::Error) -> Error {
Some(rusqlite::ErrorCode::DatabaseBusy | rusqlite::ErrorCode::DatabaseLocked) => {
Error::Busy
}
- Some(rusqlite::ErrorCode::TooBig) => Error::Limit(Limit::Bytes),
_ => Error::Unavailable(error.to_string()),
}
}
@@ -375,7 +253,7 @@ mod tests {
}
}
#[test]
- fn wal_snapshot_covers_the_batch_and_policy_denies_mutation_and_unbounded_work() {
+ fn wal_snapshot_covers_the_batch_and_policy_denies_mutation() {
let directory = tempfile::tempdir().unwrap();
let path = directory
.path()
@@ -412,7 +290,6 @@ mod tests {
],
&cancelled,
&retired,
- true,
)
.unwrap();
assert_eq!(tables[0].rows, [vec![Cell::Integer(1)]]);
@@ -459,27 +336,14 @@ mod tests {
writer
.execute("INSERT INTO oversized VALUES(?1)", [vec![0_u8; 9_000_000]])
.unwrap();
- let oversized = read(
+ let tables = read(
&path,
vec![query("SELECT payload FROM oversized")],
&cancelled,
&retired,
- );
- assert!(
- matches!(oversized, Err(Error::Limit(Limit::Bytes))),
- "{oversized:?}"
- );
- assert!(matches!(
- read(
- &path,
- vec![query(
- "WITH RECURSIVE n(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM n) SELECT sum(x) FROM n"
- )],
- &cancelled,
- &retired
- ),
- Err(Error::Limit(Limit::Work))
- ));
+ )
+ .unwrap();
+ assert_eq!(tables[0].rows, [vec![Cell::Blob(vec![0; 9_000_000])]]);
cancelled.cancel();
assert!(matches!(
read(&path, vec![query("SELECT 1")], &cancelled, &retired),
@@ -495,4 +359,124 @@ mod tests {
.execute_batch("PRAGMA wal_checkpoint(TRUNCATE)")
.unwrap();
}
+ #[test]
+ fn complete_request_preserves_many_queries_parameters_columns_and_large_text() {
+ let directory = tempfile::tempdir().unwrap();
+ let path = directory
+ .path()
+ .canonicalize()
+ .unwrap()
+ .join("complete.sqlite");
+ Connection::open(&path)
+ .unwrap()
+ .execute_batch("CREATE TABLE source(value)")
+ .unwrap();
+ let original = "complete evidence 🦀\n".repeat(10000);
+ let mut parameters = vec![Cell::Text(original.clone())];
+ parameters.extend((2..=129).map(Cell::Integer));
+ let mut queries = vec![Query {
+ sql: format!(
+ "SELECT {}",
+ (1..=129)
+ .map(|index| format!("?{index}"))
+ .collect::<Vec<_>>()
+ .join(",")
+ ),
+ parameters,
+ }];
+ queries.extend((1..=16).map(|value| query(&format!("SELECT {value}"))));
+ let request = super::super::Read {
+ path: path.to_string_lossy().into(),
+ queries,
+ };
+ request.validate().unwrap();
+ let tables = read(
+ &path,
+ request.queries,
+ &CancellationToken::new(),
+ &CancellationToken::new(),
+ )
+ .unwrap();
+ assert_eq!(tables.len(), 17);
+ assert_eq!(tables[0].columns.len(), 129);
+ assert_eq!(tables[0].rows[0][0], Cell::Text(original));
+ assert_eq!(tables[0].rows[0][128], Cell::Integer(129));
+ assert_eq!(tables[16].rows, [vec![Cell::Integer(16)]]);
+ }
+
+ #[test]
+ fn active_query_cancellation_and_stopping_release_the_snapshot() {
+ use std::sync::{
+ Arc,
+ atomic::{AtomicI64, Ordering},
+ };
+ let directory = tempfile::tempdir().unwrap();
+ let path = directory
+ .path()
+ .canonicalize()
+ .unwrap()
+ .join("cancel.sqlite");
+ let writer = Connection::open(&path).unwrap();
+ writer
+ .execute_batch("PRAGMA journal_mode=WAL; CREATE TABLE source(value)")
+ .unwrap();
+ for stop_owner in [false, true] {
+ let cancelled = CancellationToken::new();
+ let stopping = CancellationToken::new();
+ let abort = if stop_owner {
+ stopping.clone()
+ } else {
+ cancelled.clone()
+ };
+ let visited = Arc::new(AtomicI64::new(0));
+ let observed = visited.clone();
+ let reader =
+ Connection::open_with_flags(&path, OpenFlags::SQLITE_OPEN_READ_ONLY).unwrap();
+ reader
+ .create_scalar_function(
+ "length",
+ 1,
+ rusqlite::functions::FunctionFlags::SQLITE_UTF8,
+ move |context| {
+ let value = context.get::<i64>(0)?;
+ observed.store(value, Ordering::Relaxed);
+ if value == 2000 {
+ abort.cancel();
+ }
+ Ok(value)
+ },
+ )
+ .unwrap();
+ let result = read_connection(
+ reader,
+ vec![query(
+ "WITH RECURSIVE n(x) AS (VALUES(1) UNION ALL SELECT length(x+1) FROM n WHERE x<1000000) SELECT sum(x) FROM n",
+ )],
+ &cancelled,
+ &stopping,
+ );
+ assert!(matches!(result, Err(Error::Cancelled)));
+ let stopped_at = visited.load(Ordering::Relaxed);
+ assert!(
+ (2000..1000000).contains(&stopped_at),
+ "progress hook did not stop the active query: {stopped_at}"
+ );
+ writer
+ .execute(
+ "INSERT INTO source VALUES(?1)",
+ [if stop_owner { 2 } else { 1 }],
+ )
+ .unwrap();
+ writer
+ .execute_batch("PRAGMA wal_checkpoint(TRUNCATE)")
+ .unwrap();
+ }
+ assert_eq!(
+ writer
+ .query_row("SELECT sum(value) FROM source", [], |row| row
+ .get::<_, i64>(0))
+ .unwrap(),
+ 3
+ );
+ }
}
diff --git a/platform/capabilities/src/filesystem/entries.rs b/platform/capabilities/src/filesystem/entries.rs
index 42c535b84a..610caff269 100644
--- a/platform/capabilities/src/filesystem/entries.rs
+++ b/platform/capabilities/src/filesystem/entries.rs
@@ -326,29 +326,47 @@ impl Directory {
fn read(root: &Dir, input: ReadFile, cancellation: &CancellationToken) -> Result<FilePage, Error> {
path(&input.path)?;
- if input.limit == 0 || input.limit > CHUNK || input.offset > MAX_OFFSET {
+ if input.limit == 0 || input.offset > MAX_OFFSET {
return Err(Error::Invalid("invalid read range".into()));
}
let (parent, name) = parent(root, &input.path)?;
let mut file = parent.open_with(name, options().read(true))?;
- if !file.metadata()?.is_file() {
+ let metadata = file.metadata()?;
+ if !metadata.is_file() {
return Err(Error::Invalid("expected a regular file".into()));
}
file.seek(SeekFrom::Start(input.offset))?;
+ let remaining = metadata.len().saturating_sub(input.offset);
+ let extent = remaining.min(u64::try_from(input.limit).unwrap_or(u64::MAX));
+ let mut reader = file.take(extent);
let mut bytes = Vec::new();
- let mut file = file.take(input.limit as u64 + 1);
let mut buffer = [0_u8; 16 * 1024];
- loop {
+ while reader.limit() != 0 {
check(cancellation)?;
- let count = file.read(&mut buffer)?;
+ let count = reader.read(&mut buffer)?;
if count == 0 {
- break;
+ return Err(std::io::Error::new(
+ std::io::ErrorKind::UnexpectedEof,
+ "file changed within its captured read extent",
+ )
+ .into());
}
+ bytes.try_reserve(count).map_err(std::io::Error::other)?;
bytes.extend_from_slice(&buffer[..count]);
}
- let next_offset = (bytes.len() > input.limit).then_some(input.offset + input.limit as u64);
- bytes.truncate(input.limit);
+ check(cancellation)?;
+ let next_offset = if remaining > extent {
+ Some(
+ input
+ .offset
+ .checked_add(extent)
+ .filter(|offset| *offset <= MAX_OFFSET)
+ .ok_or_else(|| Error::Invalid("read offset cannot be represented".into()))?,
+ )
+ } else {
+ None
+ };
Ok(FilePage { bytes, next_offset })
}
@@ -413,10 +431,7 @@ fn list(
if !input.path.is_empty() {
path(&input.path)?;
}
- if input.limit == 0
- || input.limit > 1024
- || input.after.as_ref().is_some_and(|s| s.len() > 4096)
- {
+ if input.limit == 0 || input.limit > 1024 {
return Err(Error::Invalid("invalid directory page limit".into()));
}
@@ -583,7 +598,6 @@ pub fn validate_path(value: &str) -> Result<(), Error> {
fn path(value: &str) -> Result<(), Error> {
if value.is_empty()
- || value.len() > 4096
|| value.chars().any(char::is_control)
|| value.contains(['\\', ':', '*', '?', '"', '<', '>', '|'])
|| value
diff --git a/platform/capabilities/src/filesystem/read.rs b/platform/capabilities/src/filesystem/read.rs
index 1288d04470..c7fcee81b8 100644
--- a/platform/capabilities/src/filesystem/read.rs
+++ b/platform/capabilities/src/filesystem/read.rs
@@ -93,8 +93,6 @@ pub enum ReadError {
Retired,
#[error("invalid read operation: {0}")]
Invalid(String),
- #[error("directory scan exceeds {max} entries per read batch")]
- ScanLimit { max: u64 },
#[error(transparent)]
Io(#[from] io::Error),
}
@@ -332,24 +330,41 @@ impl Reader<'_> {
file: input,
symlinks,
} = input.into();
- if input.limit == 0 || input.limit > 1024 * 1024 || input.offset > (1_u64 << 53) - 1 {
+ if input.limit == 0 || input.offset > (1_u64 << 53) - 1 {
return Err(invalid("invalid read range"));
}
- let (mut file, _) = self.open(&input.path, symlinks)?;
+ let (mut file, metadata) = self.open(&input.path, symlinks)?;
file.seek(SeekFrom::Start(input.offset))?;
+ let remaining = metadata.len().saturating_sub(input.offset);
+ let extent = remaining.min(u64::try_from(input.limit).unwrap_or(u64::MAX));
+ let mut reader = file.take(extent);
let mut bytes = Vec::new();
- let mut reader = file.take(input.limit as u64 + 1);
let mut chunk = [0; 8192];
- loop {
+ while reader.limit() != 0 {
self.check()?;
let count = reader.read(&mut chunk)?;
if count == 0 {
- break;
+ return Err(std::io::Error::new(
+ std::io::ErrorKind::UnexpectedEof,
+ "file changed within its captured read extent",
+ )
+ .into());
}
+ bytes.try_reserve(count).map_err(std::io::Error::other)?;
bytes.extend_from_slice(&chunk[..count]);
}
- let next_offset = (bytes.len() > input.limit).then_some(input.offset + input.limit as u64);
- bytes.truncate(input.limit);
+ self.check()?;
+ let next_offset = if remaining > extent {
+ Some(
+ input
+ .offset
+ .checked_add(extent)
+ .filter(|offset| *offset < (1_u64 << 53))
+ .ok_or_else(|| invalid("read offset cannot be represented"))?,
+ )
+ } else {
+ None
+ };
Ok(FilePage { bytes, next_offset })
}
@@ -398,10 +413,7 @@ impl Reader<'_> {
files: input,
symlinks,
} = input.into();
- if input.limit == 0
- || input.limit > 1024
- || input.after.as_ref().is_some_and(|s| s.len() > 4096)
- {
+ if input.limit == 0 || input.limit > 1024 {
return Err(invalid("invalid directory page"));
}
let mut entries = BTreeMap::new();
@@ -491,7 +503,6 @@ impl Reader<'_> {
}
fn relative(path: &str) -> Result<(), ReadError> {
if path.is_empty()
- || path.len() > 4096
|| path.chars().any(char::is_control)
|| path.contains(['\\', ':'])
|| Path::new(path)
diff --git a/platform/capabilities/src/lib.rs b/platform/capabilities/src/lib.rs
index 505d37df19..e7bde2ba42 100644
--- a/platform/capabilities/src/lib.rs
+++ b/platform/capabilities/src/lib.rs
@@ -41,10 +41,7 @@ pub enum Error {
}
pub fn name(value: &str) -> Result<(), Error> {
- if value.is_empty()
- || value.len() > 256
- || value.chars().any(|c| c.is_control() || c.is_whitespace())
- {
+ if value.is_empty() || value.chars().any(|c| c.is_control() || c.is_whitespace()) {
return Err(Error::Invalid(format!("invalid identifier: {value:?}")));
}
Ok(())
diff --git a/platform/capabilities/src/process.rs b/platform/capabilities/src/process.rs
index 8368665289..cebfbe0cef 100644
--- a/platform/capabilities/src/process.rs
+++ b/platform/capabilities/src/process.rs
@@ -43,12 +43,6 @@ pub struct Command {
impl Command {
pub fn validate(&self) -> Result<(), Error> {
if !std::path::Path::new(&self.executable).is_absolute()
- || self.args.len() > 256
- || self.env.len() > 128
- || serde_json::to_vec(&(&self.executable, &self.args, &self.env))
- .map_err(|e| Error::Invalid(e.to_string()))?
- .len()
- > 64 * 1024
|| self.executable.contains('\0')
|| self.args.iter().any(|arg| arg.contains('\0'))
|| self.env.iter().any(|(key, value)| {
diff --git a/platform/capabilities/src/storage.rs b/platform/capabilities/src/storage.rs
index a68202ec9d..97e43574e9 100644
--- a/platform/capabilities/src/storage.rs
+++ b/platform/capabilities/src/storage.rs
@@ -25,14 +25,7 @@ use serde_json::Value;
mod directory;
pub use directory::{Directories, Directory};
-pub const MAX_KEY_BYTES: usize = 1024;
-pub const MAX_VALUE_BYTES: usize = 1024 * 1024;
-pub const MAX_MUTATIONS: usize = 128;
-pub const MAX_BATCH_BYTES: usize = 16 * 1024 * 1024;
pub const MAX_PAGE_BYTES: usize = 2 * 1024 * 1024;
-/// Data budget plus escaped keys, revisions and request/response envelopes.
-pub const MAX_BATCH_WIRE_BYTES: usize =
- MAX_BATCH_BYTES + MAX_MUTATIONS * (2 * MAX_KEY_BYTES + 128) + 1024;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Namespace {
@@ -140,19 +133,12 @@ impl Mutation {
{
return Err(Error::Invalid("invalid plugin data revision".into()));
}
- if serde_json::to_vec(&self.data)
- .map_err(|error| Error::Invalid(error.to_string()))?
- .len()
- > MAX_VALUE_BYTES
- {
- return Err(Error::Invalid("plugin data value exceeds 1 MiB".into()));
- }
Ok(())
}
}
pub fn validate_key(key: &str) -> Result<(), Error> {
- if key.is_empty() || key.len() > MAX_KEY_BYTES || key.chars().any(char::is_control) {
+ if key.is_empty() || key.chars().any(char::is_control) {
return Err(Error::Invalid("invalid plugin storage key".into()));
}
Ok(())
@@ -179,7 +165,7 @@ pub trait Store: Send + Sync {
&self,
key: String,
) -> futures_util::future::BoxFuture<'_, Result<Option<Record>, StoreError>>;
- /// Atomic CAS of up to 128 values, 1 MiB per value and 16 MiB total data.
+ /// Atomic CAS of the complete selected mutation set.
fn batch(
&self,
mutations: Vec<Mutation>,
diff --git a/platform/computer-use/src/browser.rs b/platform/computer-use/src/browser.rs
index d70baf6601..bd69591959 100644
--- a/platform/computer-use/src/browser.rs
+++ b/platform/computer-use/src/browser.rs
@@ -101,7 +101,7 @@ impl Cdp {
Duration::from_secs(10),
cua_driver_core::browser::cdp_ws::CdpConnection::connect_bounded(
url.as_str(),
- 16 * 1024 * 1024,
+ usize::MAX,
),
)
.await
@@ -159,17 +159,8 @@ async fn http(provider: &BrowserConnection, path: &str) -> Result<Value, ToolErr
.map_err(failed)?
.error_for_status()
.map_err(failed)?;
- if response
- .content_length()
- .is_some_and(|size| size > 1024 * 1024)
- {
- return Err(failed("browser inventory exceeds limit"));
- }
let mut bytes = Vec::new();
while let Some(chunk) = response.chunk().await.map_err(failed)? {
- if bytes.len() + chunk.len() > 1024 * 1024 {
- return Err(failed("browser inventory exceeds limit"));
- }
bytes.extend_from_slice(&chunk);
}
serde_json::from_slice(&bytes).map_err(failed)
@@ -706,14 +697,7 @@ impl Tab {
Language::ZhCn => "标签页",
Language::ZhTw => "分頁",
};
- let mut state = format!("{label} {}: {}\n{body}", self.info.id, self.info.url);
- if nodes.len() > 2000 {
- state.push_str(match language {
- Language::En => "\nAccessibility tree truncated at 2000 nodes.",
- Language::ZhCn => "\n无障碍树已在 2000 个节点处截断。",
- Language::ZhTw => "\n輔助使用樹已在 2000 個節點處截斷。",
- });
- }
+ let state = format!("{label} {}: {}\n{body}", self.info.id, self.info.url);
value["state"] = json!(state);
self.previous = Some(full);
} else {
diff --git a/platform/computer-use/src/browser/ax.rs b/platform/computer-use/src/browser/ax.rs
index ab8decd1ee..8cbbeb74dd 100644
--- a/platform/computer-use/src/browser/ax.rs
+++ b/platform/computer-use/src/browser/ax.rs
@@ -44,7 +44,6 @@ impl Projection {
}
let nodes: HashMap<&str, &Value> = nodes
.iter()
- .take(2000)
.filter_map(|node| Some((node["nodeId"].as_str()?, node)))
.collect();
let mut walk = Walk {
@@ -90,102 +89,105 @@ impl<'a> Walk<'a> {
&mut self,
id: &'a str,
depth: usize,
- parent_name: &str,
+ parent_name: &'a str,
language: Language,
) -> Result<(), ToolError> {
- if depth > 60 || !self.seen.insert(id) {
- return Ok(());
- }
- let Some(node) = self.nodes.get(id).copied() else {
- return Ok(());
- };
- let role = node["role"]["value"].as_str().unwrap_or("unknown");
- if role == "InlineTextBox" {
- return Ok(());
- }
- let name = node["name"]["value"].as_str().unwrap_or("");
- let content = &node["value"]["value"];
- let transparent = node["ignored"] == true
- || (matches!(role, "generic" | "none" | "LabelText")
- && name.is_empty()
- && node["actions"].as_array().is_none_or(Vec::is_empty))
- || (role == "StaticText" && !name.is_empty() && name == parent_name);
- let mut child_depth = depth;
- if !transparent {
- let scope = node["makaFrame"]
- .get("id")
- .and_then(Value::as_str)
- .unwrap_or("");
- let loader = node["makaFrame"]
- .get("loader")
- .and_then(Value::as_str)
- .unwrap_or("");
- let identity = node["backendDOMNodeId"]
- .as_u64()
- .map(|id| format!("{scope}:{loader}:dom:{id}"))
- .unwrap_or_else(|| format!("ax:{id}"));
- let index = if let Some(index) = self.projection.indices.get(&identity) {
- *index
- } else {
- let index = self.projection.next;
- self.projection.next = index
- .checked_add(1)
- .filter(|next| *next <= 9_007_199_254_740_991)
- .ok_or_else(|| {
- failed(match language {
- Language::En => "accessibility index limit reached; reset Cua",
- Language::ZhCn => "无障碍索引数已达上限;请重置 Cua",
- Language::ZhTw => "輔助使用索引數已達上限;請重設 Cua",
- })
- })?;
- self.projection.indices.insert(identity.clone(), index);
- index
- };
- self.retained.insert(identity);
- if let Some(backend) = node["backendDOMNodeId"].as_u64() {
- self.refs.insert(
- index,
- ElementRef {
- backend,
- frame: serde_json::from_value(node["makaFrame"].clone()).ok(),
- },
- );
- }
- let mut row = format!("{}{index} {role} {}", " ".repeat(depth), json!(name));
- if !content.is_null() && content != "" {
- row.push_str(&format!(" value={content}"));
+ let mut pending = vec![(id, depth, parent_name)];
+ while let Some((id, depth, parent_name)) = pending.pop() {
+ if !self.seen.insert(id) {
+ continue;
}
- if let Some(actions) = node
- .get("actions")
- .filter(|value| value.as_array().is_some_and(|actions| !actions.is_empty()))
- {
- row.push_str(&format!(" actions={actions}"));
+ let Some(node) = self.nodes.get(id).copied() else {
+ continue;
+ };
+ let role = node["role"]["value"].as_str().unwrap_or("unknown");
+ if role == "InlineTextBox" {
+ continue;
}
- if let Some(properties) = node["properties"].as_array() {
- for property in properties {
- let key = property["name"].as_str().unwrap_or("");
- let value = &property["value"]["value"];
- match key {
- "disabled" | "focused" | "readonly" | "required" | "busy"
- if value == true =>
- {
- row.push_str(&format!(" [{key}]"));
- }
- "checked" | "selected" | "expanded" if !value.is_null() => {
- row.push_str(&format!(" [{key}={value}]"));
+ let name = node["name"]["value"].as_str().unwrap_or("");
+ let content = &node["value"]["value"];
+ let transparent = node["ignored"] == true
+ || (matches!(role, "generic" | "none" | "LabelText")
+ && name.is_empty()
+ && node["actions"].as_array().is_none_or(Vec::is_empty))
+ || (role == "StaticText" && !name.is_empty() && name == parent_name);
+ let mut child_depth = depth;
+ if !transparent {
+ let scope = node["makaFrame"]
+ .get("id")
+ .and_then(Value::as_str)
+ .unwrap_or("");
+ let loader = node["makaFrame"]
+ .get("loader")
+ .and_then(Value::as_str)
+ .unwrap_or("");
+ let identity = node["backendDOMNodeId"]
+ .as_u64()
+ .map(|id| format!("{scope}:{loader}:dom:{id}"))
+ .unwrap_or_else(|| format!("ax:{id}"));
+ let index = if let Some(index) = self.projection.indices.get(&identity) {
+ *index
+ } else {
+ let index = self.projection.next;
+ self.projection.next = index
+ .checked_add(1)
+ .filter(|next| *next <= 9_007_199_254_740_991)
+ .ok_or_else(|| {
+ failed(match language {
+ Language::En => "accessibility index limit reached; reset Cua",
+ Language::ZhCn => "无障碍索引数已达上限;请重置 Cua",
+ Language::ZhTw => "輔助使用索引數已達上限;請重設 Cua",
+ })
+ })?;
+ self.projection.indices.insert(identity.clone(), index);
+ index
+ };
+ self.retained.insert(identity);
+ if let Some(backend) = node["backendDOMNodeId"].as_u64() {
+ self.refs.insert(
+ index,
+ ElementRef {
+ backend,
+ frame: serde_json::from_value(node["makaFrame"].clone()).ok(),
+ },
+ );
+ }
+ let mut row = format!("{}{index} {role} {}", " ".repeat(depth), json!(name));
+ if !content.is_null() && content != "" {
+ row.push_str(&format!(" value={content}"));
+ }
+ if let Some(actions) = node
+ .get("actions")
+ .filter(|value| value.as_array().is_some_and(|actions| !actions.is_empty()))
+ {
+ row.push_str(&format!(" actions={actions}"));
+ }
+ if let Some(properties) = node["properties"].as_array() {
+ for property in properties {
+ let key = property["name"].as_str().unwrap_or("");
+ let value = &property["value"]["value"];
+ match key {
+ "disabled" | "focused" | "readonly" | "required" | "busy"
+ if value == true =>
+ {
+ row.push_str(&format!(" [{key}]"));
+ }
+ "checked" | "selected" | "expanded" if !value.is_null() => {
+ row.push_str(&format!(" [{key}={value}]"));
+ }
+ _ => {}
}
- _ => {}
}
}
+ self.rows.push(row);
+ child_depth += 1;
}
- self.rows.push(row);
- child_depth += 1;
- }
- let child_name = if transparent { parent_name } else { name };
- if let Some(children) = node["childIds"].as_array() {
- for child in children {
- if let Some(child) = child.as_str() {
- self.visit(child, child_depth, child_name, language)?;
+ let child_name = if transparent { parent_name } else { name };
+ if let Some(children) = node["childIds"].as_array() {
+ for child in children.iter().rev() {
+ if let Some(child) = child.as_str() {
+ pending.push((child, child_depth, child_name));
+ }
}
}
}
@@ -195,6 +197,30 @@ impl<'a> Walk<'a> {
#[cfg(test)]
mod tests {
+ #[test]
+ fn complete_deep_accessibility_tree_keeps_original_descendant_indices() {
+ let nodes=(0..70).map(|index| {
+ let mut node=json!({"nodeId":index.to_string(),"backendDOMNodeId":index+1,"role":{"value":"button"},"name":{"value":format!("Node {index}")}});
+ if index>0 {node["parentId"]=json!((index-1).to_string());}
+ if index<69 {node["childIds"]=json!([(index+1).to_string()]);}
+ node
+ }).collect::<Vec<_>>();
+ let mut projection = Projection::default();
+ let (state, refs) = projection.render("original", &nodes, Language::En).unwrap();
+ assert_eq!(refs.len(), 70);
+ assert!(
+ state.ends_with("button \"Node 69\""),
+ "complete deepest descendant must remain visible"
+ );
+ let index = *refs
+ .iter()
+ .find(|(_, value)| value.backend == 70)
+ .unwrap()
+ .0;
+ let (_, again) = projection.render("original", &nodes, Language::En).unwrap();
+ assert_eq!(again[&index].backend, 70);
+ }
+
use super::*;
#[test]
diff --git a/platform/computer-use/src/browser/frames.rs b/platform/computer-use/src/browser/frames.rs
index 9dc862b028..633a11c6b4 100644
--- a/platform/computer-use/src/browser/frames.rs
+++ b/platform/computer-use/src/browser/frames.rs
@@ -70,7 +70,8 @@ impl Tab {
}
// Only exact descendants announced on this bound page socket are
// admitted. Popups, workers and unrelated target inventories never do.
- for _ in 0..16 {
+ let mut attached = std::collections::HashSet::new();
+ loop {
let mut attach = Vec::new();
while let Ok(event) = self.frames.events.as_mut().unwrap().try_recv() {
let parent_known = event.session_id.is_none()
@@ -139,6 +140,9 @@ impl Tab {
break;
}
for session in attach {
+ if !attached.insert(session.clone()) {
+ return Err(failed("iframe attachment did not settle"));
+ }
if !self
.frames
.children
@@ -186,9 +190,6 @@ impl Tab {
frames.push(frame);
}
}
- if frames.len() > 64 {
- return Err(failed("frame observation limit reached"));
- }
Ok(frames)
}
@@ -240,7 +241,11 @@ impl Tab {
.frame
.clone()
.ok_or_else(|| failed("element frame was not proven"))?;
- for _ in 0..64 {
+ let mut ancestors = std::collections::HashSet::new();
+ loop {
+ if !ancestors.insert(frame.id.clone()) {
+ return Err(failed("cyclic iframe ancestry"));
+ }
let Some(parent) = frame.parent.as_ref() else {
return Ok(point);
};
@@ -296,7 +301,6 @@ impl Tab {
}
frame = parent;
}
- Err(failed("iframe ancestry limit reached"))
}
}
@@ -305,18 +309,19 @@ fn collect_frames(
session: Option<&str>,
frames: &mut Vec<Frame>,
) -> Result<(), ToolError> {
- let raw = &tree["frame"];
- if let (Some(id), Some(loader)) = (raw["id"].as_str(), raw["loaderId"].as_str()) {
- frames.push(Frame {
- id: id.into(),
- loader: loader.into(),
- session: session.map(str::to_owned),
- parent: raw["parentId"].as_str().map(str::to_owned),
- });
- }
- if let Some(children) = tree["childFrames"].as_array() {
- for child in children {
- collect_frames(child, session, frames)?;
+ let mut pending = vec![tree];
+ while let Some(tree) = pending.pop() {
+ let raw = &tree["frame"];
+ if let (Some(id), Some(loader)) = (raw["id"].as_str(), raw["loaderId"].as_str()) {
+ frames.push(Frame {
+ id: id.into(),
+ loader: loader.into(),
+ session: session.map(str::to_owned),
+ parent: raw["parentId"].as_str().map(str::to_owned),
+ });
+ }
+ if let Some(children) = tree["childFrames"].as_array() {
+ pending.extend(children.iter().rev());
}
}
Ok(())
diff --git a/platform/computer-use/src/desktop.rs b/platform/computer-use/src/desktop.rs
index 8dd56c860b..99c37e6f3e 100644
--- a/platform/computer-use/src/desktop.rs
+++ b/platform/computer-use/src/desktop.rs
@@ -259,9 +259,6 @@ impl Session {
pub(crate) fn validate_connections(connections: &[BrowserConnection]) -> Result<(), ToolError> {
let mut ids = std::collections::HashSet::new();
- if connections.len() > 8 {
- return Err(failed("at most 8 browser providers may be configured"));
- }
for connection in connections {
let url = reqwest::Url::parse(&connection.endpoint).map_err(failed)?;
let loopback = url.host_str().is_some_and(|host| {
diff --git a/platform/computer-use/src/desktop/worker.rs b/platform/computer-use/src/desktop/worker.rs
index b0aae74a56..ff7cdd2a89 100644
--- a/platform/computer-use/src/desktop/worker.rs
+++ b/platform/computer-use/src/desktop/worker.rs
@@ -49,7 +49,6 @@ use tokio_util::sync::CancellationToken;
const ENTRY: &str = "__maka-cua-desktop";
const PROTOCOL: u32 = 1;
-const MAX_FRAME: usize = 16 * 1024 * 1024;
const STARTUP_TIMEOUT: Duration = Duration::from_secs(15);
const EXIT_TIMEOUT: Duration = Duration::from_secs(10);
@@ -378,7 +377,7 @@ async fn serve(
command,
language,
} => {
- if session.is_empty() || session.len() > 256 {
+ if session.is_empty() {
Err(failed("invalid desktop Session identity"))
} else if sessions.len() >= 16 && !sessions.contains_key(&session) {
Err(failed("desktop Session capacity reached"))
@@ -438,7 +437,7 @@ async fn serve(
fn length(length: u32) -> io::Result<usize> {
let length = length as usize;
- if length == 0 || length > MAX_FRAME {
+ if length == 0 {
return Err(io::Error::new(
io::ErrorKind::InvalidData,
"invalid desktop frame length",
@@ -450,13 +449,19 @@ fn encode(value: &impl Serialize) -> io::Result<Vec<u8>> {
let mut bytes = vec![0; 4];
serde_json::to_writer(&mut bytes, value)?;
let size = bytes.len() - 4;
- if size > MAX_FRAME {
+ let size = u32::try_from(size).map_err(|_| {
+ io::Error::new(
+ io::ErrorKind::InvalidData,
+ "desktop message is not representable",
+ )
+ })?;
+ if size == 0 {
return Err(io::Error::new(
io::ErrorKind::InvalidData,
"desktop message too large",
));
}
- bytes[..4].copy_from_slice(&(size as u32).to_be_bytes());
+ bytes[..4].copy_from_slice(&size.to_be_bytes());
Ok(bytes)
}
#[cfg(feature = "native-desktop")]
@@ -636,8 +641,8 @@ mod tests {
}
#[tokio::test]
- async fn desktop_frames_reject_oversize_and_partial_responses() {
- let mut oversize = ((MAX_FRAME + 1) as u32).to_be_bytes().as_slice().to_vec();
+ async fn desktop_frames_reject_empty_and_partial_responses() {
+ let mut oversize = 0_u32.to_be_bytes().as_slice().to_vec();
assert_eq!(
read::<_, Response>(&mut oversize.as_slice())
.await
diff --git a/platform/computer-use/src/macos.rs b/platform/computer-use/src/macos.rs
index c81492bb73..d527d12080 100644
--- a/platform/computer-use/src/macos.rs
+++ b/platform/computer-use/src/macos.rs
@@ -572,8 +572,15 @@ unsafe fn in_application_menu(pid: i32, element: AXUIElementRef) -> bool {
};
let mut current = RetainedElement::retain(element as usize);
let mut matched = false;
- for _ in 0..64 {
+ let mut ancestors = Vec::<RetainedElement>::new();
+ loop {
let pointer = current.as_ptr() as AXUIElementRef;
+ if ancestors.iter().any(|ancestor| {
+ CFEqual((ancestor.as_ptr() as AXUIElementRef).cast(), pointer.cast()) != 0
+ }) {
+ break;
+ }
+ ancestors.push(RetainedElement::retain(pointer as usize));
if CFEqual(pointer.cast(), menu.cast()) != 0 {
matched = true;
break;
diff --git a/platform/computer-use/tests/repl_browser.rs b/platform/computer-use/tests/repl_browser.rs
index 4f810142aa..1291bf5e2f 100644
--- a/platform/computer-use/tests/repl_browser.rs
+++ b/platform/computer-use/tests/repl_browser.rs
@@ -55,7 +55,7 @@ impl ToolExecutor for Bridge {
}
}
async fn evaluate(repl: &Repl, bridge: Arc<Bridge>, source: String) -> (bool, Vec<CellOutput>) {
- let context = CellContext::new(CellStore::default(), 16 * 1024 * 1024, vec![]);
+ let context = CellContext::new(CellStore::default(), vec![]);
let result = repl
.evaluate(
source,
@@ -126,7 +126,6 @@ async fn native_form_retains_exact_ax_elements_and_verifies_submission() {
let repl = Repl::new(
facade(),
CellLimits {
- max_value_bytes: 16 * 1024 * 1024,
heap_bytes: 128 * 1024 * 1024,
..Default::default()
},
@@ -396,7 +395,6 @@ async fn native_observation_recovers_after_busy_and_preserves_external_edits() {
let repl = Repl::new(
facade(),
CellLimits {
- max_value_bytes: 16 * 1024 * 1024,
heap_bytes: 128 * 1024 * 1024,
..Default::default()
},
@@ -858,7 +856,6 @@ async fn browser_form_uses_independent_repl_and_rejects_stale_document_and_tab()
let repl = Repl::new(
facade(),
CellLimits {
- max_value_bytes: 16 * 1024 * 1024,
heap_bytes: 128 * 1024 * 1024,
..Default::default()
},
diff --git a/platform/computer-use/tests/repl_contract.rs b/platform/computer-use/tests/repl_contract.rs
index bb95c66ed2..4d695e34c7 100644
--- a/platform/computer-use/tests/repl_contract.rs
+++ b/platform/computer-use/tests/repl_contract.rs
@@ -62,7 +62,7 @@ impl ToolExecutor for Fixture {
}
async fn evaluate(repl: &Repl, code: &str) -> Vec<CellOutput> {
- let context = CellContext::new(Default::default(), 4096, vec![]).with_image_deduplication();
+ let context = CellContext::new(Default::default(), vec![]).with_image_deduplication();
let result = repl
.evaluate(
code.into(),
@@ -223,7 +223,7 @@ async fn persistent_repl_uses_each_evaluations_language_without_rewriting_user_o
(Language::En, "target rebinding"),
(Language::ZhCn, "重新绑定目标"),
] {
- let context = CellContext::new(Default::default(), 64 * 1024, vec![]);
+ let context = CellContext::new(Default::default(), vec![]);
let result = repl
.evaluate(
"await cua.listBrowsers(); nodeRepl.write('原始 user_DATA: zh-TW / en');".into(),
diff --git a/platform/event-log/README.md b/platform/event-log/README.md
index 32bb3e5926..802bd8b354 100644
--- a/platform/event-log/README.md
+++ b/platform/event-log/README.md
@@ -49,6 +49,8 @@ First upgrade requires maintenance-first startup with the existing admitted long
Whole-artifact reads use `with_artifact` with Session or execution-turn scope. Metadata and one local read-only BLOB reader share the original writer's snapshot; the synchronous callback owns its destination, and the reader closes after it returns, before the snapshot is released. This avoids reopening and rereading the payload for each chunk. Other writer jobs wait for that artifact copy, and accepted work retains the original owner even if its waiter disappears. Callers retain their re [...]
-Generated tool images retain their complete original artifact bytes through model reconstruction, history copies and bundle transfer. User uploads keep their separate 50 MiB admission limit. Schema migration 36 removes the former generic artifact payload ceiling while preserving payload identity, canonical retention and copied-history mappings; bundle aggregate admission still applies.
+Generated tool images and user uploads retain their complete original artifact bytes through model reconstruction, immutable copies and bundle transfer. Payload length, digest, canonical retention and copied-history mappings remain authoritative. Bundle transfer streams blobs in chunks and retains physical frame-length representation and stalled-I/O cleanup, without an independent whole-bundle content quota.
+
+History, delivery and resource pages retain their byte targets for packing subsequent items, while one complete first item always advances with its original metadata and cursor. History body windows remain bounded UTF-8 transfers. `history_source` takes a body-byte target and returns the complete original metadata for that single chunk; it has no separate JSON-envelope quota. Session scope and frozen source fences remain mandatory.
[Source](src/lib.rs) · [Cargo manifest](Cargo.toml)
diff --git a/platform/event-log/README.zh-CN.md b/platform/event-log/README.zh-CN.md
index 1dfaa43edc..4e4f423561 100644
--- a/platform/event-log/README.zh-CN.md
+++ b/platform/event-log/README.zh-CN.md
@@ -49,6 +49,8 @@
完整产物读取使用 `with_artifact`,选择 Session 或执行轮次范围。元数据与局部只读 BLOB reader 绑定到原写连接的同一快照;同步回调拥有目标资源,读取句柄关闭后才释放快照,避免每块重新打开并读取整个 payload。其他写入任务等待这次产物复制结束;即使等待方消失,已受理工作仍由原 owner 持有。调用方继续负责资源预算、摘要核验和取消策略。`read_artifact_chunk` 用于独立窗口,多次窗口调用不会保留顺序读取游标。
-生成的工具图片在模型重建、历史复制及导出包传输中保留完整原始产物字节。用户上传保留独立的 50 MiB 准入限制。数据库迁移 36 移除原有通用产物大小上限,保留 payload 身份、规范冻结位置及历史复制映射;导出包整体准入约束仍然生效。
+生成的工具图片与用户上传在模型重建、不可变复制及导出包传输中保留完整原始产物字节。payload 长度、摘要、规范冻结位置及历史复制映射继续作为权威依据。导出包按块传输产物,保留物理帧长度表示和停滞 I/O 清理,不另设整个导出包的内容配额。
+
+历史、事件投递和资源分页保留后续项的字节打包目标;首个完整项即使元数据超出目标,也携带原始元数据与游标继续推进。历史正文仍按 UTF-8 字节窗口传输。`history_source` 只接收正文字节目标,并保留该单块的完整原始元数据,不再设置独立 JSON 信封配额。Session 范围与冻结来源边界仍为必要条件。
[源码](src/lib.rs) · [Cargo 配置](Cargo.toml)
diff --git a/platform/event-log/migrations/0037_interaction_records.sql b/platform/event-log/migrations/0037_interaction_records.sql
new file mode 100644
index 0000000000..ebc0c8b5dc
--- /dev/null
+++ b/platform/event-log/migrations/0037_interaction_records.sql
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+-- Preserve original requests, receipts and grants while removing logical JSON quotas.
+CREATE TABLE interaction_requests_new (
+ request_id TEXT PRIMARY KEY,
+ session_id TEXT NOT NULL,
+ created_at INTEGER NOT NULL,
+ record_json TEXT NOT NULL
+);
+INSERT INTO interaction_requests_new SELECT request_id, session_id, created_at, record_json FROM interaction_requests;
+
+CREATE TABLE interaction_outcomes_new (
+ request_id TEXT PRIMARY KEY REFERENCES interaction_requests_new(request_id),
+ outcome_json TEXT NOT NULL
+);
+INSERT INTO interaction_outcomes_new SELECT request_id, outcome_json FROM interaction_outcomes;
+
+DROP TABLE interaction_outcomes;
+DROP TABLE interaction_requests;
+ALTER TABLE interaction_requests_new RENAME TO interaction_requests;
+ALTER TABLE interaction_outcomes_new RENAME TO interaction_outcomes;
+CREATE INDEX interaction_session_pending ON interaction_requests(session_id, created_at, request_id);
+CREATE INDEX interaction_permission_basis ON interaction_requests(
+ session_id, json_extract(record_json, '$.request.baseRevision'), created_at, request_id
+) WHERE json_extract(record_json, '$.request.kind') = 'permissions';
+
+CREATE TABLE client_capability_session_grants_new (
+ authority_key TEXT PRIMARY KEY,
+ record_json TEXT NOT NULL
+);
+INSERT INTO client_capability_session_grants_new SELECT authority_key, record_json FROM client_capability_session_grants;
+DROP TABLE client_capability_session_grants;
+ALTER TABLE client_capability_session_grants_new RENAME TO client_capability_session_grants;
+
+-- Preserve both child relations while replacing their referenced project table.
+CREATE TABLE projects_new (
+ id TEXT PRIMARY KEY NOT NULL,
+ identity TEXT NOT NULL UNIQUE,
+ name TEXT NOT NULL CHECK(length(CAST(name AS BLOB)) >= 1),
+ last_used_at INTEGER NOT NULL CHECK(last_used_at BETWEEN 0 AND 9007199254740991),
+ archived_at INTEGER CHECK(archived_at BETWEEN 0 AND 9007199254740991)
+) STRICT;
+
+INSERT INTO projects_new (id, identity, name, last_used_at, archived_at)
+SELECT id, identity, name, last_used_at, archived_at FROM projects;
+
+CREATE TABLE project_identities_new (
+ id TEXT PRIMARY KEY NOT NULL,
+ project_id TEXT NOT NULL REFERENCES projects_new(id) ON DELETE CASCADE
+) STRICT;
+
+INSERT INTO project_identities_new (id, project_id)
+SELECT id, project_id FROM project_identities;
+
+CREATE TABLE project_locations_new (
+ project_id TEXT NOT NULL REFERENCES projects_new(id) ON DELETE CASCADE,
+ path TEXT NOT NULL CHECK(length(CAST(path AS BLOB)) >= 1),
+ is_worktree INTEGER NOT NULL CHECK(is_worktree IN (0, 1)),
+ last_used_at INTEGER NOT NULL CHECK(last_used_at BETWEEN 0 AND 9007199254740991),
+ PRIMARY KEY(project_id, path)
+) STRICT;
+
+INSERT INTO project_locations_new (project_id, path, is_worktree, last_used_at)
+SELECT project_id, path, is_worktree, last_used_at FROM project_locations;
+
+DROP TABLE project_locations;
+DROP TABLE project_identities;
+DROP TABLE projects;
+ALTER TABLE projects_new RENAME TO projects;
+ALTER TABLE project_identities_new RENAME TO project_identities;
+ALTER TABLE project_locations_new RENAME TO project_locations;
+CREATE INDEX project_identity_owner ON project_identities(project_id, id);
+
+-- Preserve copied-history provenance while allowing complete artifact metadata.
+CREATE TABLE artifacts_new (
+ session_id TEXT NOT NULL REFERENCES session_control(id),
+ id TEXT NOT NULL,
+ created_at INTEGER NOT NULL CHECK(created_at >= 0),
+ record_json TEXT NOT NULL,
+ content_sha256 TEXT NOT NULL,
+ payload BLOB NOT NULL,
+ canonical_at INTEGER CHECK(canonical_at IS NULL OR canonical_at > 0),
+ PRIMARY KEY (session_id, id),
+ CHECK(json_extract(record_json, '$.sessionId') = session_id),
+ CHECK(json_extract(record_json, '$.id') = id),
+ CHECK(json_extract(record_json, '$.createdAt') = created_at),
+ CHECK(json_extract(record_json, '$.sizeBytes') = length(payload))
+);
+
+INSERT INTO artifacts_new
+ (session_id, id, created_at, record_json, content_sha256, payload, canonical_at)
+SELECT session_id, id, created_at, record_json, content_sha256, payload, canonical_at
+FROM artifacts;
+
+CREATE TABLE session_history_artifacts_new (
+ session_id TEXT NOT NULL REFERENCES session_history_copies(session_id),
+ source_session_id TEXT NOT NULL,
+ source_artifact_id TEXT NOT NULL,
+ artifact_id TEXT NOT NULL,
+ PRIMARY KEY(session_id, source_session_id, source_artifact_id),
+ FOREIGN KEY(session_id, artifact_id) REFERENCES artifacts_new(session_id, id)
+);
+
+INSERT INTO session_history_artifacts_new
+ (session_id, source_session_id, source_artifact_id, artifact_id)
+SELECT session_id, source_session_id, source_artifact_id, artifact_id
+FROM session_history_artifacts;
+
+DROP TABLE session_history_artifacts;
+DROP TABLE artifacts;
+ALTER TABLE artifacts_new RENAME TO artifacts;
+ALTER TABLE session_history_artifacts_new RENAME TO session_history_artifacts;
+CREATE INDEX artifacts_session_order ON artifacts(session_id, created_at DESC, id);
diff --git a/platform/event-log/src/applications.rs b/platform/event-log/src/applications.rs
index 7e01493d6b..232cf5c27a 100644
--- a/platform/event-log/src/applications.rs
+++ b/platform/event-log/src/applications.rs
@@ -35,10 +35,7 @@ use maka_plugin_core::{
plan::{Plan, RemoteExports},
};
use sqlx::{Connection, Row, SqliteConnection};
-use std::{
- collections::{BTreeMap, BTreeSet},
- io::Write,
-};
+use std::collections::{BTreeMap, BTreeSet};
use uuid::Uuid;
@@ -107,30 +104,6 @@ impl LoadedDeployment {
fn invalid(message: impl Into<String>) -> StoreError {
StoreError::InvalidTransition(message.into())
}
-struct LimitedJson {
- bytes: Vec<u8>,
- limit: usize,
-}
-impl Write for LimitedJson {
- fn write(&mut self, bytes: &[u8]) -> std::io::Result<usize> {
- if bytes.len() > self.limit.saturating_sub(self.bytes.len()) {
- return Err(std::io::Error::other("JSON exceeds byte limit"));
- }
- self.bytes.extend_from_slice(bytes);
- Ok(bytes.len())
- }
- fn flush(&mut self) -> std::io::Result<()> {
- Ok(())
- }
-}
-fn encode<T: serde::Serialize + ?Sized>(value: &T, limit: usize) -> Result<String, StoreError> {
- let mut writer = LimitedJson {
- bytes: Vec::new(),
- limit,
- };
- serde_json::to_writer(&mut writer, value)?;
- String::from_utf8(writer.bytes).map_err(|_| invalid("invalid JSON encoding"))
-}
fn validate(
input: &Input,
observations: &[RemoteObservation],
@@ -461,7 +434,7 @@ async fn read_metadata(
revision: row.try_get::<i64, _>("revision")? as u64,
};
reference.validate().map_err(invalid)?;
- let refs = sqlx::query("SELECT CASE WHEN length(CAST(id AS BLOB)) <= 128 THEN id END AS id,
+ let refs = sqlx::query("SELECT id,
CASE WHEN length(CAST(revision AS BLOB)) = 71 THEN revision END AS revision
FROM application_source_packages WHERE deployment = ? AND source_revision = ? ORDER BY id, revision")
.bind(&id).bind(revision as i64).fetch_all(&mut *connection).await?;
@@ -494,29 +467,20 @@ async fn read_package(
connection: &mut SqliteConnection,
reference: &PackageRef,
) -> Result<Package, StoreError> {
- use maka_packages::MAX_FILE_BYTES;
- use maka_packages::MAX_FILES;
- use maka_packages::MAX_PACKAGE_BYTES;
- let rows = sqlx::query("SELECT CASE WHEN length(CAST(path AS BLOB)) <= 512 THEN path END AS path,
- CASE WHEN typeof(payload) = 'blob' THEN length(payload) END AS bytes FROM application_package_files WHERE id = ? AND revision = ? ORDER BY path LIMIT 257")
+ let rows = sqlx::query("SELECT path,
+ CASE WHEN typeof(payload) = 'blob' THEN length(payload) END AS bytes FROM application_package_files WHERE id = ? AND revision = ? ORDER BY path")
.bind(&reference.id).bind(&reference.revision).fetch_all(&mut *connection).await?;
- if rows.is_empty() || rows.len() > MAX_FILES {
+ if rows.is_empty() {
return Err(invalid("invalid stored application package file count"));
}
- let mut size = 0;
for row in &rows {
- let length = usize::try_from(
+ usize::try_from(
row.try_get::<Option<i64>, _>("bytes")?
.ok_or_else(|| invalid("stored package payload must be a BLOB"))?,
)
.map_err(|_| invalid("invalid package payload length"))?;
- size += length;
- if length > MAX_FILE_BYTES || size > MAX_PACKAGE_BYTES {
- return Err(invalid("stored application package exceeds byte limits"));
- }
- let path: Option<&str> = row.try_get("path")?;
- maka_packages::validate_path(path.ok_or_else(|| invalid("invalid stored package path"))?)
- .map_err(|e| invalid(e.to_string()))?;
+ let path: &str = row.try_get("path")?;
+ maka_packages::validate_path(path).map_err(|e| invalid(e.to_string()))?;
}
let mut files = BTreeMap::new();
for row in rows {
diff --git a/platform/event-log/src/applications/checkpoints.rs b/platform/event-log/src/applications/checkpoints.rs
index 6a2a3846b6..7a27ba67aa 100644
--- a/platform/event-log/src/applications/checkpoints.rs
+++ b/platform/event-log/src/applications/checkpoints.rs
@@ -18,7 +18,7 @@
*/
//! Opaque native UI snapshots, scoped to an actual persisted UI instance.
-use super::{encode, invalid};
+use super::invalid;
use crate::{EventLog, StoreError};
use maka_plugin_core::{
composition::{ExecutionLocation, InstanceId},
@@ -28,8 +28,6 @@ use serde_json::Value;
use sqlx::{Connection, Row};
use std::sync::Arc;
-pub const MAX_METADATA: usize = 32 * 1024;
-pub const MAX_SOURCE: usize = 4096;
const MAX_REVISION: u64 = (1 << 53) - 1;
#[derive(Clone, Debug, PartialEq)]
@@ -49,7 +47,7 @@ pub struct Checkpoints {
instance: String,
}
fn key_valid(key: &str) -> Result<(), StoreError> {
- if key.is_empty() || key.len() > 512 || key.chars().any(char::is_control) {
+ if key.is_empty() || key.chars().any(char::is_control) {
return Err(invalid("invalid UI checkpoint key"));
}
Ok(())
@@ -79,12 +77,12 @@ impl EventLog {
Ok(Checkpoints {
store: self.clone(),
deployment: source.reference().deployment.to_string(),
- instance: encode(instance, 4096)?,
+ instance: serde_json::to_string(instance)?,
})
}
}
impl Checkpoints {
- /// Admit the original content allocation before fetching it. The callback
+ /// Admit all stored encoded fields before fetching them. The callback
/// and payload read share one SQLite snapshot; its token follows the result.
pub async fn read<T: Send + 'static>(
&self,
@@ -98,28 +96,30 @@ impl Checkpoints {
let key = key.to_owned();
self.store.connection.run(move |connection| Box::pin(async move {
let mut tx = connection.begin().await?;
- let bytes: Option<i64> = sqlx::query_scalar("SELECT length(CAST(content AS BLOB)) FROM application_ui_checkpoints WHERE deployment=? AND instance=? AND key=?")
+ let lengths: Option<(i64, i64, i64, i64)> = sqlx::query_as("SELECT length(CAST(content AS BLOB)), length(CAST(format AS BLOB)), length(CAST(data_source_json AS BLOB)), length(CAST(metadata_json AS BLOB)) FROM application_ui_checkpoints WHERE deployment=? AND instance=? AND key=?")
.bind(&deployment).bind(&instance).bind(&key).fetch_optional(&mut *tx).await?;
- let Some(bytes) = bytes else {
+ let Some((content_length, format_length, source_length, metadata_length)) = lengths else {
tx.commit().await?;
return Ok(None);
};
- let bytes = usize::try_from(bytes).map_err(|_| invalid("invalid UI checkpoint content length"))?;
- let token = admit(bytes)?;
- let row = sqlx::query("SELECT revision,
- CASE WHEN length(CAST(format AS BLOB)) BETWEEN 1 AND 128 THEN format END AS format,
- CASE WHEN length(CAST(data_source_json AS BLOB)) <= 4096 THEN data_source_json END AS source,
- CASE WHEN length(CAST(metadata_json AS BLOB)) <= 32768 THEN metadata_json END AS metadata,
- content
+ let mut total = 0_usize;
+ for length in [content_length, format_length, source_length, metadata_length] {
+ let length = usize::try_from(length).map_err(|_| invalid("invalid UI checkpoint field length"))?;
+ total = total.checked_add(length).ok_or_else(|| invalid("UI checkpoint size overflow"))?;
+ }
+ let content_length = usize::try_from(content_length).map_err(|_| invalid("invalid UI checkpoint content length"))?;
+ let token = admit(total)?;
+ let row = sqlx::query("SELECT revision, format, data_source_json AS source, metadata_json AS metadata, content
FROM application_ui_checkpoints WHERE deployment=? AND instance=? AND key=?")
.bind(deployment).bind(instance).bind(key).fetch_one(&mut *tx).await?;
let revision: i64 = row.try_get("revision")?;
if !(1..=MAX_REVISION as i64).contains(&revision) { return Err(invalid("invalid UI checkpoint revision")); }
- let format = row.try_get::<Option<String>, _>("format")?.ok_or_else(|| invalid("invalid UI checkpoint format"))?;
- let data_source = serde_json::from_str(&row.try_get::<Option<String>, _>("source")?.ok_or_else(|| invalid("UI checkpoint source exceeds budget"))?)?;
- let metadata = serde_json::from_str(&row.try_get::<Option<String>, _>("metadata")?.ok_or_else(|| invalid("UI checkpoint metadata exceeds budget"))?)?;
+ let format: String = row.try_get("format")?;
+ if format.is_empty() { return Err(invalid("invalid UI checkpoint format")); }
+ let data_source = serde_json::from_str(&row.try_get::<String, _>("source")?).map_err(|error| invalid(format!("invalid UI checkpoint source: {error}")))?;
+ let metadata = serde_json::from_str(&row.try_get::<String, _>("metadata")?).map_err(|error| invalid(format!("invalid UI checkpoint metadata: {error}")))?;
let content: Vec<u8> = row.try_get("content")?;
- if content.len() != bytes { return Err(invalid("UI checkpoint content length changed")); }
+ if content.len() != content_length { return Err(invalid("UI checkpoint content length changed")); }
tx.commit().await?;
Ok(Some((Checkpoint { revision: revision as u64, format, data_source, metadata, content }, token)))
})).await
@@ -138,21 +138,18 @@ impl Checkpoints {
) -> Result<u64, StoreError> {
key_valid(key)?;
self.store.validate_root()?;
- if format.is_empty()
- || format.len() > 128
- || expected.is_some_and(|value| value == 0 || value >= MAX_REVISION)
- {
- return Err(invalid("invalid or oversized UI checkpoint"));
+ if format.is_empty() || expected.is_some_and(|value| value == 0 || value >= MAX_REVISION) {
+ return Err(invalid("invalid UI checkpoint"));
}
- let source = encode(data_source, MAX_SOURCE)?;
- let metadata = encode(metadata, MAX_METADATA)?;
+ let source = serde_json::to_string(data_source)?;
+ let metadata = serde_json::to_string(metadata)?;
let deployment = self.deployment.clone();
let instance = self.instance.clone();
let key = key.to_owned();
let format = format.to_owned();
self.store.connection.run(move |connection| Box::pin(async move {
let mut tx = connection.begin_with("BEGIN IMMEDIATE").await?;
- let current: Option<(i64, Option<String>, Option<String>)> = sqlx::query_as("SELECT revision, CASE WHEN length(CAST(format AS BLOB)) BETWEEN 1 AND 128 THEN format END, CASE WHEN length(CAST(data_source_json AS BLOB)) <= 4096 THEN data_source_json END FROM application_ui_checkpoints WHERE deployment=? AND instance=? AND key=?")
+ let current: Option<(i64, Option<String>, Option<String>)> = sqlx::query_as("SELECT revision, format, data_source_json FROM application_ui_checkpoints WHERE deployment=? AND instance=? AND key=?")
.bind(&deployment).bind(&instance).bind(&key).fetch_optional(&mut *tx).await?;
let actual = current.as_ref().map(|row| row.0 as u64);
if actual != expected { return Err(StoreError::RevisionConflict {
diff --git a/platform/event-log/src/applications/checkpoints/tests.rs b/platform/event-log/src/applications/checkpoints/tests.rs
index b2eaa316f5..ebf08752ef 100644
--- a/platform/event-log/src/applications/checkpoints/tests.rs
+++ b/platform/event-log/src/applications/checkpoints/tests.rs
@@ -351,19 +351,22 @@ async fn admission_rejection_and_invalid_headers_release_original_read_ownership
)
.await
.unwrap();
- assert!(
- checkpoints
- .write(
- "metadata",
- None,
- "v1",
- &Value::Null,
- &json!("\n".repeat(MAX_METADATA / 2)),
- vec![]
- )
- .await
- .is_err()
- );
+ let complete_metadata = json!("\n".repeat(40 * 1024));
+ checkpoints
+ .write(
+ "metadata",
+ None,
+ "v1",
+ &Value::Null,
+ &complete_metadata,
+ vec![],
+ )
+ .await
+ .unwrap();
+ let (metadata_record, metadata_charge) =
+ checkpoints.read("metadata", Ok).await.unwrap().unwrap();
+ assert_eq!(metadata_record.metadata, complete_metadata);
+ assert_eq!(metadata_charge, 2 + 4 + complete_metadata.to_string().len());
let requested = Arc::new(AtomicUsize::new(0));
let request = requested.clone();
let rejected = checkpoints
@@ -372,7 +375,7 @@ async fn admission_rejection_and_invalid_headers_release_original_read_ownership
Err(invalid("test allocation admission rejected"))
})
.await;
- assert_eq!(requested.load(Ordering::SeqCst), body.len());
+ assert_eq!(requested.load(Ordering::SeqCst), body.len() + 10);
assert!(
rejected
.err()
@@ -389,27 +392,27 @@ async fn admission_rejection_and_invalid_headers_release_original_read_ownership
.unwrap()
.unwrap();
assert_eq!(loaded.0.content, body);
- assert_eq!(live.load(Ordering::SeqCst), body.len());
+ assert_eq!(live.load(Ordering::SeqCst), body.len() + 10);
drop(loaded);
assert_eq!(live.load(Ordering::SeqCst), 0);
- // Invalid bounded headers are still rejected after successful admission,
+ // Malformed headers are still rejected after successful admission,
// and each error returns the original allocation token.
for (query, value, diagnostic) in [
(
"UPDATE application_ui_checkpoints SET format=?, data_source_json='null', metadata_json='null', revision=1 WHERE key='draft'",
- "x".repeat(129),
+ String::new(),
"invalid UI checkpoint format",
),
(
"UPDATE application_ui_checkpoints SET format='v1', data_source_json=?, metadata_json='null', revision=1 WHERE key='draft'",
- json!("x".repeat(MAX_SOURCE)).to_string(),
- "UI checkpoint source exceeds budget",
+ "{".into(),
+ "invalid UI checkpoint source",
),
(
"UPDATE application_ui_checkpoints SET format='v1', data_source_json='null', metadata_json=?, revision=1 WHERE key='draft'",
- json!("x".repeat(MAX_METADATA)).to_string(),
- "UI checkpoint metadata exceeds budget",
+ "{".into(),
+ "invalid UI checkpoint metadata",
),
(
"UPDATE application_ui_checkpoints SET format='v1', data_source_json='null', metadata_json='null', revision=? WHERE key='draft'",
@@ -421,7 +424,19 @@ async fn admission_rejection_and_invalid_headers_release_original_read_ownership
.connection
.run(move |connection| {
Box::pin(async move {
- sqlx::query(query).bind(value).execute(connection).await?;
+ // This fixture deliberately corrupts stored headers. Keep normal
+ // SQL constraints enabled for the subsequent public read.
+ sqlx::query("PRAGMA ignore_check_constraints=ON")
+ .execute(&mut *connection)
+ .await?;
+ let updated = sqlx::query(query)
+ .bind(value)
+ .execute(&mut *connection)
+ .await;
+ sqlx::query("PRAGMA ignore_check_constraints=OFF")
+ .execute(&mut *connection)
+ .await?;
+ updated?;
Ok(())
})
})
@@ -506,14 +521,14 @@ async fn admission_and_payload_share_original_snapshot_during_a_real_concurrent_
assert_eq!(original_revision, 1);
assert!(original_bytes_match);
- assert_eq!(original_charge, original.len());
- assert_eq!(original_live, original.len());
+ assert_eq!(original_charge, original.len() + 10);
+ assert_eq!(original_live, original.len() + 10);
assert_eq!(released, 0);
assert_eq!(next.0.revision, 2);
assert_eq!(next.0.content, replacement);
- assert_eq!(next.1, next.0.content.len());
+ assert_eq!(next.1, next.0.content.len() + 10);
assert_eq!(revision, 3);
assert_eq!(empty.0.revision, 3);
assert!(empty.0.content.is_empty());
- assert_eq!(empty.1, 0);
+ assert_eq!(empty.1, 10);
}
diff --git a/platform/event-log/src/applications/intents.rs b/platform/event-log/src/applications/intents.rs
index 9b71d9908d..75131c5033 100644
--- a/platform/event-log/src/applications/intents.rs
+++ b/platform/event-log/src/applications/intents.rs
@@ -18,7 +18,7 @@
*/
//! Caller-owned original references. These records do not assert business journal facts.
-use super::{encode, invalid};
+use super::invalid;
use crate::{EventLog, StoreError, root::RootOwner};
use maka_plugin_core::{
composition::InstanceId, deployment::DeploymentRef, operation::RecoveryRef,
@@ -29,11 +29,12 @@ use std::sync::Arc;
use uuid::Uuid;
const MAX_PAGE: usize = 1024 * 1024;
-const MAX_RECOVERY: usize = 32 * 1024;
/// Caller-owned correlation only; no business outcome or execution authority.
pub fn validate_recovery(value: &serde_json::Value) -> Result<(), StoreError> {
- encode(value, MAX_RECOVERY).map(|_| ())
+ serde_json::to_string(value)
+ .map(|_| ())
+ .map_err(StoreError::from)
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
@@ -61,7 +62,6 @@ impl CallerIntent {
pub fn validate(&self) -> Result<(), StoreError> {
self.confirmation().validate()?;
validate_recovery(&self.recovery)?;
- encode(self, MAX_PAGE)?;
Ok(())
}
pub fn confirmation(&self) -> CallerConfirmation {
@@ -80,7 +80,6 @@ impl CallerConfirmation {
}
self.caller.validate().map_err(invalid)?;
consumer_valid(&self.consumer)?;
- encode(self, MAX_PAGE)?;
self.reference
.validate()
.map_err(|e| invalid(e.to_string()))?;
@@ -99,11 +98,11 @@ impl RecordedIntent {
}
}
fn consumer_valid(consumer: &InstanceId) -> Result<(), StoreError> {
- if consumer.0.is_empty() || consumer.0.len() > 64 || consumer.0.iter().any(Uuid::is_nil) {
- return Err(invalid("invalid caller consumer"));
- }
- Ok(())
+ consumer
+ .validate()
+ .map_err(|error| invalid(error.to_string()))
}
+
async fn read(
connection: &mut SqliteConnection,
domain: &str,
@@ -111,15 +110,12 @@ async fn read(
consumer: &InstanceId,
operation: Uuid,
) -> Result<Option<CallerIntent>, StoreError> {
- let row = sqlx::query("SELECT cursor, source_revision, reference_json, CASE WHEN length(CAST(recovery_json AS BLOB)) <= 32768 THEN recovery_json END AS recovery_json FROM application_intents WHERE deployment=? AND consumer=? AND operation=?")
- .bind(deployment.to_string()).bind(encode(consumer,4096)?).bind(operation.to_string()).fetch_optional(connection).await?;
+ let row = sqlx::query("SELECT cursor, source_revision, reference_json, recovery_json FROM application_intents WHERE deployment=? AND consumer=? AND operation=?")
+ .bind(deployment.to_string()).bind(serde_json::to_string(consumer)?).bind(operation.to_string()).fetch_optional(connection).await?;
row.map(|row| {
let reference: RecoveryRef =
serde_json::from_str(&row.try_get::<String, _>("reference_json")?)?;
- let recovery = serde_json::from_str(
- &row.try_get::<Option<String>, _>("recovery_json")?
- .ok_or_else(|| invalid("caller recovery metadata exceeds 32 KiB"))?,
- )?;
+ let recovery = serde_json::from_str(&row.try_get::<String, _>("recovery_json")?)?;
reference.validate().map_err(|e| invalid(e.to_string()))?;
if reference.operation != operation {
return Err(StoreError::EventConflict);
@@ -178,7 +174,7 @@ impl EventLog {
) -> Result<RecordedIntent, StoreError> {
consumer_valid(&consumer)?;
reference.validate().map_err(|e| invalid(e.to_string()))?;
- encode(&recovery, MAX_RECOVERY)?;
+ validate_recovery(&recovery)?;
let loaded = self
.load_application_at(&caller)
.await?
@@ -201,7 +197,7 @@ impl EventLog {
let caller = source.reference().clone();
reference.validate().map_err(|e| invalid(e.to_string()))?;
let encoded = serde_json::to_string(&reference)?;
- let encoded_recovery = encode(&recovery, MAX_RECOVERY)?;
+ let encoded_recovery = serde_json::to_string(&recovery)?;
let domain = self.application_domain()?;
let owner = self.root_owner.as_ref().expect("owned caller Root").clone();
let commits = self.commits.clone();
@@ -214,7 +210,7 @@ impl EventLog {
old
} else {
let result = sqlx::query("INSERT INTO application_intents (deployment,consumer,operation,source_revision,reference_json,recovery_json) VALUES (?,?,?,?,?,?)")
- .bind(caller.deployment.to_string()).bind(encode(&consumer,4096)?).bind(reference.operation.to_string()).bind(caller.revision as i64).bind(encoded).bind(encoded_recovery).execute(&mut *tx).await?;
+ .bind(caller.deployment.to_string()).bind(serde_json::to_string(&consumer)?).bind(reference.operation.to_string()).bind(caller.revision as i64).bind(encoded).bind(encoded_recovery).execute(&mut *tx).await?;
CallerIntent {cursor:result.last_insert_rowid() as u64,caller,consumer,reference,recovery}
};
tx.commit().await.map_err(StoreError::CommitUnknown)?;
@@ -262,9 +258,9 @@ impl EventLog {
}
self.connection.run(move |connection| Box::pin(async move {
let mut tx = connection.begin().await?;
- let mut query = sqlx::QueryBuilder::new("SELECT CASE WHEN length(CAST(operation AS BLOB)) = 36 THEN operation END AS operation, CASE WHEN length(CAST(consumer AS BLOB)) <= 4096 THEN consumer END AS consumer FROM application_intents WHERE deployment=");
+ let mut query = sqlx::QueryBuilder::new("SELECT CASE WHEN length(CAST(operation AS BLOB)) = 36 THEN operation END AS operation, consumer FROM application_intents WHERE deployment=");
query.push_bind(deployment.to_string());
- if let Some(consumer) = &consumer { query.push(" AND consumer=").push_bind(encode(consumer,4096)?); }
+ if let Some(consumer) = &consumer { query.push(" AND consumer=").push_bind(serde_json::to_string(consumer)?); }
query.push(" AND cursor>").push_bind(after as i64).push(" ORDER BY cursor LIMIT ").push_bind(limit as i64);
let operations = query.build().fetch_all(&mut *tx).await?;
let mut intents = Vec::with_capacity(operations.len());
@@ -274,9 +270,9 @@ impl EventLog {
let consumer: InstanceId = serde_json::from_str(&row.try_get::<Option<String>, _>("consumer")?.ok_or_else(|| invalid("invalid caller consumer"))?)?;
consumer_valid(&consumer)?;
let intent = read(&mut tx,&domain,deployment,&consumer,Uuid::parse_str(&operation).map_err(|_| invalid("invalid caller operation"))?).await?.ok_or_else(|| invalid("caller intent disappeared"))?;
- let encoded = encode(&intent, MAX_PAGE)?;
+ let encoded = serde_json::to_string(&intent)?;
let size = encoded.len() + usize::from(!intents.is_empty());
- if size > MAX_PAGE - bytes { break; }
+ if !intents.is_empty() && size > MAX_PAGE.saturating_sub(bytes) { break; }
bytes += size;
intents.push(intent);
}
diff --git a/platform/event-log/src/applications/intents/tests.rs b/platform/event-log/src/applications/intents/tests.rs
index c30248988a..5c02a594a7 100644
--- a/platform/event-log/src/applications/intents/tests.rs
+++ b/platform/event-log/src/applications/intents/tests.rs
@@ -446,59 +446,73 @@ async fn history_pages_bound_the_complete_encoded_array_without_skipping_the_nex
}
#[tokio::test]
-async fn recovery_metadata_bounds_encoded_bytes_and_rejects_oversized_stored_values() {
+async fn complete_recovery_metadata_retries_immutably_and_oversized_singletons_advance() {
let (_dir, store) = store().await;
let deployment = Uuid::new_v4();
let caller = source(&store, deployment, 0).await;
- let maximum = json!("x".repeat(MAX_RECOVERY - 2));
- assert_eq!(serde_json::to_vec(&maximum).unwrap().len(), MAX_RECOVERY);
+ let recovery = json!({"original":"original recovery 中\n".repeat(MAX_PAGE / 10)});
let original = reference();
let token = store
- .record_application_intent(caller.clone(), consumer(), original, maximum.clone())
+ .record_application_intent(
+ caller.clone(),
+ consumer(),
+ original.clone(),
+ recovery.clone(),
+ )
.await
.unwrap();
- assert_eq!(token.intent().recovery, maximum);
- for oversized in [
- json!("x".repeat(MAX_RECOVERY - 1)),
- json!("\n".repeat(MAX_RECOVERY / 2)),
- ] {
- assert!(
- store
- .record_application_intent(caller.clone(), consumer(), reference(), oversized)
- .await
- .is_err()
- );
- }
- let before = store
+ let expected = token.intent().clone();
+ assert_eq!(expected.recovery, recovery);
+ let retry = store
+ .record_application_intent(
+ caller.clone(),
+ consumer(),
+ original.clone(),
+ recovery.clone(),
+ )
+ .await
+ .unwrap();
+ assert_eq!(retry.intent(), &expected);
+ assert!(matches!(
+ store
+ .record_application_intent(
+ caller.clone(),
+ consumer(),
+ original,
+ json!({"replacement":true})
+ )
+ .await,
+ Err(StoreError::EventConflict)
+ ));
+ let second = store
+ .record_application_intent(
+ caller,
+ consumer(),
+ reference(),
+ json!({"second":"original"}),
+ )
+ .await
+ .unwrap()
+ .intent()
+ .clone();
+ let first_page = store
.application_intents(deployment, consumer(), 0, 128)
.await
.unwrap();
- assert_eq!(
- before.len(),
- 1,
- "rejected correlation creates no dispatch token or row"
- );
- let cursor = token.intent().cursor;
- store
- .connection
- .run(move |connection| {
- Box::pin(async move {
- sqlx::query("UPDATE application_intents SET recovery_json=? WHERE cursor=?")
- .bind(serde_json::to_string(&"x".repeat(MAX_RECOVERY)).unwrap())
- .bind(cursor as i64)
- .execute(connection)
- .await?;
- Ok(())
- })
- })
+ assert_eq!(first_page, vec![expected.clone()]);
+ let second_page = store
+ .application_intents(deployment, consumer(), expected.cursor, 128)
.await
.unwrap();
+ assert_eq!(second_page, vec![second.clone()]);
assert!(
store
- .application_intents(deployment, consumer(), 0, 128)
+ .application_intents(deployment, consumer(), second.cursor, 128)
.await
- .is_err()
+ .unwrap()
+ .is_empty()
);
... 47087 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@maka.apache.org
For additional commands, e-mail: commits-help@maka.apache.org