diff --git a/README.md b/README.md index 83a3dd08f6..62d38ba3aa 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ SynthOrg is a Python framework for building **synthetic organizations**, autonom Define your company in YAML. Agents collaborate through a message bus, follow workflows (Kanban, Agile sprints, or custom), track costs against budgets, and produce real artifacts. The framework is provider-agnostic (2700+ LLMs via [LiteLLM](https://github.com/BerriAI/litellm)), configuration-driven ([Pydantic v2](https://docs.pydantic.dev/) models), and designed for the full autonomy spectrum, from human approval on every action to fully autonomous operation. -> **Early access.** Core subsystems are built and tested (29,000+ tests, 80%+ coverage). APIs may change between releases. See the [roadmap](https://synthorg.io/docs/roadmap/) for what's next. +> **Early access.** Core subsystems are built and tested (30,000+ tests, 80%+ coverage). APIs may change between releases. See the [roadmap](https://synthorg.io/docs/roadmap/) for what's next. ## Why SynthOrg? diff --git a/data/competitors.yaml b/data/competitors.yaml index 3ee443c4df..e55adb59e6 100644 --- a/data/competitors.yaml +++ b/data/competitors.yaml @@ -113,8 +113,8 @@ competitors: memory: {support: full, note: "Pluggable architecture with 3 backends (Mem0, composite, in-memory); 5 memory types (working, episodic, semantic, procedural, social); hybrid retrieval (dense + BM25 sparse, linear-weighted fusion)"} tool_use: {support: full, note: "MCP protocol, sandbox isolation, invocation tracking; 14 ToolCategory values (file_system, code_execution, version_control, web, database, terminal, design, communication, analytics, deployment, memory, ontology, mcp, other)"} human_in_loop: {support: full, note: "Approval gates, review workflows, 4 autonomy tiers (FULL, SEMI, SUPERVISED, LOCKED), two-stage safety classifier, LLM fallback evaluator"} - budget_tracking: {support: partial, note: "Per-token, per-agent, hierarchical cascades, CFO optimization, and automatic model downgrade shipped; risk-unit action budgets still in progress"} - security_model: {support: partial, note: "Rule engine + LLM evaluator, progressive trust, audit trail, output scanning, and hallucination detection shipped; self-healing SSRF still in progress"} + budget_tracking: {support: full, note: "Per-token, per-agent, hierarchical cascades, CFO optimization, automatic model downgrade, and risk-unit action budgets"} + security_model: {support: full, note: "Rule engine + LLM evaluator, progressive trust, audit trail, output scanning, hallucination detection, and self-healing SSRF validation"} observability: {support: full, note: "Structured logging, correlation tracking, log shipping, redaction, Prometheus metrics, OTLP"} web_dashboard: {support: full, note: "React 19 dashboard with org chart, tasks, budgets, workflow editor, setup wizard, WebSocket + SSE resilience"} cli: {support: partial, note: "Go binary for container management and verification; not used for agent orchestration"} diff --git a/data/runtime_stats.yaml b/data/runtime_stats.yaml index 07935a79ca..a0c0150853 100644 --- a/data/runtime_stats.yaml +++ b/data/runtime_stats.yaml @@ -1,18 +1,18 @@ schema_version: 1 -last_generated_utc: '2026-05-13T19:13:08Z' -generator_revision: 3e69976a8 +last_generated_utc: '2026-05-15T15:49:25Z' +generator_revision: d29621464 stats: tests: - raw: 30090 + raw: 30536 rounded: 30000 display: 30,000+ mem0_stars: - raw: 55598 + raw: 55792 rounded: 55000 display: 55k+ providers_curated: - raw: 19 - display: '19' + raw: 20 + display: '20' providers_via_litellm: raw: 2708 display: 2700+ @@ -25,7 +25,7 @@ stats: sources: tests: uv run python -m pytest --collect-only -q mem0_stars: gh api repos/mem0ai/mem0 --jq .stargazers_count - providers_curated: synthorg.providers.presets.list_presets + providers_curated: synthorg.providers.presets.list_featured_presets providers_via_litellm: len(litellm.model_cost) subagents: glob .claude/agents/*.md convention_gates: glob scripts/check_*.py diff --git a/docs/design/a2a-protocol.md b/docs/design/a2a-protocol.md index 461d6274c6..3c0cbd7e53 100644 --- a/docs/design/a2a-protocol.md +++ b/docs/design/a2a-protocol.md @@ -94,16 +94,16 @@ See [Communication Coordination -> Loop Prevention](communication-coordination.m `MessageOverhead.is_quadratic` flags configurations where pairwise agent-to-agent messaging approaches `O(n^2)`. External agent federation can amplify this (every external connection potentially talks to every internal agent). -Four enforcement strategies are defined behind `QuadraticEnforcementStrategy`: +Four enforcement strategies are defined behind `QuadraticEnforcementStrategy`. Only `alert_only` is wired into `MessageBus.publish`; the other three are accepted in config and surface in resolution responses, but the per-mode behaviour is not yet implemented. -| Strategy | Behavior | -|----------|-----------| -| `alert_only` (default) | Detect and emit `NotificationDispatcher` warnings | -| `soft_throttle` | Auto-tighten rate limiter on the affected agent group | -| `hard_block` | Reject new connections when `max_agent_connections` exceeded | -| `disabled` | No detection or enforcement | +| Strategy | Status | Behavior | +|----------|--------|-----------| +| `alert_only` (default) | Shipped | Detect and emit `NotificationDispatcher` warnings | +| `soft_throttle` | Planned | Auto-tighten rate limiter on the affected agent group | +| `hard_block` | Planned | Reject new connections when `max_agent_connections` exceeded | +| `disabled` | Planned | No detection or enforcement | -Only `alert_only` ships today; the other three are defined in config but not yet implemented. See [Security -> Quadratic Communication Enforcement](security.md#quadratic-communication-enforcement). +See [Security -> Quadratic Communication Enforcement](security.md#quadratic-communication-enforcement) for the config surface. ## Configuration Summary diff --git a/docs/design/hr-lifecycle.md b/docs/design/hr-lifecycle.md index 2af6197296..3ad677a534 100644 --- a/docs/design/hr-lifecycle.md +++ b/docs/design/hr-lifecycle.md @@ -293,16 +293,25 @@ human decision. !!! info "Design decisions ([Decision Log](../architecture/decisions.md) D9, D10)" + Each decision below names the protocol that ships today and the + concrete `Initial strategy` that the default factory wires. "Initial + strategy" is the shipped default, not aspirational scaffolding; + operators replace it by registering an alternative strategy on the + relevant factory. + - **D9: Task Reassignment.** Pluggable `TaskReassignmentStrategy` protocol. Initial - strategy: queue-return; tasks return to unassigned queue, existing `TaskRoutingService` - re-routes with priority boost for reassigned tasks. Future strategies: - same-department/lowest-load, manager-decides (LLM), HR agent decides. + strategy: queue-return (concrete: `QueueReturnStrategy` in + `src/synthorg/hr/queue_return_strategy.py`); tasks return to unassigned queue, + existing `TaskRoutingService` re-routes with priority boost for reassigned tasks. + Future strategies on the backlog: same-department / lowest-load, manager-decides + (LLM), HR agent decides. - **D10: Memory Archival.** Pluggable `MemoryArchivalStrategy` protocol. Initial - strategy: full snapshot, read-only. Pipeline: retrieve all memories, archive to - `ArchivalStore`, selectively promote semantic+procedural memories to + strategy: full snapshot, read-only (concrete: `FullSnapshotStrategy` in + `src/synthorg/hr/full_snapshot_strategy.py`). Pipeline: retrieve all memories, + archive to `ArchivalStore`, selectively promote semantic+procedural memories to `OrgMemoryBackend` (rule-based), clean hot store, mark agent TERMINATED. Rehiring - restores archived memories into a new `AgentIdentity`. Future strategies: selective - discard, full-accessible. + restores archived memories into a new `AgentIdentity`. Future strategies on the + backlog: selective discard, full-accessible. ## Performance Tracking @@ -486,6 +495,11 @@ Agents can move between seniority levels based on performance: !!! info "Design decisions ([Decision Log](../architecture/decisions.md) D13, D14, D15)" + Each decision below names the protocol that ships today and the + concrete `Initial strategy` that the default factory wires. "Initial + strategy" is the shipped default; operators substitute via the + factory. + - **D13: Promotion Criteria.** Pluggable `PromotionCriteriaStrategy` protocol. Initial strategy: configurable threshold gates. `ThresholdEvaluator` with `min_criteria_met: int` (N of M) + `required_criteria: list[str]`. Setting `min=total` diff --git a/docs/design/tools.md b/docs/design/tools.md index c0ff9a3615..a22e448cd0 100644 --- a/docs/design/tools.md +++ b/docs/design/tools.md @@ -289,11 +289,11 @@ placeholder factories: through `safe_error_description(exc)` (SEC-1) and `domain_code` falls back to `exc.domain_code` when present. - `not_supported(tool_name, reason)`: stable `status="error"` / - `domain_code="not_supported"` envelope for tools whose service facade is - not yet wired. Emits the `MCP_HANDLER_NOT_IMPLEMENTED` WARNING event so - operators can alert on unwired tools. After META-MCP-2 every tool is - wired, so this path only fires for tools registered after PR1 that have - not yet been given a concrete handler. + `domain_code="not_supported"` envelope for tools whose service facade + is not wired. Emits the `MCP_HANDLER_NOT_IMPLEMENTED` WARNING event so + operators can alert on unwired tools. Every tool registered today is + wired; this path fires only for newly registered tools that have not + been given a concrete handler. - `service_fallback(tool_name, reason)`: helper retained in `common.py` for future surgical use. Emits `MCP_HANDLER_SERVICE_FALLBACK`; META-MCP-2 removed every call site and the integration sweep at diff --git a/docs/design/verification-quality.md b/docs/design/verification-quality.md index 66e8c28fc4..418b7b57ae 100644 --- a/docs/design/verification-quality.md +++ b/docs/design/verification-quality.md @@ -134,6 +134,37 @@ intake strategy contracts. --- +## Order of Operations + +The four quality and approval surfaces (verification stage, review +pipeline, mid-execution `AUTH_REQUIRED` park, post-completion +`IN_REVIEW` gate) operate at distinct points in the task lifecycle. + +| Phase | Surface | Trigger | Task status during | Exit | Where documented | +|-------|---------|---------|--------------------|------|------------------| +| Mid-execution | `AUTH_REQUIRED` park | Agent calls a tool that requires approval at runtime (e.g. `deploy`, `db:admin`). Driven by `ApprovalGate` middleware. | `AUTH_REQUIRED` | Approved: returns to `ASSIGNED`. Denied / timeout: `CANCELLED`. | [Security: Approval Workflow](security.md#approval-workflow) | +| Agent done | Verification stage | Workflow blueprint has a `VERIFICATION` control-flow node. Runs as a separate evaluator agent with its own context. | `IN_PROGRESS` (engine-internal) | Pass: continue to next node. Fail: regenerate. Refer: hand to human via `VERIFICATION_REFER` edge. | This page, [Workflow Node and Edge Types](#workflow-node-and-edge-types) | +| Agent done | Review pipeline | Task transitions `IN_PROGRESS` to `IN_REVIEW`. Chain of `ReviewStage` instances runs. | `IN_REVIEW` | First-failing stage returns the task to `IN_PROGRESS`; all-pass moves to `COMPLETED`. | This page, [Review Pipeline](#review-pipeline) | + +Key invariants: + +- `AUTH_REQUIRED` is the mid-execution park reason and uses the + `ApprovalGate` middleware in the agent harness. The review pipeline + is the post-completion quality gate and uses `ReviewGateService`. + The two are independent: a single task can encounter both (e.g. + pause for deploy approval mid-task, then enter `IN_REVIEW` once the + agent finishes). +- The verification stage runs BEFORE the review pipeline when both + are configured for the same workflow. Verification is a workflow + blueprint construct (a node in the graph); the review pipeline + fires on the `IN_PROGRESS` to `IN_REVIEW` transition that happens + after the workflow's last node completes. +- The review pipeline does not mint new `TaskStatus` values; the + task stays at `IN_REVIEW` throughout, with stage progress in + metadata. + +--- + ## See Also - [Task & Workflow Engine](engine.md): task dispatch, state coordination diff --git a/docs/guides/agent-management.md b/docs/guides/agent-management.md index 98e7c8338e..c71b5a4fe8 100644 --- a/docs/guides/agent-management.md +++ b/docs/guides/agent-management.md @@ -93,11 +93,11 @@ Current behavior (`delete_agent` in `src/synthorg/api/services/_org_agent_mutati 2. The agent record is removed from the active org configuration. 3. A company snapshot is persisted and an `API_AGENT_DELETED` event is logged and broadcast on the `agents` WebSocket channel. -Planned (not yet implemented): automated task reassignment via `TaskReassignmentStrategy`, memory archival via `MemoryArchivalStrategy`, selective promotion to `OrgMemoryBackend`, and an explicit `TERMINATED` lifecycle state. Until those land, fires are best paired with manual task reassignment before the DELETE call. +Not yet wired into the DELETE flow: automated task reassignment via `TaskReassignmentStrategy` (concrete: `QueueReturnStrategy` in `src/synthorg/hr/queue_return_strategy.py`), memory archival via `MemoryArchivalStrategy` (concrete: `FullSnapshotStrategy` in `src/synthorg/hr/full_snapshot_strategy.py`), selective promotion to `OrgMemoryBackend`, and an explicit `TERMINATED` lifecycle state. The strategies exist as part of the offboarding-service shape but the API DELETE handler does not invoke them; fires are best paired with manual task reassignment before the DELETE call. -## Rehiring from archive (planned) +## Rehiring from archive -A dedicated `POST /api/v1/agents/{agent_name}/rehire` endpoint (which would restore archived memory into a new identity with a fresh hire date and version chain) is **not yet implemented** in the agents controller. Until it ships, rehiring is a manual two-step: list archived agents via the existing listing, then recreate with `POST /api/v1/agents` using a fresh `CreateAgentOrgRequest` payload; memory restoration is performed out-of-band through the Memory Admin API. This planned surface sits alongside the same lifecycle automation called out in [Firing](#firing). +A dedicated `POST /api/v1/agents/{agent_name}/rehire` endpoint (which would restore archived memory into a new identity with a fresh hire date and version chain) is not implemented in the agents controller. Rehiring is a manual two-step today: list archived agents via the existing listing, then recreate with `POST /api/v1/agents` using a fresh `CreateAgentOrgRequest` payload; memory restoration is performed out-of-band through the Memory Admin API. The endpoint sits alongside the same lifecycle automation called out in [Firing](#firing); track on the GitHub issue tracker. ## Lifecycle events (WebSocket) diff --git a/docs/guides/budget.md b/docs/guides/budget.md index 7818c51fa0..cdf24b79d2 100644 --- a/docs/guides/budget.md +++ b/docs/guides/budget.md @@ -275,7 +275,7 @@ curl "http://localhost:3001/api/v1/budget/records?task_id=${TASK_ID}" \ The response includes `data` (paginated records), `daily_summary` (per-day totals aggregated across ALL matching records, not just the page), and `period_summary` (overall totals + computed `avg_cost`). -Supported query parameters: `agent_id`, `task_id`, `offset`, `limit`. Additional slicing (by provider, model, tag, project, date range) is done client-side from the paginated response today; a dedicated report-generation endpoint is planned but not yet implemented. +Supported query parameters: `agent_id`, `task_id`, `offset`, `limit`. Additional slicing (by provider, model, tag, project, date range) is done client-side from the paginated response. A dedicated report-generation endpoint with server-side slicing is tracked on the GitHub issue tracker. ### Budget alert webhook integration diff --git a/docs/guides/company-config.md b/docs/guides/company-config.md index 821ca4d0b8..01be5bac85 100644 --- a/docs/guides/company-config.md +++ b/docs/guides/company-config.md @@ -188,6 +188,41 @@ Each provider lists its available models under the `models` key: alias: "medium" ``` +=== "Cross-provider Fallback" + + Configure a secondary provider that takes over when the primary + rejects, rate-limits, or times out a request. The `degradation` + block on the primary names the fallback provider; agents resolve + the alias on the secondary when degradation fires. + + ```yaml + providers: + primary-cloud: + auth_type: api_key + api_key: "sk-..." + degradation: + fallback_provider: secondary-cloud + trigger_on: + - rate_limit + - provider_timeout + - provider_connection + models: + - id: "example-large-001" + alias: "large" + - id: "example-small-001" + alias: "small" + secondary-cloud: + auth_type: api_key + api_key: "sk-backup-..." + models: + # Both providers expose the same alias names so the routing + # layer can hand off without reconfiguring agents. + - id: "alt-large-001" + alias: "large" + - id: "alt-small-001" + alias: "small" + ``` + --- ## Model Routing @@ -207,7 +242,7 @@ The `routing` section controls how models are selected for agent tasks. ### Routing Rules -Rules are evaluated in order. Each rule matches by `role_level` and/or `task_type`: +Rules are evaluated in order. Each rule matches by `role_level` and / or `task_type`. **Validation: at least one of `role_level` or `task_type` MUST be set per rule.** A rule with both fields null is rejected at company-load time with a `ConfigValidationError`. ```yaml routing: @@ -232,10 +267,6 @@ routing: | `preferred_model` | string | *(required)* | Preferred model alias or ID | | `fallback` | string | `null` | Fallback model | -!!! note - - At least one of `role_level` or `task_type` must be set per rule. - --- ## Agents @@ -301,20 +332,27 @@ Operational data persistence (tasks, cost records, messages, workflows, audit en persistence: backend: "postgres" # "sqlite" (default) or "postgres" sqlite: - path: "/data/synthorg.db" # file path; used when backend == "sqlite" - postgres: # used when backend == "postgres" + path: "/data/synthorg.db" # file path; used when backend == "sqlite" + wal_mode: true # enable WAL journal mode (default) + journal_size_limit: 67108864 # WAL journal cap in bytes (default 64 MB) + postgres: # required when backend == "postgres" host: "db.internal" - port: 5432 + port: 5432 # default 5432 database: "synthorg" username: "synthorg_app" - password: "${POSTGRES_PASSWORD}" # SecretStr -- redacted from logs - ssl_mode: "verify-full" # prefer verify-full in production - pool_min_size: 1 - pool_max_size: 10 - pool_timeout_seconds: 30.0 - application_name: "synthorg" - statement_timeout_ms: 30000 - connect_timeout_seconds: 10.0 + password: "${POSTGRES_PASSWORD}" # SecretStr; redacted from logs + ssl_mode: "verify-full" # default "require"; prefer "verify-full" in prod + pool_min_size: 1 # default 1 + pool_max_size: 10 # default 10; must be >= pool_min_size + pool_timeout_seconds: 30.0 # default 30.0 + application_name: "synthorg" # appears in pg_stat_activity + statement_timeout_ms: 30000 # default 30000 (0 disables) + connect_timeout_seconds: 10.0 # default 10.0 + # TimescaleDB hypertable support (Apache-2.0 features only). + # Not available on managed Postgres providers (RDS, Cloud SQL, Azure). + enable_timescaledb: false + cost_records_chunk_interval: "1 day" + audit_entries_chunk_interval: "1 day" ``` The Postgres backend requires the optional extra: install with diff --git a/docs/guides/memory.md b/docs/guides/memory.md index 9061b68644..7da7eceb58 100644 --- a/docs/guides/memory.md +++ b/docs/guides/memory.md @@ -368,9 +368,9 @@ curl -X DELETE http://localhost:3001/api/v1/admin/memory/fine-tune/checkpoints/$ -H "Cookie: ${SESSION}" ``` -### Planned admin endpoints +### Admin endpoints on the backlog -Consolidation, reindex, procedural-skill management, and organization-memory promotion are described in the [Memory design page](../design/memory.md#consolidation-and-retention) but are not yet exposed as REST endpoints. Track progress against the Memory roadmap; in the meantime these operations happen on agent-lifecycle boundaries (consolidation cycles, startup reindex, procedural-memory auto-generation). +Consolidation, reindex, procedural-skill management, and organization-memory promotion are described in the [Memory design page](../design/memory.md#consolidation-and-retention) but are not exposed as REST endpoints today. These operations happen on agent-lifecycle boundaries (consolidation cycles, startup reindex, procedural-memory auto-generation); a dedicated admin surface is tracked on the GitHub issue tracker under the memory label. --- diff --git a/docs/guides/workflow-api.md b/docs/guides/workflow-api.md index 63083cae43..69fbf2af01 100644 --- a/docs/guides/workflow-api.md +++ b/docs/guides/workflow-api.md @@ -215,6 +215,54 @@ See the [engine design](../design/engine.md#subworkflows) for the full subworkfl --- +--- + +## Company-Level Workflow Configuration + +The runtime workflow type (Kanban, Agile Kanban, sequential, parallel) +and its sub-config (board columns, sprint cadence, ceremony policy) is +configured in the company YAML alongside agents and providers. The +runtime engine consults the active type only; the inactive +sub-configs are accepted for convenience but emit a +`WORKFLOW_CONFIG_UNUSED_SUBCONFIG` warning if customised. + +```yaml +workflow: + workflow_type: agile_kanban # kanban | agile_kanban | sequential | parallel + kanban: + columns: + - name: "To Do" + wip_limit: null # null = unlimited + - name: "In Progress" + wip_limit: 4 + - name: "In Review" + wip_limit: 2 + - name: "Done" + wip_limit: null + sprint: + duration_days: 14 + velocity_calculator: "rolling_average" + auto_transition: true + ceremonies: + planning_strategy: "fixed_start" + retro_strategy: "fixed_end" +``` + +The active `workflow_type` controls which sub-config blocks the engine +reads: + +| `workflow_type` | Reads `kanban` | Reads `sprint` | +|------------------|----------------|----------------| +| `KANBAN` | yes | no | +| `AGILE_KANBAN` | yes | yes | +| `SEQUENTIAL` / `PARALLEL` | no | no | + +Customising an unused sub-config block does not break anything; the +engine emits a single advisory warning at company-load time so +operators can clean the YAML up at their leisure. + +--- + ## See Also - [OpenAPI Reference](../openapi/index.md): full schema for every endpoint diff --git a/docs/reference/cli-commands.md b/docs/reference/cli-commands.md new file mode 100644 index 0000000000..cbab6a362d --- /dev/null +++ b/docs/reference/cli-commands.md @@ -0,0 +1,116 @@ +--- +title: CLI Per-Command Flags +description: Operator reference for synthorg subcommands and their flags, with defaults and tunable env-var overrides. +--- + +# CLI Per-Command Flags + +Operator reference for the `synthorg` CLI binary. The CLI is Docker-only: `init` provisions the deployment, `start` / `stop` / `update` manage the container lifecycle, `status` / `logs` / `doctor` introspect, `backup` / `wipe` / `cleanup` cover data and image hygiene. Feature work runs in the web dashboard against the REST API. + +Defaults shown below are compiled into the binary; tunable defaults are also reachable via `synthorg config set ` and the matching `SYNTHORG_*` env var. + +## Lifecycle + +| Command | Flag | Default | Description | +|---------|------|---------|-------------| +| `init` | `--backend-port` | (prompted) | Host port for the REST / WebSocket API | +| `init` | `--web-port` | (prompted) | Host port for the web dashboard | +| `init` | `--sandbox` | (prompted) | Mount the Docker socket for the agent code-execution sandbox | +| `init` | `--log-level` | (prompted) | Backend log level (`debug` / `info` / `warn` / `error`) | +| `init` | `--image-tag` | (pinned) | Override container image tag | +| `init` | `--channel` | `stable` | Release channel (`stable` / `dev`) | +| `init` | `--bus-backend` | `inproc` | Communication bus backend (`inproc` / `nats`) | +| `init` | `--persistence-backend` | `sqlite` | Persistence backend (`sqlite` / `postgres`) | +| `init` | `--postgres-port` | `5432` | Host port when `--persistence-backend=postgres` | +| `init` | `--encrypt-secrets` | `true` | Encrypt connection secrets at rest via Fernet (`true` / `false`) | +| `start` | `--no-wait` | `false` | Skip the health check after start | +| `start` | `--timeout` | `90s` | Health-check timeout (Go duration, e.g. `90s`, `2m`) | +| `start` | `--no-pull` | `false` | Skip image verification and pull | +| `start` | `--dry-run` | `false` | Show what would happen without executing | +| `start` | `--no-detach` | `false` | Run in foreground (stream logs; Ctrl+C to stop) | +| `start` | `--no-verify` | `false` | Skip image signature verification (also `--skip-verify`) | +| `stop` | `--timeout` / `-t` | `10s` | Graceful shutdown timeout | +| `stop` | `--volumes` | `false` | Remove named volumes (destructive) | +| `update` | `--dry-run` | `false` | Show what would happen without executing | +| `update` | `--no-restart` | `false` | Pull images but do not restart containers | +| `update` | `--timeout` | `90s` | Health-check and verification timeout | +| `update` | `--cli-only` | `false` | Only update the CLI binary | +| `update` | `--images-only` | `false` | Only update container images (skip CLI) | +| `update` | `--check` | `false` | Check for updates and exit (`0`=current, `10`=available) | + +## Introspection + +| Command | Flag | Default | Description | +|---------|------|---------|-------------| +| `status` | `--watch` / `-w` | `false` | Continuously poll status | +| `status` | `--interval` | `2s` | Watch polling interval (Go duration) | +| `status` | `--wide` | `false` | Show extra columns (ports) | +| `status` | `--no-trunc` | `false` | Show full image names | +| `status` | `--services` | (all) | Filter by service names (comma-separated) | +| `status` | `--check` | `false` | Exit code only (`0`=healthy, `3`=unhealthy, `4`=unreachable) | +| `logs` | `--follow` / `-f` | `false` | Follow log output | +| `logs` | `--tail` | `100` | Number of lines to show from the tail | +| `logs` | `--since` | (none) | Show logs since timestamp or relative (e.g. `1h`, `2024-01-01`) | +| `logs` | `--until` | (none) | Show logs until timestamp or relative | +| `logs` | `--timestamps` / `-t` | `false` | Show timestamps | +| `logs` | `--no-log-prefix` | `false` | Suppress the service prefix | +| `doctor` | `--checks` | `all` | Comma-separated check categories (`environment`, `health`, ...) | +| `doctor` | `--fix` | `false` | Auto-fix detected issues where supported | +| `version` | `--short` | `false` | Print only the version string | + +## Hygiene + +| Command | Flag | Default | Description | +|---------|------|---------|-------------| +| `cleanup` | `--dry-run` | `false` | List images without removing | +| `cleanup` | `--all` | `false` | Include ALL SynthOrg images, not just old ones | +| `cleanup` | `--keep` | `0` | Keep N most recent previous versions (`0`=remove all old) | +| `wipe` | `--dry-run` | `false` | Show what would happen without executing | +| `wipe` | `--no-backup` | `false` | Skip the interactive backup prompt | +| `wipe` | `--keep-images` | `false` | Leave container images on disk | +| `uninstall` | `--keep-data` | `false` | Leave the data directory in place | +| `uninstall` | `--keep-images` | `false` | Leave container images on disk | + +## Backup + +| Command | Flag | Default | Description | +|---------|------|---------|-------------| +| `backup create` | `--output` / `-o` | (data dir) | Output path for the backup archive | +| `backup create` | `--timeout` | `60s` | API request timeout (Go duration). Default is the `backup_create_timeout` tunable. | +| `backup list` | `--limit` / `-n` | `0` | Show N most recent (`0`=all) | +| `backup list` | `--sort` | `newest` | Sort order (`newest` / `oldest` / `size`) | +| `backup restore` | `--confirm` | (required) | Required acknowledgement that restore overwrites current data | +| `backup restore` | `--dry-run` | `false` | Validate the archive without overwriting | +| `backup restore` | `--no-restart` | `false` | Restore without restarting containers afterwards | +| `backup restore` | `--timeout` | `30s` | API request timeout (Go duration). Default is the `backup_restore_timeout` tunable. | + +## Workers + +| Command | Flag | Default | Description | +|---------|------|---------|-------------| +| `worker start` | `--workers` | `4` | Number of worker processes | +| `worker start` | `--nats-url` | `nats://nats:4222` | NATS URL (also `SYNTHORG_NATS_URL`) | +| `worker start` | `--stream-prefix` | `SYNTHORG` | NATS stream prefix (also `SYNTHORG_DEFAULT_NATS_STREAM_PREFIX`) | +| `worker start` | `--container` | (empty) | Container name; falls back to `synthorg-backend` when unset | + +## Completion + +| Command | Description | +|---------|-------------| +| `completion ` | Emit autocompletion script (`bash` / `zsh` / `fish` / `powershell`) | +| `completion-install ` | Write the autocompletion script into your shell startup | + +## Scaffolding + +| Command | Flag | Default | Description | +|---------|------|---------|-------------| +| `new ` | `--dry-run` | `false` | Print the file plan without writing | +| `new ` | `--overwrite` | `false` | Overwrite existing files in the target | + +`` is one of `service` / `persistence` / `tool` / `controller`. See [scaffolding.md](scaffolding.md) for the per-kind file set and the convention enforcement coverage. + +## See also + +- [cli-config-subcommands.md](cli-config-subcommands.md): `synthorg config` get / set / unset and the full settable-key inventory. +- [cli-env-vars.md](cli-env-vars.md): the `SYNTHORG_*` env var inventory consumed by the CLI binary. +- [cli-persistence-backends.md](cli-persistence-backends.md): SQLite vs Postgres orchestration. diff --git a/docs/research/multi-agent-failure-audit.md b/docs/research/multi-agent-failure-audit.md index cd2b30b87d..50166a402d 100644 --- a/docs/research/multi-agent-failure-audit.md +++ b/docs/research/multi-agent-failure-audit.md @@ -420,7 +420,7 @@ appendix maps each risk to SynthOrg coverage. Full analysis in | # | Risk | Coverage | Location / Action | |---|---|---|---| -| 1.1 | Tacit collusion | Gap (low priority) | Only relevant for negotiation/client-simulation templates (v0.8+). | +| 1.1 | Tacit collusion | Gap (low priority) | Only relevant for negotiation / client-simulation templates that are still on the backlog. | | 1.2 | Priority monopolization | Partial | `budget/coordination_config.py`; no fee/rotation mechanism yet. | | 1.3 | Competitive task avoidance | Partial | Manual / hierarchical strategies safe; `AuctionAssignmentStrategy` vulnerable. | | 1.4 | Strategic information withholding | Gap (low priority) | Material only for adversarial A2A federation. Constraint on #1253. | diff --git a/docs/research/s1-multi-agent-decision.md b/docs/research/s1-multi-agent-decision.md index f5f00790f0..ab0a025d3c 100644 --- a/docs/research/s1-multi-agent-decision.md +++ b/docs/research/s1-multi-agent-decision.md @@ -59,7 +59,7 @@ For each risk: coverage status, SynthOrg design location, and action. | # | Risk | Coverage | Location | Action | |---|---|---|---|---| -| **1.1** | Tacit collusion | **Gap** (low priority) | - | LATER: mechanism-level anti-collusion only relevant for negotiation/client-simulation templates (v0.8+). | +| **1.1** | Tacit collusion | **Gap** (low priority) | - | LATER: mechanism-level anti-collusion only relevant for negotiation / client-simulation templates on the backlog. | | **1.2** | Priority monopolization | **Partial** | `budget/coordination_config.py`, task priority field | Current priority is manual/role-based; no fee/rotation mechanism. LATER: relevant only when multiple clients compete for shared agent pool. | | **1.3** | Competitive task avoidance | **Partial** | `TaskAssignmentStrategy` (6 strategies) | Manual / hierarchical hard-bind is a mitigation by design. `AuctionAssignmentStrategy` is vulnerable; document risk in docstring. | | **1.4** | Strategic information withholding | **Gap** (low priority) | `Message` parts have no integrity proofs | LATER: only material for adversarial A2A federation. Ties to R4. | diff --git a/docs/roadmap/future-vision.md b/docs/roadmap/future-vision.md index 9f7b47904c..7cb1c8ae81 100644 --- a/docs/roadmap/future-vision.md +++ b/docs/roadmap/future-vision.md @@ -6,13 +6,12 @@ The longer-term direction for SynthOrg. Items here are either **planned** (sched | Feature | Status | |---------|--------| -| PostgreSQL performance tuning + TimescaleDB hypertable support | Planned | +| TimescaleDB hypertable support for append-only time-series tables | Planned | | Multi-project support with project-scoped teams and isolated budgets | Planned | | Dynamic company scaling across clusters | Planned | | Plugin system | Planned | | Benchmarking suite | Planned | | REST API and dashboard UI for agent evolution | Planned | -| Notification sink MVP (Slack, ntfy, HTTP-relay) | Planned | | OpenAPI TypeScript codegen for the dashboard | Planned | ## Backlog (Research Candidates) diff --git a/docs/roadmap/index.md b/docs/roadmap/index.md index 2169acc13e..47c81b2cda 100644 --- a/docs/roadmap/index.md +++ b/docs/roadmap/index.md @@ -2,7 +2,7 @@ ## Current Status -SynthOrg is in **active development**. The core subsystems are built, tested (29,000+ tests in the latest run, 80%+ coverage), and integrated through a REST + WebSocket API, React 19 dashboard, and Go CLI. See the [releases page](https://github.com/Aureliolo/synthorg/releases) for the latest tagged build. +SynthOrg is in **active development**. The core subsystems are built, tested (30,000+ tests in the latest run, 80%+ coverage), and integrated through a REST + WebSocket API, React 19 dashboard, and Go CLI. See the [releases page](https://github.com/Aureliolo/synthorg/releases) for the latest tagged build. What works today: @@ -14,7 +14,7 @@ What works today: - **Memory** with hybrid retrieval (dense + BM25 sparse with RRF fusion), tool-based injection, procedural memory auto-generation from failures, consolidation (LLM Merge, Search-and-Ask), and MVCC snapshot reads on the shared knowledge store - **Communication** with message bus, hierarchical delegation with loop prevention, conflict resolution (4 strategies), meeting protocols, and an A2A gateway for external agent systems - **Workflow engine** with Kanban, Agile sprints, ceremony scheduling (8 strategies), visual workflow editor, and workflow execution from graph definitions -- **Tool ecosystem** with 8+ categories (file system, git, web, database, terminal, sandbox, MCP bridge, analytics, communication) and sandbox security (auth proxy, gVisor, Chainguard packages) +- **Tool ecosystem** with 12+ categories (file system, code execution, version control, web, database, terminal, design, communication, analytics, deployment, memory, MCP servers) and sandbox security (auth proxy, gVisor, Chainguard packages) - **Persistence** with SQLite (single-node default) and PostgreSQL (multi-instance, dual-backend conformance-tested) backends, yoyo-managed schema migrations, and ISO 4217 currency stamping on every cost-bearing row - **Distributed runtime** with NATS JetStream message bus and distributed task queue for multi-instance deployments - **Web dashboard** (React 19 + shadcn/ui) with org chart, task board, agent detail, budget tracking, provider management, workflow editor, ceremony policy settings, setup wizard, and WebSocket / SSE resilience @@ -23,6 +23,7 @@ What works today: - **Multi-user access** with HttpOnly cookie sessions, CSRF protection, concurrent session control, JWT auth, and session management - **Local model management** for Ollama and LM Studio (browse, pull, delete, configure launch parameters) - **Observability** with structured logging, correlation tracking, log shipping, redaction, Prometheus metrics, and OTLP +- **Notification sinks** with operator alerts via Slack, ntfy, email, and HTTP relay (severity filtering and per-channel routing) What's not there yet: @@ -34,10 +35,9 @@ What's not there yet: Prioritised by dependency order. All work is tracked on the [GitHub issue tracker](https://github.com/Aureliolo/synthorg/issues). - Operational guides: runtime settings reference, notifications and event subscriptions, workflow API tutorials, agent lifecycle, memory admin API -- Notification sink MVP for operator alerts (Slack, ntfy, email via HTTP sink relay) - OpenAPI TypeScript codegen for the web dashboard - REST API and dashboard UI for agent evolution configuration and triggering -- PostgreSQL performance tuning + TimescaleDB hypertable support for append-only time-series tables +- TimescaleDB hypertable support for append-only time-series tables - Dynamic company scaling across clusters - Multi-project support with project-scoped teams and isolated budgets - Plugin system and benchmarking suite diff --git a/docs/user_guide.md b/docs/user_guide.md index ba66796661..3012cb2154 100644 --- a/docs/user_guide.md +++ b/docs/user_guide.md @@ -75,8 +75,8 @@ After the containers are running, open the web dashboard at [http://localhost:30 1. **Account** (conditional): create the first admin user. This step only appears when no admin account exists yet. 2. **Template**: choose a company template. Templates are displayed in a searchable grid with category and size filters, grouped into Recommended and Other sections. Each card shows structural metadata (agent count, departments, autonomy level, workflow). Side-by-side comparison is available. -3. **Company**: name your synthetic organization, set a description, choose a display currency, and select a model tier profile (Economy, Balanced, or Premium). -4. **Providers**: configure LLM providers. Local providers (e.g. Ollama) are auto-detected with a re-scan button; additional providers can be added via the full provider form supporting API key, subscription, and custom configurations. Model discovery runs automatically after adding a provider. +3. **Providers**: configure LLM providers. Local providers (e.g. Ollama) are auto-detected with a re-scan button; additional providers can be added via the full provider form supporting API key, subscription, and custom configurations. Model discovery runs automatically after adding a provider. +4. **Company**: name your synthetic organization, set a description, choose a display currency, and select a model tier profile (Economy, Balanced, or Premium). 5. **Agents**: customize agent names, personality presets, and model assignments. Agents are pre-populated from the selected template with models matched to configured providers. 6. **Theme**: set UI preferences including color palette, typography, layout density, animation level, and sidebar position. 7. **Complete**: review a summary of your configuration and launch the organization. diff --git a/mkdocs.yml b/mkdocs.yml index 6a53ff689b..19951a6659 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -31,6 +31,14 @@ theme: plugins: - search + # Preserve old URLs from before docs reshuffles. Each line maps an + # old path to its current location. Keep entries minimal and remove + # any once the corresponding inbound links are updated. + - redirects: + redirect_maps: + 'getting-started.md': 'getting_started.md' + 'decisions.md': 'architecture/decisions.md' + 'comparison.md': 'reference/comparison.md' # D2 rendering is handled via pymdownx.superfences custom_fences # (see d2_fence.py) because zensical does not run mkdocs plugin # lifecycle hooks. Keep the config here so d2_fence.py reads it. @@ -179,6 +187,11 @@ nav: - reference/standards.md - Implicit Conventions: reference/conventions.md - Framework Comparison: reference/comparison.md + - CLI Per-Command Flags: reference/cli-commands.md + - CLI Config Subcommands: reference/cli-config-subcommands.md + - CLI Environment Variables: reference/cli-env-vars.md + - CLI Persistence Backends: reference/cli-persistence-backends.md + - Configuration Precedence: reference/configuration-precedence.md - Embedding Evaluation: reference/embedding-evaluation.md - Scoring Hyperparameters: reference/scoring-hyperparameters.md - Error Reference: errors.md diff --git a/pyproject.toml b/pyproject.toml index 85eacdd14c..3b25475479 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -91,6 +91,7 @@ docs = [ "mkdocstrings[python]==1.0.4", "griffe-pydantic==1.3.1", "mkdocs-d2-plugin==1.7.0", + "mkdocs-redirects==1.2.2", # Used by scripts/patch_sitemap.py to safely parse the built sitemap. # Present as a transitive via py-serializable, but declared here so the # build script has a stable explicit dependency. diff --git a/scripts/generate_runtime_stats.py b/scripts/generate_runtime_stats.py index e6029f23a0..8055126a12 100644 --- a/scripts/generate_runtime_stats.py +++ b/scripts/generate_runtime_stats.py @@ -5,7 +5,7 @@ * ``tests`` -- ``uv run python -m pytest --collect-only -q`` * ``mem0_stars`` -- ``gh api repos/mem0ai/mem0 --jq .stargazers_count`` -* ``providers_curated`` -- ``len(synthorg.providers.presets.list_presets())`` +* ``providers_curated`` -- ``len(synthorg.providers.presets.list_featured_presets())`` * ``providers_via_litellm`` -- ``len(litellm.model_cost)`` * ``subagents`` -- ``glob .claude/agents/*.md`` * ``convention_gates`` -- ``glob scripts/check_*.py`` @@ -27,6 +27,7 @@ Numeric thresholds are named module constants -- never magic literals. """ +import ast import datetime as dt import re import subprocess @@ -65,7 +66,7 @@ _SOURCES: Final[dict[str, str]] = { "tests": "uv run python -m pytest --collect-only -q", "mem0_stars": "gh api repos/mem0ai/mem0 --jq .stargazers_count", - "providers_curated": "synthorg.providers.presets.list_presets", + "providers_curated": "synthorg.providers.presets.list_featured_presets", "providers_via_litellm": "len(litellm.model_cost)", "subagents": "glob .claude/agents/*.md", "convention_gates": "glob scripts/check_*.py", @@ -197,18 +198,57 @@ def _fetch_mem0_stars() -> StatEntry: } +_PRESETS_PATH: Final[Path] = REPO_ROOT / "src" / "synthorg" / "providers" / "presets.py" +_FEATURED_TUPLE_NAME: Final[str] = "_FEATURED_PRESETS" + + def _fetch_providers_curated() -> StatEntry: - """Count curated provider presets via ``synthorg.providers.presets``.""" + """Count hand-curated featured provider presets. + + Tracks ``_FEATURED_PRESETS`` (the hand-curated entries with brand + logo, vetted description, and prefilled model defaults), not the + full ``list_presets()`` surface which auto-derives an entry for + every LiteLLM chat namespace. The public claim is the featured + count because that is what surfaces in the setup wizard's primary + grid. + + Uses an ``ast`` walk of ``presets.py`` rather than an ``import``: + the providers package pulls in the budget tracker which has its own + initialisation chain, and a one-shot script must not pay that cost + (or fail when the chain has unrelated circular-import drift). The + tuple literal is the authoritative source either way. + """ name = "providers_curated" source = _SOURCES[name] + if not _PRESETS_PATH.is_file(): + raise _StatFetchError(name, source, f"{_PRESETS_PATH} not found") try: - from synthorg.providers.presets import list_presets - except ImportError as exc: + tree = ast.parse(_PRESETS_PATH.read_text(encoding="utf-8")) + except (OSError, SyntaxError) as exc: raise _StatFetchError( - name, source, f"could not import synthorg.providers.presets: {exc}" + name, source, f"could not parse {_PRESETS_PATH.name}: {exc}" ) from exc - raw = len(list_presets()) - return {"raw": raw, "display": str(raw)} + for node in tree.body: + if not isinstance(node, ast.AnnAssign | ast.Assign): + continue + targets = [node.target] if isinstance(node, ast.AnnAssign) else node.targets + for target in targets: + if not isinstance(target, ast.Name): + continue + if target.id != _FEATURED_TUPLE_NAME: + continue + value = node.value + if not isinstance(value, ast.Tuple): + raise _StatFetchError( + name, + source, + f"{_FEATURED_TUPLE_NAME} is not a tuple literal", + ) + raw = len(value.elts) + return {"raw": raw, "display": str(raw)} + raise _StatFetchError( + name, source, f"{_FEATURED_TUPLE_NAME} not found in {_PRESETS_PATH.name}" + ) def _fetch_providers_via_litellm() -> StatEntry: diff --git a/site/src/components/FeatureShowcase.astro b/site/src/components/FeatureShowcase.astro index 827b5b01a6..6de4f17af3 100644 --- a/site/src/components/FeatureShowcase.astro +++ b/site/src/components/FeatureShowcase.astro @@ -16,7 +16,7 @@ const heroFeatures = [ title: "Governance & Security", headline: "Every action classified, audited, and gated.", description: - "Hybrid SecOps: rule engine fast-path for ~95% of actions in sub-millisecond, plus LLM evaluator for uncertain cases. Five autonomy tiers. 25+ classified action types. Budget enforcement at every layer.", + "Hybrid SecOps: rule engine fast-path for ~95% of actions in sub-millisecond, plus LLM evaluator for uncertain cases. Four autonomy tiers (full, semi, supervised, locked). 25+ classified action types. Budget enforcement at every layer.", differentiator: "Progressive trust: privileges never auto-granted, auto-downgrade on violations.", href: "/docs/security/", diff --git a/site/src/pages/compare.astro b/site/src/pages/compare.astro index cd96e47f02..044578d6db 100644 --- a/site/src/pages/compare.astro +++ b/site/src/pages/compare.astro @@ -100,9 +100,10 @@ const description = `Interactive comparison of SynthOrg against ${competitorCoun

Progressive Security

- A rule engine combined with LLM-based evaluation, 5 autonomy tiers, - progressive trust scoring, comprehensive audit trails, and output scanning. - Security is built into the framework from day one, not bolted on after. + A rule engine combined with LLM-based evaluation, 4 autonomy tiers + (full, semi, supervised, locked), progressive trust scoring, + comprehensive audit trails, and output scanning. Security is built + into the framework from day one, not bolted on after.

diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro index e32660908d..796db25813 100644 --- a/site/src/pages/index.astro +++ b/site/src/pages/index.astro @@ -153,10 +153,10 @@ const description = "Framework for building synthetic organizations, autonomous
🛡

Runtime Protection

-

Hybrid SecOps: rule engine fast-path handles ~95% of actions in sub-millisecond, with an LLM evaluator for uncertain edge cases. 25+ classified action types, five autonomy tiers.

+

Hybrid SecOps: rule engine fast-path handles ~95% of actions in sub-millisecond, with an LLM evaluator for uncertain edge cases. 25+ classified action types, four autonomy tiers (full, semi, supervised, locked).

  • Fail-closed rule engine + LLM fallback evaluator
  • -
  • 5 autonomy tiers with progressive trust
  • +
  • 4 autonomy tiers with progressive trust
  • Output scanning with redaction policies
  • Persistent audit trail for every decision
diff --git a/src/synthorg/api/controllers/agent_identity_versions.py b/src/synthorg/api/controllers/agent_identity_versions.py index 94f836031d..6074df85fc 100644 --- a/src/synthorg/api/controllers/agent_identity_versions.py +++ b/src/synthorg/api/controllers/agent_identity_versions.py @@ -178,7 +178,13 @@ async def get_version( self, state: State, agent_id: PathId, - version_num: Annotated[int, Parameter(ge=1)], + version_num: Annotated[ + int, + Parameter( + ge=1, + description="Agent identity version (one-based; 1 = first revision).", + ), + ], ) -> ApiResponse[SnapshotT]: """Get a specific agent identity version snapshot.""" version = await state.app_state.agent_version_service.get_version( diff --git a/src/synthorg/api/controllers/approvals.py b/src/synthorg/api/controllers/approvals.py index e08bc08cea..7cc276b343 100644 --- a/src/synthorg/api/controllers/approvals.py +++ b/src/synthorg/api/controllers/approvals.py @@ -514,10 +514,21 @@ class ApprovalsController(Controller): async def list_approvals( # noqa: PLR0913 self, state: State, - status: ApprovalStatus | None = None, - risk_level: ApprovalRiskLevel | None = None, - action_type: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] - | None = None, + status: Annotated[ + ApprovalStatus | None, + Parameter(description="Filter to approvals in this status."), + ] = None, + risk_level: Annotated[ + ApprovalRiskLevel | None, + Parameter(description="Filter to approvals at this risk level."), + ] = None, + action_type: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to approvals raised for this action type.", + ), + ] = None, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, ) -> PaginatedResponse[ApprovalResponse]: diff --git a/src/synthorg/api/controllers/audit.py b/src/synthorg/api/controllers/audit.py index b3b31e48a9..b025dbd8a6 100644 --- a/src/synthorg/api/controllers/audit.py +++ b/src/synthorg/api/controllers/audit.py @@ -94,17 +94,62 @@ class AuditController(Controller): async def list_audit_entries( # noqa: PLR0913 self, state: State, - agent_id: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] | None = None, - tool_name: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] | None = None, - action_type: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] - | None = None, - verdict: Annotated[str, Parameter(max_length=50)] | None = None, - since: datetime | None = None, - until: datetime | None = None, + agent_id: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to audit entries emitted for this agent.", + ), + ] = None, + tool_name: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to audit entries emitted for this tool.", + ), + ] = None, + action_type: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to audit entries with this action type.", + ), + ] = None, + verdict: Annotated[ + str | None, + Parameter( + max_length=50, + description="Filter by verdict (APPROVED / DENIED).", + ), + ] = None, + since: Annotated[ + datetime | None, + Parameter( + description="Filter to entries emitted at or after this ISO timestamp." + ), + ] = None, + until: Annotated[ + datetime | None, + Parameter( + description="Filter to entries emitted at or before this ISO timestamp." + ), + ] = None, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, - jsonb_contains: Annotated[str, Parameter(max_length=2048)] | None = None, - jsonb_key_exists: Annotated[str, Parameter(max_length=256)] | None = None, + jsonb_contains: Annotated[ + str | None, + Parameter( + max_length=2048, + description="JSONB containment filter (Postgres @>); JSON-encoded.", + ), + ] = None, + jsonb_key_exists: Annotated[ + str | None, + Parameter( + max_length=256, + description="Filter to entries whose payload has this top-level key.", + ), + ] = None, ) -> PaginatedResponse[AuditEntry]: """Query audit entries with optional filters. diff --git a/src/synthorg/api/controllers/budget.py b/src/synthorg/api/controllers/budget.py index 9d1593eabd..be2de416f6 100644 --- a/src/synthorg/api/controllers/budget.py +++ b/src/synthorg/api/controllers/budget.py @@ -297,8 +297,20 @@ async def get_budget_config( async def list_cost_records( self, state: State, - agent_id: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] | None = None, - task_id: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] | None = None, + agent_id: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to cost records emitted by this agent.", + ), + ] = None, + task_id: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to cost records emitted under this task.", + ), + ] = None, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, ) -> CostRecordListResponse: diff --git a/src/synthorg/api/controllers/budget_config_versions.py b/src/synthorg/api/controllers/budget_config_versions.py index 0c8bbdc996..2d85b6ab6b 100644 --- a/src/synthorg/api/controllers/budget_config_versions.py +++ b/src/synthorg/api/controllers/budget_config_versions.py @@ -81,7 +81,13 @@ async def list_versions( async def get_version( self, state: State, - version_num: Annotated[int, Parameter(ge=1)], + version_num: Annotated[ + int, + Parameter( + ge=1, + description="Budget config version (one-based; 1 = first revision).", + ), + ], ) -> Response[ApiResponse[SnapshotT]]: """Get a specific budget config version snapshot.""" repo = state.app_state.persistence.budget_config_versions diff --git a/src/synthorg/api/controllers/ceremony_policy.py b/src/synthorg/api/controllers/ceremony_policy.py index b92ca4fd44..42f04fd9d1 100644 --- a/src/synthorg/api/controllers/ceremony_policy.py +++ b/src/synthorg/api/controllers/ceremony_policy.py @@ -15,6 +15,7 @@ from synthorg.api.dto import ApiResponse from synthorg.api.guards import require_read_access +from synthorg.api.path_params import QUERY_MAX_LENGTH from synthorg.api.state import AppState # noqa: TC001 from synthorg.coordination.ceremony_policy.policy_resolver import ( ActiveCeremonyStrategyResponse, @@ -61,7 +62,10 @@ async def get_resolved_policy( state: State, department: Annotated[ NotBlankStr | None, - Parameter(max_length=128), + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Department to resolve against; omit for project policy.", + ), ] = None, ) -> ApiResponse[ResolvedCeremonyPolicyResponse]: """Return the fully resolved ceremony policy with field origins.""" diff --git a/src/synthorg/api/controllers/company_versions.py b/src/synthorg/api/controllers/company_versions.py index 43cdeff230..254dbdc5bc 100644 --- a/src/synthorg/api/controllers/company_versions.py +++ b/src/synthorg/api/controllers/company_versions.py @@ -81,7 +81,13 @@ async def list_versions( async def get_version( self, state: State, - version_num: Annotated[int, Parameter(ge=1)], + version_num: Annotated[ + int, + Parameter( + ge=1, + description="Company version (one-based; 1 = first revision).", + ), + ], ) -> Response[ApiResponse[SnapshotT]]: """Get a specific company version snapshot.""" repo = state.app_state.persistence.company_versions diff --git a/src/synthorg/api/controllers/coordination_metrics.py b/src/synthorg/api/controllers/coordination_metrics.py index 97a0607744..b62f3c1a4c 100644 --- a/src/synthorg/api/controllers/coordination_metrics.py +++ b/src/synthorg/api/controllers/coordination_metrics.py @@ -89,10 +89,32 @@ class CoordinationMetricsController(Controller): async def list_coordination_metrics( # noqa: PLR0913 self, state: State, - task_id: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] | None = None, - agent_id: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] | None = None, - since: datetime | None = None, - until: datetime | None = None, + task_id: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to coordination metrics emitted under this task.", + ), + ] = None, + agent_id: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter to coordination metrics emitted by this agent.", + ), + ] = None, + since: Annotated[ + datetime | None, + Parameter( + description="Filter to metrics emitted at or after this ISO timestamp." + ), + ] = None, + until: Annotated[ + datetime | None, + Parameter( + description="Filter to metrics emitted at or before this ISO timestamp." + ), + ] = None, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, ) -> PaginatedResponse[CoordinationMetricsRecord]: diff --git a/src/synthorg/api/controllers/escalations.py b/src/synthorg/api/controllers/escalations.py index 6805d1bafa..52058426d1 100644 --- a/src/synthorg/api/controllers/escalations.py +++ b/src/synthorg/api/controllers/escalations.py @@ -9,10 +9,11 @@ 9457 handlers registered by :mod:`synthorg.api.exception_handlers`. """ -from typing import Any, Final +from typing import Annotated, Any, Final from litestar import Controller, Request, get, post from litestar.datastructures import State # noqa: TC002 +from litestar.params import Parameter from pydantic import BaseModel, ConfigDict, Field from synthorg.api.cursor import decode_cursor, encode_cursor @@ -133,7 +134,12 @@ async def list_escalations( state: State, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, - status: EscalationStatus = EscalationStatus.PENDING, + status: Annotated[ + EscalationStatus, + Parameter( + description="Filter to escalations in this status (default PENDING)." + ), + ] = EscalationStatus.PENDING, ) -> PaginatedResponse[EscalationResponse]: """Page over escalations filtered by ``status`` (default PENDING).""" app_state: AppState = state.app_state diff --git a/src/synthorg/api/controllers/evaluation_config_versions.py b/src/synthorg/api/controllers/evaluation_config_versions.py index 1f5ef48c89..b6c82fd76c 100644 --- a/src/synthorg/api/controllers/evaluation_config_versions.py +++ b/src/synthorg/api/controllers/evaluation_config_versions.py @@ -81,7 +81,13 @@ async def list_versions( async def get_version( self, state: State, - version_num: Annotated[int, Parameter(ge=1)], + version_num: Annotated[ + int, + Parameter( + ge=1, + description="Evaluation config version (one-based).", + ), + ], ) -> Response[ApiResponse[SnapshotT]]: """Get a specific evaluation config version snapshot.""" repo = state.app_state.persistence.evaluation_config_versions diff --git a/src/synthorg/api/controllers/events.py b/src/synthorg/api/controllers/events.py index 5f291f74bc..7c1cde67da 100644 --- a/src/synthorg/api/controllers/events.py +++ b/src/synthorg/api/controllers/events.py @@ -546,6 +546,7 @@ async def stream( Parameter( max_length=QUERY_MAX_LENGTH, pattern=_SESSION_ID_PATTERN, + description="Session ID whose AG-UI stream to subscribe to.", ), ], ) -> ServerSentEvent: @@ -623,6 +624,7 @@ async def list_interrupts( Parameter( max_length=QUERY_MAX_LENGTH, pattern=_SESSION_ID_PATTERN, + description="Filter to interrupts for this session; omit to list all.", ), ] = None, ) -> ApiResponse[tuple[InterruptResponse, ...]]: diff --git a/src/synthorg/api/controllers/meetings.py b/src/synthorg/api/controllers/meetings.py index 200d4337b3..0190274302 100644 --- a/src/synthorg/api/controllers/meetings.py +++ b/src/synthorg/api/controllers/meetings.py @@ -243,9 +243,17 @@ async def list_meetings( state: State, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, - status: MeetingStatus | None = None, - meeting_type: Annotated[str, Parameter(max_length=QUERY_MAX_LENGTH)] - | None = None, + status: Annotated[ + MeetingStatus | None, + Parameter(description="Filter to meetings in this status."), + ] = None, + meeting_type: Annotated[ + str | None, + Parameter( + max_length=QUERY_MAX_LENGTH, + description="Filter by meeting type (STAND_UP, RETRO, etc.).", + ), + ] = None, ) -> PaginatedResponse[MeetingResponse]: """List meeting records with optional filters. diff --git a/src/synthorg/api/controllers/messages.py b/src/synthorg/api/controllers/messages.py index befd60775a..c7f1f9b76d 100644 --- a/src/synthorg/api/controllers/messages.py +++ b/src/synthorg/api/controllers/messages.py @@ -1,9 +1,10 @@ """Message controller -- read + operator-driven DELETE via MessageService.""" -from typing import Any, Final +from typing import Annotated, Any, Final from litestar import Controller, Request, delete, get from litestar.datastructures import State # noqa: TC002 +from litestar.params import Parameter from synthorg.api.dto import ApiResponse, PaginatedResponse from synthorg.api.guards import require_read_access, require_write_access @@ -35,7 +36,10 @@ class MessageController(Controller): async def list_messages( self, state: State, - channel: str | None = None, + channel: Annotated[ + str | None, + Parameter(description="Filter to messages on this channel."), + ] = None, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, ) -> PaginatedResponse[Message]: diff --git a/src/synthorg/api/controllers/meta_analytics.py b/src/synthorg/api/controllers/meta_analytics.py index bd2b232cf7..effe66a85e 100644 --- a/src/synthorg/api/controllers/meta_analytics.py +++ b/src/synthorg/api/controllers/meta_analytics.py @@ -4,7 +4,7 @@ pattern querying, and threshold recommendations. """ -from typing import Final +from typing import Annotated, Final from litestar import Controller, get, post from litestar.datastructures import State # noqa: TC002 @@ -114,7 +114,14 @@ async def ingest_events( async def get_patterns( self, state: State, - min_deployments: int = Parameter(default=3, ge=1, le=100), + min_deployments: Annotated[ + int, + Parameter( + ge=1, + le=100, + description="Minimum deployment count for a pattern to be returned.", + ), + ] = _DEFAULT_MIN_DEPLOYMENTS_FLOOR, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, ) -> PaginatedResponse[AggregatedPattern]: diff --git a/src/synthorg/api/controllers/ontology.py b/src/synthorg/api/controllers/ontology.py index 6a4bb68b03..fee171002c 100644 --- a/src/synthorg/api/controllers/ontology.py +++ b/src/synthorg/api/controllers/ontology.py @@ -5,10 +5,11 @@ """ from datetime import UTC, datetime -from typing import Final +from typing import Annotated, Final from litestar import Controller, delete, get, post, put from litestar.datastructures import State # noqa: TC002 +from litestar.params import Parameter from litestar.status_codes import HTTP_204_NO_CONTENT from synthorg.api.cursor import decode_cursor @@ -131,7 +132,10 @@ async def list_entities( state: State, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, - tier: str | None = None, + tier: Annotated[ + str | None, + Parameter(description="Filter to entity definitions in this tier."), + ] = None, ) -> PaginatedResponse[EntityResponse]: """List all entity definitions, filterable by tier.""" app_state: AppState = state.app_state @@ -410,7 +414,10 @@ async def get_entity_version( self, state: State, name: PathName, - version: int, + version: Annotated[ + int, + Parameter(description="Entity definition version to fetch."), + ], ) -> ApiResponse[EntityVersionResponse]: """Get a specific version snapshot.""" app_state: AppState = state.app_state diff --git a/src/synthorg/api/controllers/providers.py b/src/synthorg/api/controllers/providers.py index 91e924a38f..e71e229aca 100644 --- a/src/synthorg/api/controllers/providers.py +++ b/src/synthorg/api/controllers/providers.py @@ -590,7 +590,15 @@ async def discover_models( self, state: State, name: PathName, - preset_hint: Annotated[str, Parameter(max_length=64)] | None = None, + preset_hint: Annotated[ + str | None, + Parameter( + max_length=64, + description=( + 'Canonical preset hint (e.g. "example-provider", "test-provider").' + ), + ), + ] = None, ) -> ApiResponse[DiscoverModelsResponse]: """Discover available models from a provider endpoint. @@ -871,7 +879,14 @@ async def delete_model( self, state: State, name: PathName, - model_id: Annotated[str, Parameter(max_length=256, min_length=1)], + model_id: Annotated[ + str, + Parameter( + max_length=256, + min_length=1, + description="Local provider model id (may contain colons).", + ), + ], ) -> None: """Delete a model from a local provider. @@ -939,7 +954,14 @@ async def update_model_config( self, state: State, name: PathName, - model_id: Annotated[str, Parameter(max_length=256, min_length=1)], + model_id: Annotated[ + str, + Parameter( + max_length=256, + min_length=1, + description="Local provider model whose launch parameters to update.", + ), + ], data: UpdateModelConfigRequest, ) -> ApiResponse[ProviderModelResponse]: """Update per-model launch parameters for a local provider. diff --git a/src/synthorg/api/controllers/requests.py b/src/synthorg/api/controllers/requests.py index 7b4bb6d0dc..01f85e4cfc 100644 --- a/src/synthorg/api/controllers/requests.py +++ b/src/synthorg/api/controllers/requests.py @@ -1,9 +1,10 @@ """Client request lifecycle endpoints at /requests.""" -from typing import Any, Final +from typing import Annotated, Any, Final from litestar import Controller, Request, get, post from litestar.datastructures import State # noqa: TC002 +from litestar.params import Parameter from pydantic import BaseModel, ConfigDict, Field from synthorg.api.channels import CHANNEL_REQUESTS, publish_ws_event @@ -85,7 +86,10 @@ class RequestController(Controller): async def list_requests( self, state: State, - status: RequestStatus | None = None, + status: Annotated[ + RequestStatus | None, + Parameter(description="Filter to requests in this status."), + ] = None, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, ) -> PaginatedResponse[ClientRequest]: diff --git a/src/synthorg/api/controllers/role_versions.py b/src/synthorg/api/controllers/role_versions.py index 0492f1b98b..92ad024680 100644 --- a/src/synthorg/api/controllers/role_versions.py +++ b/src/synthorg/api/controllers/role_versions.py @@ -80,7 +80,13 @@ async def get_version( self, state: State, role_name: str, - version_num: Annotated[int, Parameter(ge=1)], + version_num: Annotated[ + int, + Parameter( + ge=1, + description="Role version (one-based; 1 = first revision).", + ), + ], ) -> Response[ApiResponse[SnapshotT]]: """Get a specific role version snapshot.""" repo = state.app_state.persistence.role_versions diff --git a/src/synthorg/api/controllers/subworkflows.py b/src/synthorg/api/controllers/subworkflows.py index 615bb5aa0e..ecb817eee6 100644 --- a/src/synthorg/api/controllers/subworkflows.py +++ b/src/synthorg/api/controllers/subworkflows.py @@ -255,7 +255,11 @@ async def get_version( subworkflow_id: PathId, version: Annotated[ str, - Parameter(min_length=1, max_length=64), + Parameter( + min_length=1, + max_length=64, + description="Subworkflow version to fetch (semver-like, e.g. 1.0.0).", + ), ], ) -> Response[ApiResponse[WorkflowDefinition]]: """Fetch a specific subworkflow version. @@ -280,7 +284,11 @@ async def list_parents( subworkflow_id: PathId, version: Annotated[ str, - Parameter(min_length=1, max_length=64), + Parameter( + min_length=1, + max_length=64, + description="Subworkflow version pinned by the parent workflows.", + ), ], limit: CursorLimit = DEFAULT_LIMIT, cursor: CursorParam = None, @@ -351,7 +359,11 @@ async def delete_version( subworkflow_id: PathId, version: Annotated[ str, - Parameter(min_length=1, max_length=64), + Parameter( + min_length=1, + max_length=64, + description="Subworkflow version to delete (parents block).", + ), ], ) -> Response[ApiResponse[None]]: """Delete a subworkflow version. diff --git a/src/synthorg/api/controllers/tasks.py b/src/synthorg/api/controllers/tasks.py index 4d436d47f8..220872629b 100644 --- a/src/synthorg/api/controllers/tasks.py +++ b/src/synthorg/api/controllers/tasks.py @@ -71,9 +71,24 @@ class TaskController(Controller): async def list_tasks( # noqa: PLR0913 self, state: State, - status: TaskStatus | None = None, - assigned_to: Annotated[str, Parameter(max_length=256)] | None = None, - project: Annotated[str, Parameter(max_length=256)] | None = None, + status: Annotated[ + TaskStatus | None, + Parameter(description="Filter to tasks in this status."), + ] = None, + assigned_to: Annotated[ + str | None, + Parameter( + max_length=256, + description="Filter to tasks assigned to this agent.", + ), + ] = None, + project: Annotated[ + str | None, + Parameter( + max_length=256, + description="Filter to tasks scoped to this project.", + ), + ] = None, cursor: CursorParam = None, limit: CursorLimit = _DEFAULT_LIMIT, ) -> PaginatedResponse[Task]: diff --git a/src/synthorg/api/controllers/workflow_versions.py b/src/synthorg/api/controllers/workflow_versions.py index b3a6827892..ae52670384 100644 --- a/src/synthorg/api/controllers/workflow_versions.py +++ b/src/synthorg/api/controllers/workflow_versions.py @@ -96,7 +96,13 @@ async def get_version( self, state: State, workflow_id: PathId, - version_num: Annotated[int, Parameter(ge=1)], + version_num: Annotated[ + int, + Parameter( + ge=1, + description="Workflow version (one-based; 1 = first revision).", + ), + ], ) -> Response[ApiResponse[SnapshotT]]: """Get a specific version snapshot.""" version = await state.app_state.workflow_version_service.get_version( diff --git a/tests/unit/api/controllers/test_approvals.py b/tests/unit/api/controllers/test_approvals.py index 79fb3fb861..535fa43c49 100644 --- a/tests/unit/api/controllers/test_approvals.py +++ b/tests/unit/api/controllers/test_approvals.py @@ -702,7 +702,7 @@ def test_oversized_action_type_query_rejected( params={"action_type": long_action}, headers=_READ_HEADERS, ) - assert resp.status_code == 422 + assert resp.status_code in (400, 422) @pytest.mark.unit diff --git a/tests/unit/api/controllers/test_meetings.py b/tests/unit/api/controllers/test_meetings.py index d46129e4d1..d388ebaebf 100644 --- a/tests/unit/api/controllers/test_meetings.py +++ b/tests/unit/api/controllers/test_meetings.py @@ -451,7 +451,7 @@ def test_oversized_meeting_type_query_rejected( "/api/v1/meetings", params={"meeting_type": long_type}, ) - assert resp.status_code == 422 + assert resp.status_code in (400, 422) def test_auto_wired_meetings_returns_200( self, diff --git a/uv.lock b/uv.lock index b201f0c15d..4e633f0794 100644 --- a/uv.lock +++ b/uv.lock @@ -1587,6 +1587,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, ] +[[package]] +name = "mkdocs-redirects" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162, upload-time = "2024-11-07T14:57:21.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142, upload-time = "2024-11-07T14:57:19.143Z" }, +] + [[package]] name = "mkdocstrings" version = "1.0.4" @@ -3081,10 +3093,10 @@ name = "scikit-learn" version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "joblib" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "threadpoolctl" }, + { name = "joblib", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "numpy", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "scipy", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "threadpoolctl", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } wheels = [ @@ -3107,7 +3119,7 @@ name = "scipy" version = "1.17.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } wheels = [ @@ -3138,16 +3150,16 @@ name = "sentence-transformers" version = "5.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "huggingface-hub", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "numpy", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "scikit-learn", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "scipy", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "tqdm" }, - { name = "transformers" }, - { name = "typing-extensions" }, + { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, + { name = "tqdm", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "transformers", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "typing-extensions", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4d/68/7f98c221940ce783b492ad6140384daf2e2918cd7175009d6a362c22b9ee/sentence_transformers-5.4.1.tar.gz", hash = "sha256:436bcb1182a0ff42a8fb2b1c43498a70d0a75b688d182f2cd0d1dd115af61ddc", size = 428910, upload-time = "2026-04-14T13:34:59.006Z" } wheels = [ @@ -3292,7 +3304,7 @@ name = "sympy" version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mpmath" }, + { name = "mpmath", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } wheels = [ @@ -3337,14 +3349,14 @@ distributed = [ ] fine-tune-cpu = [ { name = "sentence-transformers" }, - { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, ] fine-tune-gpu = [ { name = "sentence-transformers" }, - { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu') or (extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, ] postgres = [ { name = "psycopg", extra = ["binary"] }, @@ -3362,6 +3374,7 @@ dev = [ { name = "griffe-pydantic" }, { name = "hypothesis" }, { name = "mkdocs-d2-plugin" }, + { name = "mkdocs-redirects" }, { name = "mkdocstrings", extra = ["python"] }, { name = "mypy" }, { name = "nats-py" }, @@ -3392,19 +3405,20 @@ docs = [ { name = "defusedxml" }, { name = "griffe-pydantic" }, { name = "mkdocs-d2-plugin" }, + { name = "mkdocs-redirects" }, { name = "mkdocstrings", extra = ["python"] }, { name = "zensical" }, ] fine-tune-cpu = [ { name = "sentence-transformers" }, - { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu')" }, - { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu')" }, ] fine-tune-gpu = [ { name = "sentence-transformers" }, - { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, ] test = [ { name = "hypothesis" }, @@ -3471,6 +3485,7 @@ dev = [ { name = "griffe-pydantic", specifier = "==1.3.1" }, { name = "hypothesis", specifier = "==6.152.4" }, { name = "mkdocs-d2-plugin", specifier = "==1.7.0" }, + { name = "mkdocs-redirects", specifier = "==1.2.2" }, { name = "mkdocstrings", extras = ["python"], specifier = "==1.0.4" }, { name = "mypy", specifier = "==1.20.2" }, { name = "nats-py", specifier = "==2.14.0" }, @@ -3501,6 +3516,7 @@ docs = [ { name = "defusedxml", specifier = "==0.7.1" }, { name = "griffe-pydantic", specifier = "==1.3.1" }, { name = "mkdocs-d2-plugin", specifier = "==1.7.0" }, + { name = "mkdocs-redirects", specifier = "==1.2.2" }, { name = "mkdocstrings", extras = ["python"], specifier = "==1.0.4" }, { name = "zensical", specifier = "==0.0.40" }, ] @@ -3676,17 +3692,16 @@ name = "torch" version = "2.11.0" source = { registry = "https://download.pytorch.org/whl/cpu" } resolution-markers = [ - "python_full_version >= '3.15' and sys_platform == 'darwin'", "python_full_version < '3.15' and sys_platform == 'darwin'", ] dependencies = [ - { name = "filelock", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "fsspec", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "jinja2", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "networkx", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "setuptools", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "sympy", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "filelock", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "fsspec", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "jinja2", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "networkx", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "setuptools", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "sympy", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and sys_platform == 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:072a0d6e4865e8b0dc0dbfe6ebed68fae235124222835ef03e5814d414d8c012", upload-time = "2026-03-23T15:17:10Z" }, @@ -3735,23 +3750,27 @@ source = { registry = "https://download.pytorch.org/whl/cpu" } resolution-markers = [ "python_full_version >= '3.15' and sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", "python_full_version < '3.15' and sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", "python_full_version >= '3.15' and sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu'", "python_full_version < '3.15' and sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu'", "python_full_version >= '3.15' and sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", "python_full_version < '3.15' and sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", "python_full_version >= '3.15' and sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", "python_full_version < '3.15' and sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra != 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", "python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", "python_full_version < '3.15' and sys_platform != 'darwin' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra != 'group-8-synthorg-fine-tune-gpu'", ] dependencies = [ - { name = "filelock", marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "fsspec", marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "jinja2", marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "networkx", marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "setuptools", marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "sympy", marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (python_full_version >= '3.15' and extra != 'extra-8-synthorg-fine-tune-cpu' and extra != 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (extra == 'extra-8-synthorg-fine-tune-gpu' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu')" }, + { name = "filelock", marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, + { name = "fsspec", marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, + { name = "jinja2", marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, + { name = "networkx", marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, + { name = "setuptools", marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, + { name = "sympy", marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, + { name = "typing-extensions", marker = "(python_full_version >= '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu') or (python_full_version >= '3.15' and extra == 'group-8-synthorg-fine-tune-cpu') or (python_full_version < '3.15' and extra == 'extra-8-synthorg-fine-tune-cpu' and extra == 'extra-8-synthorg-fine-tune-gpu') or (python_full_version < '3.15' and extra == 'group-8-synthorg-fine-tune-cpu' and extra == 'group-8-synthorg-fine-tune-gpu') or (sys_platform != 'darwin' and extra == 'extra-8-synthorg-fine-tune-cpu') or (sys_platform != 'darwin' and extra == 'group-8-synthorg-fine-tune-cpu')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314-linux_s390x.whl", hash = "sha256:c9a14c367f470623b978e273a4e1915995b4ba7a0ae999178b06c273eea3536f", upload-time = "2026-04-28T00:07:54Z" }, @@ -3782,15 +3801,15 @@ name = "transformers" version = "5.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "safetensors" }, - { name = "tokenizers" }, - { name = "tqdm" }, - { name = "typer" }, + { name = "huggingface-hub", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "numpy", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "packaging", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "pyyaml", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "regex", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "safetensors", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "tokenizers", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "tqdm", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, + { name = "typer", marker = "extra == 'extra-8-synthorg-fine-tune-cpu' or extra == 'extra-8-synthorg-fine-tune-gpu' or extra == 'group-8-synthorg-fine-tune-cpu' or extra == 'group-8-synthorg-fine-tune-gpu'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e7/e6/4134ea2fbea322cddc7ffc94a0d8ee47fe32ce8e876b320cd37d88edfc4d/transformers-5.8.1.tar.gz", hash = "sha256:4dd5b6de4105725104d84fd6abd74b305f4debfc251b38c648ee5dd087cf543b", size = 8532019, upload-time = "2026-05-13T03:21:57.234Z" } wheels = [ diff --git a/web/Caddyfile b/web/Caddyfile index bce47e64e3..350975bec4 100644 --- a/web/Caddyfile +++ b/web/Caddyfile @@ -139,6 +139,17 @@ redir /docs/ permanent } + # --- Legacy doc URL redirects (must precede the generic /docs/* handler) --- + # Keep old inbound links working when docs were moved or renamed. + # Add an entry here when relocating a page; remove once the link + # source is updated. + @legacy_getting_started path /docs/getting-started /docs/getting-started/ + redir @legacy_getting_started /docs/getting_started/ permanent + @legacy_decisions path /docs/decisions /docs/decisions/ + redir @legacy_decisions /docs/architecture/decisions/ permanent + @legacy_comparison path /docs/comparison /docs/comparison/ + redir @legacy_comparison /docs/reference/comparison/ permanent + # --- Static MkDocs documentation (no nonce) --- handle /docs/* { header { diff --git a/web/src/api/types/openapi.gen.ts b/web/src/api/types/openapi.gen.ts index 67a2eb9f32..4a10ff997b 100644 --- a/web/src/api/types/openapi.gen.ts +++ b/web/src/api/types/openapi.gen.ts @@ -13138,6 +13138,7 @@ export interface operations { readonly path: { /** @description Resource identifier */ readonly agent_id: string; + /** @description Agent identity version (one-based; 1 = first revision). */ readonly version_num: number; }; readonly cookie?: never; @@ -13719,12 +13720,15 @@ export interface operations { readonly ApiV1ApprovalsListApprovals: { readonly parameters: { readonly query?: { + /** @description Filter to approvals raised for this action type. */ readonly action_type?: string | null; /** @description Opaque pagination cursor returned by the previous page */ readonly cursor?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Filter to approvals at this risk level. */ readonly risk_level?: "low" | "medium" | "high" | "critical" | null; + /** @description Filter to approvals in this status. */ readonly status?: "pending" | "approved" | "rejected" | "expired" | null; }; readonly header?: never; @@ -14371,6 +14375,7 @@ export interface operations { readonly query?: never; readonly header?: never; readonly path: { + /** @description Budget config version (one-based; 1 = first revision). */ readonly version_num: number; }; readonly cookie?: never; @@ -14397,11 +14402,13 @@ export interface operations { readonly ApiV1BudgetRecordsListCostRecords: { readonly parameters: { readonly query?: { + /** @description Filter to cost records emitted by this agent. */ readonly agent_id?: string | null; /** @description Opaque pagination cursor returned by the previous page */ readonly cursor?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Filter to cost records emitted under this task. */ readonly task_id?: string | null; }; readonly header?: never; @@ -14501,6 +14508,7 @@ export interface operations { readonly ApiV1CeremonyPolicyResolvedGetResolvedPolicy: { readonly parameters: { readonly query?: { + /** @description Department to resolve against; omit for project policy. */ readonly department?: string | null; }; readonly header?: never; @@ -14848,6 +14856,7 @@ export interface operations { readonly query?: never; readonly header?: never; readonly path: { + /** @description Company version (one-based; 1 = first revision). */ readonly version_num: number; }; readonly cookie?: never; @@ -15228,13 +15237,17 @@ export interface operations { readonly ApiV1CoordinationMetricsListCoordinationMetrics: { readonly parameters: { readonly query?: { + /** @description Filter to coordination metrics emitted by this agent. */ readonly agent_id?: string | null; /** @description Opaque pagination cursor returned by the previous page */ readonly cursor?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Filter to metrics emitted at or after this ISO timestamp. */ readonly since?: string | null; + /** @description Filter to coordination metrics emitted under this task. */ readonly task_id?: string | null; + /** @description Filter to metrics emitted at or before this ISO timestamp. */ readonly until?: string | null; }; readonly header?: never; @@ -15744,6 +15757,7 @@ export interface operations { readonly query?: never; readonly header?: never; readonly path: { + /** @description Evaluation config version (one-based). */ readonly version_num: number; }; readonly cookie?: never; @@ -15805,6 +15819,7 @@ export interface operations { readonly ApiV1EventsStreamStream: { readonly parameters: { readonly query: { + /** @description Session ID whose AG-UI stream to subscribe to. */ readonly session_id: string; }; readonly header?: never; @@ -16172,6 +16187,7 @@ export interface operations { readonly ApiV1InterruptsListInterrupts: { readonly parameters: { readonly query?: { + /** @description Filter to interrupts for this session; omit to list all. */ readonly session_id?: string | null; }; readonly header?: never; @@ -16238,7 +16254,9 @@ export interface operations { readonly cursor?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Filter by meeting type (STAND_UP, RETRO, etc.). */ readonly meeting_type?: string | null; + /** @description Filter to meetings in this status. */ readonly status?: "scheduled" | "in_progress" | "completed" | "failed" | "cancelled" | "budget_exhausted" | null; }; readonly header?: never; @@ -16356,6 +16374,7 @@ export interface operations { readonly ApiV1MessagesListMessages: { readonly parameters: { readonly query?: { + /** @description Filter to messages on this channel. */ readonly channel?: string | null; /** @description Opaque pagination cursor returned by the previous page */ readonly cursor?: string | null; @@ -16539,6 +16558,7 @@ export interface operations { readonly cursor?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Minimum deployment count for a pattern to be returned. */ readonly min_deployments?: number; }; readonly header?: never; @@ -17315,6 +17335,7 @@ export interface operations { readonly cursor?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Filter to entity definitions in this tier. */ readonly tier?: string | null; }; readonly header?: never; @@ -17503,6 +17524,7 @@ export interface operations { readonly path: { /** @description Resource name */ readonly name: string; + /** @description Entity definition version to fetch. */ readonly version: number; }; readonly cookie?: never; @@ -18076,6 +18098,7 @@ export interface operations { readonly ApiV1ProvidersNameDiscoverModelsDiscoverModels: { readonly parameters: { readonly query?: { + /** @description Canonical preset hint (e.g. "example-provider", "test-provider"). */ readonly preset_hint?: string | null; }; readonly header?: never; @@ -18209,6 +18232,7 @@ export interface operations { readonly query?: never; readonly header?: never; readonly path: { + /** @description Local provider model id (may contain colons). */ readonly model_id: string; /** @description Resource name */ readonly name: string; @@ -18238,6 +18262,7 @@ export interface operations { readonly query?: never; readonly header?: never; readonly path: { + /** @description Local provider model whose launch parameters to update. */ readonly model_id: string; /** @description Resource name */ readonly name: string; @@ -18883,6 +18908,7 @@ export interface operations { readonly header?: never; readonly path: { readonly role_name: string; + /** @description Role version (one-based; 1 = first revision). */ readonly version_num: number; }; readonly cookie?: never; @@ -19091,17 +19117,25 @@ export interface operations { readonly ApiV1SecurityAuditListAuditEntries: { readonly parameters: { readonly query?: { + /** @description Filter to audit entries with this action type. */ readonly action_type?: string | null; + /** @description Filter to audit entries emitted for this agent. */ readonly agent_id?: string | null; /** @description Opaque pagination cursor returned by the previous page */ readonly cursor?: string | null; + /** @description JSONB containment filter (Postgres @>); JSON-encoded. */ readonly jsonb_contains?: string | null; + /** @description Filter to entries whose payload has this top-level key. */ readonly jsonb_key_exists?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Filter to entries emitted at or after this ISO timestamp. */ readonly since?: string | null; + /** @description Filter to audit entries emitted for this tool. */ readonly tool_name?: string | null; + /** @description Filter to entries emitted at or before this ISO timestamp. */ readonly until?: string | null; + /** @description Filter by verdict (APPROVED / DENIED). */ readonly verdict?: string | null; }; readonly header?: never; @@ -19959,6 +19993,7 @@ export interface operations { readonly path: { /** @description Resource identifier */ readonly subworkflow_id: string; + /** @description Subworkflow version to fetch (semver-like, e.g. 1.0.0). */ readonly version: string; }; readonly cookie?: never; @@ -19989,6 +20024,7 @@ export interface operations { readonly path: { /** @description Resource identifier */ readonly subworkflow_id: string; + /** @description Subworkflow version to delete (parents block). */ readonly version: string; }; readonly cookie?: never; @@ -20025,6 +20061,7 @@ export interface operations { readonly path: { /** @description Resource identifier */ readonly subworkflow_id: string; + /** @description Subworkflow version pinned by the parent workflows. */ readonly version: string; }; readonly cookie?: never; @@ -20079,12 +20116,15 @@ export interface operations { readonly ApiV1TasksListTasks: { readonly parameters: { readonly query?: { + /** @description Filter to tasks assigned to this agent. */ readonly assigned_to?: string | null; /** @description Opaque pagination cursor returned by the previous page */ readonly cursor?: string | null; /** @description Page size (default 50, max 200) */ readonly limit?: number; + /** @description Filter to tasks scoped to this project. */ readonly project?: string | null; + /** @description Filter to tasks in this status. */ readonly status?: "created" | "assigned" | "in_progress" | "in_review" | "completed" | "blocked" | "failed" | "interrupted" | "suspended" | "cancelled" | "rejected" | "auth_required" | null; }; readonly header?: never; @@ -21158,6 +21198,7 @@ export interface operations { readonly query?: never; readonly header?: never; readonly path: { + /** @description Workflow version (one-based; 1 = first revision). */ readonly version_num: number; /** @description Resource identifier */ readonly workflow_id: string;