From eb138d6d8c1949e7c3c0b2ca7e71bf717823956a Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Wed, 1 Apr 2026 18:54:06 +0100 Subject: [PATCH 01/11] docs(22_should-add-support-for-cloud-compute): add approved Product Spec (PRD) Approved Product Spec (PRD) for #22. --- .../.issue-flow-state.json | 253 ++++++++++++++++++ .../brainstorm_transcript.md | 58 ++++ .../issue_body_draft.md | 43 +++ .../issue_intake.md | 61 +++++ .../prd_review_summary.md | 28 ++ .../product_spec.md | 123 +++++++++ 6 files changed, 566 insertions(+) create mode 100644 specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json create mode 100644 specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md create mode 100644 specs/22_should-add-support-for-cloud-compute/issue_body_draft.md create mode 100644 specs/22_should-add-support-for-cloud-compute/issue_intake.md create mode 100644 specs/22_should-add-support-for-cloud-compute/prd_review_summary.md create mode 100644 specs/22_should-add-support-for-cloud-compute/product_spec.md diff --git a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json new file mode 100644 index 00000000..65a25899 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json @@ -0,0 +1,253 @@ +{ + "version": 4, + "updated_at": "2026-04-01T17:50:42Z", + "issue": { + "number": "22", + "url": "https://github.com/Flow-Research/Jarvis/issues/22", + "title": "should add support for cloud compute" + }, + "epic": { + "name": "22_should-add-support-for-cloud-compute", + "path": "specs/22_should-add-support-for-cloud-compute", + "spec_root": "specs" + }, + "phase": { + "id": 3, + "name": "Phase 3 \u2014 PRD review", + "status": "in_progress", + "started_at": "2026-04-01T17:50:42Z", + "updated_at": "2026-04-01T17:50:42Z" + }, + "mode": "discovery-recovery", + "git": { + "branch": "22_should-add-support-for-cloud-compute", + "base_branch": "main", + "worktree_strategy": "sibling-project-worktrees-v1", + "worktree_dirname": "22_should-add-support-for-cloud-compute" + }, + "github": { + "issue_state": "open", + "project_status": null, + "project_title": null, + "pr_url": null, + "ci_url": null, + "last_sync_at": "2026-04-01T17:48:25Z", + "gh_available": true, + "issue_assignees": [ + "catchmeifyoucaan", + "ojogu" + ], + "issue_labels": [] + }, + "gates": { + "quality": { + "issue_readiness_check": "passed", + "issue_clarification_recovery_gate": "passed", + "brainstorm_discovery_gate": "passed", + "spec_gate": "passed", + "design_completeness_gate": "pending", + "design_simplicity_gate": "pending", + "regression_coverage_gate": "pending", + "generated_test_gate": "pending", + "test_quality_gate": "pending", + "qa_execution_gate": "pending", + "implementation_simplicity_gate": "pending", + "final_verification_gate": "pending" + }, + "human": { + "brainstorm_approval": "passed", + "issue_append_approval": "passed", + "prd_approval": "pending", + "design_approval": "pending", + "tech_spec_approval": "pending", + "execution_scope_approval": "pending", + "final_acceptance": "pending" + } + }, + "artifacts": { + "issue_intake": "specs/22_should-add-support-for-cloud-compute/issue_intake.md", + "brainstorm": null, + "brainstorm_transcript": "specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md", + "issue_body_draft": "specs/22_should-add-support-for-cloud-compute/issue_body_draft.md", + "product_spec": "specs/22_should-add-support-for-cloud-compute/product_spec.md", + "prd_review_summary": "specs/22_should-add-support-for-cloud-compute/prd_review_summary.md", + "design_spec": null, + "design_review_summary": null, + "technical_spec": null, + "techspec_review_summary": null, + "regression_spec": null, + "api_tests": [], + "browser_tests": [], + "test_quality_report": null, + "qa_summary": null, + "qa_logs": [], + "verification_report": null + }, + "artifact_commits": { + "product_spec": { + "committed": false, + "skipped": false + }, + "design_spec": { + "committed": false, + "skipped": false + }, + "technical_spec": { + "committed": false, + "skipped": false + }, + "regression_spec": { + "committed": false, + "skipped": false + } + }, + "reconciliation": { + "last_checked_at": "2026-04-01T17:48:25Z", + "status": "reconciled", + "discrepancies": [], + "resolution_notes": [ + "Reconciled on 2026-04-01: GitHub auth verified and issue metadata refreshed.", + "Reconciled on 2026-04-01: issue clarification appended on GitHub and brainstorm approvals captured." + ] + }, + "blockers": [], + "next_action": "Await user approval for PRD (gates.human.prd_approval) before artifact commit-and-link and design phase.", + "history": [ + { + "timestamp": "2026-03-27T14:07:12Z", + "event": "state_initialized", + "phase_id": 0, + "phase_name": "Phase 0 \u2014 Intake, readiness check, and clarification recovery", + "details": "Initialized issue-flow state file.", + "source": "issue-flow" + }, + { + "timestamp": "2026-03-27T14:08:46Z", + "event": "phase0_intake_completed", + "phase_id": 0, + "phase_name": "Phase 0 \u2014 Intake, readiness check, and clarification recovery", + "details": "Completed intake; classified as discovery-recovery with strategy unavailable and testability gaps.", + "source": "issue-flow" + }, + { + "timestamp": "2026-03-27T14:09:15Z", + "event": "phase_transition", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Transitioned from Phase 0 to Phase 1 after passing issue_readiness_check.", + "source": "issue-flow" + }, + { + "timestamp": "2026-03-27T14:10:55Z", + "event": "brainstorm_question_asked", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Asked Q1 about minimum shippable slice boundaries.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T00:00:00Z", + "event": "reconciliation_update", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Refreshed issue metadata and recorded Q1 answer (full hosted + local end-to-end).", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T00:15:00Z", + "event": "brainstorm_answer_recorded", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Recorded Q2 answer: use provider wizard with EigenCloud, DigitalOcean, and AWS (not EigenCloud-only).", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T00:25:00Z", + "event": "brainstorm_answer_recorded", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Recorded Q3 answer: local provider fallback behavior must be configurable (auto-fallback or explicit selection).", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T00:35:00Z", + "event": "brainstorm_answer_recorded", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Recorded Q4 answer: MVP must include real provisioning integration for EigenCloud, AWS, and DigitalOcean.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T00:45:00Z", + "event": "brainstorm_answer_recorded", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Recorded Q5 answer: liveness target is sandbox creation under 60 seconds plus provider healthcheck pass for each provider.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T01:00:00Z", + "event": "brainstorm_answer_recorded", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Recorded Q6 answer: local fallback default must be ON.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T01:00:00Z", + "event": "issue_clarification_draft_created", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Created append-only issue clarification draft with testable acceptance criteria.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:48:25Z", + "event": "issue_clarification_appended", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "Posted clarification comment to issue #22: https://github.com/Flow-Research/Jarvis/issues/22#issuecomment-4171883359", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:48:25Z", + "event": "brainstorm_approval_recorded", + "phase_id": 1, + "phase_name": "Phase 1 \u2014 Brainstorm", + "details": "User approved brainstorm outputs and issue clarification append; human gates marked passed.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:48:25Z", + "event": "phase_transition", + "phase_id": 2, + "phase_name": "Phase 2 \u2014 PRD", + "details": "Transitioned from Phase 1 to Phase 2 after passing clarification and brainstorm gates.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:50:42Z", + "event": "product_spec_created", + "phase_id": 2, + "phase_name": "Phase 2 \u2014 PRD", + "details": "Created product_spec.md with explicit acceptance criteria and provider/fallback requirements.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:50:42Z", + "event": "phase_transition", + "phase_id": 3, + "phase_name": "Phase 3 \u2014 PRD review", + "details": "Transitioned from Phase 2 to Phase 3 after PRD generation.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:50:42Z", + "event": "prd_review_completed", + "phase_id": 3, + "phase_name": "Phase 3 \u2014 PRD review", + "details": "Created prd_review_summary.md; review found no blocking issues and spec_gate passed.", + "source": "issue-flow" + } + ] +} diff --git a/specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md b/specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md new file mode 100644 index 00000000..c74136e6 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md @@ -0,0 +1,58 @@ +# Brainstorm Transcript: Issue #22 + +## Session +- Date: 2026-03-27 +- Mode: discovery-recovery +- Goal: close testability gaps so acceptance criteria become implementation-ready. + +## Q1 +What is the minimum shippable slice for this issue: +1) abstraction/interface scaffolding only, +2) abstraction + one hosted provider integration (EigenCompute), or +3) abstraction + hosted + local fully wired end-to-end? + +### A1 +`3` - abstraction + hosted + local fully wired end-to-end. + +## Q2 +For hosted provider scope in this issue, should it be: +A) EigenCloud only, or +B) provider wizard with multiple hosted providers? + +### A2 +Provider wizard with multiple hosted providers, not EigenCloud only. +Initial targets: EigenCloud, DigitalOcean, and AWS. + +## Q3 +For local provider behavior, what is the required rule for this issue? +A) auto-fallback to local when cloud is unavailable +B) no auto-fallback, explicit local selection only +C) both with a configurable toggle + +### A3 +`C` - both with a configurable toggle. + +## Q4 +For this issue's MVP depth: +A) real provisioning integration for EigenCloud, AWS, and DigitalOcean, or +B) provider wizard + provider interface + validated adapter wiring, with real provisioning for one provider and stubs for others. + +### A4 +`A` - real provisioning integration for EigenCloud, AWS, and DigitalOcean. + +## Q5 +Pick the minimum liveness acceptance target for this issue: +A) successful sandbox creation in < 120s for each provider + healthcheck pass +B) successful sandbox creation in < 60s for each provider + healthcheck pass +C) custom target + +### A5 +`B` - successful sandbox creation in < 60s for each provider + healthcheck pass. + +## Q6 +For the configurable local fallback toggle, what should be the default? +A) default ON (auto-fallback to local when cloud fails) +B) default OFF (explicit local selection required) + +### A6 +`A` - default ON (auto-fallback to local when cloud fails). diff --git a/specs/22_should-add-support-for-cloud-compute/issue_body_draft.md b/specs/22_should-add-support-for-cloud-compute/issue_body_draft.md new file mode 100644 index 00000000..5f30011a --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/issue_body_draft.md @@ -0,0 +1,43 @@ +# Proposed Issue Clarification Update (Append-Only) + +## Clarified Scope (MVP for this issue) +- Build a provider wizard that supports hosted provider selection across: + - EigenCloud + - AWS + - DigitalOcean +- Keep local sandbox support as a first-class provider path. +- Use one shared control-plane abstraction for sandbox creation regardless of provider. + +## Provider and Fallback Rules +- Hosted path is multi-provider (not EigenCloud-only). +- Local fallback behavior is configurable. +- Default fallback mode is **ON**: + - If selected hosted provider fails during sandbox creation, system auto-falls back to local provider. + +## Required Implementation Depth +- Deliver **real provisioning integration** for: + - EigenCloud + - AWS + - DigitalOcean +- No stub-only hosted provider adapters for this issue. + +## Measurable Acceptance Criteria +- Wizard allows selecting `EigenCloud`, `AWS`, `DigitalOcean`, or `Local`. +- Sandbox creation path uses the same provider interface/contract across all providers. +- For each hosted provider: + - sandbox creation succeeds in **< 60 seconds** + - provider healthcheck passes after creation +- Local provider path remains functional with the same control-plane interface. +- Config toggle exists for local fallback behavior and defaults to ON. +- When fallback is ON and hosted creation fails, system creates local sandbox and logs fallback event with provider + reason. +- Add tests covering: + - provider selection routing + - per-provider creation success path + - fallback enabled behavior + - fallback disabled behavior + - healthcheck + timing assertion path + +## Out of Scope for this issue +- Advanced provider cost optimization policies. +- Multi-region scheduling policies beyond minimum integration needed for creation flow. +- Wallet/reward/PSH integration. diff --git a/specs/22_should-add-support-for-cloud-compute/issue_intake.md b/specs/22_should-add-support-for-cloud-compute/issue_intake.md new file mode 100644 index 00000000..da74cdf4 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/issue_intake.md @@ -0,0 +1,61 @@ +# Issue Intake: #22 should add support for cloud compute + +## Source +- Issue URL: https://github.com/Flow-Research/Jarvis/issues/22 +- Captured at: 2026-03-27T14:07:12Z + +## Issue Snapshot +- State: open +- Author: @Sheys11 +- Assignees: @catchmeifyoucaan, @ojogu +- Labels: none +- Milestone: none +- Body comments: 0 + +## Extracted Problem Statement +Jarvis needs support for cloud compute so personal operators can get compute resources while preserving task execution and liveness guarantees. + +## Extracted Goal +Support a hybrid sandbox architecture where sandbox provisioning uses the same control-plane abstraction across: +- hosted providers (containerized, attested execution) +- local providers (local-first execution on user-owned devices) + +## Stated Scope +- Introduce/extend provider-class support for `hosted` and `local`. +- Ensure sandbox creation path is unified regardless of provider. + +## Explicit Non-goals +Not specified in the issue body. + +## Acceptance Criteria Assessment +Current issue text is directionally clear but not yet testable as delivery criteria. + +Missing details that block execution-ready classification: +- No explicit API/CLI surface requirements (inputs/outputs/errors). +- No compatibility or migration requirements for existing local-only paths. +- No definition of "liveness guarantees" measurable in tests. +- No concrete hosted provider contract boundaries (minimum interface/attestation assumptions). +- No rollout constraints or out-of-scope boundaries. + +## Strategy Sources Consulted +Strategy context unavailable: +- `.jarvis/context/docs/strategy/` not found. +- `docs/strategy/` not found. + +## Strategic Context +No local strategy documentation was available in-repo, so strategic alignment must be inferred from issue intent and validated during brainstorm. + +## Strategic Alignment Hypothesis +The request appears aligned with platform reliability and deployment flexibility by introducing a provider abstraction layer that supports both hosted and local compute. + +## Strategy Gaps / Questions +- Is cloud compute support expected to be production-ready in this issue or scaffold-only? +- Is EigenCompute the only hosted provider target for this slice? +- Which reliability/SLO dimensions are mandatory in this issue vs deferred? + +## Classification +- Mode: discovery-recovery +- Rationale: acceptance criteria are not yet testable enough to move directly into PRD/implementation. + +## Recommended Next Action +Run Phase 1 brainstorming with focused clarification to produce testable acceptance criteria and an append-only issue update draft. \ No newline at end of file diff --git a/specs/22_should-add-support-for-cloud-compute/prd_review_summary.md b/specs/22_should-add-support-for-cloud-compute/prd_review_summary.md new file mode 100644 index 00000000..49c99082 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/prd_review_summary.md @@ -0,0 +1,28 @@ +# PRD Review Summary: Issue #22 + +## Review Metadata +- Date: 2026-04-01 +- Input: `specs/22_should-add-support-for-cloud-compute/product_spec.md` +- Phase: 3 (PRD review) + +## Review Outcome +- Blocking issues: **none** +- Spec gate recommendation: **PASS** +- Human approval required to advance: `prd_approval` + +## What Was Verified +- Scope is explicit and bounded to provider wizard + shared control-plane + real integrations for EigenCloud, AWS, and DigitalOcean. +- Local provider is preserved as a first-class path. +- Fallback behavior is explicitly defined, configurable, and defaulted to ON. +- Acceptance criteria are measurable and testable (AC-1 through AC-10). +- Test requirements cover routing, success paths, liveness, and fallback behavior. +- Non-goals are clearly documented to prevent scope drift. + +## Minor Improvements (Non-Blocking) +- Add exact config key names once technical spec finalizes naming conventions. +- Add explicit test environment assumptions for cloud provider credentials in CI docs. +- Confirm whether `< 60s` target applies to cold-start only or both cold/warm starts. + +## Gate Decision +- `spec_gate`: **passed** +- `prd_approval`: **pending user approval** diff --git a/specs/22_should-add-support-for-cloud-compute/product_spec.md b/specs/22_should-add-support-for-cloud-compute/product_spec.md new file mode 100644 index 00000000..3ea8f60d --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/product_spec.md @@ -0,0 +1,123 @@ +# Product Spec: Cloud Compute Provider Support + +## Metadata +- Issue: https://github.com/Flow-Research/Jarvis/issues/22 +- Epic path: `specs/22_should-add-support-for-cloud-compute` +- Phase: 2 (PRD) +- Date: 2026-04-01 + +## Problem Statement +Jarvis currently needs a production-ready cloud compute path that keeps local execution as a first-class option while preserving one shared sandbox control-plane contract. Without this, teams cannot reliably choose compute providers per environment, and fallback behavior is inconsistent. + +## Product Goal +Deliver a provider wizard and provisioning path that supports: +- Hosted providers: EigenCloud, AWS, DigitalOcean +- Local provider: local sandbox path +- One shared control-plane abstraction for sandbox lifecycle operations across all providers + +## Scope +### In Scope +- Provider selection wizard supporting `EigenCloud`, `AWS`, `DigitalOcean`, and `Local`. +- Shared provider interface and routing layer used by all provider adapters. +- Real provisioning integrations (not stubs) for EigenCloud, AWS, and DigitalOcean. +- Local provider fallback toggle with default `ON`. +- Automatic local fallback when hosted provisioning fails and fallback is enabled. +- Provider healthcheck validation after sandbox creation. +- Liveness target enforcement and reporting for hosted providers. +- Tests for provider routing, success paths, and fallback behavior. + +### Out of Scope +- Cost optimization and dynamic provider pricing decisions. +- Multi-region optimization policies beyond minimum creation support. +- Wallet/reward/PSH integration. +- New business workflows unrelated to provider selection or sandbox provisioning. + +## Users and Primary Jobs +- Operator/Developer: choose where sandbox compute runs and get predictable startup behavior. +- Platform/Infra owner: enforce unified control-plane behavior and observe provider reliability. + +## Functional Requirements + +### FR-1 Shared Provider Contract +- Define and use a single provider contract for sandbox lifecycle operations: + - create sandbox + - run provider healthcheck + - report status and failures +- Hosted and local providers must implement this contract. + +### FR-2 Provider Selection Wizard +- User can explicitly select one of: `EigenCloud`, `AWS`, `DigitalOcean`, `Local`. +- Wizard captures provider-specific configuration inputs required for provisioning. +- Wizard persists enough context for deterministic routing to the selected adapter. + +### FR-3 Hosted Provider Integrations +- EigenCloud adapter performs real sandbox provisioning and healthcheck. +- AWS adapter performs real sandbox provisioning and healthcheck. +- DigitalOcean adapter performs real sandbox provisioning and healthcheck. + +### FR-4 Local Provider Path +- Local provider remains functional and reachable from the same control-plane API. +- Local path behaves as a first-class compute option, not an emergency-only backdoor. + +### FR-5 Fallback Policy +- Config toggle controls fallback behavior (`fallback_to_local_on_hosted_failure` or equivalent). +- Default value is `ON`. +- When `ON`, a hosted provider failure in sandbox creation triggers automatic local creation attempt. +- When `OFF`, hosted failure is returned as failure without local auto-attempt. + +### FR-6 Liveness and Health Targets +- For each hosted provider, successful sandbox creation must complete in `< 60s`. +- Healthcheck must pass after creation for each hosted provider. +- Timing and healthcheck outcomes must be observable in logs/test output. + +### FR-7 Observability +- Log provider selection, provisioning outcome, duration, and fallback decisions. +- On fallback execution, include: + - original hosted provider + - failure reason/classification + - local fallback attempt result + +## Non-Functional Requirements +- Reliability: identical control-plane semantics across providers for create + healthcheck outcomes. +- Testability: all acceptance criteria map to deterministic automated tests. +- Backward safety: local-only usage remains operational if no hosted provider is configured. + +## Acceptance Criteria (Testable) +- AC-1 Wizard lists exactly: `EigenCloud`, `AWS`, `DigitalOcean`, `Local`. +- AC-2 Selected provider routes to the correct adapter path. +- AC-3 EigenCloud create+healthcheck succeeds under test harness in `< 60s`. +- AC-4 AWS create+healthcheck succeeds under test harness in `< 60s`. +- AC-5 DigitalOcean create+healthcheck succeeds under test harness in `< 60s`. +- AC-6 Local provider create+healthcheck succeeds through the same control-plane contract. +- AC-7 Fallback toggle default is `ON`. +- AC-8 With fallback `ON`, simulated hosted creation failure triggers local fallback and logs provider + reason. +- AC-9 With fallback `OFF`, hosted creation failure does not trigger fallback and returns an explicit error path. +- AC-10 Logs/telemetry include provider, duration, healthcheck result, and fallback decision metadata. + +## Test Plan Requirements +- Unit tests: + - provider routing matrix for all 4 providers + - fallback policy gate behavior (`ON` vs `OFF`) + - logging payload structure for success/failure/fallback +- Integration tests: + - per-hosted-provider create + healthcheck path + - timeout/liveness assertion `< 60s` per hosted provider + - hosted failure simulation leading to local fallback when enabled + +## Risks and Mitigations +- Risk: provider API differences cause contract drift. + - Mitigation: enforce adapter conformance tests at contract boundary. +- Risk: one provider misses `< 60s` target under normal load. + - Mitigation: expose timing metrics and fail CI gates on regression scenarios. +- Risk: fallback masks root hosted failures. + - Mitigation: structured fallback logs with explicit reason and original provider ID. + +## Dependencies +- Provider credentials/config for EigenCloud, AWS, DigitalOcean in test/runtime environments. +- Existing sandbox control-plane module where provider adapter interface is enforced. +- CI lanes capable of running provider integration and fallback behavior tests. + +## Definition of Done +- All acceptance criteria AC-1 through AC-10 are validated by tests or deterministic checks. +- Provider wizard, shared contract, hosted adapters, and local fallback behavior are implemented. +- CI checks covering provider selection, provisioning, fallback, and liveness are green. From b35cdcc5160653972689f3fe2324dc8ccd00fc03 Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Wed, 1 Apr 2026 18:55:38 +0100 Subject: [PATCH 02/11] chore(22_should-add-support-for-cloud-compute): sync issue-flow state after PRD link Record PRD approval, artifact commit metadata, PR URL, and pause protocol state. --- .../.issue-flow-state.json | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json index 65a25899..eb464b17 100644 --- a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json +++ b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json @@ -1,6 +1,6 @@ { "version": 4, - "updated_at": "2026-04-01T17:50:42Z", + "updated_at": "2026-04-01T17:55:12Z", "issue": { "number": "22", "url": "https://github.com/Flow-Research/Jarvis/issues/22", @@ -14,9 +14,9 @@ "phase": { "id": 3, "name": "Phase 3 \u2014 PRD review", - "status": "in_progress", + "status": "paused_awaiting_instruction", "started_at": "2026-04-01T17:50:42Z", - "updated_at": "2026-04-01T17:50:42Z" + "updated_at": "2026-04-01T17:55:12Z" }, "mode": "discovery-recovery", "git": { @@ -29,9 +29,9 @@ "issue_state": "open", "project_status": null, "project_title": null, - "pr_url": null, + "pr_url": "https://github.com/Flow-Research/Jarvis/pull/28", "ci_url": null, - "last_sync_at": "2026-04-01T17:48:25Z", + "last_sync_at": "2026-04-01T17:55:12Z", "gh_available": true, "issue_assignees": [ "catchmeifyoucaan", @@ -57,7 +57,7 @@ "human": { "brainstorm_approval": "passed", "issue_append_approval": "passed", - "prd_approval": "pending", + "prd_approval": "passed", "design_approval": "pending", "tech_spec_approval": "pending", "execution_scope_approval": "pending", @@ -85,8 +85,15 @@ }, "artifact_commits": { "product_spec": { - "committed": false, - "skipped": false + "committed": true, + "commit_sha": "78495f4c63886d65e5c9145a5256eff73af7993f", + "pushed": true, + "github_comment_posted": true, + "github_comment_url": "https://github.com/Flow-Research/Jarvis/issues/22#issuecomment-4171936263", + "pr_created": true, + "pr_url": "https://github.com/Flow-Research/Jarvis/pull/28", + "skipped": false, + "timestamp": "2026-04-01T17:55:12Z" }, "design_spec": { "committed": false, @@ -111,7 +118,7 @@ ] }, "blockers": [], - "next_action": "Await user approval for PRD (gates.human.prd_approval) before artifact commit-and-link and design phase.", + "next_action": "Await explicit user instruction to start design spec.", "history": [ { "timestamp": "2026-03-27T14:07:12Z", @@ -248,6 +255,30 @@ "phase_name": "Phase 3 \u2014 PRD review", "details": "Created prd_review_summary.md; review found no blocking issues and spec_gate passed.", "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:55:12Z", + "event": "prd_approval_recorded", + "phase_id": 3, + "phase_name": "Phase 3 \u2014 PRD review", + "details": "User approval recorded for PRD.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:55:12Z", + "event": "artifact_commit_and_link_completed", + "phase_id": 3, + "phase_name": "Phase 3 \u2014 PRD review", + "details": "Committed product_spec.md at 78495f4c63886d65e5c9145a5256eff73af7993f, pushed branch, posted issue link, and opened PR #28.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-01T17:55:12Z", + "event": "phase_paused", + "phase_id": 3, + "phase_name": "Phase 3 \u2014 PRD review", + "details": "Pause protocol applied. Awaiting explicit user instruction: start design spec.", + "source": "issue-flow" } ] } From 7c11e40be861485876dead36de087eb028cc11a9 Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Wed, 8 Apr 2026 15:29:34 +0100 Subject: [PATCH 03/11] docs(22_should-add-support-for-cloud-compute): add approved Design Spec Approved Design Spec for #22. --- .../design_review_summary.md | 40 +++ .../design_spec.md | 254 ++++++++++++++++++ 2 files changed, 294 insertions(+) create mode 100644 specs/22_should-add-support-for-cloud-compute/design_review_summary.md create mode 100644 specs/22_should-add-support-for-cloud-compute/design_spec.md diff --git a/specs/22_should-add-support-for-cloud-compute/design_review_summary.md b/specs/22_should-add-support-for-cloud-compute/design_review_summary.md new file mode 100644 index 00000000..95e9ea73 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/design_review_summary.md @@ -0,0 +1,40 @@ +# Design Review Summary: Issue #22 + +## Metadata +- Date: 2026-04-08 +- Input: `specs/22_should-add-support-for-cloud-compute/design_spec.md` +- Phase: 5 (Design review) + +## Lens 1: UX Research +- Primary user goals are represented: selection, configuration, status visibility, and failure recovery. +- Flow accounts for first-time setup and settings-based updates. +- No blocker found. + +## Lens 2: Interaction Design +- End-to-end flow is deterministic and includes fallback branches. +- Step transitions and disable/enable rules for submission are explicit. +- No blocker found. + +## Lens 3: Accessibility +- Keyboard navigation, labels, live-region updates, and non-color status indicators are defined. +- Mobile touch target and responsive constraints are included. +- No blocker found. + +## Lens 4: Visual/Brand +- Component inventory is cohesive and supports clear status storytelling. +- Placeholder references exist for visual design handoff artifacts. +- No blocker found. + +## Lens 5: Frontend Engineering +- Components are decomposed into implementable units (`ProviderSelector`, `ProviderConfigForm`, `FallbackPolicyToggle`, `ProvisioningTimeline`). +- State and behavior boundaries are clear for implementation and testing. +- No blocker found. + +## Gate Decision +- `design_completeness_gate`: **passed** +- `design_approval`: **pending human approval** + +## Non-Blocking Follow-Ups +- Finalize exact field schema names during technical spec phase. +- Define canonical provider ordering constant to avoid UI drift. +- Confirm copy strings with docs/content owner before implementation freeze. diff --git a/specs/22_should-add-support-for-cloud-compute/design_spec.md b/specs/22_should-add-support-for-cloud-compute/design_spec.md new file mode 100644 index 00000000..18aa2bb2 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/design_spec.md @@ -0,0 +1,254 @@ +# Design Spec: Cloud Compute Provider Wizard and Provisioning UX + +## Metadata +- Issue: https://github.com/Flow-Research/Jarvis/issues/22 +- PRD source: `specs/22_should-add-support-for-cloud-compute/product_spec.md` +- Date: 2026-04-08 +- Phase: 4 (Design specification) + +## Design Goals +- Make provider selection explicit, low-friction, and reversible. +- Use one user-facing flow regardless of provider while preserving provider-specific configuration. +- Keep local provider as a first-class option. +- Make fallback behavior understandable and configurable without hidden automation. +- Expose provisioning and healthcheck status with clear outcomes and timings. + +## Primary Users +- Operator setting up compute for a new workspace. +- Existing user updating compute provider in settings. +- Platform maintainer diagnosing provider provisioning failures. + +## Information Architecture +- Entry points: + - Onboarding wizard step: `Compute Provider` + - Settings page: `Compute` -> `Provider` tab +- Primary sections: + - Provider Selection + - Provider Configuration + - Fallback Policy + - Provisioning Status and Result + - Provider Healthcheck Status + +## User Flow Diagram +```mermaid +flowchart TD + A[Open Compute Setup] --> B{Choose Provider} + B -->|Local| C[Show Local Summary] + B -->|EigenCloud| D[Show EigenCloud Config Form] + B -->|AWS| E[Show AWS Config Form] + B -->|DigitalOcean| F[Show DigitalOcean Config Form] + + D --> G[Set Fallback Toggle] + E --> G + F --> G + C --> H[Submit Create Sandbox] + G --> H + + H --> I{Provisioning Success?} + I -->|Yes| J[Run Healthcheck] + I -->|No + Fallback ON + Hosted| K[Start Local Fallback] + I -->|No + Fallback OFF| L[Show Hosted Failure] + + K --> M{Local Fallback Success?} + M -->|Yes| J + M -->|No| N[Show Fallback Failure] + + J --> O{Healthcheck Pass?} + O -->|Yes| P[Show Success + Provider + Duration] + O -->|No| Q[Show Healthcheck Failure] +``` + +## Screen Inventory +1. Compute Provider Selection (wizard step / settings tab root) +2. Provider Configuration Form (dynamic by provider) +3. Fallback Policy Card +4. Provisioning Progress and Logs Panel +5. Provisioning Result Screen (success/failure/fallback outcomes) + +## Screen Specifications + +### 1) Compute Provider Selection +#### Purpose +Allow explicit selection of `EigenCloud`, `AWS`, `DigitalOcean`, or `Local`. + +#### Components +- Radio/segmented provider selector (single select) +- Provider cards with short capability summary +- Continue button (disabled until valid selection) + +#### States +- Default: no selection +- Selected provider: card highlighted, continue enabled +- Editing existing profile: current provider preselected + +### 2) Provider Configuration Form +#### Purpose +Capture provider-specific values needed for provisioning. + +#### Shared layout +- Header: provider name + icon +- Required fields section +- Advanced fields (collapsible) +- Inline validation + error messages + +#### Provider-specific field groups +- EigenCloud: + - Project/organization ID + - Region/zone + - API credential reference selector +- AWS: + - Account/role profile reference + - Region + - VPC/subnet selection (or reference) +- DigitalOcean: + - Project ID/tag + - Region + - API token reference selector +- Local: + - Runtime profile selection + - Optional local resource caps + +### 3) Fallback Policy Card +#### Purpose +Control auto-fallback to local when hosted creation fails. + +#### Components +- Toggle: `Auto-fallback to Local on hosted creation failure` +- Description text for ON/OFF behavior +- Default value indicator: ON + +#### Behavior +- Toggle shown for hosted providers. +- For Local selection, toggle hidden and not applied. +- Changes persist with provider configuration. + +### 4) Provisioning Progress and Logs Panel +#### Purpose +Make create + healthcheck lifecycle transparent. + +#### Components +- Stepper/timeline: + - `Submitting request` + - `Provisioning sandbox` + - `Running healthcheck` + - `Completed` +- Timer showing elapsed duration +- Structured event log rows: + - timestamp + - provider + - event + - status + +#### Hosted failure behavior +- If fallback ON: + - Add explicit event `Hosted provisioning failed, attempting local fallback` + - Start local provisioning step +- If fallback OFF: + - Show terminal hosted failure without fallback step + +### 5) Provisioning Result Screen +#### Success +- Show final provider used +- Show total duration +- Show healthcheck pass status +- Show fallback badge if fallback occurred + +#### Failure +- Show failing provider +- Show failure reason category +- Show retry action and edit settings action + +## Component Specifications + +### `ProviderSelector` +- Inputs: + - `providers: ProviderOption[]` + - `selectedProvider: ProviderId | null` + - `onSelect(providerId)` +- Requirements: + - Keyboard navigable options + - Consistent ordering: EigenCloud, AWS, DigitalOcean, Local + +### `ProviderConfigForm` +- Inputs: + - `providerId` + - `initialValues` + - `onChange(values, isValid)` +- Requirements: + - Provider-specific schema validation + - Inline field-level errors + +### `FallbackPolicyToggle` +- Inputs: + - `enabled` + - `defaultEnabled = true` + - `onToggle(enabled)` +- Requirements: + - Visible only when provider is hosted + - Must display default ON guidance + +### `ProvisioningTimeline` +- Inputs: + - `events[]` + - `elapsedMs` + - `fallbackAttempted` +- Requirements: + - Event grouping by phase + - Visual distinction between primary provider and fallback provider + +## Interaction Patterns +- Switching provider resets provider-specific invalid fields and preserves cross-provider common values where safe. +- Submit button remains disabled until selected provider config validates. +- During provisioning, prevent duplicate submissions and surface cancel/back behavior clearly. +- Retry action reuses last valid configuration. +- Fallback events are never silent; user sees explicit status transition. + +## Accessibility Requirements +- All form controls have associated labels and descriptions. +- Provider selector supports keyboard navigation and visible focus state. +- Error text is linked to invalid fields with ARIA attributes. +- Timeline updates announce status changes using polite live regions. +- Color is not the only status indicator; include text labels/icons. +- Minimum touch target size 44x44 CSS px on mobile. + +## Responsive Behavior +- Desktop/tablet: + - Two-column layout for provider card + form + - Timeline and event logs side-by-side +- Mobile: + - Single-column stack + - Sticky primary actions (`Continue`, `Create Sandbox`) + - Collapsible advanced fields by default + +## Copy and Messaging Rules +- Hosted failure + fallback ON: + - "Hosted provisioning failed for . Switching to Local fallback." +- Hosted failure + fallback OFF: + - "Hosted provisioning failed for . Local fallback is disabled." +- Healthcheck failure: + - "Sandbox created, but healthcheck did not pass. Review provider logs." + +## Telemetry and Analytics Events +- `compute_provider_selected` +- `compute_provider_config_validated` +- `sandbox_create_started` +- `sandbox_create_succeeded` +- `sandbox_create_failed` +- `sandbox_fallback_attempted` +- `sandbox_fallback_succeeded` +- `sandbox_fallback_failed` +- `sandbox_healthcheck_passed` +- `sandbox_healthcheck_failed` + +## Figma / Screenshots Placeholders +- Figma board link: `TODO` +- Onboarding provider step screenshot: `TODO` +- Settings provider tab screenshot: `TODO` +- Provisioning timeline screenshot: `TODO` + +## PRD Traceability +- AC-1 (provider list) -> Provider Selection screen + `ProviderSelector`. +- AC-2 (routing) -> ProviderConfig + submit flow mapping. +- AC-3/4/5/6 (create + healthcheck success) -> Provisioning timeline + result states. +- AC-7/8/9 (fallback behavior) -> Fallback policy card + hosted failure branches. +- AC-10 (logging) -> Provisioning logs panel + telemetry events. From 297007212a955678859fc7826bd928dc02d7124b Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Wed, 8 Apr 2026 15:30:39 +0100 Subject: [PATCH 04/11] chore(22_should-add-support-for-cloud-compute): sync design phase state and links Record design approval, artifact commit metadata, and pause trigger for tech spec. --- .../.issue-flow-state.json | 97 ++++++++++++++++--- 1 file changed, 84 insertions(+), 13 deletions(-) diff --git a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json index eb464b17..353e326d 100644 --- a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json +++ b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json @@ -1,6 +1,6 @@ { "version": 4, - "updated_at": "2026-04-01T17:55:12Z", + "updated_at": "2026-04-08T14:30:12Z", "issue": { "number": "22", "url": "https://github.com/Flow-Research/Jarvis/issues/22", @@ -12,11 +12,11 @@ "spec_root": "specs" }, "phase": { - "id": 3, - "name": "Phase 3 \u2014 PRD review", + "id": 5, + "name": "Phase 5 \u2014 Design review", "status": "paused_awaiting_instruction", - "started_at": "2026-04-01T17:50:42Z", - "updated_at": "2026-04-01T17:55:12Z" + "started_at": "2026-04-08T14:28:26Z", + "updated_at": "2026-04-08T14:30:12Z" }, "mode": "discovery-recovery", "git": { @@ -31,7 +31,7 @@ "project_title": null, "pr_url": "https://github.com/Flow-Research/Jarvis/pull/28", "ci_url": null, - "last_sync_at": "2026-04-01T17:55:12Z", + "last_sync_at": "2026-04-08T14:30:12Z", "gh_available": true, "issue_assignees": [ "catchmeifyoucaan", @@ -45,7 +45,7 @@ "issue_clarification_recovery_gate": "passed", "brainstorm_discovery_gate": "passed", "spec_gate": "passed", - "design_completeness_gate": "pending", + "design_completeness_gate": "passed", "design_simplicity_gate": "pending", "regression_coverage_gate": "pending", "generated_test_gate": "pending", @@ -58,7 +58,7 @@ "brainstorm_approval": "passed", "issue_append_approval": "passed", "prd_approval": "passed", - "design_approval": "pending", + "design_approval": "passed", "tech_spec_approval": "pending", "execution_scope_approval": "pending", "final_acceptance": "pending" @@ -71,8 +71,8 @@ "issue_body_draft": "specs/22_should-add-support-for-cloud-compute/issue_body_draft.md", "product_spec": "specs/22_should-add-support-for-cloud-compute/product_spec.md", "prd_review_summary": "specs/22_should-add-support-for-cloud-compute/prd_review_summary.md", - "design_spec": null, - "design_review_summary": null, + "design_spec": "specs/22_should-add-support-for-cloud-compute/design_spec.md", + "design_review_summary": "specs/22_should-add-support-for-cloud-compute/design_review_summary.md", "technical_spec": null, "techspec_review_summary": null, "regression_spec": null, @@ -96,8 +96,15 @@ "timestamp": "2026-04-01T17:55:12Z" }, "design_spec": { - "committed": false, - "skipped": false + "committed": true, + "commit_sha": "5c66802ee7111341b9417de5c48cc1b5904cbf61", + "pushed": true, + "github_comment_posted": true, + "github_comment_url": "https://github.com/Flow-Research/Jarvis/issues/22#issuecomment-4207018362", + "pr_created": false, + "pr_url": "https://github.com/Flow-Research/Jarvis/pull/28", + "skipped": false, + "timestamp": "2026-04-08T14:30:12Z" }, "technical_spec": { "committed": false, @@ -118,7 +125,7 @@ ] }, "blockers": [], - "next_action": "Await explicit user instruction to start design spec.", + "next_action": "Await explicit user instruction to start tech spec.", "history": [ { "timestamp": "2026-03-27T14:07:12Z", @@ -279,6 +286,70 @@ "phase_name": "Phase 3 \u2014 PRD review", "details": "Pause protocol applied. Awaiting explicit user instruction: start design spec.", "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:28:26Z", + "event": "phase_transition", + "phase_id": 4, + "phase_name": "Phase 4 \u2014 Design specification", + "details": "Transitioned from Phase 3 to Phase 4 after explicit user instruction to continue.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:28:26Z", + "event": "design_spec_created", + "phase_id": 4, + "phase_name": "Phase 4 \u2014 Design specification", + "details": "Created design_spec.md with user flows, screen inventory, component specs, interaction patterns, accessibility, and responsive behavior.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:28:26Z", + "event": "phase_transition", + "phase_id": 5, + "phase_name": "Phase 5 \u2014 Design review", + "details": "Transitioned from Phase 4 to Phase 5 after design specification generation.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:28:26Z", + "event": "design_review_completed", + "phase_id": 5, + "phase_name": "Phase 5 \u2014 Design review", + "details": "Created design_review_summary.md and passed design_completeness_gate with no blocking findings.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:28:26Z", + "event": "phase_paused", + "phase_id": 5, + "phase_name": "Phase 5 \u2014 Design review", + "details": "Awaiting human gate design_approval before tech spec can start.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:30:12Z", + "event": "design_approval_recorded", + "phase_id": 5, + "phase_name": "Phase 5 \u2014 Design review", + "details": "User approval recorded for design spec.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:30:12Z", + "event": "artifact_commit_and_link_completed", + "phase_id": 5, + "phase_name": "Phase 5 \u2014 Design review", + "details": "Committed design_spec.md at 5c66802ee7111341b9417de5c48cc1b5904cbf61, pushed branch, posted issue link, and updated PR #28 checklist.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:30:12Z", + "event": "phase_paused", + "phase_id": 5, + "phase_name": "Phase 5 \u2014 Design review", + "details": "Pause protocol applied. Awaiting explicit user instruction: start tech spec.", + "source": "issue-flow" } ] } From d2880855c187eab6ce99411c59466096b408f31e Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Wed, 8 Apr 2026 15:37:34 +0100 Subject: [PATCH 05/11] docs(22_should-add-support-for-cloud-compute): add technical spec and review Advance issue-flow through Phase 6/7 and pause on tech_spec_approval gate. --- .../.issue-flow-state.json | 60 ++++- .../technical_spec.md | 254 ++++++++++++++++++ .../techspec_review_summary.md | 43 +++ 3 files changed, 347 insertions(+), 10 deletions(-) create mode 100644 specs/22_should-add-support-for-cloud-compute/technical_spec.md create mode 100644 specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md diff --git a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json index 353e326d..fd7d824a 100644 --- a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json +++ b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json @@ -1,6 +1,6 @@ { "version": 4, - "updated_at": "2026-04-08T14:30:12Z", + "updated_at": "2026-04-08T14:36:45Z", "issue": { "number": "22", "url": "https://github.com/Flow-Research/Jarvis/issues/22", @@ -12,11 +12,11 @@ "spec_root": "specs" }, "phase": { - "id": 5, - "name": "Phase 5 \u2014 Design review", + "id": 7, + "name": "Phase 7 \u2014 Tech spec review", "status": "paused_awaiting_instruction", - "started_at": "2026-04-08T14:28:26Z", - "updated_at": "2026-04-08T14:30:12Z" + "started_at": "2026-04-08T14:36:45Z", + "updated_at": "2026-04-08T14:36:45Z" }, "mode": "discovery-recovery", "git": { @@ -31,7 +31,7 @@ "project_title": null, "pr_url": "https://github.com/Flow-Research/Jarvis/pull/28", "ci_url": null, - "last_sync_at": "2026-04-08T14:30:12Z", + "last_sync_at": "2026-04-08T14:36:45Z", "gh_available": true, "issue_assignees": [ "catchmeifyoucaan", @@ -46,7 +46,7 @@ "brainstorm_discovery_gate": "passed", "spec_gate": "passed", "design_completeness_gate": "passed", - "design_simplicity_gate": "pending", + "design_simplicity_gate": "passed", "regression_coverage_gate": "pending", "generated_test_gate": "pending", "test_quality_gate": "pending", @@ -73,8 +73,8 @@ "prd_review_summary": "specs/22_should-add-support-for-cloud-compute/prd_review_summary.md", "design_spec": "specs/22_should-add-support-for-cloud-compute/design_spec.md", "design_review_summary": "specs/22_should-add-support-for-cloud-compute/design_review_summary.md", - "technical_spec": null, - "techspec_review_summary": null, + "technical_spec": "specs/22_should-add-support-for-cloud-compute/technical_spec.md", + "techspec_review_summary": "specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md", "regression_spec": null, "api_tests": [], "browser_tests": [], @@ -125,7 +125,7 @@ ] }, "blockers": [], - "next_action": "Await explicit user instruction to start tech spec.", + "next_action": "Await user approval for technical spec (gates.human.tech_spec_approval) before technical spec artifact commit-and-link and implementation phase.", "history": [ { "timestamp": "2026-03-27T14:07:12Z", @@ -350,6 +350,46 @@ "phase_name": "Phase 5 \u2014 Design review", "details": "Pause protocol applied. Awaiting explicit user instruction: start tech spec.", "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:36:45Z", + "event": "phase_transition", + "phase_id": 6, + "phase_name": "Phase 6 \u2014 Tech spec", + "details": "Transitioned from Phase 5 to Phase 6 after explicit user instruction to start tech spec.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:36:45Z", + "event": "technical_spec_created", + "phase_id": 6, + "phase_name": "Phase 6 \u2014 Tech spec", + "details": "Created technical_spec.md with architecture, file-level implementation plan, fallback behavior, and test matrix.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:36:45Z", + "event": "phase_transition", + "phase_id": 7, + "phase_name": "Phase 7 \u2014 Tech spec review", + "details": "Transitioned from Phase 6 to Phase 7 after technical spec generation.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:36:45Z", + "event": "techspec_review_completed", + "phase_id": 7, + "phase_name": "Phase 7 \u2014 Tech spec review", + "details": "Created techspec_review_summary.md; design_simplicity_gate passed with no blocking architecture issues.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:36:45Z", + "event": "phase_paused", + "phase_id": 7, + "phase_name": "Phase 7 \u2014 Tech spec review", + "details": "Awaiting human gate tech_spec_approval before implementation planning can start.", + "source": "issue-flow" } ] } diff --git a/specs/22_should-add-support-for-cloud-compute/technical_spec.md b/specs/22_should-add-support-for-cloud-compute/technical_spec.md new file mode 100644 index 00000000..d4cf9e91 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/technical_spec.md @@ -0,0 +1,254 @@ +# Technical Spec: Multi-Provider Cloud Compute for Sandbox Runtime + +## Metadata +- Issue: https://github.com/Flow-Research/Jarvis/issues/22 +- PRD: `specs/22_should-add-support-for-cloud-compute/product_spec.md` +- Design spec: `specs/22_should-add-support-for-cloud-compute/design_spec.md` +- Date: 2026-04-08 +- Phase: 6 (Tech spec) + +## Implementation Objective +Implement hosted compute selection (`eigencloud`, `aws`, `digitalocean`) plus local compute (`local`) behind one control-plane path for sandbox creation and healthcheck, with configurable local fallback (default ON) when hosted provisioning fails. + +## Existing Architecture Baseline +- Sandbox runtime orchestration centers on: + - `src/agents/sandbox/context.ts` + - `src/agents/sandbox/backend.ts` + - `src/agents/sandbox/types.ts` + - `src/agents/sandbox/config.ts` +- Existing backend registry supports runtime backend IDs and factory registration (`docker`, `ssh`). +- Setup/onboarding flows are centralized in: + - `src/wizard/setup.ts` + - `src/commands/onboard*.ts` + - `src/cli/program/register.onboard.ts` +- Config types/schemas for sandbox live in: + - `src/config/types.agents-shared.ts` + - `src/config/types.sandbox.ts` + - `src/config/zod-schema.agent-runtime.ts` + +## Proposed Minimal Architecture + +### 1) Compute Provider Contract (new) +Add a hosted provider contract that resolves provider-specific provisioning into a normalized runtime target. + +```ts +type ComputeProviderId = "local" | "eigencloud" | "aws" | "digitalocean"; + +type ComputeProvisionResult = { + runtimeId: string; + runtimeLabel: string; + connection: { + transport: "ssh"; + target: string; + workspaceRoot: string; + identity?: SecretInput; + knownHosts?: SecretInput; + }; + metadata?: Record; +}; + +type HostedComputeProvider = { + id: Exclude; + provision(params: ProvisionParams): Promise; + healthcheck(params: HealthcheckParams): Promise<{ ok: boolean; detail?: string }>; +}; +``` + +Design choice: +- Keep `docker` backend for local path. +- Add hosted compute adapter layer that feeds into sandbox runtime using a normalized SSH-oriented handoff for provider-created environments. +- Avoid introducing multiple incompatible control planes. + +### 2) Config Surface (extend existing sandbox config) +Add `sandbox.compute` config block under `AgentSandboxConfig`/schema: + +```ts +compute?: { + provider?: "local" | "eigencloud" | "aws" | "digitalocean"; + fallbackToLocalOnHostedFailure?: boolean; // default true + hosted?: { + eigencloud?: { projectId?: string; region?: string; credentialRef?: SecretInput }; + aws?: { region?: string; roleArn?: string; credentialRef?: SecretInput }; + digitalocean?: { projectId?: string; region?: string; tokenRef?: SecretInput }; + }; +} +``` + +Validation rules: +- `provider` defaults to `local` when unset. +- `fallbackToLocalOnHostedFailure` defaults to `true`. +- Hosted provider-specific required fields validated when selected. + +### 3) Control-Plane Routing +In sandbox context resolution: +- Read `sandbox.compute.provider`. +- Route: + - `local` -> existing local path (docker backend). + - hosted provider -> hosted provisioner + healthcheck. +- On hosted failure: + - if fallback enabled -> attempt local provisioning in same request path. + - if fallback disabled -> return hosted failure. + +### 4) Wizard + CLI Integration +Extend setup/onboarding to configure provider and fallback: +- Interactive wizard: + - provider select: EigenCloud/AWS/DigitalOcean/Local + - provider-specific fields + - fallback toggle for hosted providers (default ON) +- Non-interactive: + - new flags for provider selection and hosted credentials references. + +### 5) Logging and Telemetry Schema +Add structured events for: +- provider selected +- provisioning started/succeeded/failed +- fallback attempted/succeeded/failed +- healthcheck passed/failed +- duration_ms and provider_id always attached + +## Detailed Change Plan + +### A) Config Types + Schema +Files: +- `src/config/types.agents-shared.ts` +- `src/config/types.sandbox.ts` +- `src/config/zod-schema.agent-runtime.ts` + +Changes: +- add new `compute` type in `AgentSandboxConfig` +- add zod schema for provider enum, fallback toggle, provider-specific settings +- maintain backward compatibility: if `compute` absent, behavior remains existing local path + +### B) Hosted Provider Registry + Adapters +New files: +- `src/agents/sandbox/compute/types.ts` +- `src/agents/sandbox/compute/registry.ts` +- `src/agents/sandbox/compute/providers/eigencloud.ts` +- `src/agents/sandbox/compute/providers/aws.ts` +- `src/agents/sandbox/compute/providers/digitalocean.ts` +- `src/agents/sandbox/compute/healthcheck.ts` + +Changes: +- register hosted provider adapters +- normalize provider outputs into common runtime shape + +### C) Sandbox Context Routing + Fallback +Files: +- `src/agents/sandbox/context.ts` +- `src/agents/sandbox/config.ts` +- `src/agents/sandbox/types.ts` + +Changes: +- resolve selected compute provider from config +- branch execution: + - local direct path + - hosted provisioning path with healthcheck +- fallback flow with explicit logs and error propagation policy + +### D) Wizard and Onboard Surface +Files: +- `src/wizard/setup.ts` +- `src/wizard/setup.types.ts` +- `src/commands/onboard-types.ts` +- `src/cli/program/register.onboard.ts` +- `src/commands/onboard-non-interactive/local.ts` + +New file: +- `src/wizard/setup.compute-provider.ts` + +Changes: +- add provider selection and hosted credential prompts +- add fallback toggle prompt +- wire non-interactive flags into config application path + +### E) Observability +Files: +- `src/agents/sandbox/context.ts` (event emission points) +- `src/logging/*` (if dedicated schema helpers are required) + +Changes: +- standard event payload fields: + - `compute_provider` + - `selected_provider` + - `fallback_provider` (if used) + - `fallback_trigger_reason` + - `duration_ms` + - `healthcheck_ok` + +## Runtime Sequence +1. Load sandbox config and resolve `compute.provider`. +2. If provider=`local`: + - execute existing local runtime path. +3. If provider is hosted: + - run provider provisioner. + - run provider healthcheck. +4. On hosted error: + - if fallback ON: route to local create path and emit fallback event. + - else: return hosted failure. +5. Return unified runtime context regardless of provider. + +## Failure Model +- Hosted provisioner error + - fallback ON -> continue with local path + - fallback OFF -> fail request +- Healthcheck failure after hosted create + - treated as hosted failure for fallback logic +- Local fallback failure + - return composite error: hosted failure + fallback failure detail + +## Backward Compatibility +- Existing configs without `sandbox.compute` remain valid and default to local. +- Existing `sandbox.backend` behavior remains supported. +- No changes to current default gateway behavior unless compute provider is configured. + +## Security and Secret Handling +- Hosted credentials must support SecretRef flows (env/file/exec) and avoid plaintext where possible. +- Do not log secret values; log only provider ID and non-sensitive failure categories. +- Reuse existing secret resolution and redaction patterns. + +## Testing Plan + +### Unit Tests +- Config schema and defaults: + - `src/config/config.sandbox-docker.test.ts` (extend) or add `src/config/config.sandbox.compute.test.ts` +- Provider registry: + - `src/agents/sandbox/compute/registry.test.ts` +- Fallback routing: + - `src/agents/sandbox/context.compute-fallback.test.ts` +- Wizard mapping: + - `src/wizard/setup.compute-provider.test.ts` +- Non-interactive flags mapping: + - `src/cli/program/register.onboard.test.ts` + - `src/commands/onboard-non-interactive/local.test.ts` + +### Integration Tests +- Hosted provider success path for each provider (mocked provider APIs): + - `src/agents/sandbox/compute/providers/eigencloud.test.ts` + - `src/agents/sandbox/compute/providers/aws.test.ts` + - `src/agents/sandbox/compute/providers/digitalocean.test.ts` +- Fallback ON: + - hosted failure -> local success +- Fallback OFF: + - hosted failure -> terminal error + +### Acceptance Mapping +- AC-1/2: wizard and route mapping tests +- AC-3/4/5: per-provider create + healthcheck tests with `< 60s` assertion harness +- AC-6: local provider contract parity tests +- AC-7/8/9: fallback default and toggle behavior tests +- AC-10: structured log event payload tests + +## Rollout Strategy +- Feature is enabled by config selection; default local behavior unchanged. +- Merge in increments: + 1. config + type plumbing + 2. provider contract + stubs with tests + 3. hosted adapters + fallback routing + 4. wizard/CLI surfaces + 5. end-to-end validation and docs + +## Explicit Non-Goals +- Cost-based provider optimization. +- Multi-region placement heuristics. +- Wallet/reward/PSH integration. +- Changing existing trusted-boundary security model outside compute selection/fallback. diff --git a/specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md b/specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md new file mode 100644 index 00000000..e5e9a396 --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md @@ -0,0 +1,43 @@ +# Tech Spec Review Summary: Issue #22 + +## Metadata +- Date: 2026-04-08 +- Input: `specs/22_should-add-support-for-cloud-compute/technical_spec.md` +- Phase: 7 (Tech spec review) + +## Review Focus +- Simplicity and architectural fitness +- Alignment with existing sandbox + onboarding architecture +- Testability and acceptance-criteria traceability + +## Findings + +### 1) Architecture Fit +- The spec extends existing sandbox/onboarding structure instead of introducing a separate orchestration stack. +- It reuses current config and backend primitives (`context.ts`, backend registry, wizard/onboard flow). +- Result: **fit is good**, no redesign blocker. + +### 2) Simplicity Check +- Minimal approach selected: + - Add a compute provider contract and route through existing control-plane entry. + - Keep local path as current default. + - Add hosted adapters without replacing baseline sandbox backend architecture. +- Avoids unnecessary framework/microservice split. +- Result: **passes simplicity gate**. + +### 3) Testability +- Acceptance criteria map cleanly to concrete unit/integration tests. +- Fallback-on/fallback-off behaviors are explicitly testable. +- Result: **testability is sufficient**. + +## Non-Blocking Adjustments +- Keep provider field names consistent between wizard, CLI flags, and config schema (`eigencloud`/`aws`/`digitalocean`). +- Ensure timing assertions (`< 60s`) use stable mocked clocks/harnesses where live provider timing is nondeterministic. +- Confirm final event schema names before implementation to avoid log migration churn. + +## Gate Decision +- `design_simplicity_gate`: **passed** +- `tech_spec_approval`: **pending human approval** + +## Recommendation +- Ready to proceed once tech spec approval is recorded. From c6c97859e688a94b31a3e2d5ff40b6e2d8dbcb28 Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Wed, 8 Apr 2026 15:40:12 +0100 Subject: [PATCH 06/11] chore(22_should-add-support-for-cloud-compute): record technical spec approval and links Mark tech_spec_approval passed, set artifact commit metadata, and pause for implementation-planning trigger. --- .../.issue-flow-state.json | 45 ++++++++++++++++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json index fd7d824a..0f6d50a8 100644 --- a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json +++ b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json @@ -1,6 +1,6 @@ { "version": 4, - "updated_at": "2026-04-08T14:36:45Z", + "updated_at": "2026-04-08T14:39:28Z", "issue": { "number": "22", "url": "https://github.com/Flow-Research/Jarvis/issues/22", @@ -16,7 +16,7 @@ "name": "Phase 7 \u2014 Tech spec review", "status": "paused_awaiting_instruction", "started_at": "2026-04-08T14:36:45Z", - "updated_at": "2026-04-08T14:36:45Z" + "updated_at": "2026-04-08T14:39:28Z" }, "mode": "discovery-recovery", "git": { @@ -31,7 +31,7 @@ "project_title": null, "pr_url": "https://github.com/Flow-Research/Jarvis/pull/28", "ci_url": null, - "last_sync_at": "2026-04-08T14:36:45Z", + "last_sync_at": "2026-04-08T14:39:28Z", "gh_available": true, "issue_assignees": [ "catchmeifyoucaan", @@ -59,7 +59,7 @@ "issue_append_approval": "passed", "prd_approval": "passed", "design_approval": "passed", - "tech_spec_approval": "pending", + "tech_spec_approval": "passed", "execution_scope_approval": "pending", "final_acceptance": "pending" } @@ -107,8 +107,15 @@ "timestamp": "2026-04-08T14:30:12Z" }, "technical_spec": { - "committed": false, - "skipped": false + "committed": true, + "commit_sha": "28a759901e6a38e45dd1955ba12e1ff11a59728a", + "pushed": true, + "github_comment_posted": true, + "github_comment_url": "https://github.com/Flow-Research/Jarvis/issues/22#issuecomment-4207082264", + "pr_created": false, + "pr_url": "https://github.com/Flow-Research/Jarvis/pull/28", + "skipped": false, + "timestamp": "2026-04-08T14:39:28Z" }, "regression_spec": { "committed": false, @@ -125,7 +132,7 @@ ] }, "blockers": [], - "next_action": "Await user approval for technical spec (gates.human.tech_spec_approval) before technical spec artifact commit-and-link and implementation phase.", + "next_action": "Await explicit user instruction to start implementation planning.", "history": [ { "timestamp": "2026-03-27T14:07:12Z", @@ -390,6 +397,30 @@ "phase_name": "Phase 7 \u2014 Tech spec review", "details": "Awaiting human gate tech_spec_approval before implementation planning can start.", "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:39:28Z", + "event": "tech_spec_approval_recorded", + "phase_id": 7, + "phase_name": "Phase 7 \u2014 Tech spec review", + "details": "User approval recorded for technical spec.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:39:28Z", + "event": "artifact_commit_and_link_completed", + "phase_id": 7, + "phase_name": "Phase 7 \u2014 Tech spec review", + "details": "Technical spec artifact recorded at 28a759901e6a38e45dd1955ba12e1ff11a59728a, issue link posted, and PR #28 checklist updated.", + "source": "issue-flow" + }, + { + "timestamp": "2026-04-08T14:39:28Z", + "event": "phase_paused", + "phase_id": 7, + "phase_name": "Phase 7 \u2014 Tech spec review", + "details": "Pause protocol applied. Awaiting explicit user instruction: start implementation planning.", + "source": "issue-flow" } ] } From 3e58086063d70da7422816ed182e85ad94925897 Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Wed, 8 Apr 2026 16:32:10 +0100 Subject: [PATCH 07/11] feat(sandbox): add compute provider routing and hosted fallback --- docs/.generated/config-baseline.json | 27142 ++-------------- docs/.generated/config-baseline.jsonl | 2166 +- src/agents/sandbox-merge.test.ts | 63 + .../sandbox.resolveSandboxContext.test.ts | 1 + src/agents/sandbox/config.ts | 161 +- .../sandbox/context.compute-fallback.test.ts | 100 + src/agents/sandbox/context.ts | 101 +- src/agents/sandbox/types.ts | 27 + src/config/config.sandbox-docker.test.ts | 73 + src/config/types.agents-shared.ts | 3 + src/config/types.sandbox.ts | 40 + src/config/zod-schema.agent-runtime.ts | 57 + 12 files changed, 2567 insertions(+), 27367 deletions(-) create mode 100644 src/agents/sandbox/context.compute-fallback.test.ts diff --git a/docs/.generated/config-baseline.json b/docs/.generated/config-baseline.json index 7c960b04..3b41da19 100644 --- a/docs/.generated/config-baseline.json +++ b/docs/.generated/config-baseline.json @@ -9385,20 +9385,25 @@ ], "label": "Discord", "help": "very well supported right now.", - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts", + "path": "channels.feishu", "kind": "channel", "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Feishu", + "help": "飞书/Lark enterprise messaging with doc/wiki/drive tools.", "hasChildren": true }, { - "path": "channels.discord.accounts.*", + "path": "channels.feishu.accounts", "kind": "channel", "type": "object", "required": false, @@ -9408,57 +9413,52 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.ackReaction", + "path": "channels.feishu.accounts.*", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.ackReactionScope", + "path": "channels.feishu.accounts.*.actions", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "group-mentions", - "group-all", - "direct", - "all", - "off", - "none" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.actions", + "path": "channels.feishu.accounts.*.actions.reactions", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.channelInfo", + "path": "channels.feishu.accounts.*.allowFrom", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.actions.channels", + "path": "channels.feishu.accounts.*.allowFrom.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -9466,9 +9466,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.emojiUploads", + "path": "channels.feishu.accounts.*.appId", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -9476,57 +9476,60 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.events", + "path": "channels.feishu.accounts.*.appSecret", "kind": "channel", - "type": "boolean", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.actions.memberInfo", + "path": "channels.feishu.accounts.*.appSecret.id", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.messages", + "path": "channels.feishu.accounts.*.appSecret.provider", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.moderation", + "path": "channels.feishu.accounts.*.appSecret.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.permissions", + "path": "channels.feishu.accounts.*.blockStreamingCoalesce", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.actions.pins", + "path": "channels.feishu.accounts.*.blockStreamingCoalesce.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -9536,9 +9539,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.polls", + "path": "channels.feishu.accounts.*.blockStreamingCoalesce.maxDelayMs", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -9546,9 +9549,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.presence", + "path": "channels.feishu.accounts.*.blockStreamingCoalesce.minDelayMs", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -9556,19 +9559,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.reactions", + "path": "channels.feishu.accounts.*.capabilities", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.actions.roleInfo", + "path": "channels.feishu.accounts.*.capabilities.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -9576,17 +9579,21 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.roles", + "path": "channels.feishu.accounts.*.chunkMode", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "length", + "newline" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.search", + "path": "channels.feishu.accounts.*.configWrites", "kind": "channel", "type": "boolean", "required": false, @@ -9596,19 +9603,23 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.stickers", + "path": "channels.feishu.accounts.*.connectionMode", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "websocket", + "webhook" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.stickerUploads", + "path": "channels.feishu.accounts.*.dmHistoryLimit", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -9616,39 +9627,44 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.threads", + "path": "channels.feishu.accounts.*.dmPolicy", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "open", + "pairing", + "allowlist" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.actions.voiceStatus", + "path": "channels.feishu.accounts.*.dms", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.activity", + "path": "channels.feishu.accounts.*.dms.*", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.activityType", + "path": "channels.feishu.accounts.*.dms.*.enabled", "kind": "channel", - "type": "number", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9656,7 +9672,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.activityUrl", + "path": "channels.feishu.accounts.*.dms.*.systemPrompt", "kind": "channel", "type": "string", "required": false, @@ -9666,17 +9682,21 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.agentComponents", + "path": "channels.feishu.accounts.*.domain", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "feishu", + "lark" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.agentComponents.enabled", + "path": "channels.feishu.accounts.*.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -9686,65 +9706,65 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.allowBots", + "path": "channels.feishu.accounts.*.encryptKey", "kind": "channel", "type": [ - "boolean", + "object", "string" ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.allowFrom", + "path": "channels.feishu.accounts.*.encryptKey.id", "kind": "channel", - "type": "array", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.allowFrom.*", + "path": "channels.feishu.accounts.*.encryptKey.provider", "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.autoPresence", + "path": "channels.feishu.accounts.*.encryptKey.source", "kind": "channel", - "type": "object", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.autoPresence.degradedText", + "path": "channels.feishu.accounts.*.groupAllowFrom", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.autoPresence.enabled", + "path": "channels.feishu.accounts.*.groupAllowFrom.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -9752,49 +9772,57 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.autoPresence.exhaustedText", + "path": "channels.feishu.accounts.*.groupPolicy", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.autoPresence.healthyText", + "path": "channels.feishu.accounts.*.groups", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.autoPresence.intervalMs", + "path": "channels.feishu.accounts.*.groups.*", "kind": "channel", - "type": "integer", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.autoPresence.minUpdateIntervalMs", + "path": "channels.feishu.accounts.*.groups.*.allowFrom", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.blockStreaming", + "path": "channels.feishu.accounts.*.groups.*.allowFrom.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -9802,39 +9830,49 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.blockStreamingCoalesce", + "path": "channels.feishu.accounts.*.groups.*.enabled", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.blockStreamingCoalesce.idleMs", + "path": "channels.feishu.accounts.*.groups.*.groupSessionScope", "kind": "channel", - "type": "integer", + "type": "string", "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.blockStreamingCoalesce.maxChars", + "path": "channels.feishu.accounts.*.groups.*.replyInThread", "kind": "channel", - "type": "integer", + "type": "string", "required": false, + "enumValues": [ + "disabled", + "enabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.blockStreamingCoalesce.minChars", + "path": "channels.feishu.accounts.*.groups.*.requireMention", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9842,7 +9880,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.capabilities", + "path": "channels.feishu.accounts.*.groups.*.skills", "kind": "channel", "type": "array", "required": false, @@ -9852,7 +9890,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.capabilities.*", + "path": "channels.feishu.accounts.*.groups.*.skills.*", "kind": "channel", "type": "string", "required": false, @@ -9862,21 +9900,17 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.chunkMode", + "path": "channels.feishu.accounts.*.groups.*.systemPrompt", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "length", - "newline" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.commands", + "path": "channels.feishu.accounts.*.groups.*.tools", "kind": "channel", "type": "object", "required": false, @@ -9886,25 +9920,19 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.commands.native", + "path": "channels.feishu.accounts.*.groups.*.tools.allow", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.commands.nativeSkills", + "path": "channels.feishu.accounts.*.groups.*.tools.allow.*", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -9912,19 +9940,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.configWrites", + "path": "channels.feishu.accounts.*.groups.*.tools.deny", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.dangerouslyAllowNameMatching", + "path": "channels.feishu.accounts.*.groups.*.tools.deny.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -9932,27 +9960,21 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.defaultTo", + "path": "channels.feishu.accounts.*.groups.*.topicSessionMode", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "disabled", + "enabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.dm", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.accounts.*.dm.allowFrom", + "path": "channels.feishu.accounts.*.groupSenderAllowFrom", "kind": "channel", "type": "array", "required": false, @@ -9962,7 +9984,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.dm.allowFrom.*", + "path": "channels.feishu.accounts.*.groupSenderAllowFrom.*", "kind": "channel", "type": [ "number", @@ -9975,19 +9997,25 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.dm.enabled", + "path": "channels.feishu.accounts.*.groupSessionScope", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.dm.groupChannels", + "path": "channels.feishu.accounts.*.heartbeat", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -9995,12 +10023,9 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.dm.groupChannels.*", + "path": "channels.feishu.accounts.*.heartbeat.intervalMs", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -10008,33 +10033,31 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.dm.groupEnabled", + "path": "channels.feishu.accounts.*.heartbeat.visibility", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "visible", + "hidden" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.dm.policy", + "path": "channels.feishu.accounts.*.historyLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.dmHistoryLimit", + "path": "channels.feishu.accounts.*.httpTimeoutMs", "kind": "channel", "type": "integer", "required": false, @@ -10044,15 +10067,24 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.dmPolicy", + "path": "channels.feishu.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.markdown.mode", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" + "native", + "escape", + "strip" ], "deprecated": false, "sensitive": false, @@ -10060,29 +10092,34 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.dms", + "path": "channels.feishu.accounts.*.markdown.tableMode", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "native", + "ascii", + "simple" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.dms.*", + "path": "channels.feishu.accounts.*.mediaMaxMb", "kind": "channel", - "type": "object", + "type": "number", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.dms.*.historyLimit", + "path": "channels.feishu.accounts.*.name", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -10090,39 +10127,53 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.draftChunk", + "path": "channels.feishu.accounts.*.reactionNotifications", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "off", + "own", + "all" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.draftChunk.breakPreference", + "path": "channels.feishu.accounts.*.renderMode", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "auto", + "raw", + "card" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.draftChunk.maxChars", + "path": "channels.feishu.accounts.*.replyInThread", "kind": "channel", - "type": "integer", + "type": "string", "required": false, + "enumValues": [ + "disabled", + "enabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.draftChunk.minChars", + "path": "channels.feishu.accounts.*.requireMention", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10130,7 +10181,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.enabled", + "path": "channels.feishu.accounts.*.resolveSenderNames", "kind": "channel", "type": "boolean", "required": false, @@ -10140,17 +10191,17 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.eventQueue", + "path": "channels.feishu.accounts.*.streaming", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.eventQueue.listenerTimeout", + "path": "channels.feishu.accounts.*.textChunkLimit", "kind": "channel", "type": "integer", "required": false, @@ -10160,19 +10211,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.eventQueue.maxConcurrency", + "path": "channels.feishu.accounts.*.tools", "kind": "channel", - "type": "integer", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.eventQueue.maxQueueSize", + "path": "channels.feishu.accounts.*.tools.chat", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10180,29 +10231,29 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals", + "path": "channels.feishu.accounts.*.tools.doc", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.agentFilter", + "path": "channels.feishu.accounts.*.tools.drive", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.agentFilter.*", + "path": "channels.feishu.accounts.*.tools.perm", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10210,22 +10261,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.approvers", + "path": "channels.feishu.accounts.*.tools.scopes", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.approvers.*", + "path": "channels.feishu.accounts.*.tools.wiki", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10233,17 +10281,21 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.cleanupAfterResolve", + "path": "channels.feishu.accounts.*.topicSessionMode", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "disabled", + "enabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.enabled", + "path": "channels.feishu.accounts.*.typingIndicator", "kind": "channel", "type": "boolean", "required": false, @@ -10253,9 +10305,12 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.sessionFilter", + "path": "channels.feishu.accounts.*.verificationToken", "kind": "channel", - "type": "array", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -10263,78 +10318,67 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.execApprovals.sessionFilter.*", + "path": "channels.feishu.accounts.*.verificationToken.id", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.execApprovals.target", + "path": "channels.feishu.accounts.*.verificationToken.provider", "kind": "channel", "type": "string", - "required": false, - "enumValues": [ - "dm", - "channel", - "both" - ], + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.groupPolicy", + "path": "channels.feishu.accounts.*.verificationToken.source", "kind": "channel", "type": "string", "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds", + "path": "channels.feishu.accounts.*.webhookHost", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*", + "path": "channels.feishu.accounts.*.webhookPath", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels", + "path": "channels.feishu.accounts.*.webhookPort", "kind": "channel", - "type": "object", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*", + "path": "channels.feishu.actions", "kind": "channel", "type": "object", "required": false, @@ -10344,7 +10388,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.allow", + "path": "channels.feishu.actions.reactions", "kind": "channel", "type": "boolean", "required": false, @@ -10354,28 +10398,32 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.autoArchiveDuration", + "path": "channels.feishu.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.allowFrom.*", "kind": "channel", "type": [ "number", "string" ], "required": false, - "enumValues": [ - "60", - "1440", - "4320", - "10080" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.autoThread", + "path": "channels.feishu.appId", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -10383,49 +10431,52 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.enabled", + "path": "channels.feishu.appSecret", "kind": "channel", - "type": "boolean", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.ignoreOtherMentions", + "path": "channels.feishu.appSecret.id", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.includeThreadStarter", + "path": "channels.feishu.appSecret.provider", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.requireMention", + "path": "channels.feishu.appSecret.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.roles", + "path": "channels.feishu.blockStreamingCoalesce", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -10433,12 +10484,9 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.roles.*", + "path": "channels.feishu.blockStreamingCoalesce.enabled", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10446,19 +10494,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.skills", + "path": "channels.feishu.blockStreamingCoalesce.maxDelayMs", "kind": "channel", - "type": "array", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.skills.*", + "path": "channels.feishu.blockStreamingCoalesce.minDelayMs", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -10466,39 +10514,43 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.systemPrompt", + "path": "channels.feishu.capabilities", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.tools", + "path": "channels.feishu.capabilities.*", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.allow", + "path": "channels.feishu.chunkMode", "kind": "channel", - "type": "array", + "type": "string", "required": false, + "enumValues": [ + "length", + "newline" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.allow.*", + "path": "channels.feishu.configWrites", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10506,17 +10558,22 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow", + "path": "channels.feishu.connectionMode", "kind": "channel", - "type": "array", - "required": false, + "type": "string", + "required": true, + "enumValues": [ + "websocket", + "webhook" + ], + "defaultValue": "websocket", "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow.*", + "path": "channels.feishu.defaultAccount", "kind": "channel", "type": "string", "required": false, @@ -10526,27 +10583,33 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.deny", + "path": "channels.feishu.dmHistoryLimit", "kind": "channel", - "type": "array", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.deny.*", + "path": "channels.feishu.dmPolicy", "kind": "channel", "type": "string", - "required": false, + "required": true, + "enumValues": [ + "open", + "pairing", + "allowlist" + ], + "defaultValue": "pairing", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender", + "path": "channels.feishu.dms", "kind": "channel", "type": "object", "required": false, @@ -10556,7 +10619,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*", + "path": "channels.feishu.dms.*", "kind": "channel", "type": "object", "required": false, @@ -10566,17 +10629,17 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow", + "path": "channels.feishu.dms.*.enabled", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow.*", + "path": "channels.feishu.dms.*.systemPrompt", "kind": "channel", "type": "string", "required": false, @@ -10586,9 +10649,23 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow", + "path": "channels.feishu.domain", "kind": "channel", - "type": "array", + "type": "string", + "required": true, + "enumValues": [ + "feishu", + "lark" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dynamicAgentCreation", + "kind": "channel", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -10596,7 +10673,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow.*", + "path": "channels.feishu.dynamicAgentCreation.agentDirTemplate", "kind": "channel", "type": "string", "required": false, @@ -10606,17 +10683,27 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny", + "path": "channels.feishu.dynamicAgentCreation.enabled", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false + }, + { + "path": "channels.feishu.dynamicAgentCreation.maxAgents", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny.*", + "path": "channels.feishu.dynamicAgentCreation.workspaceTemplate", "kind": "channel", "type": "string", "required": false, @@ -10626,66 +10713,60 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.users", + "path": "channels.feishu.enabled", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.channels.*.users.*", + "path": "channels.feishu.encryptKey", "kind": "channel", "type": [ - "number", + "object", "string" ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.ignoreOtherMentions", + "path": "channels.feishu.encryptKey.id", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.reactionNotifications", + "path": "channels.feishu.encryptKey.provider", "kind": "channel", "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all", - "allowlist" - ], + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.requireMention", + "path": "channels.feishu.encryptKey.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.roles", + "path": "channels.feishu.groupAllowFrom", "kind": "channel", "type": "array", "required": false, @@ -10695,7 +10776,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.roles.*", + "path": "channels.feishu.groupAllowFrom.*", "kind": "channel", "type": [ "number", @@ -10708,17 +10789,22 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.slug", + "path": "channels.feishu.groupPolicy", "kind": "channel", "type": "string", - "required": false, + "required": true, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.tools", + "path": "channels.feishu.groups", "kind": "channel", "type": "object", "required": false, @@ -10728,9 +10814,9 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.tools.allow", + "path": "channels.feishu.groups.*", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -10738,29 +10824,32 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.tools.allow.*", + "path": "channels.feishu.groups.*.allowFrom", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.tools.alsoAllow", + "path": "channels.feishu.groups.*.allowFrom.*", "kind": "channel", - "type": "array", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.tools.alsoAllow.*", + "path": "channels.feishu.groups.*.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10768,39 +10857,49 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.tools.deny", + "path": "channels.feishu.groups.*.groupSessionScope", "kind": "channel", - "type": "array", + "type": "string", "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.tools.deny.*", + "path": "channels.feishu.groups.*.replyInThread", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "disabled", + "enabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender", + "path": "channels.feishu.groups.*.requireMention", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*", + "path": "channels.feishu.groups.*.skills", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -10808,17 +10907,17 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.allow", + "path": "channels.feishu.groups.*.skills.*", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.allow.*", + "path": "channels.feishu.groups.*.systemPrompt", "kind": "channel", "type": "string", "required": false, @@ -10828,7 +10927,17 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow", + "path": "channels.feishu.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*.tools.allow", "kind": "channel", "type": "array", "required": false, @@ -10838,7 +10947,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow.*", + "path": "channels.feishu.groups.*.tools.allow.*", "kind": "channel", "type": "string", "required": false, @@ -10848,7 +10957,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.deny", + "path": "channels.feishu.groups.*.tools.deny", "kind": "channel", "type": "array", "required": false, @@ -10858,7 +10967,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.deny.*", + "path": "channels.feishu.groups.*.tools.deny.*", "kind": "channel", "type": "string", "required": false, @@ -10868,50 +10977,60 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.users", + "path": "channels.feishu.groups.*.topicSessionMode", "kind": "channel", - "type": "array", + "type": "string", "required": false, + "enumValues": [ + "disabled", + "enabled" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.guilds.*.users.*", + "path": "channels.feishu.groupSenderAllowFrom", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.healthMonitor", + "path": "channels.feishu.groupSenderAllowFrom.*", "kind": "channel", - "type": "object", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.healthMonitor.enabled", + "path": "channels.feishu.groupSessionScope", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.heartbeat", + "path": "channels.feishu.heartbeat", "kind": "channel", "type": "object", "required": false, @@ -10921,9 +11040,9 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.heartbeat.showAlerts", + "path": "channels.feishu.heartbeat.intervalMs", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -10931,19 +11050,23 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.heartbeat.showOk", + "path": "channels.feishu.heartbeat.visibility", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "visible", + "hidden" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.heartbeat.useIndicator", + "path": "channels.feishu.historyLimit", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -10951,7 +11074,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.historyLimit", + "path": "channels.feishu.httpTimeoutMs", "kind": "channel", "type": "integer", "required": false, @@ -10961,7 +11084,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.inboundWorker", + "path": "channels.feishu.markdown", "kind": "channel", "type": "object", "required": false, @@ -10971,29 +11094,39 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.inboundWorker.runTimeoutMs", + "path": "channels.feishu.markdown.mode", "kind": "channel", - "type": "integer", + "type": "string", "required": false, + "enumValues": [ + "native", + "escape", + "strip" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.intents", + "path": "channels.feishu.markdown.tableMode", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "native", + "ascii", + "simple" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.intents.guildMembers", + "path": "channels.feishu.mediaMaxMb", "kind": "channel", - "type": "boolean", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -11001,34 +11134,44 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.intents.presence", + "path": "channels.feishu.reactionNotifications", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, + "enumValues": [ + "off", + "own", + "all" + ], + "defaultValue": "own", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.markdown", + "path": "channels.feishu.renderMode", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "auto", + "raw", + "card" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.markdown.tables", + "path": "channels.feishu.replyInThread", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "off", - "bullets", - "code" + "disabled", + "enabled" ], "deprecated": false, "sensitive": false, @@ -11036,19 +11179,31 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.maxLinesPerMessage", + "path": "channels.feishu.requireMention", "kind": "channel", - "type": "integer", - "required": false, + "type": "boolean", + "required": true, + "defaultValue": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.mediaMaxMb", + "path": "channels.feishu.resolveSenderNames", "kind": "channel", - "type": "number", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.streaming", + "kind": "channel", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11056,9 +11211,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.name", + "path": "channels.feishu.textChunkLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -11066,7 +11221,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.pluralkit", + "path": "channels.feishu.tools", "kind": "channel", "type": "object", "required": false, @@ -11076,7 +11231,7 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.pluralkit.enabled", + "path": "channels.feishu.tools.chat", "kind": "channel", "type": "boolean", "required": false, @@ -11086,57 +11241,49 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.pluralkit.token", + "path": "channels.feishu.tools.doc", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true + "sensitive": false, + "tags": [], + "hasChildren": false }, { - "path": "channels.discord.accounts.*.pluralkit.token.id", + "path": "channels.feishu.tools.drive", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.pluralkit.token.provider", + "path": "channels.feishu.tools.perm", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.pluralkit.token.source", + "path": "channels.feishu.tools.scopes", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.proxy", + "path": "channels.feishu.tools.wiki", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11144,29 +11291,37 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.replyToMode", + "path": "channels.feishu.topicSessionMode", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "disabled", + "enabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.responsePrefix", + "path": "channels.feishu.typingIndicator", "kind": "channel", - "type": "string", - "required": false, + "type": "boolean", + "required": true, + "defaultValue": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.retry", + "path": "channels.feishu.verificationToken", "kind": "channel", - "type": "object", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -11174,39 +11329,39 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.retry.attempts", + "path": "channels.feishu.verificationToken.id", "kind": "channel", - "type": "integer", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.retry.jitter", + "path": "channels.feishu.verificationToken.provider", "kind": "channel", - "type": "number", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.retry.maxDelayMs", + "path": "channels.feishu.verificationToken.source", "kind": "channel", - "type": "integer", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.retry.minDelayMs", + "path": "channels.feishu.webhookHost", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11214,19 +11369,20 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.slashCommand", + "path": "channels.feishu.webhookPath", "kind": "channel", - "type": "object", - "required": false, + "type": "string", + "required": true, + "defaultValue": "/feishu/events", "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.slashCommand.ephemeral", + "path": "channels.feishu.webhookPort", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -11234,67 +11390,67 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.status", + "path": "channels.googlechat", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "online", - "dnd", - "idle", - "invisible" - ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Google Chat", + "help": "Google Workspace Chat app via HTTP webhooks.", "hasChildren": false }, { - "path": "channels.discord.accounts.*.streaming", + "path": "channels.imessage", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "object", "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "iMessage", + "help": "this is still a work in progress.", "hasChildren": false }, { - "path": "channels.discord.accounts.*.streamMode", + "path": "channels.irc", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "partial", - "block", - "off" - ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "IRC", + "help": "classic IRC networks with DM/channel routing and pairing controls.", "hasChildren": false }, { - "path": "channels.discord.accounts.*.textChunkLimit", + "path": "channels.line", "kind": "channel", - "type": "integer", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": false + "tags": [ + "channels", + "network" + ], + "label": "LINE", + "help": "LINE Messaging API bot for Japan/Taiwan/Thailand markets.", + "hasChildren": true }, { - "path": "channels.discord.accounts.*.threadBindings", + "path": "channels.line.accounts", "kind": "channel", "type": "object", "required": false, @@ -11304,29 +11460,32 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.threadBindings.enabled", + "path": "channels.line.accounts.*", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.threadBindings.idleHours", + "path": "channels.line.accounts.*.allowFrom", "kind": "channel", - "type": "number", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.threadBindings.maxAgeHours", + "path": "channels.line.accounts.*.allowFrom.*", "kind": "channel", - "type": "number", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -11334,9 +11493,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.threadBindings.spawnAcpSessions", + "path": "channels.line.accounts.*.channelAccessToken", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11344,9 +11503,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.threadBindings.spawnSubagentSessions", + "path": "channels.line.accounts.*.channelSecret", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11354,57 +11513,36 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.token", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.discord.accounts.*.token.id", + "path": "channels.line.accounts.*.dmPolicy", "kind": "channel", "type": "string", "required": true, + "enumValues": [ + "open", + "allowlist", + "pairing", + "disabled" + ], + "defaultValue": "pairing", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.token.provider", + "path": "channels.line.accounts.*.enabled", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.token.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.accounts.*.ui", + "path": "channels.line.accounts.*.groupAllowFrom", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -11412,27 +11550,36 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.ui.components", + "path": "channels.line.accounts.*.groupAllowFrom.*", "kind": "channel", - "type": "object", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.ui.components.accentColor", + "path": "channels.line.accounts.*.groupPolicy", "kind": "channel", "type": "string", - "required": false, + "required": true, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], + "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice", + "path": "channels.line.accounts.*.groups", "kind": "channel", "type": "object", "required": false, @@ -11442,9 +11589,9 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.autoJoin", + "path": "channels.line.accounts.*.groups.*", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -11452,9 +11599,9 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.autoJoin.*", + "path": "channels.line.accounts.*.groups.*.allowFrom", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -11462,29 +11609,12 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.autoJoin.*.channelId", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.accounts.*.voice.autoJoin.*.guildId", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.accounts.*.voice.daveEncryption", + "path": "channels.line.accounts.*.groups.*.allowFrom.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -11492,9 +11622,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.decryptionFailureTolerance", + "path": "channels.line.accounts.*.groups.*.enabled", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11502,7 +11632,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.enabled", + "path": "channels.line.accounts.*.groups.*.requireMention", "kind": "channel", "type": "boolean", "required": false, @@ -11512,9 +11642,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts", + "path": "channels.line.accounts.*.groups.*.skills", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -11522,43 +11652,17 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.auto", + "path": "channels.line.accounts.*.groups.*.skills.*", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "off", - "always", - "inbound", - "tagged" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.accounts.*.voice.tts.edge", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.accounts.*.voice.tts.edge.enabled", - "kind": "channel", - "type": "boolean", - "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.edge.lang", + "path": "channels.line.accounts.*.groups.*.systemPrompt", "kind": "channel", "type": "string", "required": false, @@ -11568,9 +11672,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.edge.outputFormat", + "path": "channels.line.accounts.*.mediaMaxMb", "kind": "channel", - "type": "string", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -11578,7 +11682,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.edge.pitch", + "path": "channels.line.accounts.*.name", "kind": "channel", "type": "string", "required": false, @@ -11588,7 +11692,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.edge.proxy", + "path": "channels.line.accounts.*.responsePrefix", "kind": "channel", "type": "string", "required": false, @@ -11598,7 +11702,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.edge.rate", + "path": "channels.line.accounts.*.secretFile", "kind": "channel", "type": "string", "required": false, @@ -11608,27 +11712,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.edge.saveSubtitles", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.accounts.*.voice.tts.edge.timeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.accounts.*.voice.tts.edge.voice", + "path": "channels.line.accounts.*.tokenFile", "kind": "channel", "type": "string", "required": false, @@ -11638,7 +11722,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.edge.volume", + "path": "channels.line.accounts.*.webhookPath", "kind": "channel", "type": "string", "required": false, @@ -11648,9 +11732,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs", + "path": "channels.line.allowFrom", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -11658,83 +11742,69 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey", + "path": "channels.line.allowFrom.*", "kind": "channel", "type": [ - "object", + "number", "string" ], "required": false, "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "media", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.provider", + "path": "channels.line.channelAccessToken", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.source", + "path": "channels.line.channelSecret", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.applyTextNormalization", + "path": "channels.line.defaultAccount", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "auto", - "on", - "off" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.baseUrl", + "path": "channels.line.dmPolicy", "kind": "channel", "type": "string", - "required": false, + "required": true, + "enumValues": [ + "open", + "allowlist", + "pairing", + "disabled" + ], + "defaultValue": "pairing", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.languageCode", + "path": "channels.line.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11742,19 +11812,22 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.modelId", + "path": "channels.line.groupAllowFrom", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.seed", + "path": "channels.line.groupAllowFrom.*", "kind": "channel", - "type": "integer", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -11762,17 +11835,23 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceId", + "path": "channels.line.groupPolicy", "kind": "channel", "type": "string", - "required": false, + "required": true, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], + "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings", + "path": "channels.line.groups", "kind": "channel", "type": "object", "required": false, @@ -11782,29 +11861,32 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.similarityBoost", + "path": "channels.line.groups.*", "kind": "channel", - "type": "number", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.speed", + "path": "channels.line.groups.*.allowFrom", "kind": "channel", - "type": "number", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.stability", + "path": "channels.line.groups.*.allowFrom.*", "kind": "channel", - "type": "number", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -11812,9 +11894,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.style", + "path": "channels.line.groups.*.enabled", "kind": "channel", - "type": "number", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11822,7 +11904,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost", + "path": "channels.line.groups.*.requireMention", "kind": "channel", "type": "boolean", "required": false, @@ -11832,19 +11914,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.enabled", + "path": "channels.line.groups.*.skills", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.maxTextLength", + "path": "channels.line.groups.*.skills.*", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11852,19 +11934,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft", + "path": "channels.line.groups.*.systemPrompt", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.enabled", + "path": "channels.line.mediaMaxMb", "kind": "channel", - "type": "boolean", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -11872,7 +11954,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.lang", + "path": "channels.line.name", "kind": "channel", "type": "string", "required": false, @@ -11882,7 +11964,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.outputFormat", + "path": "channels.line.responsePrefix", "kind": "channel", "type": "string", "required": false, @@ -11892,7 +11974,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.pitch", + "path": "channels.line.secretFile", "kind": "channel", "type": "string", "required": false, @@ -11902,7 +11984,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.proxy", + "path": "channels.line.tokenFile", "kind": "channel", "type": "string", "required": false, @@ -11912,7 +11994,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.rate", + "path": "channels.line.webhookPath", "kind": "channel", "type": "string", "required": false, @@ -11922,61 +12004,142 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.saveSubtitles", + "path": "channels.matrix", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Matrix", + "help": "open protocol; install the plugin to enable.", "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.timeoutMs", + "path": "channels.mattermost", "kind": "channel", - "type": "integer", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Mattermost", + "help": "self-hosted Slack-style chat; install the plugin to enable.", "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.microsoft.voice", + "path": "channels.msteams", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.accounts.*.voice.tts.microsoft.volume", - "kind": "channel", - "type": "string", + "tags": [ + "channels", + "network" + ], + "label": "Microsoft Teams", + "help": "Bot Framework; enterprise support.", + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk", + "kind": "channel", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Nextcloud Talk", + "help": "Self-hosted chat via Nextcloud Talk webhook bots.", "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.mode", + "path": "channels.nostr", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "final", - "all" + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Nostr", + "help": "Decentralized protocol; encrypted DMs via NIP-04.", + "hasChildren": false + }, + { + "path": "channels.signal", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Signal", + "help": "signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").", + "hasChildren": false + }, + { + "path": "channels.slack", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" ], + "label": "Slack", + "help": "supported (Socket Mode).", + "hasChildren": true + }, + { + "path": "channels.slack.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.ackReaction", + "kind": "channel", + "type": "string", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides", + "path": "channels.slack.accounts.*.actions", "kind": "channel", "type": "object", "required": false, @@ -11986,7 +12149,17 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowModelId", + "path": "channels.slack.accounts.*.actions.channelInfo", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.emojiList", "kind": "channel", "type": "boolean", "required": false, @@ -11996,7 +12169,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowNormalization", + "path": "channels.slack.accounts.*.actions.memberInfo", "kind": "channel", "type": "boolean", "required": false, @@ -12006,7 +12179,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowProvider", + "path": "channels.slack.accounts.*.actions.messages", "kind": "channel", "type": "boolean", "required": false, @@ -12016,7 +12189,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowSeed", + "path": "channels.slack.accounts.*.actions.permissions", "kind": "channel", "type": "boolean", "required": false, @@ -12026,7 +12199,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowText", + "path": "channels.slack.accounts.*.actions.pins", "kind": "channel", "type": "boolean", "required": false, @@ -12036,7 +12209,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowVoice", + "path": "channels.slack.accounts.*.actions.reactions", "kind": "channel", "type": "boolean", "required": false, @@ -12046,7 +12219,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowVoiceSettings", + "path": "channels.slack.accounts.*.actions.search", "kind": "channel", "type": "boolean", "required": false, @@ -12056,7 +12229,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.modelOverrides.enabled", + "path": "channels.slack.accounts.*.allowBots", "kind": "channel", "type": "boolean", "required": false, @@ -12066,9 +12239,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.openai", + "path": "channels.slack.accounts.*.allowFrom", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -12076,7 +12249,20 @@ "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.openai.apiKey", + "path": "channels.slack.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.appToken", "kind": "channel", "type": [ "object", @@ -12088,14 +12274,13 @@ "tags": [ "auth", "channels", - "media", "network", "security" ], "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.openai.apiKey.id", + "path": "channels.slack.accounts.*.appToken.id", "kind": "channel", "type": "string", "required": true, @@ -12105,7 +12290,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.openai.apiKey.provider", + "path": "channels.slack.accounts.*.appToken.provider", "kind": "channel", "type": "string", "required": true, @@ -12115,7 +12300,7 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.openai.apiKey.source", + "path": "channels.slack.accounts.*.appToken.source", "kind": "channel", "type": "string", "required": true, @@ -12125,9 +12310,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.openai.baseUrl", + "path": "channels.slack.accounts.*.blockStreaming", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12135,19 +12320,19 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.openai.instructions", + "path": "channels.slack.accounts.*.blockStreamingCoalesce", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.accounts.*.voice.tts.openai.model", + "path": "channels.slack.accounts.*.blockStreamingCoalesce.idleMs", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -12155,9 +12340,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.openai.speed", + "path": "channels.slack.accounts.*.blockStreamingCoalesce.maxChars", "kind": "channel", - "type": "number", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -12165,9 +12350,9 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.openai.voice", + "path": "channels.slack.accounts.*.blockStreamingCoalesce.minChars", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -12175,47 +12360,68 @@ "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.prefsPath", + "path": "channels.slack.accounts.*.botToken", "kind": "channel", - "type": "string", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.provider", + "path": "channels.slack.accounts.*.botToken.provider", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.summaryModel", + "path": "channels.slack.accounts.*.botToken.source", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.accounts.*.voice.tts.timeoutMs", + "path": "channels.slack.accounts.*.capabilities", "kind": "channel", - "type": "integer", + "type": [ + "array", + "object" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.ackReaction", + "path": "channels.slack.accounts.*.capabilities.*", "kind": "channel", "type": "string", "required": false, @@ -12225,25 +12431,17 @@ "hasChildren": false }, { - "path": "channels.discord.ackReactionScope", + "path": "channels.slack.accounts.*.capabilities.interactiveReplies", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "group-mentions", - "group-all", - "direct", - "all", - "off", - "none" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.actions", + "path": "channels.slack.accounts.*.channels", "kind": "channel", "type": "object", "required": false, @@ -12253,17 +12451,17 @@ "hasChildren": true }, { - "path": "channels.discord.actions.channelInfo", + "path": "channels.slack.accounts.*.channels.*", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.channels", + "path": "channels.slack.accounts.*.channels.*.allow", "kind": "channel", "type": "boolean", "required": false, @@ -12273,7 +12471,7 @@ "hasChildren": false }, { - "path": "channels.discord.actions.emojiUploads", + "path": "channels.slack.accounts.*.channels.*.allowBots", "kind": "channel", "type": "boolean", "required": false, @@ -12283,7 +12481,7 @@ "hasChildren": false }, { - "path": "channels.discord.actions.events", + "path": "channels.slack.accounts.*.channels.*.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -12293,7 +12491,7 @@ "hasChildren": false }, { - "path": "channels.discord.actions.memberInfo", + "path": "channels.slack.accounts.*.channels.*.requireMention", "kind": "channel", "type": "boolean", "required": false, @@ -12303,19 +12501,19 @@ "hasChildren": false }, { - "path": "channels.discord.actions.messages", + "path": "channels.slack.accounts.*.channels.*.skills", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.moderation", + "path": "channels.slack.accounts.*.channels.*.skills.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12323,9 +12521,9 @@ "hasChildren": false }, { - "path": "channels.discord.actions.permissions", + "path": "channels.slack.accounts.*.channels.*.systemPrompt", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12333,29 +12531,29 @@ "hasChildren": false }, { - "path": "channels.discord.actions.pins", + "path": "channels.slack.accounts.*.channels.*.tools", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.polls", + "path": "channels.slack.accounts.*.channels.*.tools.allow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.presence", + "path": "channels.slack.accounts.*.channels.*.tools.allow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12363,19 +12561,19 @@ "hasChildren": false }, { - "path": "channels.discord.actions.reactions", + "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.roleInfo", + "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12383,19 +12581,19 @@ "hasChildren": false }, { - "path": "channels.discord.actions.roles", + "path": "channels.slack.accounts.*.channels.*.tools.deny", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.search", + "path": "channels.slack.accounts.*.channels.*.tools.deny.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12403,39 +12601,39 @@ "hasChildren": false }, { - "path": "channels.discord.actions.stickers", + "path": "channels.slack.accounts.*.channels.*.toolsBySender", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.stickerUploads", + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.threads", + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.actions.voiceStatus", + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12443,54 +12641,49 @@ "hasChildren": false }, { - "path": "channels.discord.activity", + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow.*", "kind": "channel", "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Presence Activity", - "help": "Discord presence activity text (defaults to custom status).", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.activityType", + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny", "kind": "channel", - "type": "number", + "type": "array", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Presence Activity Type", - "help": "Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing).", - "hasChildren": false + "tags": [], + "hasChildren": true }, { - "path": "channels.discord.activityUrl", + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny.*", "kind": "channel", "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Presence Activity URL", - "help": "Discord presence streaming URL (required for activityType=1).", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.agentComponents", + "path": "channels.slack.accounts.*.channels.*.users", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -12498,9 +12691,12 @@ "hasChildren": true }, { - "path": "channels.discord.agentComponents.enabled", + "path": "channels.slack.accounts.*.channels.*.users.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -12508,28 +12704,23 @@ "hasChildren": false }, { - "path": "channels.discord.allowBots", + "path": "channels.slack.accounts.*.chunkMode", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "string", "required": false, + "enumValues": [ + "length", + "newline" + ], "deprecated": false, "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Discord Allow Bot Messages", - "help": "Allow bot-authored messages to trigger Discord replies (default: false). Set \"mentions\" to only accept bot messages that mention the bot.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.allowFrom", + "path": "channels.slack.accounts.*.commands", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -12537,10 +12728,10 @@ "hasChildren": true }, { - "path": "channels.discord.allowFrom.*", + "path": "channels.slack.accounts.*.commands.native", "kind": "channel", "type": [ - "number", + "boolean", "string" ], "required": false, @@ -12550,110 +12741,83 @@ "hasChildren": false }, { - "path": "channels.discord.autoPresence", + "path": "channels.slack.accounts.*.commands.nativeSkills", "kind": "channel", - "type": "object", + "type": [ + "boolean", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.autoPresence.degradedText", + "path": "channels.slack.accounts.*.configWrites", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Auto Presence Degraded Text", - "help": "Optional custom status text while runtime/model availability is degraded or unknown (idle).", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.autoPresence.enabled", + "path": "channels.slack.accounts.*.dangerouslyAllowNameMatching", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Auto Presence Enabled", - "help": "Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.autoPresence.exhaustedText", + "path": "channels.slack.accounts.*.defaultTo", "kind": "channel", "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Auto Presence Exhausted Text", - "help": "Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.autoPresence.healthyText", + "path": "channels.slack.accounts.*.dm", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network", - "reliability" - ], - "label": "Discord Auto Presence Healthy Text", - "help": "Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set.", - "hasChildren": false + "tags": [], + "hasChildren": true }, { - "path": "channels.discord.autoPresence.intervalMs", + "path": "channels.slack.accounts.*.dm.allowFrom", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Discord Auto Presence Check Interval (ms)", - "help": "How often to evaluate Discord auto-presence state in milliseconds (default: 30000).", - "hasChildren": false + "tags": [], + "hasChildren": true }, { - "path": "channels.discord.autoPresence.minUpdateIntervalMs", + "path": "channels.slack.accounts.*.dm.allowFrom.*", "kind": "channel", - "type": "integer", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Discord Auto Presence Min Update Interval (ms)", - "help": "Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.blockStreaming", + "path": "channels.slack.accounts.*.dm.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -12663,9 +12827,9 @@ "hasChildren": false }, { - "path": "channels.discord.blockStreamingCoalesce", + "path": "channels.slack.accounts.*.dm.groupChannels", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -12673,9 +12837,12 @@ "hasChildren": true }, { - "path": "channels.discord.blockStreamingCoalesce.idleMs", + "path": "channels.slack.accounts.*.dm.groupChannels.*", "kind": "channel", - "type": "integer", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -12683,9 +12850,9 @@ "hasChildren": false }, { - "path": "channels.discord.blockStreamingCoalesce.maxChars", + "path": "channels.slack.accounts.*.dm.groupEnabled", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12693,29 +12860,35 @@ "hasChildren": false }, { - "path": "channels.discord.blockStreamingCoalesce.minChars", + "path": "channels.slack.accounts.*.dm.policy", "kind": "channel", - "type": "integer", + "type": "string", "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.capabilities", + "path": "channels.slack.accounts.*.dm.replyToMode", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.capabilities.*", + "path": "channels.slack.accounts.*.dmHistoryLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -12723,13 +12896,15 @@ "hasChildren": false }, { - "path": "channels.discord.chunkMode", + "path": "channels.slack.accounts.*.dmPolicy", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "length", - "newline" + "pairing", + "allowlist", + "open", + "disabled" ], "deprecated": false, "sensitive": false, @@ -12737,7 +12912,7 @@ "hasChildren": false }, { - "path": "channels.discord.commands", + "path": "channels.slack.accounts.*.dms", "kind": "channel", "type": "object", "required": false, @@ -12747,80 +12922,64 @@ "hasChildren": true }, { - "path": "channels.discord.commands.native", + "path": "channels.slack.accounts.*.dms.*", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Native Commands", - "help": "Override native commands for Discord (bool or \"auto\").", - "hasChildren": false + "tags": [], + "hasChildren": true }, { - "path": "channels.discord.commands.nativeSkills", + "path": "channels.slack.accounts.*.dms.*.historyLimit", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Native Skill Commands", - "help": "Override native skill commands for Discord (bool or \"auto\").", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.configWrites", + "path": "channels.slack.accounts.*.enabled", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Config Writes", - "help": "Allow Discord to write config in response to channel events/commands (default: true).", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.dangerouslyAllowNameMatching", + "path": "channels.slack.accounts.*.groupPolicy", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.defaultAccount", + "path": "channels.slack.accounts.*.healthMonitor", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.defaultTo", + "path": "channels.slack.accounts.*.healthMonitor.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12828,7 +12987,7 @@ "hasChildren": false }, { - "path": "channels.discord.dm", + "path": "channels.slack.accounts.*.heartbeat", "kind": "channel", "type": "object", "required": false, @@ -12838,22 +12997,19 @@ "hasChildren": true }, { - "path": "channels.discord.dm.allowFrom", + "path": "channels.slack.accounts.*.heartbeat.showAlerts", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.dm.allowFrom.*", + "path": "channels.slack.accounts.*.heartbeat.showOk", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12861,7 +13017,7 @@ "hasChildren": false }, { - "path": "channels.discord.dm.enabled", + "path": "channels.slack.accounts.*.heartbeat.useIndicator", "kind": "channel", "type": "boolean", "required": false, @@ -12871,9 +13027,19 @@ "hasChildren": false }, { - "path": "channels.discord.dm.groupChannels", + "path": "channels.slack.accounts.*.historyLimit", "kind": "channel", - "type": "array", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.markdown", + "kind": "channel", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -12881,22 +13047,24 @@ "hasChildren": true }, { - "path": "channels.discord.dm.groupChannels.*", + "path": "channels.slack.accounts.*.markdown.tables", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "string", "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.dm.groupEnabled", + "path": "channels.slack.accounts.*.mediaMaxMb", "kind": "channel", - "type": "boolean", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -12904,73 +13072,43 @@ "hasChildren": false }, { - "path": "channels.discord.dm.policy", + "path": "channels.slack.accounts.*.mode", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" + "socket", + "http" ], - "label": "Discord DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"] (legacy: channels.discord.dm.allowFrom).", - "hasChildren": false - }, - { - "path": "channels.discord.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.dmPolicy", + "path": "channels.slack.accounts.*.name", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], "deprecated": false, "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Discord DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"].", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.dms", + "path": "channels.slack.accounts.*.nativeStreaming", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.dms.*", + "path": "channels.slack.accounts.*.reactionAllowlist", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -12978,9 +13116,12 @@ "hasChildren": true }, { - "path": "channels.discord.dms.*.historyLimit", + "path": "channels.slack.accounts.*.reactionAllowlist.*", "kind": "channel", - "type": "integer", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -12988,65 +13129,55 @@ "hasChildren": false }, { - "path": "channels.discord.draftChunk", + "path": "channels.slack.accounts.*.reactionNotifications", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "off", + "own", + "all", + "allowlist" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.draftChunk.breakPreference", + "path": "channels.slack.accounts.*.replyToMode", "kind": "channel", "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Draft Chunk Break Preference", - "help": "Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.draftChunk.maxChars", + "path": "channels.slack.accounts.*.replyToModeByChatType", "kind": "channel", - "type": "integer", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Discord Draft Chunk Max Chars", - "help": "Target max size for a Discord stream preview chunk when channels.discord.streaming=\"block\" (default: 800; clamped to channels.discord.textChunkLimit).", - "hasChildren": false + "tags": [], + "hasChildren": true }, { - "path": "channels.discord.draftChunk.minChars", + "path": "channels.slack.accounts.*.replyToModeByChatType.channel", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Draft Chunk Min Chars", - "help": "Minimum chars before emitting a Discord stream preview update when channels.discord.streaming=\"block\" (default: 200).", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.enabled", + "path": "channels.slack.accounts.*.replyToModeByChatType.direct", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13054,97 +13185,87 @@ "hasChildren": false }, { - "path": "channels.discord.eventQueue", + "path": "channels.slack.accounts.*.replyToModeByChatType.group", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.eventQueue.listenerTimeout", + "path": "channels.slack.accounts.*.requireMention", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Discord EventQueue Listener Timeout (ms)", - "help": "Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts..eventQueue.listenerTimeout.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.eventQueue.maxConcurrency", + "path": "channels.slack.accounts.*.responsePrefix", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Discord EventQueue Max Concurrency", - "help": "Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts..eventQueue.maxConcurrency.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.eventQueue.maxQueueSize", + "path": "channels.slack.accounts.*.signingSecret", "kind": "channel", - "type": "integer", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, - "sensitive": false, + "sensitive": true, "tags": [ + "auth", "channels", "network", - "performance" + "security" ], - "label": "Discord EventQueue Max Queue Size", - "help": "Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts..eventQueue.maxQueueSize.", - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.execApprovals", + "path": "channels.slack.accounts.*.signingSecret.id", "kind": "channel", - "type": "object", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.execApprovals.agentFilter", + "path": "channels.slack.accounts.*.signingSecret.provider", "kind": "channel", - "type": "array", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.execApprovals.agentFilter.*", + "path": "channels.slack.accounts.*.signingSecret.source", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.execApprovals.approvers", + "path": "channels.slack.accounts.*.slashCommand", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -13152,12 +13273,9 @@ "hasChildren": true }, { - "path": "channels.discord.execApprovals.approvers.*", + "path": "channels.slack.accounts.*.slashCommand.enabled", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13165,7 +13283,7 @@ "hasChildren": false }, { - "path": "channels.discord.execApprovals.cleanupAfterResolve", + "path": "channels.slack.accounts.*.slashCommand.ephemeral", "kind": "channel", "type": "boolean", "required": false, @@ -13175,9 +13293,9 @@ "hasChildren": false }, { - "path": "channels.discord.execApprovals.enabled", + "path": "channels.slack.accounts.*.slashCommand.name", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13185,34 +13303,43 @@ "hasChildren": false }, { - "path": "channels.discord.execApprovals.sessionFilter", + "path": "channels.slack.accounts.*.slashCommand.sessionPrefix", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.execApprovals.sessionFilter.*", + "path": "channels.slack.accounts.*.streaming", "kind": "channel", - "type": "string", + "type": [ + "boolean", + "string" + ], "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.execApprovals.target", + "path": "channels.slack.accounts.*.streamMode", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "dm", - "channel", - "both" + "replace", + "status_final", + "append" ], "deprecated": false, "sensitive": false, @@ -13220,23 +13347,17 @@ "hasChildren": false }, { - "path": "channels.discord.groupPolicy", + "path": "channels.slack.accounts.*.textChunkLimit", "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", + "type": "integer", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds", + "path": "channels.slack.accounts.*.thread", "kind": "channel", "type": "object", "required": false, @@ -13246,39 +13367,43 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*", + "path": "channels.slack.accounts.*.thread.historyScope", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "thread", + "channel" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels", + "path": "channels.slack.accounts.*.thread.inheritParent", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*", + "path": "channels.slack.accounts.*.thread.initialHistoryLimit", "kind": "channel", - "type": "object", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.allow", + "path": "channels.slack.accounts.*.typingReaction", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13286,58 +13411,68 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.autoArchiveDuration", + "path": "channels.slack.accounts.*.userToken", "kind": "channel", "type": [ - "number", + "object", "string" ], "required": false, - "enumValues": [ - "60", - "1440", - "4320", - "10080" + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" ], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.userToken.id", + "kind": "channel", + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.autoThread", + "path": "channels.slack.accounts.*.userToken.provider", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.enabled", + "path": "channels.slack.accounts.*.userToken.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.ignoreOtherMentions", + "path": "channels.slack.accounts.*.userTokenReadOnly", "kind": "channel", "type": "boolean", - "required": false, + "required": true, + "defaultValue": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.includeThreadStarter", + "path": "channels.slack.accounts.*.webhookPath", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13345,9 +13480,9 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.requireMention", + "path": "channels.slack.ackReaction", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13355,9 +13490,9 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.roles", + "path": "channels.slack.actions", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -13365,12 +13500,9 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.channels.*.roles.*", + "path": "channels.slack.actions.channelInfo", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13378,19 +13510,19 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.skills", + "path": "channels.slack.actions.emojiList", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.skills.*", + "path": "channels.slack.actions.memberInfo", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13398,9 +13530,9 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.systemPrompt", + "path": "channels.slack.actions.messages", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13408,29 +13540,29 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.tools", + "path": "channels.slack.actions.permissions", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.tools.allow", + "path": "channels.slack.actions.pins", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.tools.allow.*", + "path": "channels.slack.actions.reactions", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13438,27 +13570,33 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.tools.alsoAllow", + "path": "channels.slack.actions.search", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.tools.alsoAllow.*", + "path": "channels.slack.allowBots", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "access", + "channels", + "network" + ], + "label": "Slack Allow Bot Messages", + "help": "Allow bot-authored messages to trigger Slack replies (default: false).", "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.tools.deny", + "path": "channels.slack.allowFrom", "kind": "channel", "type": "array", "required": false, @@ -13468,9 +13606,12 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.channels.*.tools.deny.*", + "path": "channels.slack.allowFrom.*", "kind": "channel", - "type": "string", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -13478,79 +13619,89 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender", + "path": "channels.slack.appToken", "kind": "channel", - "type": "object", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, - "sensitive": false, - "tags": [], + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Slack App Token", + "help": "Slack app-level token used for Socket Mode connections and event transport when enabled. Use least-privilege app scopes and store this token as a secret.", "hasChildren": true }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender.*", + "path": "channels.slack.appToken.id", "kind": "channel", - "type": "object", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.allow", + "path": "channels.slack.appToken.provider", "kind": "channel", - "type": "array", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.allow.*", + "path": "channels.slack.appToken.source", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow", + "path": "channels.slack.blockStreaming", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow.*", + "path": "channels.slack.blockStreamingCoalesce", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.deny", + "path": "channels.slack.blockStreamingCoalesce.idleMs", "kind": "channel", - "type": "array", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.deny.*", + "path": "channels.slack.blockStreamingCoalesce.maxChars", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -13558,68 +13709,72 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.users", + "path": "channels.slack.blockStreamingCoalesce.minChars", "kind": "channel", - "type": "array", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.channels.*.users.*", + "path": "channels.slack.botToken", "kind": "channel", "type": [ - "number", + "object", "string" ], "required": false, "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Slack Bot Token", + "help": "Slack bot token used for standard chat actions in the configured workspace. Keep this credential scoped and rotate if workspace app permissions change.", + "hasChildren": true }, { - "path": "channels.discord.guilds.*.ignoreOtherMentions", + "path": "channels.slack.botToken.id", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.reactionNotifications", + "path": "channels.slack.botToken.provider", "kind": "channel", "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all", - "allowlist" - ], + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.requireMention", + "path": "channels.slack.botToken.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.discord.guilds.*.roles", + "path": "channels.slack.capabilities", "kind": "channel", - "type": "array", + "type": [ + "array", + "object" + ], "required": false, "deprecated": false, "sensitive": false, @@ -13627,12 +13782,9 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.roles.*", + "path": "channels.slack.capabilities.*", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13640,17 +13792,22 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.slug", + "path": "channels.slack.capabilities.interactiveReplies", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Slack Interactive Replies", + "help": "Enable agent-authored Slack interactive reply directives (`[[slack_buttons: ...]]`, `[[slack_select: ...]]`). Default: false.", "hasChildren": false }, { - "path": "channels.discord.guilds.*.tools", + "path": "channels.slack.channels", "kind": "channel", "type": "object", "required": false, @@ -13660,9 +13817,9 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.tools.allow", + "path": "channels.slack.channels.*", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -13670,9 +13827,9 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.tools.allow.*", + "path": "channels.slack.channels.*.allow", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13680,19 +13837,29 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.tools.alsoAllow", + "path": "channels.slack.channels.*.allowBots", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.tools.alsoAllow.*", + "path": "channels.slack.channels.*.enabled", "kind": "channel", - "type": "string", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.requireMention", + "kind": "channel", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13700,7 +13867,7 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.tools.deny", + "path": "channels.slack.channels.*.skills", "kind": "channel", "type": "array", "required": false, @@ -13710,7 +13877,7 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.tools.deny.*", + "path": "channels.slack.channels.*.skills.*", "kind": "channel", "type": "string", "required": false, @@ -13720,17 +13887,17 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.toolsBySender", + "path": "channels.slack.channels.*.systemPrompt", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.guilds.*.toolsBySender.*", + "path": "channels.slack.channels.*.tools", "kind": "channel", "type": "object", "required": false, @@ -13740,7 +13907,7 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.toolsBySender.*.allow", + "path": "channels.slack.channels.*.tools.allow", "kind": "channel", "type": "array", "required": false, @@ -13750,7 +13917,7 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.toolsBySender.*.allow.*", + "path": "channels.slack.channels.*.tools.allow.*", "kind": "channel", "type": "string", "required": false, @@ -13760,7 +13927,7 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.toolsBySender.*.alsoAllow", + "path": "channels.slack.channels.*.tools.alsoAllow", "kind": "channel", "type": "array", "required": false, @@ -13770,7 +13937,7 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.toolsBySender.*.alsoAllow.*", + "path": "channels.slack.channels.*.tools.alsoAllow.*", "kind": "channel", "type": "string", "required": false, @@ -13780,7 +13947,7 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.toolsBySender.*.deny", + "path": "channels.slack.channels.*.tools.deny", "kind": "channel", "type": "array", "required": false, @@ -13790,7 +13957,7 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.toolsBySender.*.deny.*", + "path": "channels.slack.channels.*.tools.deny.*", "kind": "channel", "type": "string", "required": false, @@ -13800,9 +13967,9 @@ "hasChildren": false }, { - "path": "channels.discord.guilds.*.users", + "path": "channels.slack.channels.*.toolsBySender", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -13810,22 +13977,19 @@ "hasChildren": true }, { - "path": "channels.discord.guilds.*.users.*", + "path": "channels.slack.channels.*.toolsBySender.*", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.healthMonitor", + "path": "channels.slack.channels.*.toolsBySender.*.allow", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -13833,9 +13997,9 @@ "hasChildren": true }, { - "path": "channels.discord.healthMonitor.enabled", + "path": "channels.slack.channels.*.toolsBySender.*.allow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13843,9 +14007,9 @@ "hasChildren": false }, { - "path": "channels.discord.heartbeat", + "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -13853,9 +14017,9 @@ "hasChildren": true }, { - "path": "channels.discord.heartbeat.showAlerts", + "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13863,19 +14027,19 @@ "hasChildren": false }, { - "path": "channels.discord.heartbeat.showOk", + "path": "channels.slack.channels.*.toolsBySender.*.deny", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.heartbeat.useIndicator", + "path": "channels.slack.channels.*.toolsBySender.*.deny.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13883,43 +14047,44 @@ "hasChildren": false }, { - "path": "channels.discord.historyLimit", + "path": "channels.slack.channels.*.users", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.discord.inboundWorker", + "path": "channels.slack.channels.*.users.*", "kind": "channel", - "type": "object", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.discord.inboundWorker.runTimeoutMs", + "path": "channels.slack.chunkMode", "kind": "channel", - "type": "integer", + "type": "string", "required": false, + "enumValues": [ + "length", + "newline" + ], "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Discord Inbound Worker Timeout (ms)", - "help": "Optional queued Discord inbound worker timeout in ms. This is separate from Carbon listener timeouts; defaults to 1800000 and can be disabled with 0. Set per account via channels.discord.accounts..inboundWorker.runTimeoutMs.", + "tags": [], "hasChildren": false }, { - "path": "channels.discord.intents", + "path": "channels.slack.commands", "kind": "channel", "type": "object", "required": false, @@ -13929,23522 +14094,43 @@ "hasChildren": true }, { - "path": "channels.discord.intents.guildMembers", + "path": "channels.slack.commands.native", "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Guild Members Intent", - "help": "Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false.", - "hasChildren": false - }, - { - "path": "channels.discord.intents.presence", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Presence Intent", - "help": "Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false.", - "hasChildren": false - }, - { - "path": "channels.discord.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.maxLinesPerMessage", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Discord Max Lines Per Message", - "help": "Soft max line count per Discord message (default: 17).", - "hasChildren": false - }, - { - "path": "channels.discord.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.pluralkit", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.pluralkit.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord PluralKit Enabled", - "help": "Resolve PluralKit proxied messages and treat system members as distinct senders.", - "hasChildren": false - }, - { - "path": "channels.discord.pluralkit.token", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Discord PluralKit Token", - "help": "Optional PluralKit token for resolving private systems or members.", - "hasChildren": true - }, - { - "path": "channels.discord.pluralkit.token.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.pluralkit.token.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.pluralkit.token.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.proxy", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Proxy URL", - "help": "Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts..proxy.", - "hasChildren": false - }, - { - "path": "channels.discord.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.retry", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.retry.attempts", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "reliability" - ], - "label": "Discord Retry Attempts", - "help": "Max retry attempts for outbound Discord API calls (default: 3).", - "hasChildren": false - }, - { - "path": "channels.discord.retry.jitter", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "reliability" - ], - "label": "Discord Retry Jitter", - "help": "Jitter factor (0-1) applied to Discord retry delays.", - "hasChildren": false - }, - { - "path": "channels.discord.retry.maxDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance", - "reliability" - ], - "label": "Discord Retry Max Delay (ms)", - "help": "Maximum retry delay cap in ms for Discord outbound calls.", - "hasChildren": false - }, - { - "path": "channels.discord.retry.minDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "reliability" - ], - "label": "Discord Retry Min Delay (ms)", - "help": "Minimum retry delay in ms for Discord outbound calls.", - "hasChildren": false - }, - { - "path": "channels.discord.slashCommand", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.slashCommand.ephemeral", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.status", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "online", - "dnd", - "idle", - "invisible" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Presence Status", - "help": "Discord presence status (online, dnd, idle, invisible).", - "hasChildren": false - }, - { - "path": "channels.discord.streaming", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Streaming Mode", - "help": "Unified Discord stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". \"progress\" maps to \"partial\" on Discord. Legacy boolean/streamMode keys are auto-mapped.", - "hasChildren": false - }, - { - "path": "channels.discord.streamMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "partial", - "block", - "off" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Stream Mode (Legacy)", - "help": "Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.", - "hasChildren": false - }, - { - "path": "channels.discord.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.threadBindings", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.threadBindings.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Discord Thread Binding Enabled", - "help": "Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.", - "hasChildren": false - }, - { - "path": "channels.discord.threadBindings.idleHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Discord Thread Binding Idle Timeout (hours)", - "help": "Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.", - "hasChildren": false - }, - { - "path": "channels.discord.threadBindings.maxAgeHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance", - "storage" - ], - "label": "Discord Thread Binding Max Age (hours)", - "help": "Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.", - "hasChildren": false - }, - { - "path": "channels.discord.threadBindings.spawnAcpSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Discord Thread-Bound ACP Spawn", - "help": "Allow /acp spawn to auto-create and bind Discord threads for ACP sessions (default: false; opt-in). Set true to enable thread-bound ACP spawns for this account/channel.", - "hasChildren": false - }, - { - "path": "channels.discord.threadBindings.spawnSubagentSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Discord Thread-Bound Subagent Spawn", - "help": "Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.", - "hasChildren": false - }, - { - "path": "channels.discord.token", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Discord Bot Token", - "help": "Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.", - "hasChildren": true - }, - { - "path": "channels.discord.token.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.token.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.token.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.ui", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.ui.components", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.ui.components.accentColor", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Component Accent Color", - "help": "Accent color for Discord component containers (hex). Set per account via channels.discord.accounts..ui.components.accentColor.", - "hasChildren": false - }, - { - "path": "channels.discord.voice", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.autoJoin", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Voice Auto-Join", - "help": "Voice channels to auto-join on startup (list of guildId/channelId entries).", - "hasChildren": true - }, - { - "path": "channels.discord.voice.autoJoin.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.autoJoin.*.channelId", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.autoJoin.*.guildId", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.daveEncryption", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Voice DAVE Encryption", - "help": "Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this).", - "hasChildren": false - }, - { - "path": "channels.discord.voice.decryptionFailureTolerance", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Voice Decrypt Failure Tolerance", - "help": "Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24).", - "hasChildren": false - }, - { - "path": "channels.discord.voice.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Discord Voice Enabled", - "help": "Enable Discord voice channel conversations (default: true). Omit channels.discord.voice to keep voice support disabled for the account.", - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "media", - "network" - ], - "label": "Discord Voice Text-to-Speech", - "help": "Optional TTS overrides for Discord voice playback (merged with messages.tts).", - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.auto", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "always", - "inbound", - "tagged" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.edge.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.lang", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.outputFormat", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.pitch", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.proxy", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.rate", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.saveSubtitles", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.timeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.voice", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.edge.volume", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.elevenlabs.apiKey", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "media", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.elevenlabs.apiKey.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.apiKey.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.apiKey.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.applyTextNormalization", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "auto", - "on", - "off" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.baseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.languageCode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.modelId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.seed", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.voiceId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.voiceSettings", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.similarityBoost", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.speed", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.stability", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.style", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.maxTextLength", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.microsoft.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.lang", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.outputFormat", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.pitch", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.proxy", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.rate", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.saveSubtitles", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.timeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.voice", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.microsoft.volume", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.mode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "final", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.modelOverrides.allowModelId", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides.allowNormalization", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides.allowProvider", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides.allowSeed", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides.allowText", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides.allowVoice", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides.allowVoiceSettings", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.modelOverrides.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.openai.apiKey", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "media", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.discord.voice.tts.openai.apiKey.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai.apiKey.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai.apiKey.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai.baseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai.instructions", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai.model", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai.speed", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.openai.voice", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.prefsPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.provider", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.summaryModel", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.discord.voice.tts.timeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Feishu", - "help": "飞书/Lark enterprise messaging with doc/wiki/drive tools.", - "hasChildren": true - }, - { - "path": "channels.feishu.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.appId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.appSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.appSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.appSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.appSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce.maxDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce.minDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.connectionMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "websocket", - "webhook" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "pairing", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.dms.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.dms.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.domain", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "feishu", - "lark" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.encryptKey", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.encryptKey.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.encryptKey.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.encryptKey.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.groupSessionScope", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.replyInThread", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groups.*.topicSessionMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groupSenderAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.groupSenderAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.groupSessionScope", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.heartbeat.intervalMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.heartbeat.visibility", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "visible", - "hidden" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.httpTimeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.markdown.mode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "native", - "escape", - "strip" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.markdown.tableMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "native", - "ascii", - "simple" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.renderMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "auto", - "raw", - "card" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.replyInThread", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.resolveSenderNames", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.streaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.tools.chat", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.tools.doc", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.tools.drive", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.tools.perm", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.tools.scopes", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.tools.wiki", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.topicSessionMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.typingIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.verificationToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.verificationToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.verificationToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.verificationToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.webhookHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.accounts.*.webhookPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.appId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.appSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.appSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.appSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.appSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.blockStreamingCoalesce.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.blockStreamingCoalesce.maxDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.blockStreamingCoalesce.minDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.connectionMode", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "websocket", - "webhook" - ], - "defaultValue": "websocket", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "pairing", - "allowlist" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.dms.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dms.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.domain", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "feishu", - "lark" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dynamicAgentCreation", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.dynamicAgentCreation.agentDirTemplate", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dynamicAgentCreation.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dynamicAgentCreation.maxAgents", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dynamicAgentCreation.workspaceTemplate", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.encryptKey", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.encryptKey.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.encryptKey.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.encryptKey.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.groupSessionScope", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.replyInThread", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.topicSessionMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groupSenderAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.groupSenderAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groupSessionScope", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.heartbeat.intervalMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.heartbeat.visibility", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "visible", - "hidden" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.httpTimeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.markdown.mode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "native", - "escape", - "strip" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.markdown.tableMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "native", - "ascii", - "simple" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.reactionNotifications", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "off", - "own", - "all" - ], - "defaultValue": "own", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.renderMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "auto", - "raw", - "card" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.replyInThread", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.requireMention", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.resolveSenderNames", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.streaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.tools.chat", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.tools.doc", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.tools.drive", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.tools.perm", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.tools.scopes", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.tools.wiki", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.topicSessionMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "disabled", - "enabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.typingIndicator", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.verificationToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.verificationToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.verificationToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.verificationToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.webhookHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.webhookPath", - "kind": "channel", - "type": "string", - "required": true, - "defaultValue": "/feishu/events", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.webhookPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Google Chat", - "help": "Google Workspace Chat app via HTTP webhooks.", - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.allowBots", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.appPrincipal", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.audience", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.audienceType", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "app-url", - "project-number" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.botUser", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.dm", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.dm.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.dm.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.dm.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.dm.policy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.groups.*.allow", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.groups.*.users", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.groups.*.users.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccount", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.serviceAccount.*", - "kind": "channel", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccount.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccount.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccount.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccountFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccountRef", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.googlechat.accounts.*.serviceAccountRef.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccountRef.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.serviceAccountRef.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.streamMode", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "replace", - "status_final", - "append" - ], - "defaultValue": "replace", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.typingIndicator", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "none", - "message", - "reaction" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.accounts.*.webhookUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.allowBots", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.appPrincipal", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.audience", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.audienceType", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "app-url", - "project-number" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.botUser", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.dm", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.dm.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.dm.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.dm.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.dm.policy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.groups.*.allow", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.groups.*.users", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.groups.*.users.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.googlechat.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccount", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.googlechat.serviceAccount.*", - "kind": "channel", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccount.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccount.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccount.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccountFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccountRef", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.googlechat.serviceAccountRef.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccountRef.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.serviceAccountRef.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.streamMode", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "replace", - "status_final", - "append" - ], - "defaultValue": "replace", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.typingIndicator", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "none", - "message", - "reaction" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.googlechat.webhookUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "iMessage", - "help": "this is still a work in progress.", - "hasChildren": true - }, - { - "path": "channels.imessage.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.attachmentRoots", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.attachmentRoots.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.cliPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.dbPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.includeAttachments", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.region", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.remoteAttachmentRoots", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.accounts.*.remoteAttachmentRoots.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.remoteHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.service", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.attachmentRoots", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.attachmentRoots.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.cliPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "iMessage CLI Path", - "help": "Filesystem path to the iMessage bridge CLI binary used for send/receive operations. Set explicitly when the binary is not on PATH in service runtime environments.", - "hasChildren": false - }, - { - "path": "channels.imessage.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "iMessage Config Writes", - "help": "Allow iMessage to write config in response to channel events/commands (default: true).", - "hasChildren": false - }, - { - "path": "channels.imessage.dbPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "iMessage DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.imessage.allowFrom=[\"*\"].", - "hasChildren": false - }, - { - "path": "channels.imessage.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.includeAttachments", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.mediaMaxMb", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.region", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.remoteAttachmentRoots", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.imessage.remoteAttachmentRoots.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.remoteHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.service", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.imessage.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "IRC", - "help": "classic IRC networks with DM/channel routing and pairing controls.", - "hasChildren": true - }, - { - "path": "channels.irc.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.channels", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.channels.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.host", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.mentionPatterns", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.mentionPatterns.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.nick", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.nickserv", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.accounts.*.nickserv.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.nickserv.password", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.nickserv.passwordFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.nickserv.register", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.nickserv.registerEmail", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.nickserv.service", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.password", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.passwordFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.port", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.realname", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.tls", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.accounts.*.username", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.channels", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.channels.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "IRC DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.irc.allowFrom=[\"*\"].", - "hasChildren": false - }, - { - "path": "channels.irc.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.host", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.mentionPatterns", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.mentionPatterns.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.nick", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.nickserv", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.irc.nickserv.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "IRC NickServ Enabled", - "help": "Enable NickServ identify/register after connect (defaults to enabled when password is configured).", - "hasChildren": false - }, - { - "path": "channels.irc.nickserv.password", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "IRC NickServ Password", - "help": "NickServ password used for IDENTIFY/REGISTER (sensitive).", - "hasChildren": false - }, - { - "path": "channels.irc.nickserv.passwordFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "auth", - "channels", - "network", - "security", - "storage" - ], - "label": "IRC NickServ Password File", - "help": "Optional file path containing NickServ password.", - "hasChildren": false - }, - { - "path": "channels.irc.nickserv.register", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "IRC NickServ Register", - "help": "If true, send NickServ REGISTER on every connect. Use once for initial registration, then disable.", - "hasChildren": false - }, - { - "path": "channels.irc.nickserv.registerEmail", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "IRC NickServ Register Email", - "help": "Email used with NickServ REGISTER (required when register=true).", - "hasChildren": false - }, - { - "path": "channels.irc.nickserv.service", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "IRC NickServ Service", - "help": "NickServ service nick (default: NickServ).", - "hasChildren": false - }, - { - "path": "channels.irc.password", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": false - }, - { - "path": "channels.irc.passwordFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.port", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.realname", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.tls", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.irc.username", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "LINE", - "help": "LINE Messaging API bot for Japan/Taiwan/Thailand markets.", - "hasChildren": true - }, - { - "path": "channels.line.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.channelAccessToken", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.channelSecret", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "pairing", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.accounts.*.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.secretFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.tokenFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.accounts.*.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.channelAccessToken", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.channelSecret", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "pairing", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.line.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.secretFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.tokenFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.line.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Matrix", - "help": "open protocol; install the plugin to enable.", - "hasChildren": true - }, - { - "path": "channels.matrix.accessToken", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.accounts.*", - "kind": "channel", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.ackReaction", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.ackReactionScope", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "group-mentions", - "group-all", - "direct", - "all", - "none", - "off" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.actions.channelInfo", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.actions.memberInfo", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.actions.messages", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.actions.pins", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.actions.profile", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.actions.verification", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.allowBots", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Matrix Allow Bot Messages", - "help": "Allow messages from other configured Matrix bot accounts to trigger replies (default: false). Set \"mentions\" to only accept bot messages that visibly mention this bot.", - "hasChildren": false - }, - { - "path": "channels.matrix.allowlistOnly", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.allowPrivateNetwork", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.autoJoin", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "always", - "allowlist", - "off" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.autoJoinAllowlist", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.autoJoinAllowlist.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.avatarUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.deviceId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.deviceName", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.dm", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.dm.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.dm.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.dm.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.dm.policy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.encryption", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*.allow", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.allowBots", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.autoReply", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.groups.*.users", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.groups.*.users.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.homeserver", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.initialSyncLimit", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.password", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.password.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.password.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.password.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "first", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*.allow", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.allowBots", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.autoReply", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.rooms.*.users", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.rooms.*.users.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.startupVerification", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "if-unverified" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.startupVerificationCooldownHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.textChunkLimit", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.threadBindings", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.matrix.threadBindings.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.threadBindings.idleHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.threadBindings.maxAgeHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.threadBindings.spawnAcpSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.threadBindings.spawnSubagentSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.threadReplies", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "inbound", - "always" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.matrix.userId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Mattermost", - "help": "self-hosted Slack-style chat; install the plugin to enable.", - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.baseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.botToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.botToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.botToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.botToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.chatmode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "oncall", - "onmessage", - "onchar" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.commands", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.commands.callbackPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.commands.callbackUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.commands.native", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.commands.nativeSkills", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.dmChannelRetry", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.dmChannelRetry.initialDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.dmChannelRetry.maxDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.dmChannelRetry.maxRetries", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.dmChannelRetry.timeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.interactions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.interactions.allowedSourceIps", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.interactions.allowedSourceIps.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.interactions.callbackBaseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.oncharPrefixes", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.accounts.*.oncharPrefixes.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "first", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.baseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Mattermost Base URL", - "help": "Base URL for your Mattermost server (e.g., https://chat.example.com).", - "hasChildren": false - }, - { - "path": "channels.mattermost.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.botToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Mattermost Bot Token", - "help": "Bot token from Mattermost System Console -> Integrations -> Bot Accounts.", - "hasChildren": true - }, - { - "path": "channels.mattermost.botToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.botToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.botToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.chatmode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "oncall", - "onmessage", - "onchar" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Mattermost Chat Mode", - "help": "Reply to channel messages on mention (\"oncall\"), on trigger chars (\">\" or \"!\") (\"onchar\"), or on every message (\"onmessage\").", - "hasChildren": false - }, - { - "path": "channels.mattermost.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.commands", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.commands.callbackPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.commands.callbackUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.commands.native", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.commands.nativeSkills", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Mattermost Config Writes", - "help": "Allow Mattermost to write config in response to channel events/commands (default: true).", - "hasChildren": false - }, - { - "path": "channels.mattermost.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.dmChannelRetry", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.dmChannelRetry.initialDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.dmChannelRetry.maxDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.dmChannelRetry.maxRetries", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.dmChannelRetry.timeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.interactions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.interactions.allowedSourceIps", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.interactions.allowedSourceIps.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.interactions.callbackBaseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.mattermost.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.oncharPrefixes", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Mattermost Onchar Prefixes", - "help": "Trigger prefixes for onchar mode (default: [\">\", \"!\"]).", - "hasChildren": true - }, - { - "path": "channels.mattermost.oncharPrefixes.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "first", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Mattermost Require Mention", - "help": "Require @mention in channels before responding (default: true).", - "hasChildren": false - }, - { - "path": "channels.mattermost.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.mattermost.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Microsoft Teams", - "help": "Bot Framework; enterprise support.", - "hasChildren": true - }, - { - "path": "channels.msteams.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.appId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.appPassword", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.msteams.appPassword.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.appPassword.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.appPassword.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "MS Teams Config Writes", - "help": "Allow Microsoft Teams to write config in response to channel events/commands (default: true).", - "hasChildren": false - }, - { - "path": "channels.msteams.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.groupAllowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.mediaAllowHosts", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.mediaAllowHosts.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.mediaAuthAllowHosts", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.mediaAuthAllowHosts.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.replyStyle", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "thread", - "top-level" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.sharePointSiteId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.replyStyle", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "thread", - "top-level" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.channels.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.channels.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.channels.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.channels.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.replyStyle", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "thread", - "top-level" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.teams.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.teams.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.tenantId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.webhook", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.msteams.webhook.path", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.msteams.webhook.port", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Nextcloud Talk", - "help": "Self-hosted chat via Nextcloud Talk webhook bots.", - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.apiPassword", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.apiPassword.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.apiPassword.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.apiPassword.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.apiPasswordFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.apiUser", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.baseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.botSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.botSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.botSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.botSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.botSecretFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.webhookHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.webhookPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.accounts.*.webhookPublicUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.apiPassword", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.apiPassword.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.apiPassword.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.apiPassword.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.apiPasswordFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.apiUser", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.baseUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.botSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.botSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.botSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.botSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.botSecretFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.groupAllowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.rooms.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nextcloud-talk.rooms.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.webhookHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.webhookPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk.webhookPublicUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Nostr", - "help": "Decentralized protocol; encrypted DMs via NIP-04.", - "hasChildren": true - }, - { - "path": "channels.nostr.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nostr.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.dmPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nostr.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.privateKey", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nostr.profile.about", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile.banner", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile.displayName", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile.lud16", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile.nip05", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile.picture", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.profile.website", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.nostr.relays", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.nostr.relays.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Signal", - "help": "signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").", - "hasChildren": true - }, - { - "path": "channels.signal.account", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Signal Account", - "help": "Signal account identifier (phone/number handle) used to bind this channel config to a specific Signal identity. Keep this aligned with your linked device/session state.", - "hasChildren": false - }, - { - "path": "channels.signal.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.account", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.accountUuid", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.autoStart", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.cliPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.httpHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.httpPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.httpUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.ignoreAttachments", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.ignoreStories", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.reactionAllowlist", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.accounts.*.reactionAllowlist.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.reactionLevel", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "ack", - "minimal", - "extensive" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.receiveMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.sendReadReceipts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.startupTimeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.accountUuid", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.autoStart", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.cliPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Signal Config Writes", - "help": "Allow Signal to write config in response to channel events/commands (default: true).", - "hasChildren": false - }, - { - "path": "channels.signal.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Signal DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.signal.allowFrom=[\"*\"].", - "hasChildren": false - }, - { - "path": "channels.signal.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.httpHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.httpPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.httpUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.ignoreAttachments", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.ignoreStories", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.mediaMaxMb", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.reactionAllowlist", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.signal.reactionAllowlist.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.reactionLevel", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "ack", - "minimal", - "extensive" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.receiveMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.sendReadReceipts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.startupTimeoutMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.signal.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack", - "help": "supported (Socket Mode).", - "hasChildren": true - }, - { - "path": "channels.slack.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.ackReaction", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.actions.channelInfo", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.emojiList", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.memberInfo", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.messages", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.permissions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.pins", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.search", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.allowBots", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.appToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.appToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.appToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.appToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.botToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.botToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.botToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.botToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.capabilities", - "kind": "channel", - "type": [ - "array", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.capabilities.interactiveReplies", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.allow", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.allowBots", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.channels.*.users", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.users.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.commands", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.commands.native", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.commands.nativeSkills", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dm", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.dm.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.dm.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dm.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dm.groupChannels", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.dm.groupChannels.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dm.groupEnabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dm.policy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dm.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.mode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "socket", - "http" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.nativeStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.reactionAllowlist", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.reactionAllowlist.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.replyToModeByChatType", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.replyToModeByChatType.channel", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.replyToModeByChatType.direct", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.replyToModeByChatType.group", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.signingSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.signingSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.signingSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.signingSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.slashCommand", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.slashCommand.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.slashCommand.ephemeral", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.slashCommand.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.slashCommand.sessionPrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.streaming", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.streamMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "replace", - "status_final", - "append" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.thread", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.thread.historyScope", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "thread", - "channel" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.thread.inheritParent", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.thread.initialHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.typingReaction", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.userToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.userToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.userToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.userToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.userTokenReadOnly", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.ackReaction", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.actions.channelInfo", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions.emojiList", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions.memberInfo", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions.messages", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions.permissions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions.pins", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.actions.search", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.allowBots", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Slack Allow Bot Messages", - "help": "Allow bot-authored messages to trigger Slack replies (default: false).", - "hasChildren": false - }, - { - "path": "channels.slack.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.appToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Slack App Token", - "help": "Slack app-level token used for Socket Mode connections and event transport when enabled. Use least-privilege app scopes and store this token as a secret.", - "hasChildren": true - }, - { - "path": "channels.slack.appToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.appToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.appToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.botToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Slack Bot Token", - "help": "Slack bot token used for standard chat actions in the configured workspace. Keep this credential scoped and rotate if workspace app permissions change.", - "hasChildren": true - }, - { - "path": "channels.slack.botToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.botToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.botToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.capabilities", - "kind": "channel", - "type": [ - "array", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.capabilities.interactiveReplies", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Interactive Replies", - "help": "Enable agent-authored Slack interactive reply directives (`[[slack_buttons: ...]]`, `[[slack_select: ...]]`). Default: false.", - "hasChildren": false - }, - { - "path": "channels.slack.channels", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.allow", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.allowBots", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.channels.*.users", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.channels.*.users.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.commands", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.commands.native", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Native Commands", - "help": "Override native commands for Slack (bool or \"auto\").", - "hasChildren": false - }, - { - "path": "channels.slack.commands.nativeSkills", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Native Skill Commands", - "help": "Override native skill commands for Slack (bool or \"auto\").", - "hasChildren": false - }, - { - "path": "channels.slack.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Config Writes", - "help": "Allow Slack to write config in response to channel events/commands (default: true).", - "hasChildren": false - }, - { - "path": "channels.slack.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.dm", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.dm.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.dm.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.dm.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.dm.groupChannels", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.dm.groupChannels.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.dm.groupEnabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.dm.policy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Slack DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"] (legacy: channels.slack.dm.allowFrom).", - "hasChildren": false - }, - { - "path": "channels.slack.dm.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.dmPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Slack DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"].", - "hasChildren": false - }, - { - "path": "channels.slack.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.mode", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "socket", - "http" - ], - "defaultValue": "socket", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.nativeStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Native Streaming", - "help": "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).", - "hasChildren": false - }, - { - "path": "channels.slack.reactionAllowlist", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.reactionAllowlist.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.replyToModeByChatType", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.replyToModeByChatType.channel", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.replyToModeByChatType.direct", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.replyToModeByChatType.group", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.signingSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.slack.signingSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.signingSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.signingSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.slashCommand", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.slashCommand.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.slashCommand.ephemeral", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.slashCommand.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.slashCommand.sessionPrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.streaming", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Streaming Mode", - "help": "Unified Slack stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". Legacy boolean/streamMode keys are auto-mapped.", - "hasChildren": false - }, - { - "path": "channels.slack.streamMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "replace", - "status_final", - "append" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Stream Mode (Legacy)", - "help": "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.", - "hasChildren": false - }, - { - "path": "channels.slack.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.thread", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.thread.historyScope", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "thread", - "channel" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Thread History Scope", - "help": "Scope for Slack thread history context (\"thread\" isolates per thread; \"channel\" reuses channel history).", - "hasChildren": false - }, - { - "path": "channels.slack.thread.inheritParent", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Thread Parent Inheritance", - "help": "If true, Slack thread sessions inherit the parent channel transcript (default: false).", - "hasChildren": false - }, - { - "path": "channels.slack.thread.initialHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Slack Thread Initial History Limit", - "help": "Maximum number of existing Slack thread messages to fetch when starting a new thread session (default: 20, set to 0 to disable).", - "hasChildren": false - }, - { - "path": "channels.slack.typingReaction", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.userToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Slack User Token", - "help": "Optional Slack user token for workflows requiring user-context API access beyond bot permissions. Use sparingly and audit scopes because this token can carry broader authority.", - "hasChildren": true - }, - { - "path": "channels.slack.userToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.userToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.userToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.userTokenReadOnly", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Slack User Token Read Only", - "help": "When true, treat configured Slack user token usage as read-only helper behavior where possible. Keep enabled if you only need supplemental reads without user-context writes.", - "hasChildren": false - }, - { - "path": "channels.slack.webhookPath", - "kind": "channel", - "type": "string", - "required": true, - "defaultValue": "/slack/events", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.synology-chat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Synology Chat", - "help": "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.", - "hasChildren": true - }, - { - "path": "channels.synology-chat.*", - "kind": "channel", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.synology-chat.dangerouslyAllowInheritedWebhookPath", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.synology-chat.dangerouslyAllowNameMatching", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram", - "help": "simplest way to get started — register a bot with @BotFather and get going.", - "hasChildren": true - }, - { - "path": "channels.telegram.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.ackReaction", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.actions.createForumTopic", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions.deleteMessage", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions.editForumTopic", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions.editMessage", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions.poll", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions.sendMessage", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.actions.sticker", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.apiRoot", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.autoTopicLabel", - "kind": "channel", - "type": [ - "boolean", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.autoTopicLabel.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.autoTopicLabel.prompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.botToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.botToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.botToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.botToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.capabilities", - "kind": "channel", - "type": [ - "array", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.capabilities.inlineButtons", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "dm", - "group", - "all", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.commands", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.commands.native", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.commands.nativeSkills", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.customCommands", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.customCommands.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.customCommands.*.command", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.customCommands.*.description", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.defaultTo", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.autoTopicLabel", - "kind": "channel", - "type": [ - "boolean", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.autoTopicLabel.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.autoTopicLabel.prompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.requireTopic", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.agentId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.disableAudioPreflight", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.direct.*.topics.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.draftChunk", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.draftChunk.breakPreference", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.draftChunk.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.draftChunk.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.execApprovals", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.execApprovals.agentFilter", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.execApprovals.agentFilter.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.execApprovals.approvers", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.execApprovals.approvers.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.execApprovals.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.execApprovals.sessionFilter", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.execApprovals.sessionFilter.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.execApprovals.target", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "dm", - "channel", - "both" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.disableAudioPreflight", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.agentId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.disableAudioPreflight", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.groups.*.topics.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.linkPreview", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.network", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.network.autoSelectFamily", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.network.dnsResultOrder", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "ipv4first", - "verbatim" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.proxy", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.reactionLevel", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "ack", - "minimal", - "extensive" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.retry", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.retry.attempts", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.retry.jitter", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.retry.maxDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.retry.minDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.silentErrorReplies", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.streaming", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.streamMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "partial", - "block" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.threadBindings", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.threadBindings.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.threadBindings.idleHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.threadBindings.maxAgeHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.threadBindings.spawnAcpSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.threadBindings.spawnSubagentSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.timeoutSeconds", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.tokenFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookCertPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.telegram.accounts.*.webhookSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.accounts.*.webhookUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.ackReaction", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.actions.createForumTopic", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions.deleteMessage", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions.editForumTopic", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions.editMessage", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions.poll", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions.sendMessage", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.actions.sticker", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.apiRoot", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram API Root URL", - "help": "Custom Telegram Bot API root URL. Use for self-hosted Bot API servers (https://github.com/tdlib/telegram-bot-api) or reverse proxies in regions where api.telegram.org is blocked.", - "hasChildren": false - }, - { - "path": "channels.telegram.autoTopicLabel", - "kind": "channel", - "type": [ - "boolean", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Auto Topic Label", - "help": "Auto-rename DM forum topics on first message using LLM. Default: true. Set to false to disable, or use object form { enabled: true, prompt: '...' } for custom prompt.", - "hasChildren": true - }, - { - "path": "channels.telegram.autoTopicLabel.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Auto Topic Label Enabled", - "help": "Whether auto topic labeling is enabled. Default: true.", - "hasChildren": false - }, - { - "path": "channels.telegram.autoTopicLabel.prompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Auto Topic Label Prompt", - "help": "Custom prompt for LLM-based topic naming. The user message is appended after the prompt.", - "hasChildren": false - }, - { - "path": "channels.telegram.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.botToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Telegram Bot Token", - "help": "Telegram bot token used to authenticate Bot API requests for this account/provider config. Use secret/env substitution and rotate tokens if exposure is suspected.", - "hasChildren": true - }, - { - "path": "channels.telegram.botToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.botToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.botToken.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.capabilities", - "kind": "channel", - "type": [ - "array", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.capabilities.inlineButtons", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "dm", - "group", - "all", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Inline Buttons", - "help": "Enable Telegram inline button components for supported command and interaction surfaces. Disable if your deployment needs plain-text-only compatibility behavior.", - "hasChildren": false - }, - { - "path": "channels.telegram.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.commands", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.commands.native", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Native Commands", - "help": "Override native commands for Telegram (bool or \"auto\").", - "hasChildren": false - }, - { - "path": "channels.telegram.commands.nativeSkills", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Native Skill Commands", - "help": "Override native skill commands for Telegram (bool or \"auto\").", - "hasChildren": false - }, - { - "path": "channels.telegram.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Config Writes", - "help": "Allow Telegram to write config in response to channel events/commands (default: true).", - "hasChildren": false - }, - { - "path": "channels.telegram.customCommands", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Custom Commands", - "help": "Additional Telegram bot menu commands (merged with native; conflicts ignored).", - "hasChildren": true - }, - { - "path": "channels.telegram.customCommands.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.customCommands.*.command", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.customCommands.*.description", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.defaultTo", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.autoTopicLabel", - "kind": "channel", - "type": [ - "boolean", - "object" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.autoTopicLabel.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.autoTopicLabel.prompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.requireTopic", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.topics.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.topics.*.agentId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.topics.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics.*.disableAudioPreflight", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.direct.*.topics.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.direct.*.topics.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Telegram DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.telegram.allowFrom=[\"*\"].", - "hasChildren": false - }, - { - "path": "channels.telegram.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.draftChunk", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.draftChunk.breakPreference", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.draftChunk.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.draftChunk.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.execApprovals", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Exec Approvals", - "help": "Telegram-native exec approval routing and approver authorization. Enable this only when Telegram should act as an explicit exec-approval client for the selected bot account.", - "hasChildren": true - }, - { - "path": "channels.telegram.execApprovals.agentFilter", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Exec Approval Agent Filter", - "help": "Optional allowlist of agent IDs eligible for Telegram exec approvals, for example `[\"main\", \"ops-agent\"]`. Use this to keep approval prompts scoped to the agents you actually operate from Telegram.", - "hasChildren": true - }, - { - "path": "channels.telegram.execApprovals.agentFilter.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.execApprovals.approvers", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Exec Approval Approvers", - "help": "Telegram user IDs allowed to approve exec requests for this bot account. Use numeric Telegram user IDs; prompts are only delivered to these approvers when target includes dm.", - "hasChildren": true - }, - { - "path": "channels.telegram.execApprovals.approvers.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.execApprovals.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Exec Approvals Enabled", - "help": "Enable Telegram exec approvals for this account. When false or unset, Telegram messages/buttons cannot approve exec requests.", - "hasChildren": false - }, - { - "path": "channels.telegram.execApprovals.sessionFilter", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Telegram Exec Approval Session Filter", - "help": "Optional session-key filters matched as substring or regex-style patterns before Telegram approval routing is used. Use narrow patterns so Telegram approvals only appear for intended sessions.", - "hasChildren": true - }, - { - "path": "channels.telegram.execApprovals.sessionFilter.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.execApprovals.target", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "dm", - "channel", - "both" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Exec Approval Target", - "help": "Controls where Telegram approval prompts are sent: \"dm\" sends to approver DMs (default), \"channel\" sends to the originating Telegram chat/topic, and \"both\" sends to both. Channel delivery exposes the command text to the chat, so only use it in trusted groups/topics.", - "hasChildren": false - }, - { - "path": "channels.telegram.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groupAllowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.disableAudioPreflight", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.topics.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.topics.*.agentId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.topics.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics.*.disableAudioPreflight", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics.*.skills", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.groups.*.topics.*.skills.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.groups.*.topics.*.systemPrompt", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.linkPreview", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.mediaMaxMb", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.network", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.network.autoSelectFamily", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram autoSelectFamily", - "help": "Override Node autoSelectFamily for Telegram (true=enable, false=disable).", - "hasChildren": false - }, - { - "path": "channels.telegram.network.dnsResultOrder", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "ipv4first", - "verbatim" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.proxy", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.reactionLevel", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "ack", - "minimal", - "extensive" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.reactionNotifications", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "own", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.replyToMode", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.retry", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.retry.attempts", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "reliability" - ], - "label": "Telegram Retry Attempts", - "help": "Max retry attempts for outbound Telegram API calls (default: 3).", - "hasChildren": false - }, - { - "path": "channels.telegram.retry.jitter", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "reliability" - ], - "label": "Telegram Retry Jitter", - "help": "Jitter factor (0-1) applied to Telegram retry delays.", - "hasChildren": false - }, - { - "path": "channels.telegram.retry.maxDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance", - "reliability" - ], - "label": "Telegram Retry Max Delay (ms)", - "help": "Maximum retry delay cap in ms for Telegram outbound calls.", - "hasChildren": false - }, - { - "path": "channels.telegram.retry.minDelayMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "reliability" - ], - "label": "Telegram Retry Min Delay (ms)", - "help": "Minimum retry delay in ms for Telegram outbound calls.", - "hasChildren": false - }, - { - "path": "channels.telegram.silentErrorReplies", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Silent Error Replies", - "help": "When true, Telegram bot replies marked as errors are sent silently (no notification sound). Default: false.", - "hasChildren": false - }, - { - "path": "channels.telegram.streaming", - "kind": "channel", - "type": [ - "boolean", - "string" - ], - "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram Streaming Mode", - "help": "Unified Telegram stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default: \"partial\"). \"progress\" maps to \"partial\" on Telegram. Legacy boolean/streamMode keys are auto-mapped.", - "hasChildren": false - }, - { - "path": "channels.telegram.streamMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "partial", - "block" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.threadBindings", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.telegram.threadBindings.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Telegram Thread Binding Enabled", - "help": "Enable Telegram conversation binding features (/focus, /unfocus, /agents, and /session idle|max-age). Overrides session.threadBindings.enabled when set.", - "hasChildren": false - }, - { - "path": "channels.telegram.threadBindings.idleHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Telegram Thread Binding Idle Timeout (hours)", - "help": "Inactivity window in hours for Telegram bound sessions. Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.", - "hasChildren": false - }, - { - "path": "channels.telegram.threadBindings.maxAgeHours", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance", - "storage" - ], - "label": "Telegram Thread Binding Max Age (hours)", - "help": "Optional hard max age in hours for Telegram bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.", - "hasChildren": false - }, - { - "path": "channels.telegram.threadBindings.spawnAcpSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Telegram Thread-Bound ACP Spawn", - "help": "Allow ACP spawns with thread=true to auto-bind Telegram current conversations when supported.", - "hasChildren": false - }, - { - "path": "channels.telegram.threadBindings.spawnSubagentSessions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "storage" - ], - "label": "Telegram Thread-Bound Subagent Spawn", - "help": "Allow subagent spawns with thread=true to auto-bind Telegram current conversations when supported.", - "hasChildren": false - }, - { - "path": "channels.telegram.timeoutSeconds", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Telegram API Timeout (seconds)", - "help": "Max seconds before Telegram API requests are aborted (default: 500 per grammY).", - "hasChildren": false - }, - { - "path": "channels.telegram.tokenFile", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookCertPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookHost", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookPath", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookPort", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookSecret", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.telegram.webhookSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookSecret.source", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.telegram.webhookUrl", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Tlon", - "help": "decentralized messaging on Urbit; install the plugin to enable.", - "hasChildren": true - }, - { - "path": "channels.tlon.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.accounts.*.allowPrivateNetwork", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.autoAcceptDmInvites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.autoAcceptGroupInvites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.autoDiscoverChannels", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.code", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.dmAllowlist", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.accounts.*.dmAllowlist.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.groupChannels", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.accounts.*.groupChannels.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.ownerShip", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.ship", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.showModelSignature", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.accounts.*.url", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.allowPrivateNetwork", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.authorization", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.authorization.channelRules", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.authorization.channelRules.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.authorization.channelRules.*.allowedShips", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.authorization.channelRules.*.allowedShips.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.authorization.channelRules.*.mode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "restricted", - "open" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.autoAcceptDmInvites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.autoAcceptGroupInvites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.autoDiscoverChannels", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.code", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.defaultAuthorizedShips", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.defaultAuthorizedShips.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.dmAllowlist", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.dmAllowlist.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.groupChannels", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.tlon.groupChannels.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.ownerShip", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.ship", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.showModelSignature", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.tlon.url", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Twitch", - "help": "Twitch chat integration", - "hasChildren": true - }, - { - "path": "channels.twitch.accessToken", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts", - "kind": "channel", - "type": "object", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.twitch.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.twitch.accounts.*.accessToken", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.allowedRoles", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.twitch.accounts.*.allowedRoles.*", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "moderator", - "owner", - "vip", - "subscriber", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.twitch.accounts.*.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.channel", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.clientId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.clientSecret", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.expiresIn", - "kind": "channel", - "type": [ - "null", - "number" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.obtainmentTimestamp", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.refreshToken", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.accounts.*.username", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.allowedRoles", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.twitch.allowedRoles.*", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "moderator", - "owner", - "vip", - "subscriber", - "all" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.twitch.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.channel", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.clientId", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.clientSecret", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.expiresIn", - "kind": "channel", - "type": [ - "null", - "number" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.twitch.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "bullets", - "code", - "off" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.obtainmentTimestamp", - "kind": "channel", - "type": "number", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.refreshToken", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.twitch.username", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "WhatsApp", - "help": "works with your own number; recommend a separate phone + eSIM.", - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.ackReaction", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.ackReaction.direct", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.ackReaction.emoji", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.ackReaction.group", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "always", - "mentions", - "never" - ], - "defaultValue": "mentions", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.authDir", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.debounceMs", - "kind": "channel", - "type": "integer", - "required": true, - "defaultValue": 0, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groupAllowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.mediaMaxMb", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.messagePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.name", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.responsePrefix", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.selfChatMode", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.sendReadReceipts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.accounts.*.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.ackReaction", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.ackReaction.direct", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.ackReaction.emoji", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.ackReaction.group", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "always", - "mentions", - "never" - ], - "defaultValue": "mentions", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.actions", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.actions.polls", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.actions.reactions", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.actions.sendMessage", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.allowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.blockStreaming", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.blockStreamingCoalesce", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.blockStreamingCoalesce.idleMs", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.blockStreamingCoalesce.maxChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.blockStreamingCoalesce.minChars", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.capabilities", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.capabilities.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.chunkMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.configWrites", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "WhatsApp Config Writes", - "help": "Allow WhatsApp to write config in response to channel events/commands (default: true).", - "hasChildren": false - }, - { - "path": "channels.whatsapp.debounceMs", - "kind": "channel", - "type": "integer", - "required": true, - "defaultValue": 0, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "WhatsApp Message Debounce (ms)", - "help": "Debounce window (ms) for batching rapid consecutive messages from the same sender (0 to disable).", - "hasChildren": false - }, - { - "path": "channels.whatsapp.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.defaultTo", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.dmHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.dmPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], - "defaultValue": "pairing", - "deprecated": false, - "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "WhatsApp DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.whatsapp.allowFrom=[\"*\"].", - "hasChildren": false - }, - { - "path": "channels.whatsapp.dms", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.dms.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.dms.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groupAllowFrom.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groupPolicy", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.requireMention", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groups.*.tools", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.tools.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.tools.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groups.*.tools.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groups.*.tools.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender.*", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender.*.allow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender.*.allow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender.*.alsoAllow", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender.*.deny", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.groups.*.toolsBySender.*.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.healthMonitor", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.healthMonitor.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.heartbeat", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.heartbeat.showAlerts", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.heartbeat.showOk", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.heartbeat.useIndicator", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.whatsapp.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" + "type": [ + "boolean", + "string" ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.mediaMaxMb", - "kind": "channel", - "type": "integer", - "required": true, - "defaultValue": 50, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.whatsapp.messagePrefix", - "kind": "channel", - "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Slack Native Commands", + "help": "Override native commands for Slack (bool or \"auto\").", "hasChildren": false }, { - "path": "channels.whatsapp.responsePrefix", + "path": "channels.slack.commands.nativeSkills", "kind": "channel", - "type": "string", + "type": [ + "boolean", + "string" + ], "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Slack Native Skill Commands", + "help": "Override native skill commands for Slack (bool or \"auto\").", "hasChildren": false }, { - "path": "channels.whatsapp.selfChatMode", + "path": "channels.slack.configWrites", "kind": "channel", "type": "boolean", "required": false, @@ -37454,12 +14140,12 @@ "channels", "network" ], - "label": "WhatsApp Self-Phone Mode", - "help": "Same-phone setup (bot uses your personal WhatsApp number).", + "label": "Slack Config Writes", + "help": "Allow Slack to write config in response to channel events/commands (default: true).", "hasChildren": false }, { - "path": "channels.whatsapp.sendReadReceipts", + "path": "channels.slack.dangerouslyAllowNameMatching", "kind": "channel", "type": "boolean", "required": false, @@ -37469,9 +14155,9 @@ "hasChildren": false }, { - "path": "channels.whatsapp.textChunkLimit", + "path": "channels.slack.defaultAccount", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -37479,32 +14165,17 @@ "hasChildren": false }, { - "path": "channels.zalo", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Zalo", - "help": "Vietnam-focused messaging platform with Bot API.", - "hasChildren": true - }, - { - "path": "channels.zalo.accounts", + "path": "channels.slack.defaultTo", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalo.accounts.*", + "path": "channels.slack.dm", "kind": "channel", "type": "object", "required": false, @@ -37514,7 +14185,7 @@ "hasChildren": true }, { - "path": "channels.zalo.accounts.*.allowFrom", + "path": "channels.slack.dm.allowFrom", "kind": "channel", "type": "array", "required": false, @@ -37524,7 +14195,7 @@ "hasChildren": true }, { - "path": "channels.zalo.accounts.*.allowFrom.*", + "path": "channels.slack.dm.allowFrom.*", "kind": "channel", "type": [ "number", @@ -37537,50 +14208,50 @@ "hasChildren": false }, { - "path": "channels.zalo.accounts.*.botToken", + "path": "channels.slack.dm.enabled", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalo.accounts.*.botToken.id", + "path": "channels.slack.dm.groupChannels", "kind": "channel", - "type": "string", - "required": true, + "type": "array", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalo.accounts.*.botToken.provider", + "path": "channels.slack.dm.groupChannels.*", "kind": "channel", - "type": "string", - "required": true, + "type": [ + "number", + "string" + ], + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.accounts.*.botToken.source", + "path": "channels.slack.dm.groupEnabled", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.accounts.*.dmPolicy", + "path": "channels.slack.dm.policy", "kind": "channel", "type": "string", "required": false, @@ -37592,13 +14263,19 @@ ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "access", + "channels", + "network" + ], + "label": "Slack DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"] (legacy: channels.slack.dm.allowFrom).", "hasChildren": false }, { - "path": "channels.zalo.accounts.*.enabled", + "path": "channels.slack.dm.replyToMode", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -37606,22 +14283,9 @@ "hasChildren": false }, { - "path": "channels.zalo.accounts.*.groupAllowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.zalo.accounts.*.groupAllowFrom.*", + "path": "channels.slack.dmHistoryLimit", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -37629,22 +14293,29 @@ "hasChildren": false }, { - "path": "channels.zalo.accounts.*.groupPolicy", + "path": "channels.slack.dmPolicy", "kind": "channel", "type": "string", "required": false, "enumValues": [ + "pairing", + "allowlist", "open", - "disabled", - "allowlist" + "disabled" ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "access", + "channels", + "network" + ], + "label": "Slack DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"].", "hasChildren": false }, { - "path": "channels.zalo.accounts.*.markdown", + "path": "channels.slack.dms", "kind": "channel", "type": "object", "required": false, @@ -37654,34 +14325,19 @@ "hasChildren": true }, { - "path": "channels.zalo.accounts.*.markdown.tables", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.zalo.accounts.*.mediaMaxMb", + "path": "channels.slack.dms.*", "kind": "channel", - "type": "number", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalo.accounts.*.name", + "path": "channels.slack.dms.*.historyLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -37689,9 +14345,9 @@ "hasChildren": false }, { - "path": "channels.zalo.accounts.*.proxy", + "path": "channels.slack.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -37699,29 +14355,35 @@ "hasChildren": false }, { - "path": "channels.zalo.accounts.*.responsePrefix", + "path": "channels.slack.groupPolicy", "kind": "channel", "type": "string", - "required": false, + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.accounts.*.tokenFile", + "path": "channels.slack.healthMonitor", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalo.accounts.*.webhookPath", + "path": "channels.slack.healthMonitor.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -37729,12 +14391,9 @@ "hasChildren": false }, { - "path": "channels.zalo.accounts.*.webhookSecret", + "path": "channels.slack.heartbeat", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -37742,39 +14401,19 @@ "hasChildren": true }, { - "path": "channels.zalo.accounts.*.webhookSecret.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.zalo.accounts.*.webhookSecret.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.zalo.accounts.*.webhookSecret.source", + "path": "channels.slack.heartbeat.showAlerts", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.accounts.*.webhookUrl", + "path": "channels.slack.heartbeat.showOk", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -37782,22 +14421,19 @@ "hasChildren": false }, { - "path": "channels.zalo.allowFrom", + "path": "channels.slack.heartbeat.useIndicator", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalo.allowFrom.*", + "path": "channels.slack.historyLimit", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -37805,12 +14441,9 @@ "hasChildren": false }, { - "path": "channels.zalo.botToken", + "path": "channels.slack.markdown", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -37818,73 +14451,72 @@ "hasChildren": true }, { - "path": "channels.zalo.botToken.id", + "path": "channels.slack.markdown.tables", "kind": "channel", "type": "string", - "required": true, + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.botToken.provider", + "path": "channels.slack.mediaMaxMb", "kind": "channel", - "type": "string", - "required": true, + "type": "number", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.botToken.source", + "path": "channels.slack.mode", "kind": "channel", "type": "string", "required": true, + "enumValues": [ + "socket", + "http" + ], + "defaultValue": "socket", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.defaultAccount", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.zalo.dmPolicy", + "path": "channels.slack.name", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.enabled", + "path": "channels.slack.nativeStreaming", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Slack Native Streaming", + "help": "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).", "hasChildren": false }, { - "path": "channels.zalo.groupAllowFrom", + "path": "channels.slack.reactionAllowlist", "kind": "channel", "type": "array", "required": false, @@ -37894,7 +14526,7 @@ "hasChildren": true }, { - "path": "channels.zalo.groupAllowFrom.*", + "path": "channels.slack.reactionAllowlist.*", "kind": "channel", "type": [ "number", @@ -37907,13 +14539,14 @@ "hasChildren": false }, { - "path": "channels.zalo.groupPolicy", + "path": "channels.slack.reactionNotifications", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "open", - "disabled", + "off", + "own", + "all", "allowlist" ], "deprecated": false, @@ -37922,42 +14555,27 @@ "hasChildren": false }, { - "path": "channels.zalo.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.zalo.markdown.tables", + "path": "channels.slack.replyToMode", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalo.mediaMaxMb", + "path": "channels.slack.replyToModeByChatType", "kind": "channel", - "type": "number", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalo.name", + "path": "channels.slack.replyToModeByChatType.channel", "kind": "channel", "type": "string", "required": false, @@ -37967,7 +14585,7 @@ "hasChildren": false }, { - "path": "channels.zalo.proxy", + "path": "channels.slack.replyToModeByChatType.direct", "kind": "channel", "type": "string", "required": false, @@ -37977,7 +14595,7 @@ "hasChildren": false }, { - "path": "channels.zalo.responsePrefix", + "path": "channels.slack.replyToModeByChatType.group", "kind": "channel", "type": "string", "required": false, @@ -37987,9 +14605,9 @@ "hasChildren": false }, { - "path": "channels.zalo.tokenFile", + "path": "channels.slack.requireMention", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -37997,7 +14615,7 @@ "hasChildren": false }, { - "path": "channels.zalo.webhookPath", + "path": "channels.slack.responsePrefix", "kind": "channel", "type": "string", "required": false, @@ -38007,7 +14625,7 @@ "hasChildren": false }, { - "path": "channels.zalo.webhookSecret", + "path": "channels.slack.signingSecret", "kind": "channel", "type": [ "object", @@ -38015,12 +14633,17 @@ ], "required": false, "deprecated": false, - "sensitive": false, - "tags": [], + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], "hasChildren": true }, { - "path": "channels.zalo.webhookSecret.id", + "path": "channels.slack.signingSecret.id", "kind": "channel", "type": "string", "required": true, @@ -38030,7 +14653,7 @@ "hasChildren": false }, { - "path": "channels.zalo.webhookSecret.provider", + "path": "channels.slack.signingSecret.provider", "kind": "channel", "type": "string", "required": true, @@ -38040,7 +14663,7 @@ "hasChildren": false }, { - "path": "channels.zalo.webhookSecret.source", + "path": "channels.slack.signingSecret.source", "kind": "channel", "type": "string", "required": true, @@ -38050,77 +14673,103 @@ "hasChildren": false }, { - "path": "channels.zalo.webhookUrl", + "path": "channels.slack.slashCommand", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalouser", + "path": "channels.slack.slashCommand.enabled", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Zalo Personal", - "help": "Zalo personal account via QR code login.", - "hasChildren": true + "tags": [], + "hasChildren": false }, { - "path": "channels.zalouser.accounts", + "path": "channels.slack.slashCommand.ephemeral", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.accounts.*", + "path": "channels.slack.slashCommand.name", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.allowFrom", + "path": "channels.slack.slashCommand.sessionPrefix", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.allowFrom.*", + "path": "channels.slack.streaming", "kind": "channel", "type": [ - "number", + "boolean", "string" ], "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Slack Streaming Mode", + "help": "Unified Slack stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". Legacy boolean/streamMode keys are auto-mapped.", "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.dangerouslyAllowNameMatching", + "path": "channels.slack.streamMode", "kind": "channel", - "type": "boolean", + "type": "string", + "required": false, + "enumValues": [ + "replace", + "status_final", + "append" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Stream Mode (Legacy)", + "help": "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.", + "hasChildren": false + }, + { + "path": "channels.slack.textChunkLimit", + "kind": "channel", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -38128,92 +14777,180 @@ "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.dmPolicy", + "path": "channels.slack.thread", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.thread.historyScope", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" + "thread", + "channel" ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Slack Thread History Scope", + "help": "Scope for Slack thread history context (\"thread\" isolates per thread; \"channel\" reuses channel history).", "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.enabled", + "path": "channels.slack.thread.inheritParent", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Slack Thread Parent Inheritance", + "help": "If true, Slack thread sessions inherit the parent channel transcript (default: false).", "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groupAllowFrom", + "path": "channels.slack.thread.initialHistoryLimit", "kind": "channel", - "type": "array", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Slack Thread Initial History Limit", + "help": "Maximum number of existing Slack thread messages to fetch when starting a new thread session (default: 20, set to 0 to disable).", + "hasChildren": false + }, + { + "path": "channels.slack.typingReaction", + "kind": "channel", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groupAllowFrom.*", + "path": "channels.slack.userToken", "kind": "channel", "type": [ - "number", + "object", "string" ], "required": false, "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Slack User Token", + "help": "Optional Slack user token for workflows requiring user-context API access beyond bot permissions. Use sparingly and audit scopes because this token can carry broader authority.", + "hasChildren": true + }, + { + "path": "channels.slack.userToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groupPolicy", + "path": "channels.slack.userToken.provider", "kind": "channel", "type": "string", "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.userToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.userTokenReadOnly", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [ + "auth", + "channels", + "network", + "security" ], - "defaultValue": "allowlist", + "label": "Slack User Token Read Only", + "help": "When true, treat configured Slack user token usage as read-only helper behavior where possible. Keep enabled if you only need supplemental reads without user-context writes.", + "hasChildren": false + }, + { + "path": "channels.slack.webhookPath", + "kind": "channel", + "type": "string", + "required": true, + "defaultValue": "/slack/events", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groups", + "path": "channels.synology-chat", "kind": "channel", "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Synology Chat", + "help": "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.", "hasChildren": true }, { - "path": "channels.zalouser.accounts.*.groups.*", + "path": "channels.synology-chat.*", "kind": "channel", - "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groups.*.allow", + "path": "channels.synology-chat.dangerouslyAllowInheritedWebhookPath", "kind": "channel", "type": "boolean", "required": false, @@ -38223,7 +14960,7 @@ "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groups.*.enabled", + "path": "channels.synology-chat.dangerouslyAllowNameMatching", "kind": "channel", "type": "boolean", "required": false, @@ -38233,69 +14970,74 @@ "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groups.*.requireMention", + "path": "channels.telegram", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Telegram", + "help": "simplest way to get started — register a bot with @BotFather and get going.", "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groups.*.tools", + "path": "channels.tlon", "kind": "channel", "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": true + "tags": [ + "channels", + "network" + ], + "label": "Tlon", + "help": "decentralized messaging on Urbit; install the plugin to enable.", + "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groups.*.tools.allow", + "path": "channels.twitch", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Twitch", + "help": "Twitch chat integration", "hasChildren": true }, { - "path": "channels.zalouser.accounts.*.groups.*.tools.allow.*", + "path": "channels.twitch.accessToken", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.groups.*.tools.alsoAllow", + "path": "channels.twitch.accounts", "kind": "channel", - "type": "array", - "required": false, + "type": "object", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": true }, { - "path": "channels.zalouser.accounts.*.groups.*.tools.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.zalouser.accounts.*.groups.*.tools.deny", + "path": "channels.twitch.accounts.*", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -38303,52 +15045,54 @@ "hasChildren": true }, { - "path": "channels.zalouser.accounts.*.groups.*.tools.deny.*", + "path": "channels.twitch.accounts.*.accessToken", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.historyLimit", + "path": "channels.twitch.accounts.*.allowedRoles", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalouser.accounts.*.markdown", + "path": "channels.twitch.accounts.*.allowedRoles.*", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "moderator", + "owner", + "vip", + "subscriber", + "all" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.markdown.tables", + "path": "channels.twitch.accounts.*.allowFrom", "kind": "channel", - "type": "string", + "type": "array", "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalouser.accounts.*.messagePrefix", + "path": "channels.twitch.accounts.*.allowFrom.*", "kind": "channel", "type": "string", "required": false, @@ -38358,17 +15102,17 @@ "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.name", + "path": "channels.twitch.accounts.*.channel", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.profile", + "path": "channels.twitch.accounts.*.clientId", "kind": "channel", "type": "string", "required": false, @@ -38378,7 +15122,7 @@ "hasChildren": false }, { - "path": "channels.zalouser.accounts.*.responsePrefix", + "path": "channels.twitch.accounts.*.clientSecret", "kind": "channel", "type": "string", "required": false, @@ -38388,21 +15132,21 @@ "hasChildren": false }, { - "path": "channels.zalouser.allowFrom", + "path": "channels.twitch.accounts.*.enabled", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.allowFrom.*", + "path": "channels.twitch.accounts.*.expiresIn", "kind": "channel", "type": [ - "number", - "string" + "null", + "number" ], "required": false, "deprecated": false, @@ -38411,9 +15155,9 @@ "hasChildren": false }, { - "path": "channels.zalouser.dangerouslyAllowNameMatching", + "path": "channels.twitch.accounts.*.obtainmentTimestamp", "kind": "channel", - "type": "boolean", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -38421,7 +15165,7 @@ "hasChildren": false }, { - "path": "channels.zalouser.defaultAccount", + "path": "channels.twitch.accounts.*.refreshToken", "kind": "channel", "type": "string", "required": false, @@ -38431,25 +15175,19 @@ "hasChildren": false }, { - "path": "channels.zalouser.dmPolicy", + "path": "channels.twitch.accounts.*.requireMention", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.enabled", + "path": "channels.twitch.accounts.*.responsePrefix", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -38457,58 +15195,46 @@ "hasChildren": false }, { - "path": "channels.zalouser.groupAllowFrom", + "path": "channels.twitch.accounts.*.username", "kind": "channel", - "type": "array", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.groupAllowFrom.*", + "path": "channels.twitch.allowedRoles", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.zalouser.groupPolicy", + "path": "channels.twitch.allowedRoles.*", "kind": "channel", "type": "string", - "required": true, + "required": false, "enumValues": [ - "open", - "disabled", - "allowlist" + "moderator", + "owner", + "vip", + "subscriber", + "all" ], - "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.groups", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.zalouser.groups.*", + "path": "channels.twitch.allowFrom", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -38516,9 +15242,9 @@ "hasChildren": true }, { - "path": "channels.zalouser.groups.*.allow", + "path": "channels.twitch.allowFrom.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -38526,19 +15252,19 @@ "hasChildren": false }, { - "path": "channels.zalouser.groups.*.enabled", + "path": "channels.twitch.channel", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.groups.*.requireMention", + "path": "channels.twitch.clientId", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -38546,29 +15272,32 @@ "hasChildren": false }, { - "path": "channels.zalouser.groups.*.tools", + "path": "channels.twitch.clientSecret", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.groups.*.tools.allow", + "path": "channels.twitch.enabled", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.groups.*.tools.allow.*", + "path": "channels.twitch.expiresIn", "kind": "channel", - "type": "string", + "type": [ + "null", + "number" + ], "required": false, "deprecated": false, "sensitive": false, @@ -38576,9 +15305,9 @@ "hasChildren": false }, { - "path": "channels.zalouser.groups.*.tools.alsoAllow", + "path": "channels.twitch.markdown", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -38586,29 +15315,34 @@ "hasChildren": true }, { - "path": "channels.zalouser.groups.*.tools.alsoAllow.*", + "path": "channels.twitch.markdown.tables", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "bullets", + "code", + "off" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.groups.*.tools.deny", + "path": "channels.twitch.name", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.groups.*.tools.deny.*", + "path": "channels.twitch.obtainmentTimestamp", "kind": "channel", - "type": "string", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -38616,9 +15350,9 @@ "hasChildren": false }, { - "path": "channels.zalouser.historyLimit", + "path": "channels.twitch.refreshToken", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -38626,68 +15360,78 @@ "hasChildren": false }, { - "path": "channels.zalouser.markdown", + "path": "channels.twitch.requireMention", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.zalouser.markdown.tables", + "path": "channels.twitch.responsePrefix", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "off", - "bullets", - "code" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.messagePrefix", + "path": "channels.twitch.username", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.zalouser.name", + "path": "channels.whatsapp", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "WhatsApp", + "help": "works with your own number; recommend a separate phone + eSIM.", "hasChildren": false }, { - "path": "channels.zalouser.profile", + "path": "channels.zalo", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Zalo", + "help": "Vietnam-focused messaging platform with Bot API.", "hasChildren": false }, { - "path": "channels.zalouser.responsePrefix", + "path": "channels.zalouser", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Zalo Personal", + "help": "Zalo personal account via QR code login.", "hasChildren": false }, { diff --git a/docs/.generated/config-baseline.jsonl b/docs/.generated/config-baseline.jsonl index f0574afd..9328d2d2 100644 --- a/docs/.generated/config-baseline.jsonl +++ b/docs/.generated/config-baseline.jsonl @@ -1,4 +1,4 @@ -{"generatedBy":"scripts/generate-config-doc-baseline.ts","recordType":"meta","totalPaths":5619} +{"generatedBy":"scripts/generate-config-doc-baseline.ts","recordType":"meta","totalPaths":3485} {"recordType":"path","path":"acp","kind":"core","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"ACP","help":"ACP runtime controls for enabling dispatch, selecting backends, constraining allowed agent targets, and tuning streamed turn projection behavior.","hasChildren":true} {"recordType":"path","path":"acp.allowedAgents","kind":"core","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["access"],"label":"ACP Allowed Agents","help":"Allowlist of ACP target agent ids permitted for ACP runtime sessions. Empty means no additional allowlist restriction.","hasChildren":true} {"recordType":"path","path":"acp.allowedAgents.*","kind":"core","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} @@ -822,540 +822,7 @@ {"recordType":"path","path":"channels.bluebubbles.serverUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.bluebubbles.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.bluebubbles.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord","help":"very well supported right now.","hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.ackReactionScope","kind":"channel","type":"string","required":false,"enumValues":["group-mentions","group-all","direct","all","off","none"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.actions.channelInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.channels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.emojiUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.events","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.memberInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.messages","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.moderation","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.permissions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.pins","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.polls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.roleInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.roles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.search","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.stickers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.stickerUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.threads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.actions.voiceStatus","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.activity","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.activityType","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.activityUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.agentComponents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.agentComponents.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.autoPresence","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.degradedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.exhaustedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.healthyText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.intervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.minUpdateIntervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dm.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.dm.groupChannels.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dm.groupEnabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dm.policy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.eventQueue","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.eventQueue.listenerTimeout","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.eventQueue.maxConcurrency","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.eventQueue.maxQueueSize","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.cleanupAfterResolve","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.autoArchiveDuration","kind":"channel","type":["number","string"],"required":false,"enumValues":["60","1440","4320","10080"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.autoThread","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.includeThreadStarter","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.slug","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.inboundWorker","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.inboundWorker.runTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.intents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.intents.guildMembers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.intents.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.maxLinesPerMessage","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.pluralkit","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.slashCommand","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.slashCommand.ephemeral","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.status","kind":"channel","type":"string","required":false,"enumValues":["online","dnd","idle","invisible"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.streamMode","kind":"channel","type":"string","required":false,"enumValues":["partial","block","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.ui","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.ui.components","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.ui.components.accentColor","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin.*.channelId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin.*.guildId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.daveEncryption","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.decryptionFailureTolerance","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.auto","kind":"channel","type":"string","required":false,"enumValues":["off","always","inbound","tagged"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.applyTextNormalization","kind":"channel","type":"string","required":false,"enumValues":["auto","on","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.languageCode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.modelId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.seed","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.similarityBoost","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.stability","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.style","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.maxTextLength","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.mode","kind":"channel","type":"string","required":false,"enumValues":["final","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowModelId","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowNormalization","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowProvider","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowSeed","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowText","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowVoice","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowVoiceSettings","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.instructions","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.model","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.prefsPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.provider","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.summaryModel","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.ackReactionScope","kind":"channel","type":"string","required":false,"enumValues":["group-mentions","group-all","direct","all","off","none"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.actions.channelInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.channels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.emojiUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.events","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.memberInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.messages","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.moderation","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.permissions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.pins","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.polls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.roleInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.roles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.search","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.stickers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.stickerUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.threads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.actions.voiceStatus","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.activity","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Activity","help":"Discord presence activity text (defaults to custom status).","hasChildren":false} -{"recordType":"path","path":"channels.discord.activityType","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Activity Type","help":"Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing).","hasChildren":false} -{"recordType":"path","path":"channels.discord.activityUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Activity URL","help":"Discord presence streaming URL (required for activityType=1).","hasChildren":false} -{"recordType":"path","path":"channels.discord.agentComponents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.agentComponents.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Discord Allow Bot Messages","help":"Allow bot-authored messages to trigger Discord replies (default: false). Set \"mentions\" to only accept bot messages that mention the bot.","hasChildren":false} -{"recordType":"path","path":"channels.discord.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.autoPresence","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.autoPresence.degradedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Auto Presence Degraded Text","help":"Optional custom status text while runtime/model availability is degraded or unknown (idle).","hasChildren":false} -{"recordType":"path","path":"channels.discord.autoPresence.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Auto Presence Enabled","help":"Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd.","hasChildren":false} -{"recordType":"path","path":"channels.discord.autoPresence.exhaustedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Auto Presence Exhausted Text","help":"Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder.","hasChildren":false} -{"recordType":"path","path":"channels.discord.autoPresence.healthyText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Auto Presence Healthy Text","help":"Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set.","hasChildren":false} -{"recordType":"path","path":"channels.discord.autoPresence.intervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Auto Presence Check Interval (ms)","help":"How often to evaluate Discord auto-presence state in milliseconds (default: 30000).","hasChildren":false} -{"recordType":"path","path":"channels.discord.autoPresence.minUpdateIntervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Auto Presence Min Update Interval (ms)","help":"Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes.","hasChildren":false} -{"recordType":"path","path":"channels.discord.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Native Commands","help":"Override native commands for Discord (bool or \"auto\").","hasChildren":false} -{"recordType":"path","path":"channels.discord.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Native Skill Commands","help":"Override native skill commands for Discord (bool or \"auto\").","hasChildren":false} -{"recordType":"path","path":"channels.discord.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Config Writes","help":"Allow Discord to write config in response to channel events/commands (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.discord.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.dm.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.dm.groupChannels.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.dm.groupEnabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.dm.policy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Discord DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"] (legacy: channels.discord.dm.allowFrom).","hasChildren":false} -{"recordType":"path","path":"channels.discord.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Discord DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"].","hasChildren":false} -{"recordType":"path","path":"channels.discord.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Draft Chunk Break Preference","help":"Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph.","hasChildren":false} -{"recordType":"path","path":"channels.discord.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Draft Chunk Max Chars","help":"Target max size for a Discord stream preview chunk when channels.discord.streaming=\"block\" (default: 800; clamped to channels.discord.textChunkLimit).","hasChildren":false} -{"recordType":"path","path":"channels.discord.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Draft Chunk Min Chars","help":"Minimum chars before emitting a Discord stream preview update when channels.discord.streaming=\"block\" (default: 200).","hasChildren":false} -{"recordType":"path","path":"channels.discord.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.eventQueue","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.eventQueue.listenerTimeout","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord EventQueue Listener Timeout (ms)","help":"Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts..eventQueue.listenerTimeout.","hasChildren":false} -{"recordType":"path","path":"channels.discord.eventQueue.maxConcurrency","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord EventQueue Max Concurrency","help":"Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts..eventQueue.maxConcurrency.","hasChildren":false} -{"recordType":"path","path":"channels.discord.eventQueue.maxQueueSize","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord EventQueue Max Queue Size","help":"Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts..eventQueue.maxQueueSize.","hasChildren":false} -{"recordType":"path","path":"channels.discord.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.execApprovals.cleanupAfterResolve","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.autoArchiveDuration","kind":"channel","type":["number","string"],"required":false,"enumValues":["60","1440","4320","10080"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.autoThread","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.includeThreadStarter","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.channels.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.slug","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.guilds.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.guilds.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.inboundWorker","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.inboundWorker.runTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Inbound Worker Timeout (ms)","help":"Optional queued Discord inbound worker timeout in ms. This is separate from Carbon listener timeouts; defaults to 1800000 and can be disabled with 0. Set per account via channels.discord.accounts..inboundWorker.runTimeoutMs.","hasChildren":false} -{"recordType":"path","path":"channels.discord.intents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.intents.guildMembers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Guild Members Intent","help":"Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false.","hasChildren":false} -{"recordType":"path","path":"channels.discord.intents.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Intent","help":"Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false.","hasChildren":false} -{"recordType":"path","path":"channels.discord.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.maxLinesPerMessage","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Max Lines Per Message","help":"Soft max line count per Discord message (default: 17).","hasChildren":false} -{"recordType":"path","path":"channels.discord.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.pluralkit","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.pluralkit.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord PluralKit Enabled","help":"Resolve PluralKit proxied messages and treat system members as distinct senders.","hasChildren":false} -{"recordType":"path","path":"channels.discord.pluralkit.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Discord PluralKit Token","help":"Optional PluralKit token for resolving private systems or members.","hasChildren":true} -{"recordType":"path","path":"channels.discord.pluralkit.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.pluralkit.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.pluralkit.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Proxy URL","help":"Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts..proxy.","hasChildren":false} -{"recordType":"path","path":"channels.discord.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Retry Attempts","help":"Max retry attempts for outbound Discord API calls (default: 3).","hasChildren":false} -{"recordType":"path","path":"channels.discord.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Retry Jitter","help":"Jitter factor (0-1) applied to Discord retry delays.","hasChildren":false} -{"recordType":"path","path":"channels.discord.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","reliability"],"label":"Discord Retry Max Delay (ms)","help":"Maximum retry delay cap in ms for Discord outbound calls.","hasChildren":false} -{"recordType":"path","path":"channels.discord.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Retry Min Delay (ms)","help":"Minimum retry delay in ms for Discord outbound calls.","hasChildren":false} -{"recordType":"path","path":"channels.discord.slashCommand","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.slashCommand.ephemeral","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.status","kind":"channel","type":"string","required":false,"enumValues":["online","dnd","idle","invisible"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Status","help":"Discord presence status (online, dnd, idle, invisible).","hasChildren":false} -{"recordType":"path","path":"channels.discord.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Streaming Mode","help":"Unified Discord stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". \"progress\" maps to \"partial\" on Discord. Legacy boolean/streamMode keys are auto-mapped.","hasChildren":false} -{"recordType":"path","path":"channels.discord.streamMode","kind":"channel","type":"string","required":false,"enumValues":["partial","block","off"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Stream Mode (Legacy)","help":"Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.","hasChildren":false} -{"recordType":"path","path":"channels.discord.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread Binding Enabled","help":"Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.","hasChildren":false} -{"recordType":"path","path":"channels.discord.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread Binding Idle Timeout (hours)","help":"Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.","hasChildren":false} -{"recordType":"path","path":"channels.discord.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","storage"],"label":"Discord Thread Binding Max Age (hours)","help":"Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.","hasChildren":false} -{"recordType":"path","path":"channels.discord.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread-Bound ACP Spawn","help":"Allow /acp spawn to auto-create and bind Discord threads for ACP sessions (default: false; opt-in). Set true to enable thread-bound ACP spawns for this account/channel.","hasChildren":false} -{"recordType":"path","path":"channels.discord.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread-Bound Subagent Spawn","help":"Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.","hasChildren":false} -{"recordType":"path","path":"channels.discord.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Discord Bot Token","help":"Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.","hasChildren":true} -{"recordType":"path","path":"channels.discord.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.ui","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.ui.components","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.ui.components.accentColor","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Component Accent Color","help":"Accent color for Discord component containers (hex). Set per account via channels.discord.accounts..ui.components.accentColor.","hasChildren":false} -{"recordType":"path","path":"channels.discord.voice","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.autoJoin","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice Auto-Join","help":"Voice channels to auto-join on startup (list of guildId/channelId entries).","hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.autoJoin.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.autoJoin.*.channelId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.autoJoin.*.guildId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.daveEncryption","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice DAVE Encryption","help":"Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this).","hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.decryptionFailureTolerance","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice Decrypt Failure Tolerance","help":"Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24).","hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice Enabled","help":"Enable Discord voice channel conversations (default: true). Omit channels.discord.voice to keep voice support disabled for the account.","hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","media","network"],"label":"Discord Voice Text-to-Speech","help":"Optional TTS overrides for Discord voice playback (merged with messages.tts).","hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.auto","kind":"channel","type":"string","required":false,"enumValues":["off","always","inbound","tagged"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.edge.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.edge.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.applyTextNormalization","kind":"channel","type":"string","required":false,"enumValues":["auto","on","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.languageCode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.modelId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.seed","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.similarityBoost","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.stability","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.style","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.maxTextLength","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.microsoft.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.mode","kind":"channel","type":"string","required":false,"enumValues":["final","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowModelId","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowNormalization","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowProvider","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowSeed","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowText","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowVoice","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowVoiceSettings","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai.instructions","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai.model","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.openai.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.prefsPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.provider","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.summaryModel","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord.voice.tts.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord","help":"very well supported right now.","hasChildren":false} {"recordType":"path","path":"channels.feishu","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Feishu","help":"飞书/Lark enterprise messaging with doc/wiki/drive tools.","hasChildren":true} {"recordType":"path","path":"channels.feishu.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} {"recordType":"path","path":"channels.feishu.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -1536,402 +1003,9 @@ {"recordType":"path","path":"channels.feishu.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.feishu.webhookPath","kind":"channel","type":"string","required":true,"defaultValue":"/feishu/events","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.feishu.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Google Chat","help":"Google Workspace Chat app via HTTP webhooks.","hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.allowBots","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.appPrincipal","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.audience","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.audienceType","kind":"channel","type":"string","required":false,"enumValues":["app-url","project-number"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.botUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.dm.policy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.streamMode","kind":"channel","type":"string","required":true,"enumValues":["replace","status_final","append"],"defaultValue":"replace","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.typingIndicator","kind":"channel","type":"string","required":false,"enumValues":["none","message","reaction"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.accounts.*.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.allowBots","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.appPrincipal","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.audience","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.audienceType","kind":"channel","type":"string","required":false,"enumValues":["app-url","project-number"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.botUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.dm.policy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.groups.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.groups.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccount","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.serviceAccount.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccount.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccount.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccount.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccountFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccountRef","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.googlechat.serviceAccountRef.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccountRef.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.serviceAccountRef.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.streamMode","kind":"channel","type":"string","required":true,"enumValues":["replace","status_final","append"],"defaultValue":"replace","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.typingIndicator","kind":"channel","type":"string","required":false,"enumValues":["none","message","reaction"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"iMessage","help":"this is still a work in progress.","hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.attachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.attachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.dbPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.includeAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.region","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.remoteAttachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.accounts.*.remoteAttachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.remoteHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.attachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.attachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"iMessage CLI Path","help":"Filesystem path to the iMessage bridge CLI binary used for send/receive operations. Set explicitly when the binary is not on PATH in service runtime environments.","hasChildren":false} -{"recordType":"path","path":"channels.imessage.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"iMessage Config Writes","help":"Allow iMessage to write config in response to channel events/commands (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.imessage.dbPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"iMessage DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.imessage.allowFrom=[\"*\"].","hasChildren":false} -{"recordType":"path","path":"channels.imessage.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.includeAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.region","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.remoteAttachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.imessage.remoteAttachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.remoteHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.imessage.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC","help":"classic IRC networks with DM/channel routing and pairing controls.","hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.channels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.channels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.host","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.mentionPatterns","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.mentionPatterns.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.nick","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.nickserv","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.accounts.*.nickserv.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.nickserv.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.nickserv.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.nickserv.register","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.nickserv.registerEmail","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.nickserv.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.port","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.realname","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.tls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.accounts.*.username","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.channels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.channels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"IRC DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.irc.allowFrom=[\"*\"].","hasChildren":false} -{"recordType":"path","path":"channels.irc.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.host","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.mentionPatterns","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.mentionPatterns.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.nick","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.nickserv","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.irc.nickserv.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Enabled","help":"Enable NickServ identify/register after connect (defaults to enabled when password is configured).","hasChildren":false} -{"recordType":"path","path":"channels.irc.nickserv.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"IRC NickServ Password","help":"NickServ password used for IDENTIFY/REGISTER (sensitive).","hasChildren":false} -{"recordType":"path","path":"channels.irc.nickserv.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["auth","channels","network","security","storage"],"label":"IRC NickServ Password File","help":"Optional file path containing NickServ password.","hasChildren":false} -{"recordType":"path","path":"channels.irc.nickserv.register","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Register","help":"If true, send NickServ REGISTER on every connect. Use once for initial registration, then disable.","hasChildren":false} -{"recordType":"path","path":"channels.irc.nickserv.registerEmail","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Register Email","help":"Email used with NickServ REGISTER (required when register=true).","hasChildren":false} -{"recordType":"path","path":"channels.irc.nickserv.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Service","help":"NickServ service nick (default: NickServ).","hasChildren":false} -{"recordType":"path","path":"channels.irc.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":false} -{"recordType":"path","path":"channels.irc.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.port","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.realname","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.tls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.irc.username","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Google Chat","help":"Google Workspace Chat app via HTTP webhooks.","hasChildren":false} +{"recordType":"path","path":"channels.imessage","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"iMessage","help":"this is still a work in progress.","hasChildren":false} +{"recordType":"path","path":"channels.irc","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC","help":"classic IRC networks with DM/channel routing and pairing controls.","hasChildren":false} {"recordType":"path","path":"channels.line","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"LINE","help":"LINE Messaging API bot for Japan/Taiwan/Thailand markets.","hasChildren":true} {"recordType":"path","path":"channels.line.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} {"recordType":"path","path":"channels.line.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -1984,572 +1058,12 @@ {"recordType":"path","path":"channels.line.secretFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.line.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.line.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Matrix","help":"open protocol; install the plugin to enable.","hasChildren":true} -{"recordType":"path","path":"channels.matrix.accessToken","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.accounts.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.ackReactionScope","kind":"channel","type":"string","required":false,"enumValues":["group-mentions","group-all","direct","all","none","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.actions.channelInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.actions.memberInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.actions.messages","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.actions.pins","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.actions.profile","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.actions.verification","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Matrix Allow Bot Messages","help":"Allow messages from other configured Matrix bot accounts to trigger replies (default: false). Set \"mentions\" to only accept bot messages that visibly mention this bot.","hasChildren":false} -{"recordType":"path","path":"channels.matrix.allowlistOnly","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.allowPrivateNetwork","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.autoJoin","kind":"channel","type":"string","required":false,"enumValues":["always","allowlist","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.autoJoinAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.autoJoinAllowlist.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.avatarUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.deviceId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.deviceName","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.dm.policy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.encryption","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.autoReply","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.groups.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.groups.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.homeserver","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.initialSyncLimit","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.password","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.password.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.password.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.password.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.replyToMode","kind":"channel","type":"string","required":false,"enumValues":["off","first","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.autoReply","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.rooms.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.rooms.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.startupVerification","kind":"channel","type":"string","required":false,"enumValues":["off","if-unverified"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.startupVerificationCooldownHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.textChunkLimit","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.matrix.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.threadReplies","kind":"channel","type":"string","required":false,"enumValues":["off","inbound","always"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix.userId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost","help":"self-hosted Slack-style chat; install the plugin to enable.","hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.chatmode","kind":"channel","type":"string","required":false,"enumValues":["oncall","onmessage","onchar"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.commands.callbackPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.commands.callbackUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.initialDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.maxRetries","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.interactions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.interactions.allowedSourceIps","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.interactions.allowedSourceIps.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.interactions.callbackBaseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.oncharPrefixes","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.accounts.*.oncharPrefixes.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"enumValues":["off","first","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Base URL","help":"Base URL for your Mattermost server (e.g., https://chat.example.com).","hasChildren":false} -{"recordType":"path","path":"channels.mattermost.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Mattermost Bot Token","help":"Bot token from Mattermost System Console -> Integrations -> Bot Accounts.","hasChildren":true} -{"recordType":"path","path":"channels.mattermost.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.chatmode","kind":"channel","type":"string","required":false,"enumValues":["oncall","onmessage","onchar"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Chat Mode","help":"Reply to channel messages on mention (\"oncall\"), on trigger chars (\">\" or \"!\") (\"onchar\"), or on every message (\"onmessage\").","hasChildren":false} -{"recordType":"path","path":"channels.mattermost.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.commands.callbackPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.commands.callbackUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Config Writes","help":"Allow Mattermost to write config in response to channel events/commands (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.mattermost.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.dmChannelRetry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.dmChannelRetry.initialDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.dmChannelRetry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.dmChannelRetry.maxRetries","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.dmChannelRetry.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.interactions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.interactions.allowedSourceIps","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.interactions.allowedSourceIps.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.interactions.callbackBaseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.mattermost.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.oncharPrefixes","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Onchar Prefixes","help":"Trigger prefixes for onchar mode (default: [\">\", \"!\"]).","hasChildren":true} -{"recordType":"path","path":"channels.mattermost.oncharPrefixes.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.replyToMode","kind":"channel","type":"string","required":false,"enumValues":["off","first","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Require Mention","help":"Require @mention in channels before responding (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.mattermost.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.mattermost.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Microsoft Teams","help":"Bot Framework; enterprise support.","hasChildren":true} -{"recordType":"path","path":"channels.msteams.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.appId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.appPassword","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.appPassword.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.appPassword.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.appPassword.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"MS Teams Config Writes","help":"Allow Microsoft Teams to write config in response to channel events/commands (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.msteams.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.mediaAllowHosts","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.mediaAllowHosts.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.mediaAuthAllowHosts","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.mediaAuthAllowHosts.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.replyStyle","kind":"channel","type":"string","required":false,"enumValues":["thread","top-level"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.sharePointSiteId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.replyStyle","kind":"channel","type":"string","required":false,"enumValues":["thread","top-level"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.replyStyle","kind":"channel","type":"string","required":false,"enumValues":["thread","top-level"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.tenantId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.webhook","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.msteams.webhook.path","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.msteams.webhook.port","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nextcloud Talk","help":"Self-hosted chat via Nextcloud Talk webhook bots.","hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPasswordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecretFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookPublicUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.apiPassword","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.apiPassword.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.apiPassword.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.apiPassword.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.apiPasswordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.apiUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.botSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.botSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.botSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.botSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.botSecretFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk.webhookPublicUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nostr","help":"Decentralized protocol; encrypted DMs via NIP-04.","hasChildren":true} -{"recordType":"path","path":"channels.nostr.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nostr.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nostr.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.privateKey","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nostr.profile.about","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile.banner","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile.displayName","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile.lud16","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile.nip05","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile.picture","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.profile.website","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.nostr.relays","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.nostr.relays.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal","help":"signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").","hasChildren":true} -{"recordType":"path","path":"channels.signal.account","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal Account","help":"Signal account identifier (phone/number handle) used to bind this channel config to a specific Signal identity. Keep this aligned with your linked device/session state.","hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.account","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.accountUuid","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.autoStart","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.httpHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.httpPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.httpUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.ignoreAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.ignoreStories","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.reactionAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.accounts.*.reactionAllowlist.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.receiveMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.startupTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.accountUuid","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.autoStart","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal Config Writes","help":"Allow Signal to write config in response to channel events/commands (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.signal.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Signal DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.signal.allowFrom=[\"*\"].","hasChildren":false} -{"recordType":"path","path":"channels.signal.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.httpHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.httpPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.httpUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.ignoreAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.ignoreStories","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.reactionAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.signal.reactionAllowlist.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.receiveMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.startupTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.signal.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Matrix","help":"open protocol; install the plugin to enable.","hasChildren":false} +{"recordType":"path","path":"channels.mattermost","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost","help":"self-hosted Slack-style chat; install the plugin to enable.","hasChildren":false} +{"recordType":"path","path":"channels.msteams","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Microsoft Teams","help":"Bot Framework; enterprise support.","hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nextcloud Talk","help":"Self-hosted chat via Nextcloud Talk webhook bots.","hasChildren":false} +{"recordType":"path","path":"channels.nostr","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nostr","help":"Decentralized protocol; encrypted DMs via NIP-04.","hasChildren":false} +{"recordType":"path","path":"channels.signal","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal","help":"signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").","hasChildren":false} {"recordType":"path","path":"channels.slack","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Slack","help":"supported (Socket Mode).","hasChildren":true} {"recordType":"path","path":"channels.slack.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} {"recordType":"path","path":"channels.slack.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -2806,421 +1320,8 @@ {"recordType":"path","path":"channels.synology-chat.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.synology-chat.dangerouslyAllowInheritedWebhookPath","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.synology-chat.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram","help":"simplest way to get started — register a bot with @BotFather and get going.","hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.createForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.deleteMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.editForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.editMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.poll","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.sendMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.actions.sticker","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.apiRoot","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.capabilities","kind":"channel","type":["array","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.capabilities.inlineButtons","kind":"channel","type":"string","required":false,"enumValues":["off","dm","group","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.customCommands","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.customCommands.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.customCommands.*.command","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.customCommands.*.description","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.defaultTo","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.requireTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.linkPreview","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.network","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.network.autoSelectFamily","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.network.dnsResultOrder","kind":"channel","type":"string","required":false,"enumValues":["ipv4first","verbatim"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.silentErrorReplies","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.streamMode","kind":"channel","type":"string","required":false,"enumValues":["off","partial","block"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.timeoutSeconds","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookCertPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.accounts.*.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.actions.createForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions.deleteMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions.editForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions.editMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions.poll","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions.sendMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.actions.sticker","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.apiRoot","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram API Root URL","help":"Custom Telegram Bot API root URL. Use for self-hosted Bot API servers (https://github.com/tdlib/telegram-bot-api) or reverse proxies in regions where api.telegram.org is blocked.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Auto Topic Label","help":"Auto-rename DM forum topics on first message using LLM. Default: true. Set to false to disable, or use object form { enabled: true, prompt: '...' } for custom prompt.","hasChildren":true} -{"recordType":"path","path":"channels.telegram.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Auto Topic Label Enabled","help":"Whether auto topic labeling is enabled. Default: true.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Auto Topic Label Prompt","help":"Custom prompt for LLM-based topic naming. The user message is appended after the prompt.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Telegram Bot Token","help":"Telegram bot token used to authenticate Bot API requests for this account/provider config. Use secret/env substitution and rotate tokens if exposure is suspected.","hasChildren":true} -{"recordType":"path","path":"channels.telegram.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.capabilities","kind":"channel","type":["array","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.capabilities.inlineButtons","kind":"channel","type":"string","required":false,"enumValues":["off","dm","group","all","allowlist"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Inline Buttons","help":"Enable Telegram inline button components for supported command and interaction surfaces. Disable if your deployment needs plain-text-only compatibility behavior.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Native Commands","help":"Override native commands for Telegram (bool or \"auto\").","hasChildren":false} -{"recordType":"path","path":"channels.telegram.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Native Skill Commands","help":"Override native skill commands for Telegram (bool or \"auto\").","hasChildren":false} -{"recordType":"path","path":"channels.telegram.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Config Writes","help":"Allow Telegram to write config in response to channel events/commands (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.telegram.customCommands","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Custom Commands","help":"Additional Telegram bot menu commands (merged with native; conflicts ignored).","hasChildren":true} -{"recordType":"path","path":"channels.telegram.customCommands.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.customCommands.*.command","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.customCommands.*.description","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.defaultTo","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.requireTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.direct.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Telegram DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.telegram.allowFrom=[\"*\"].","hasChildren":false} -{"recordType":"path","path":"channels.telegram.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approvals","help":"Telegram-native exec approval routing and approver authorization. Enable this only when Telegram should act as an explicit exec-approval client for the selected bot account.","hasChildren":true} -{"recordType":"path","path":"channels.telegram.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approval Agent Filter","help":"Optional allowlist of agent IDs eligible for Telegram exec approvals, for example `[\"main\", \"ops-agent\"]`. Use this to keep approval prompts scoped to the agents you actually operate from Telegram.","hasChildren":true} -{"recordType":"path","path":"channels.telegram.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approval Approvers","help":"Telegram user IDs allowed to approve exec requests for this bot account. Use numeric Telegram user IDs; prompts are only delivered to these approvers when target includes dm.","hasChildren":true} -{"recordType":"path","path":"channels.telegram.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approvals Enabled","help":"Enable Telegram exec approvals for this account. When false or unset, Telegram messages/buttons cannot approve exec requests.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Exec Approval Session Filter","help":"Optional session-key filters matched as substring or regex-style patterns before Telegram approval routing is used. Use narrow patterns so Telegram approvals only appear for intended sessions.","hasChildren":true} -{"recordType":"path","path":"channels.telegram.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approval Target","help":"Controls where Telegram approval prompts are sent: \"dm\" sends to approver DMs (default), \"channel\" sends to the originating Telegram chat/topic, and \"both\" sends to both. Channel delivery exposes the command text to the chat, so only use it in trusted groups/topics.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.groups.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.linkPreview","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.network","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.network.autoSelectFamily","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram autoSelectFamily","help":"Override Node autoSelectFamily for Telegram (true=enable, false=disable).","hasChildren":false} -{"recordType":"path","path":"channels.telegram.network.dnsResultOrder","kind":"channel","type":"string","required":false,"enumValues":["ipv4first","verbatim"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Telegram Retry Attempts","help":"Max retry attempts for outbound Telegram API calls (default: 3).","hasChildren":false} -{"recordType":"path","path":"channels.telegram.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Telegram Retry Jitter","help":"Jitter factor (0-1) applied to Telegram retry delays.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","reliability"],"label":"Telegram Retry Max Delay (ms)","help":"Maximum retry delay cap in ms for Telegram outbound calls.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Telegram Retry Min Delay (ms)","help":"Minimum retry delay in ms for Telegram outbound calls.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.silentErrorReplies","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Silent Error Replies","help":"When true, Telegram bot replies marked as errors are sent silently (no notification sound). Default: false.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Streaming Mode","help":"Unified Telegram stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default: \"partial\"). \"progress\" maps to \"partial\" on Telegram. Legacy boolean/streamMode keys are auto-mapped.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.streamMode","kind":"channel","type":"string","required":false,"enumValues":["off","partial","block"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread Binding Enabled","help":"Enable Telegram conversation binding features (/focus, /unfocus, /agents, and /session idle|max-age). Overrides session.threadBindings.enabled when set.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread Binding Idle Timeout (hours)","help":"Inactivity window in hours for Telegram bound sessions. Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","storage"],"label":"Telegram Thread Binding Max Age (hours)","help":"Optional hard max age in hours for Telegram bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread-Bound ACP Spawn","help":"Allow ACP spawns with thread=true to auto-bind Telegram current conversations when supported.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread-Bound Subagent Spawn","help":"Allow subagent spawns with thread=true to auto-bind Telegram current conversations when supported.","hasChildren":false} -{"recordType":"path","path":"channels.telegram.timeoutSeconds","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Telegram API Timeout (seconds)","help":"Max seconds before Telegram API requests are aborted (default: 500 per grammY).","hasChildren":false} -{"recordType":"path","path":"channels.telegram.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookCertPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} -{"recordType":"path","path":"channels.telegram.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Tlon","help":"decentralized messaging on Urbit; install the plugin to enable.","hasChildren":true} -{"recordType":"path","path":"channels.tlon.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.accounts.*.allowPrivateNetwork","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.autoAcceptDmInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.autoAcceptGroupInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.autoDiscoverChannels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.code","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.dmAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.accounts.*.dmAllowlist.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.accounts.*.groupChannels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.ownerShip","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.ship","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.showModelSignature","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.accounts.*.url","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.allowPrivateNetwork","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.authorization","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.authorization.channelRules","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.authorization.channelRules.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.authorization.channelRules.*.allowedShips","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.authorization.channelRules.*.allowedShips.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.authorization.channelRules.*.mode","kind":"channel","type":"string","required":false,"enumValues":["restricted","open"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.autoAcceptDmInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.autoAcceptGroupInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.autoDiscoverChannels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.code","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.defaultAuthorizedShips","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.defaultAuthorizedShips.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.dmAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.dmAllowlist.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.tlon.groupChannels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.ownerShip","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.ship","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.showModelSignature","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.tlon.url","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram","help":"simplest way to get started — register a bot with @BotFather and get going.","hasChildren":false} +{"recordType":"path","path":"channels.tlon","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Tlon","help":"decentralized messaging on Urbit; install the plugin to enable.","hasChildren":false} {"recordType":"path","path":"channels.twitch","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Twitch","help":"Twitch chat integration","hasChildren":true} {"recordType":"path","path":"channels.twitch.accessToken","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.twitch.accounts","kind":"channel","type":"object","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -3257,244 +1358,9 @@ {"recordType":"path","path":"channels.twitch.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.twitch.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.twitch.username","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp","help":"works with your own number; recommend a separate phone + eSIM.","hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction.direct","kind":"channel","type":"boolean","required":true,"defaultValue":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction.emoji","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction.group","kind":"channel","type":"string","required":true,"enumValues":["always","mentions","never"],"defaultValue":"mentions","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.authDir","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.debounceMs","kind":"channel","type":"integer","required":true,"defaultValue":0,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.selfChatMode","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.ackReaction","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.ackReaction.direct","kind":"channel","type":"boolean","required":true,"defaultValue":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.ackReaction.emoji","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.ackReaction.group","kind":"channel","type":"string","required":true,"enumValues":["always","mentions","never"],"defaultValue":"mentions","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.actions.polls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.actions.sendMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp Config Writes","help":"Allow WhatsApp to write config in response to channel events/commands (default: true).","hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.debounceMs","kind":"channel","type":"integer","required":true,"defaultValue":0,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"WhatsApp Message Debounce (ms)","help":"Debounce window (ms) for batching rapid consecutive messages from the same sender (0 to disable).","hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"WhatsApp DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.whatsapp.allowFrom=[\"*\"].","hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.whatsapp.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.mediaMaxMb","kind":"channel","type":"integer","required":true,"defaultValue":50,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.selfChatMode","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp Self-Phone Mode","help":"Same-phone setup (bot uses your personal WhatsApp number).","hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo","help":"Vietnam-focused messaging platform with Bot API.","hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts.*.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.accounts.*.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalo.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalo.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo Personal","help":"Zalo personal account via QR code login.","hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.profile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} -{"recordType":"path","path":"channels.zalouser.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.profile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.zalouser.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp","help":"works with your own number; recommend a separate phone + eSIM.","hasChildren":false} +{"recordType":"path","path":"channels.zalo","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo","help":"Vietnam-focused messaging platform with Bot API.","hasChildren":false} +{"recordType":"path","path":"channels.zalouser","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo Personal","help":"Zalo personal account via QR code login.","hasChildren":false} {"recordType":"path","path":"cli","kind":"core","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"CLI","help":"CLI presentation controls for local command output behavior such as banner and tagline style. Use this section to keep startup output aligned with operator preference without changing runtime behavior.","hasChildren":true} {"recordType":"path","path":"cli.banner","kind":"core","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"CLI Banner","help":"CLI startup banner controls for title/version line and tagline style behavior. Keep banner enabled for fast version/context checks, then tune tagline mode to your preferred noise level.","hasChildren":true} {"recordType":"path","path":"cli.banner.taglineMode","kind":"core","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"CLI Banner Tagline Mode","help":"Controls tagline style in the CLI startup banner: \"random\" (default) picks from the rotating tagline pool, \"default\" always shows the neutral default tagline, and \"off\" hides tagline text while keeping the banner version line.","hasChildren":false} diff --git a/src/agents/sandbox-merge.test.ts b/src/agents/sandbox-merge.test.ts index 74270101..8b7ab490 100644 --- a/src/agents/sandbox-merge.test.ts +++ b/src/agents/sandbox-merge.test.ts @@ -166,6 +166,69 @@ describe("sandbox config merges", () => { expect(sshShared.target).toBe("global@example.com:22"); }); + it("defaults sandbox compute config to local provider with fallback enabled", () => { + const resolved = resolveSandboxConfigForAgent(); + expect(resolved.compute).toEqual({ + provider: "local", + fallbackToLocalOnHostedFailure: true, + hosted: {}, + }); + }); + + it("routes hosted compute providers to ssh by default and applies provider ssh overrides", () => { + const resolved = resolveSandboxConfigForAgent({ + agents: { + defaults: { + sandbox: { + mode: "all", + ssh: { target: "global@example.com:22" }, + compute: { + provider: "aws", + hosted: { + aws: { target: "ec2-user@aws-host:2222" }, + }, + }, + }, + }, + }, + }); + + expect(resolved.compute?.provider).toBe("aws"); + expect(resolved.backend).toBe("ssh"); + expect(resolved.ssh.target).toBe("ec2-user@aws-host:2222"); + }); + + it("ignores agent compute overrides under shared scope", () => { + const resolved = resolveSandboxConfigForAgent( + { + agents: { + defaults: { + sandbox: { + mode: "all", + scope: "shared", + compute: { + provider: "local", + }, + }, + }, + list: [ + { + id: "main", + sandbox: { + compute: { + provider: "digitalocean", + }, + }, + }, + ], + }, + }, + "main", + ); + expect(resolved.compute?.provider).toBe("local"); + expect(resolved.backend).toBe("docker"); + }); + it("defaults sandbox backend to docker", () => { expect(resolveSandboxConfigForAgent().backend).toBe("docker"); }); diff --git a/src/agents/sandbox.resolveSandboxContext.test.ts b/src/agents/sandbox.resolveSandboxContext.test.ts index 0fa62a36..66e0d515 100644 --- a/src/agents/sandbox.resolveSandboxContext.test.ts +++ b/src/agents/sandbox.resolveSandboxContext.test.ts @@ -107,6 +107,7 @@ describe("resolveSandboxContext", () => { const cfg: OpenClawConfig = { agents: { defaults: { + skipBootstrap: true, sandbox: { mode: "all", backend: "test-backend", scope: "session" }, }, }, diff --git a/src/agents/sandbox/config.ts b/src/agents/sandbox/config.ts index c5bd29e9..01a2bab7 100644 --- a/src/agents/sandbox/config.ts +++ b/src/agents/sandbox/config.ts @@ -1,5 +1,9 @@ import type { OpenClawConfig } from "../../config/config.js"; -import type { SandboxSshSettings } from "../../config/types.sandbox.js"; +import type { + SandboxComputeHostedProviderSettings, + SandboxComputeSettings, + SandboxSshSettings, +} from "../../config/types.sandbox.js"; import { normalizeSecretInputString } from "../../config/types.secrets.js"; import { resolveAgentConfig } from "../agent-scope.js"; import { @@ -20,6 +24,9 @@ import { import { resolveSandboxToolPolicyForAgent } from "./tool-policy.js"; import type { SandboxBrowserConfig, + SandboxComputeConfig, + SandboxComputeHostedProviderConfig, + SandboxComputeProviderId, SandboxConfig, SandboxDockerConfig, SandboxPruneConfig, @@ -35,6 +42,8 @@ export const DANGEROUS_SANDBOX_DOCKER_BOOLEAN_KEYS = [ const DEFAULT_SANDBOX_SSH_COMMAND = "ssh"; const DEFAULT_SANDBOX_SSH_WORKSPACE_ROOT = "/tmp/openclaw-sandboxes"; +const DEFAULT_SANDBOX_COMPUTE_PROVIDER: SandboxComputeProviderId = "local"; +const DEFAULT_SANDBOX_COMPUTE_HOSTED_FALLBACK_TO_LOCAL = true; type DangerousSandboxDockerBooleanKey = (typeof DANGEROUS_SANDBOX_DOCKER_BOOLEAN_KEYS)[number]; type DangerousSandboxDockerBooleans = Pick; @@ -187,6 +196,131 @@ function normalizeRemoteRoot(value: string | undefined, fallback: string): strin return posix.replace(/\/+$/g, "") || "/"; } +function resolveSandboxComputeHostedProviderConfig(params: { + globalHosted?: Partial; + agentHosted?: Partial; +}): SandboxComputeHostedProviderConfig | undefined { + const globalHosted = params.globalHosted; + const agentHosted = params.agentHosted; + const target = normalizeOptionalString(agentHosted?.target ?? globalHosted?.target); + const command = normalizeOptionalString(agentHosted?.command ?? globalHosted?.command); + const workspaceRootRaw = agentHosted?.workspaceRoot ?? globalHosted?.workspaceRoot; + const workspaceRoot = + workspaceRootRaw !== undefined + ? normalizeRemoteRoot(workspaceRootRaw, DEFAULT_SANDBOX_SSH_WORKSPACE_ROOT) + : undefined; + const strictHostKeyChecking = + agentHosted?.strictHostKeyChecking ?? globalHosted?.strictHostKeyChecking; + const updateHostKeys = agentHosted?.updateHostKeys ?? globalHosted?.updateHostKeys; + const identityFile = normalizeOptionalString(agentHosted?.identityFile ?? globalHosted?.identityFile); + const certificateFile = normalizeOptionalString( + agentHosted?.certificateFile ?? globalHosted?.certificateFile, + ); + const knownHostsFile = normalizeOptionalString( + agentHosted?.knownHostsFile ?? globalHosted?.knownHostsFile, + ); + const identityData = normalizeSecretInputString(agentHosted?.identityData ?? globalHosted?.identityData); + const certificateData = normalizeSecretInputString( + agentHosted?.certificateData ?? globalHosted?.certificateData, + ); + const knownHostsData = normalizeSecretInputString( + agentHosted?.knownHostsData ?? globalHosted?.knownHostsData, + ); + const resolved: SandboxComputeHostedProviderConfig = { + target, + command, + workspaceRoot, + strictHostKeyChecking, + updateHostKeys, + identityFile, + certificateFile, + knownHostsFile, + identityData, + certificateData, + knownHostsData, + }; + return Object.values(resolved).some((value) => value !== undefined) ? resolved : undefined; +} + +export function resolveSandboxComputeConfig(params: { + scope: SandboxScope; + globalCompute?: Partial; + agentCompute?: Partial; +}): SandboxComputeConfig { + const agentCompute = params.scope === "shared" ? undefined : params.agentCompute; + const globalCompute = params.globalCompute; + return { + provider: + agentCompute?.provider ?? globalCompute?.provider ?? DEFAULT_SANDBOX_COMPUTE_PROVIDER, + fallbackToLocalOnHostedFailure: + agentCompute?.fallbackToLocalOnHostedFailure ?? + globalCompute?.fallbackToLocalOnHostedFailure ?? + DEFAULT_SANDBOX_COMPUTE_HOSTED_FALLBACK_TO_LOCAL, + hosted: { + eigencloud: resolveSandboxComputeHostedProviderConfig({ + globalHosted: globalCompute?.hosted?.eigencloud, + agentHosted: agentCompute?.hosted?.eigencloud, + }), + aws: resolveSandboxComputeHostedProviderConfig({ + globalHosted: globalCompute?.hosted?.aws, + agentHosted: agentCompute?.hosted?.aws, + }), + digitalocean: resolveSandboxComputeHostedProviderConfig({ + globalHosted: globalCompute?.hosted?.digitalocean, + agentHosted: agentCompute?.hosted?.digitalocean, + }), + }, + }; +} + +function resolveSandboxBackendFromCompute(params: { + provider: SandboxComputeProviderId; + configuredBackend?: string; +}): string { + const configuredBackend = params.configuredBackend?.trim(); + if (configuredBackend) { + return configuredBackend; + } + return params.provider === "local" ? "docker" : "ssh"; +} + +function resolveHostedComputeProviderSshOverride( + compute: SandboxComputeConfig, +): SandboxComputeHostedProviderConfig | undefined { + switch (compute.provider) { + case "eigencloud": + return compute.hosted.eigencloud; + case "aws": + return compute.hosted.aws; + case "digitalocean": + return compute.hosted.digitalocean; + default: + return undefined; + } +} + +function mergeSandboxSshConfigWithHostedOverride( + base: SandboxSshConfig, + override?: SandboxComputeHostedProviderConfig, +): SandboxSshConfig { + if (!override) { + return base; + } + return { + target: override.target ?? base.target, + command: override.command ?? base.command, + workspaceRoot: override.workspaceRoot ?? base.workspaceRoot, + strictHostKeyChecking: override.strictHostKeyChecking ?? base.strictHostKeyChecking, + updateHostKeys: override.updateHostKeys ?? base.updateHostKeys, + identityFile: override.identityFile ?? base.identityFile, + certificateFile: override.certificateFile ?? base.certificateFile, + knownHostsFile: override.knownHostsFile ?? base.knownHostsFile, + identityData: override.identityData ?? base.identityData, + certificateData: override.certificateData ?? base.certificateData, + knownHostsData: override.knownHostsData ?? base.knownHostsData, + }; +} + export function resolveSandboxSshConfig(params: { scope: SandboxScope; globalSsh?: Partial; @@ -240,10 +374,26 @@ export function resolveSandboxConfigForAgent( }); const toolPolicy = resolveSandboxToolPolicyForAgent(cfg, agentId); + const compute = resolveSandboxComputeConfig({ + scope, + globalCompute: agent?.compute, + agentCompute: agentSandbox?.compute, + }); + const ssh = mergeSandboxSshConfigWithHostedOverride( + resolveSandboxSshConfig({ + scope, + globalSsh: agent?.ssh, + agentSsh: agentSandbox?.ssh, + }), + resolveHostedComputeProviderSshOverride(compute), + ); return { mode: agentSandbox?.mode ?? agent?.mode ?? "off", - backend: agentSandbox?.backend?.trim() || agent?.backend?.trim() || "docker", + backend: resolveSandboxBackendFromCompute({ + provider: compute.provider, + configuredBackend: agentSandbox?.backend ?? agent?.backend, + }), scope, workspaceAccess: agentSandbox?.workspaceAccess ?? agent?.workspaceAccess ?? "none", workspaceRoot: @@ -253,11 +403,8 @@ export function resolveSandboxConfigForAgent( globalDocker: agent?.docker, agentDocker: agentSandbox?.docker, }), - ssh: resolveSandboxSshConfig({ - scope, - globalSsh: agent?.ssh, - agentSsh: agentSandbox?.ssh, - }), + ssh, + compute, browser: resolveSandboxBrowserConfig({ scope, globalBrowser: agent?.browser, diff --git a/src/agents/sandbox/context.compute-fallback.test.ts b/src/agents/sandbox/context.compute-fallback.test.ts new file mode 100644 index 00000000..6ec4ae28 --- /dev/null +++ b/src/agents/sandbox/context.compute-fallback.test.ts @@ -0,0 +1,100 @@ +import { describe, expect, it } from "vitest"; +import type { OpenClawConfig } from "../../config/config.js"; +import { registerSandboxBackend } from "./backend.js"; +import { resolveSandboxContext } from "./context.js"; + +function createStaticBackend(id: string, runtimeId: string) { + return async () => ({ + id, + runtimeId, + runtimeLabel: runtimeId, + workdir: "/workspace", + buildExecSpec: async () => ({ + argv: [id, "exec"], + env: process.env, + stdinMode: "pipe-closed" as const, + }), + runShellCommand: async () => ({ + stdout: Buffer.alloc(0), + stderr: Buffer.alloc(0), + code: 0, + }), + }); +} + +describe("sandbox compute fallback routing", () => { + it("falls back to local backend when hosted provider fails and fallback is enabled", async () => { + const restoreHosted = registerSandboxBackend("ssh", async () => { + throw new Error("hosted backend failed"); + }); + const restoreDocker = registerSandboxBackend("docker", createStaticBackend("docker", "local-ok")); + try { + const cfg: OpenClawConfig = { + agents: { + defaults: { + skipBootstrap: true, + sandbox: { + mode: "all", + scope: "session", + compute: { + provider: "eigencloud", + fallbackToLocalOnHostedFailure: true, + hosted: { + eigencloud: { target: "ubuntu@hosted-target:22" }, + }, + }, + }, + }, + }, + }; + + const result = await resolveSandboxContext({ + config: cfg, + sessionKey: "agent:worker:task", + workspaceDir: "/tmp/openclaw-test", + }); + + expect(result?.backendId).toBe("docker"); + expect(result?.runtimeId).toBe("local-ok"); + } finally { + restoreDocker(); + restoreHosted(); + } + }); + + it("returns hosted failure when fallback is disabled", async () => { + const restoreHosted = registerSandboxBackend("ssh", async () => { + throw new Error("hosted backend failed"); + }); + try { + const cfg: OpenClawConfig = { + agents: { + defaults: { + skipBootstrap: true, + sandbox: { + mode: "all", + scope: "session", + compute: { + provider: "aws", + fallbackToLocalOnHostedFailure: false, + hosted: { + aws: { target: "ec2-user@hosted-target:22" }, + }, + }, + }, + }, + }, + }; + + await expect( + resolveSandboxContext({ + config: cfg, + sessionKey: "agent:worker:task", + workspaceDir: "/tmp/openclaw-test", + }), + ).rejects.toThrow("hosted backend failed"); + } finally { + restoreHosted(); + } + }); +}); diff --git a/src/agents/sandbox/context.ts b/src/agents/sandbox/context.ts index 031b7c45..cbacc0f7 100644 --- a/src/agents/sandbox/context.ts +++ b/src/agents/sandbox/context.ts @@ -15,7 +15,12 @@ import { maybePruneSandboxes } from "./prune.js"; import { updateRegistry } from "./registry.js"; import { resolveSandboxRuntimeStatus } from "./runtime-status.js"; import { resolveSandboxScopeKey, resolveSandboxWorkspaceDir } from "./shared.js"; -import type { SandboxContext, SandboxDockerConfig, SandboxWorkspaceInfo } from "./types.js"; +import type { + SandboxConfig, + SandboxContext, + SandboxDockerConfig, + SandboxWorkspaceInfo, +} from "./types.js"; import { ensureSandboxWorkspace } from "./workspace.js"; async function ensureSandboxWorkspaceLayout(params: { @@ -106,16 +111,28 @@ function resolveSandboxSession(params: { config?: OpenClawConfig; sessionKey?: s return { rawSessionKey, runtime, cfg }; } -export async function resolveSandboxContext(params: { +function formatSandboxError(error: unknown): string { + if (error instanceof Error) { + return error.message; + } + try { + return JSON.stringify(error); + } catch { + return String(error); + } +} + +function isHostedComputeProvider(provider: string): provider is "eigencloud" | "aws" | "digitalocean" { + return provider === "eigencloud" || provider === "aws" || provider === "digitalocean"; +} + +async function resolveSandboxContextWithConfig(params: { config?: OpenClawConfig; - sessionKey?: string; workspaceDir?: string; -}): Promise { - const resolved = resolveSandboxSession(params); - if (!resolved) { - return null; - } - const { rawSessionKey, cfg } = resolved; + rawSessionKey: string; + cfg: SandboxConfig; +}): Promise { + const { rawSessionKey, cfg } = params; await maybePruneSandboxes(cfg); @@ -164,8 +181,7 @@ export async function resolveSandboxContext(params: { const ensured = await ensureBrowserControlAuth({ cfg: cfgForAuth }); browserAuth = ensured.auth; } catch (error) { - const message = error instanceof Error ? error.message : JSON.stringify(error); - defaultRuntime.error?.(`Sandbox browser auth ensure failed: ${message}`); + defaultRuntime.error?.(`Sandbox browser auth ensure failed: ${formatSandboxError(error)}`); } return browserAuth; })() @@ -212,6 +228,69 @@ export async function resolveSandboxContext(params: { return sandboxContext; } +export async function resolveSandboxContext(params: { + config?: OpenClawConfig; + sessionKey?: string; + workspaceDir?: string; +}): Promise { + const resolved = resolveSandboxSession(params); + if (!resolved) { + return null; + } + const { rawSessionKey, cfg } = resolved; + const computeProvider = cfg.compute?.provider ?? "local"; + if (!isHostedComputeProvider(computeProvider)) { + return await resolveSandboxContextWithConfig({ + config: params.config, + workspaceDir: params.workspaceDir, + rawSessionKey, + cfg, + }); + } + + try { + return await resolveSandboxContextWithConfig({ + config: params.config, + workspaceDir: params.workspaceDir, + rawSessionKey, + cfg, + }); + } catch (hostedError) { + const fallbackToLocal = cfg.compute?.fallbackToLocalOnHostedFailure ?? true; + if (!fallbackToLocal) { + throw hostedError; + } + defaultRuntime.warn?.( + `Sandbox compute provider "${computeProvider}" failed; retrying with local backend.`, + ); + const fallbackCfg: SandboxConfig = { + ...cfg, + backend: "docker", + compute: { + provider: "local", + fallbackToLocalOnHostedFailure: fallbackToLocal, + hosted: cfg.compute?.hosted ?? {}, + }, + }; + try { + return await resolveSandboxContextWithConfig({ + config: params.config, + workspaceDir: params.workspaceDir, + rawSessionKey, + cfg: fallbackCfg, + }); + } catch (fallbackError) { + throw new Error( + [ + `Sandbox hosted provider "${computeProvider}" failed and local fallback also failed.`, + `Hosted error: ${formatSandboxError(hostedError)}`, + `Local fallback error: ${formatSandboxError(fallbackError)}`, + ].join("\n"), + ); + } + } +} + export async function ensureSandboxWorkspaceForSession(params: { config?: OpenClawConfig; sessionKey?: string; diff --git a/src/agents/sandbox/types.ts b/src/agents/sandbox/types.ts index 482ce6a9..9fe2891d 100644 --- a/src/agents/sandbox/types.ts +++ b/src/agents/sandbox/types.ts @@ -65,6 +65,32 @@ export type SandboxSshConfig = { knownHostsData?: string; }; +export type SandboxComputeProviderId = "local" | "eigencloud" | "aws" | "digitalocean"; + +export type SandboxComputeHostedProviderConfig = { + target?: string; + command?: string; + workspaceRoot?: string; + strictHostKeyChecking?: boolean; + updateHostKeys?: boolean; + identityFile?: string; + certificateFile?: string; + knownHostsFile?: string; + identityData?: string; + certificateData?: string; + knownHostsData?: string; +}; + +export type SandboxComputeConfig = { + provider: SandboxComputeProviderId; + fallbackToLocalOnHostedFailure: boolean; + hosted: { + eigencloud?: SandboxComputeHostedProviderConfig; + aws?: SandboxComputeHostedProviderConfig; + digitalocean?: SandboxComputeHostedProviderConfig; + }; +}; + export type SandboxScope = "session" | "agent" | "shared"; export type SandboxConfig = { @@ -75,6 +101,7 @@ export type SandboxConfig = { workspaceRoot: string; docker: SandboxDockerConfig; ssh: SandboxSshConfig; + compute?: SandboxComputeConfig; browser: SandboxBrowserConfig; tools: SandboxToolPolicy; prune: SandboxPruneConfig; diff --git a/src/config/config.sandbox-docker.test.ts b/src/config/config.sandbox-docker.test.ts index 56d041b1..7be38b44 100644 --- a/src/config/config.sandbox-docker.test.ts +++ b/src/config/config.sandbox-docker.test.ts @@ -179,6 +179,79 @@ describe("sandbox docker config", () => { }); }); +describe("sandbox compute config", () => { + it("accepts hosted provider selection when hosted target is configured", () => { + const res = validateConfigObject({ + agents: { + defaults: { + sandbox: { + compute: { + provider: "eigencloud", + hosted: { + eigencloud: { + target: "ubuntu@cloud-host:22", + }, + }, + }, + }, + }, + }, + }); + expect(res.ok).toBe(true); + if (res.ok) { + expect(res.config.agents?.defaults?.sandbox?.compute?.provider).toBe("eigencloud"); + } + }); + + it("accepts hosted provider selection when sandbox.ssh.target is set", () => { + const res = validateConfigObject({ + agents: { + defaults: { + sandbox: { + ssh: { + target: "ubuntu@shared-host:22", + }, + compute: { + provider: "aws", + }, + }, + }, + }, + }); + expect(res.ok).toBe(true); + }); + + it("rejects hosted provider selection without a hosted or ssh target", () => { + const res = validateConfigObject({ + agents: { + defaults: { + sandbox: { + compute: { + provider: "digitalocean", + }, + }, + }, + }, + }); + expect(res.ok).toBe(false); + }); + + it("rejects unknown compute providers", () => { + const res = validateConfigObject({ + agents: { + defaults: { + sandbox: { + compute: { + provider: "azure", + }, + }, + }, + }, + }); + expect(res.ok).toBe(false); + }); +}); + describe("sandbox browser binds config", () => { it("accepts binds array in sandbox.browser config", () => { const res = validateConfigObject({ diff --git a/src/config/types.agents-shared.ts b/src/config/types.agents-shared.ts index 3351d990..3936358d 100644 --- a/src/config/types.agents-shared.ts +++ b/src/config/types.agents-shared.ts @@ -1,5 +1,6 @@ import type { SandboxBrowserSettings, + SandboxComputeSettings, SandboxDockerSettings, SandboxPruneSettings, SandboxSshSettings, @@ -35,6 +36,8 @@ export type AgentSandboxConfig = { docker?: SandboxDockerSettings; /** SSH-specific sandbox settings. */ ssh?: SandboxSshSettings; + /** Compute-provider routing and hosted-provider settings. */ + compute?: SandboxComputeSettings; /** Optional sandboxed browser settings. */ browser?: SandboxBrowserSettings; /** Auto-prune sandbox settings. */ diff --git a/src/config/types.sandbox.ts b/src/config/types.sandbox.ts index 04128e2f..899d0763 100644 --- a/src/config/types.sandbox.ts +++ b/src/config/types.sandbox.ts @@ -121,3 +121,43 @@ export type SandboxSshSettings = { /** Inline or SecretRef-backed known_hosts contents. */ knownHostsData?: SecretInput; }; + +export type SandboxComputeProviderId = "local" | "eigencloud" | "aws" | "digitalocean"; + +export type SandboxComputeHostedProviderSettings = { + /** SSH target in user@host[:port] form for this hosted provider runtime. */ + target?: string; + /** SSH client command override. */ + command?: string; + /** Absolute remote root used for per-scope workspaces. */ + workspaceRoot?: string; + /** Enforce host-key verification. Default inherited from sandbox.ssh. */ + strictHostKeyChecking?: boolean; + /** Allow OpenSSH host-key updates. Default inherited from sandbox.ssh. */ + updateHostKeys?: boolean; + /** Existing private key path on the host. */ + identityFile?: string; + /** Existing SSH certificate path on the host. */ + certificateFile?: string; + /** Existing known_hosts file path on the host. */ + knownHostsFile?: string; + /** Inline or SecretRef-backed private key contents. */ + identityData?: SecretInput; + /** Inline or SecretRef-backed SSH certificate contents. */ + certificateData?: SecretInput; + /** Inline or SecretRef-backed known_hosts contents. */ + knownHostsData?: SecretInput; +}; + +export type SandboxComputeSettings = { + /** Compute provider routing override for sandbox runtime selection. */ + provider?: SandboxComputeProviderId; + /** When hosted provider setup fails, automatically retry with local runtime. */ + fallbackToLocalOnHostedFailure?: boolean; + /** Hosted provider-specific connection settings. */ + hosted?: { + eigencloud?: SandboxComputeHostedProviderSettings; + aws?: SandboxComputeHostedProviderSettings; + digitalocean?: SandboxComputeHostedProviderSettings; + }; +}; diff --git a/src/config/zod-schema.agent-runtime.ts b/src/config/zod-schema.agent-runtime.ts index 722c5ec9..fea73e71 100644 --- a/src/config/zod-schema.agent-runtime.ts +++ b/src/config/zod-schema.agent-runtime.ts @@ -514,6 +514,46 @@ export const SandboxSshSchema = z .strict() .optional(); +const SandboxComputeProviderSchema = z.union([ + z.literal("local"), + z.literal("eigencloud"), + z.literal("aws"), + z.literal("digitalocean"), +]); + +export const SandboxComputeHostedProviderSchema = z + .object({ + target: z.string().min(1).optional(), + command: z.string().min(1).optional(), + workspaceRoot: z.string().min(1).optional(), + strictHostKeyChecking: z.boolean().optional(), + updateHostKeys: z.boolean().optional(), + identityFile: z.string().min(1).optional(), + certificateFile: z.string().min(1).optional(), + knownHostsFile: z.string().min(1).optional(), + identityData: SecretInputSchema.optional().register(sensitive), + certificateData: SecretInputSchema.optional().register(sensitive), + knownHostsData: SecretInputSchema.optional().register(sensitive), + }) + .strict() + .optional(); + +export const SandboxComputeSchema = z + .object({ + provider: SandboxComputeProviderSchema.optional(), + fallbackToLocalOnHostedFailure: z.boolean().optional(), + hosted: z + .object({ + eigencloud: SandboxComputeHostedProviderSchema, + aws: SandboxComputeHostedProviderSchema, + digitalocean: SandboxComputeHostedProviderSchema, + }) + .strict() + .optional(), + }) + .strict() + .optional(); + export const AgentSandboxSchema = z .object({ mode: z.union([z.literal("off"), z.literal("non-main"), z.literal("all")]).optional(), @@ -525,6 +565,7 @@ export const AgentSandboxSchema = z workspaceRoot: z.string().optional(), docker: SandboxDockerSchema, ssh: SandboxSshSchema, + compute: SandboxComputeSchema, browser: SandboxBrowserSchema, prune: SandboxPruneSchema, }) @@ -543,6 +584,22 @@ export const AgentSandboxSchema = z "Set sandbox.docker.dangerouslyAllowContainerNamespaceJoin=true only when you fully trust this runtime.", }); } + + const selectedComputeProvider = data.compute?.provider ?? "local"; + if (selectedComputeProvider !== "local") { + const hostedProviderConfig = data.compute?.hosted?.[selectedComputeProvider]; + const hostedTarget = hostedProviderConfig?.target?.trim(); + const sshTarget = data.ssh?.target?.trim(); + if (!hostedTarget && !sshTarget) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + path: ["compute", "hosted", selectedComputeProvider, "target"], + message: + `Hosted sandbox provider "${selectedComputeProvider}" requires a target in ` + + `sandbox.compute.hosted.${selectedComputeProvider}.target or sandbox.ssh.target.`, + }); + } + } }) .optional(); From 9068a4d2fe17582d1733e660504d58fb6b240a75 Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Thu, 9 Apr 2026 20:25:16 +0100 Subject: [PATCH 08/11] feat(onboard): add hosted compute provider setup and fallback checks --- src/agents/sandbox/compute/providers/aws.ts | 3 + .../sandbox/compute/providers/digitalocean.ts | 3 + .../sandbox/compute/providers/eigencloud.ts | 3 + .../sandbox/compute/providers/shared.ts | 109 +++++++++++ src/agents/sandbox/compute/registry.test.ts | 97 ++++++++++ src/agents/sandbox/compute/registry.ts | 99 ++++++++++ src/agents/sandbox/compute/types.ts | 36 ++++ .../sandbox/context.compute-fallback.test.ts | 90 ++++++++- src/agents/sandbox/context.ts | 49 ++++- src/cli/program/register.onboard.test.ts | 27 +++ src/cli/program/register.onboard.ts | 31 +++ .../onboard-non-interactive.gateway.test.ts | 94 +++++----- src/commands/onboard-non-interactive/local.ts | 26 +++ .../onboard-non-interactive/local/output.ts | 2 + src/commands/onboard-sandbox-compute.test.ts | 116 ++++++++++++ src/commands/onboard-sandbox-compute.ts | 176 ++++++++++++++++++ src/commands/onboard-types.ts | 7 + src/commands/onboard.test.ts | 34 ++++ src/commands/onboard.ts | 24 +++ src/wizard/setup.compute-provider.test.ts | 96 ++++++++++ src/wizard/setup.compute-provider.ts | 131 +++++++++++++ src/wizard/setup.ts | 6 + 22 files changed, 1201 insertions(+), 58 deletions(-) create mode 100644 src/agents/sandbox/compute/providers/aws.ts create mode 100644 src/agents/sandbox/compute/providers/digitalocean.ts create mode 100644 src/agents/sandbox/compute/providers/eigencloud.ts create mode 100644 src/agents/sandbox/compute/providers/shared.ts create mode 100644 src/agents/sandbox/compute/registry.test.ts create mode 100644 src/agents/sandbox/compute/registry.ts create mode 100644 src/agents/sandbox/compute/types.ts create mode 100644 src/commands/onboard-sandbox-compute.test.ts create mode 100644 src/commands/onboard-sandbox-compute.ts create mode 100644 src/wizard/setup.compute-provider.test.ts create mode 100644 src/wizard/setup.compute-provider.ts diff --git a/src/agents/sandbox/compute/providers/aws.ts b/src/agents/sandbox/compute/providers/aws.ts new file mode 100644 index 00000000..d381873b --- /dev/null +++ b/src/agents/sandbox/compute/providers/aws.ts @@ -0,0 +1,3 @@ +import { createHostedSshComputeProvider } from "./shared.js"; + +export const awsHostedComputeProvider = createHostedSshComputeProvider("aws"); diff --git a/src/agents/sandbox/compute/providers/digitalocean.ts b/src/agents/sandbox/compute/providers/digitalocean.ts new file mode 100644 index 00000000..0f61718d --- /dev/null +++ b/src/agents/sandbox/compute/providers/digitalocean.ts @@ -0,0 +1,3 @@ +import { createHostedSshComputeProvider } from "./shared.js"; + +export const digitaloceanHostedComputeProvider = createHostedSshComputeProvider("digitalocean"); diff --git a/src/agents/sandbox/compute/providers/eigencloud.ts b/src/agents/sandbox/compute/providers/eigencloud.ts new file mode 100644 index 00000000..92324b74 --- /dev/null +++ b/src/agents/sandbox/compute/providers/eigencloud.ts @@ -0,0 +1,3 @@ +import { createHostedSshComputeProvider } from "./shared.js"; + +export const eigencloudHostedComputeProvider = createHostedSshComputeProvider("eigencloud"); diff --git a/src/agents/sandbox/compute/providers/shared.ts b/src/agents/sandbox/compute/providers/shared.ts new file mode 100644 index 00000000..0d4e5aab --- /dev/null +++ b/src/agents/sandbox/compute/providers/shared.ts @@ -0,0 +1,109 @@ +import { performance } from "node:perf_hooks"; +import type { + HostedSandboxComputeProvider, + HostedSandboxComputeProviderId, + HostedSandboxHealthcheckParams, + HostedSandboxHealthcheckResult, + HostedSandboxProvisionParams, + HostedSandboxProvisionResult, +} from "../types.js"; + +function resolveHostedTarget(params: HostedSandboxProvisionParams): string { + const providerTarget = params.cfg.compute?.hosted?.[params.providerId]?.target?.trim(); + const sshTarget = params.cfg.ssh.target?.trim(); + const target = providerTarget || sshTarget; + if (!target) { + throw new Error( + [ + `Hosted sandbox provider "${params.providerId}" requires an SSH target.`, + `Set sandbox.compute.hosted.${params.providerId}.target or sandbox.ssh.target.`, + ].join(" "), + ); + } + return target; +} + +function resolveHealthcheckFailureDetail(params: { + code: number; + stderr: Buffer; + stdout: Buffer; +}): string { + const stderrText = params.stderr.toString("utf8").trim(); + const stdoutText = params.stdout.toString("utf8").trim(); + const lines = [`exit code ${params.code}`]; + if (stderrText) { + lines.push(`stderr: ${stderrText}`); + } + if (stdoutText) { + lines.push(`stdout: ${stdoutText}`); + } + return lines.join("; "); +} + +async function runHostedHealthcheck( + params: HostedSandboxHealthcheckParams, +): Promise { + const startedAt = performance.now(); + const backend = params.sandbox.backend; + if (!backend) { + return { + ok: false, + detail: "missing sandbox backend handle", + durationMs: Math.round(performance.now() - startedAt), + }; + } + try { + const result = await backend.runShellCommand({ + script: "printf 'openclaw-sandbox-healthcheck\\n'", + allowFailure: true, + }); + const durationMs = Math.round(performance.now() - startedAt); + if (result.code === 0) { + return { + ok: true, + durationMs, + }; + } + return { + ok: false, + detail: resolveHealthcheckFailureDetail(result), + durationMs, + }; + } catch (error) { + return { + ok: false, + detail: error instanceof Error ? error.message : String(error), + durationMs: Math.round(performance.now() - startedAt), + }; + } +} + +function validateHostedBackend(params: HostedSandboxProvisionParams): void { + if (params.cfg.backend !== "ssh") { + throw new Error( + [ + `Hosted sandbox provider "${params.providerId}" requires the SSH backend.`, + `Resolved backend: "${params.cfg.backend}".`, + ].join(" "), + ); + } +} + +export function createHostedSshComputeProvider( + id: HostedSandboxComputeProviderId, +): HostedSandboxComputeProvider { + return { + id, + async provision(params): Promise { + validateHostedBackend(params); + return { + providerId: id, + cfg: params.cfg, + target: resolveHostedTarget(params), + }; + }, + async healthcheck(params): Promise { + return await runHostedHealthcheck(params); + }, + }; +} diff --git a/src/agents/sandbox/compute/registry.test.ts b/src/agents/sandbox/compute/registry.test.ts new file mode 100644 index 00000000..37546f74 --- /dev/null +++ b/src/agents/sandbox/compute/registry.test.ts @@ -0,0 +1,97 @@ +import { describe, expect, it, vi } from "vitest"; +import type { SandboxContext } from "../types.js"; +import { resolveSandboxConfigForAgent } from "../config.js"; +import { + healthcheckHostedSandboxCompute, + isHostedSandboxComputeProviderId, + provisionHostedSandboxCompute, +} from "./registry.js"; + +describe("sandbox compute registry", () => { + it("recognizes hosted provider ids", () => { + expect(isHostedSandboxComputeProviderId("eigencloud")).toBe(true); + expect(isHostedSandboxComputeProviderId("aws")).toBe(true); + expect(isHostedSandboxComputeProviderId("digitalocean")).toBe(true); + expect(isHostedSandboxComputeProviderId("local")).toBe(false); + }); + + it("provisions hosted compute providers with resolved targets", async () => { + const runtime = { + log: vi.fn(), + error: vi.fn(), + exit: vi.fn(), + }; + const cfg = resolveSandboxConfigForAgent({ + agents: { + defaults: { + sandbox: { + mode: "all", + scope: "session", + compute: { + provider: "aws", + hosted: { + aws: { target: "ec2-user@aws-host:22" }, + }, + }, + }, + }, + }, + }); + + const result = await provisionHostedSandboxCompute({ + providerId: "aws", + cfg, + sessionKey: "agent:worker:task", + runtime, + }); + + expect(result.providerId).toBe("aws"); + expect(result.target).toBe("ec2-user@aws-host:22"); + expect(runtime.log).toHaveBeenCalled(); + }); + + it("reports healthcheck failures with details", async () => { + const runtime = { + log: vi.fn(), + error: vi.fn(), + exit: vi.fn(), + }; + const cfg = resolveSandboxConfigForAgent({ + agents: { + defaults: { + sandbox: { + mode: "all", + scope: "session", + compute: { + provider: "digitalocean", + hosted: { + digitalocean: { target: "root@do-host:22" }, + }, + }, + }, + }, + }, + }); + + const sandbox = { + backend: { + runShellCommand: async () => ({ + stdout: Buffer.alloc(0), + stderr: Buffer.from("no route"), + code: 1, + }), + }, + } as unknown as SandboxContext; + + const result = await healthcheckHostedSandboxCompute({ + providerId: "digitalocean", + cfg, + sandbox, + runtime, + }); + + expect(result.ok).toBe(false); + expect(result.detail).toContain("exit code 1"); + expect(runtime.error).toHaveBeenCalled(); + }); +}); diff --git a/src/agents/sandbox/compute/registry.ts b/src/agents/sandbox/compute/registry.ts new file mode 100644 index 00000000..a8c99fd0 --- /dev/null +++ b/src/agents/sandbox/compute/registry.ts @@ -0,0 +1,99 @@ +import { defaultRuntime, type RuntimeEnv } from "../../../runtime.js"; +import { awsHostedComputeProvider } from "./providers/aws.js"; +import { digitaloceanHostedComputeProvider } from "./providers/digitalocean.js"; +import { eigencloudHostedComputeProvider } from "./providers/eigencloud.js"; +import type { + HostedSandboxComputeProvider, + HostedSandboxComputeProviderId, + HostedSandboxHealthcheckParams, + HostedSandboxHealthcheckResult, + HostedSandboxProvisionParams, + HostedSandboxProvisionResult, +} from "./types.js"; + +const HOSTED_SANDBOX_COMPUTE_PROVIDERS = new Map< + HostedSandboxComputeProviderId, + HostedSandboxComputeProvider +>(); + +export function isHostedSandboxComputeProviderId( + value: string, +): value is HostedSandboxComputeProviderId { + return value === "eigencloud" || value === "aws" || value === "digitalocean"; +} + +export function registerHostedSandboxComputeProvider(provider: HostedSandboxComputeProvider) { + HOSTED_SANDBOX_COMPUTE_PROVIDERS.set(provider.id, provider); + return () => { + if (HOSTED_SANDBOX_COMPUTE_PROVIDERS.get(provider.id) === provider) { + HOSTED_SANDBOX_COMPUTE_PROVIDERS.delete(provider.id); + } + }; +} + +function requireHostedSandboxComputeProvider( + providerId: HostedSandboxComputeProviderId, +): HostedSandboxComputeProvider { + const provider = HOSTED_SANDBOX_COMPUTE_PROVIDERS.get(providerId); + if (provider) { + return provider; + } + throw new Error(`Hosted sandbox compute provider "${providerId}" is not registered.`); +} + +function resolveRuntime(runtime: RuntimeEnv | undefined): RuntimeEnv { + return runtime ?? defaultRuntime; +} + +export async function provisionHostedSandboxCompute(params: { + providerId: HostedSandboxComputeProviderId; + cfg: HostedSandboxProvisionParams["cfg"]; + sessionKey: string; + runtime?: RuntimeEnv; +}): Promise { + const runtime = resolveRuntime(params.runtime); + runtime.log( + `sandbox.compute provision start provider=${params.providerId} session=${params.sessionKey}`, + ); + const provider = requireHostedSandboxComputeProvider(params.providerId); + const result = await provider.provision({ + providerId: params.providerId, + cfg: params.cfg, + sessionKey: params.sessionKey, + runtime, + }); + runtime.log( + `sandbox.compute provision ok provider=${params.providerId} target=${result.target} backend=${result.cfg.backend}`, + ); + return result; +} + +export async function healthcheckHostedSandboxCompute(params: { + providerId: HostedSandboxComputeProviderId; + cfg: HostedSandboxHealthcheckParams["cfg"]; + sandbox: HostedSandboxHealthcheckParams["sandbox"]; + runtime?: RuntimeEnv; +}): Promise { + const runtime = resolveRuntime(params.runtime); + const provider = requireHostedSandboxComputeProvider(params.providerId); + const result = await provider.healthcheck({ + providerId: params.providerId, + cfg: params.cfg, + sandbox: params.sandbox, + runtime, + }); + if (result.ok) { + runtime.log( + `sandbox.compute healthcheck ok provider=${params.providerId} duration_ms=${result.durationMs}`, + ); + } else { + runtime.error( + `sandbox.compute healthcheck failed provider=${params.providerId} duration_ms=${result.durationMs} detail=${result.detail ?? "unknown"}`, + ); + } + return result; +} + +registerHostedSandboxComputeProvider(eigencloudHostedComputeProvider); +registerHostedSandboxComputeProvider(awsHostedComputeProvider); +registerHostedSandboxComputeProvider(digitaloceanHostedComputeProvider); diff --git a/src/agents/sandbox/compute/types.ts b/src/agents/sandbox/compute/types.ts new file mode 100644 index 00000000..8124c722 --- /dev/null +++ b/src/agents/sandbox/compute/types.ts @@ -0,0 +1,36 @@ +import type { RuntimeEnv } from "../../../runtime.js"; +import type { SandboxContext, SandboxConfig, SandboxComputeProviderId } from "../types.js"; + +export type HostedSandboxComputeProviderId = Exclude; + +export type HostedSandboxProvisionParams = { + providerId: HostedSandboxComputeProviderId; + cfg: SandboxConfig; + sessionKey: string; + runtime: RuntimeEnv; +}; + +export type HostedSandboxProvisionResult = { + providerId: HostedSandboxComputeProviderId; + cfg: SandboxConfig; + target: string; +}; + +export type HostedSandboxHealthcheckParams = { + providerId: HostedSandboxComputeProviderId; + cfg: SandboxConfig; + sandbox: SandboxContext; + runtime: RuntimeEnv; +}; + +export type HostedSandboxHealthcheckResult = { + ok: boolean; + detail?: string; + durationMs: number; +}; + +export type HostedSandboxComputeProvider = { + id: HostedSandboxComputeProviderId; + provision(params: HostedSandboxProvisionParams): Promise; + healthcheck(params: HostedSandboxHealthcheckParams): Promise; +}; diff --git a/src/agents/sandbox/context.compute-fallback.test.ts b/src/agents/sandbox/context.compute-fallback.test.ts index 6ec4ae28..35b9a9d2 100644 --- a/src/agents/sandbox/context.compute-fallback.test.ts +++ b/src/agents/sandbox/context.compute-fallback.test.ts @@ -3,7 +3,14 @@ import type { OpenClawConfig } from "../../config/config.js"; import { registerSandboxBackend } from "./backend.js"; import { resolveSandboxContext } from "./context.js"; -function createStaticBackend(id: string, runtimeId: string) { +function createStaticBackend( + id: string, + runtimeId: string, + params?: { + healthcheckCode?: number; + }, +) { + const healthcheckCode = params?.healthcheckCode ?? 0; return async () => ({ id, runtimeId, @@ -16,8 +23,8 @@ function createStaticBackend(id: string, runtimeId: string) { }), runShellCommand: async () => ({ stdout: Buffer.alloc(0), - stderr: Buffer.alloc(0), - code: 0, + stderr: healthcheckCode === 0 ? Buffer.alloc(0) : Buffer.from("healthcheck failed"), + code: healthcheckCode, }), }); } @@ -97,4 +104,81 @@ describe("sandbox compute fallback routing", () => { restoreHosted(); } }); + + it("falls back to local backend when hosted healthcheck fails and fallback is enabled", async () => { + const restoreHosted = registerSandboxBackend( + "ssh", + createStaticBackend("ssh", "hosted-runtime", { healthcheckCode: 1 }), + ); + const restoreDocker = registerSandboxBackend("docker", createStaticBackend("docker", "local-ok")); + try { + const cfg: OpenClawConfig = { + agents: { + defaults: { + skipBootstrap: true, + sandbox: { + mode: "all", + scope: "session", + compute: { + provider: "digitalocean", + fallbackToLocalOnHostedFailure: true, + hosted: { + digitalocean: { target: "root@hosted-target:22" }, + }, + }, + }, + }, + }, + }; + + const result = await resolveSandboxContext({ + config: cfg, + sessionKey: "agent:worker:task", + workspaceDir: "/tmp/openclaw-test", + }); + + expect(result?.backendId).toBe("docker"); + expect(result?.runtimeId).toBe("local-ok"); + } finally { + restoreDocker(); + restoreHosted(); + } + }); + + it("returns healthcheck failure when fallback is disabled", async () => { + const restoreHosted = registerSandboxBackend( + "ssh", + createStaticBackend("ssh", "hosted-runtime", { healthcheckCode: 1 }), + ); + try { + const cfg: OpenClawConfig = { + agents: { + defaults: { + skipBootstrap: true, + sandbox: { + mode: "all", + scope: "session", + compute: { + provider: "digitalocean", + fallbackToLocalOnHostedFailure: false, + hosted: { + digitalocean: { target: "root@hosted-target:22" }, + }, + }, + }, + }, + }, + }; + + await expect( + resolveSandboxContext({ + config: cfg, + sessionKey: "agent:worker:task", + workspaceDir: "/tmp/openclaw-test", + }), + ).rejects.toThrow('Sandbox compute provider "digitalocean" healthcheck failed.'); + } finally { + restoreHosted(); + } + }); }); diff --git a/src/agents/sandbox/context.ts b/src/agents/sandbox/context.ts index cbacc0f7..6a6e8ebe 100644 --- a/src/agents/sandbox/context.ts +++ b/src/agents/sandbox/context.ts @@ -15,6 +15,11 @@ import { maybePruneSandboxes } from "./prune.js"; import { updateRegistry } from "./registry.js"; import { resolveSandboxRuntimeStatus } from "./runtime-status.js"; import { resolveSandboxScopeKey, resolveSandboxWorkspaceDir } from "./shared.js"; +import { + healthcheckHostedSandboxCompute, + isHostedSandboxComputeProviderId, + provisionHostedSandboxCompute, +} from "./compute/registry.js"; import type { SandboxConfig, SandboxContext, @@ -122,10 +127,6 @@ function formatSandboxError(error: unknown): string { } } -function isHostedComputeProvider(provider: string): provider is "eigencloud" | "aws" | "digitalocean" { - return provider === "eigencloud" || provider === "aws" || provider === "digitalocean"; -} - async function resolveSandboxContextWithConfig(params: { config?: OpenClawConfig; workspaceDir?: string; @@ -239,7 +240,7 @@ export async function resolveSandboxContext(params: { } const { rawSessionKey, cfg } = resolved; const computeProvider = cfg.compute?.provider ?? "local"; - if (!isHostedComputeProvider(computeProvider)) { + if (!isHostedSandboxComputeProviderId(computeProvider)) { return await resolveSandboxContextWithConfig({ config: params.config, workspaceDir: params.workspaceDir, @@ -249,18 +250,41 @@ export async function resolveSandboxContext(params: { } try { - return await resolveSandboxContextWithConfig({ + const provisioned = await provisionHostedSandboxCompute({ + providerId: computeProvider, + cfg, + sessionKey: rawSessionKey, + runtime: defaultRuntime, + }); + const hostedSandbox = await resolveSandboxContextWithConfig({ config: params.config, workspaceDir: params.workspaceDir, rawSessionKey, - cfg, + cfg: provisioned.cfg, + }); + const healthcheck = await healthcheckHostedSandboxCompute({ + providerId: computeProvider, + cfg: provisioned.cfg, + sandbox: hostedSandbox, + runtime: defaultRuntime, }); + if (!healthcheck.ok) { + throw new Error( + [ + `Sandbox compute provider "${computeProvider}" healthcheck failed.`, + healthcheck.detail ? `detail: ${healthcheck.detail}` : undefined, + ] + .filter(Boolean) + .join(" "), + ); + } + return hostedSandbox; } catch (hostedError) { const fallbackToLocal = cfg.compute?.fallbackToLocalOnHostedFailure ?? true; if (!fallbackToLocal) { throw hostedError; } - defaultRuntime.warn?.( + defaultRuntime.log?.( `Sandbox compute provider "${computeProvider}" failed; retrying with local backend.`, ); const fallbackCfg: SandboxConfig = { @@ -273,13 +297,20 @@ export async function resolveSandboxContext(params: { }, }; try { - return await resolveSandboxContextWithConfig({ + const fallbackSandbox = await resolveSandboxContextWithConfig({ config: params.config, workspaceDir: params.workspaceDir, rawSessionKey, cfg: fallbackCfg, }); + defaultRuntime.log?.( + `sandbox.compute fallback ok provider=${computeProvider} fallback_provider=local`, + ); + return fallbackSandbox; } catch (fallbackError) { + defaultRuntime.error?.( + `sandbox.compute fallback failed provider=${computeProvider} fallback_provider=local detail=${formatSandboxError(fallbackError)}`, + ); throw new Error( [ `Sandbox hosted provider "${computeProvider}" failed and local fallback also failed.`, diff --git a/src/cli/program/register.onboard.test.ts b/src/cli/program/register.onboard.test.ts index d6876797..e6730b9f 100644 --- a/src/cli/program/register.onboard.test.ts +++ b/src/cli/program/register.onboard.test.ts @@ -170,6 +170,33 @@ describe("registerOnboardCommand", () => { ); }); + it("forwards sandbox compute onboarding flags", async () => { + await runCli([ + "onboard", + "--sandbox-compute-provider", + "aws", + "--sandbox-compute-target", + "ubuntu@aws-host:22", + "--sandbox-compute-workspace-root", + "/srv/openclaw", + "--sandbox-compute-identity-file", + "/home/user/.ssh/id_ed25519", + "--sandbox-compute-fallback", + "off", + ]); + + expect(setupWizardCommandMock).toHaveBeenCalledWith( + expect.objectContaining({ + sandboxComputeProvider: "aws", + sandboxComputeTarget: "ubuntu@aws-host:22", + sandboxComputeWorkspaceRoot: "/srv/openclaw", + sandboxComputeIdentityFile: "/home/user/.ssh/id_ed25519", + sandboxComputeFallback: "off", + }), + runtime, + ); + }); + it("reports errors via runtime on setup wizard command failures", async () => { setupWizardCommandMock.mockRejectedValueOnce(new Error("setup failed")); diff --git a/src/cli/program/register.onboard.ts b/src/cli/program/register.onboard.ts index 3909707f..8cffe163 100644 --- a/src/cli/program/register.onboard.ts +++ b/src/cli/program/register.onboard.ts @@ -8,9 +8,11 @@ import type { GatewayBind, NodeManagerChoice, ResetScope, + SandboxComputeFallbackMode, SecretInputMode, TailscaleMode, } from "../../commands/onboard-types.js"; +import type { SandboxComputeProviderId } from "../../config/types.sandbox.js"; import { setupWizardCommand } from "../../commands/onboard.js"; import { resolveManifestProviderOnboardAuthFlags } from "../../plugins/provider-auth-choices.js"; import { defaultRuntime } from "../../runtime.js"; @@ -123,6 +125,26 @@ export function registerOnboardCommand(program: Command) { "Gateway token SecretRef env var name (token auth; e.g. OPENCLAW_GATEWAY_TOKEN)", ) .option("--gateway-password ", "Gateway password (password auth)") + .option( + "--sandbox-compute-provider ", + "Sandbox compute provider: local|eigencloud|aws|digitalocean", + ) + .option( + "--sandbox-compute-target ", + "Hosted sandbox SSH target (user@host[:port])", + ) + .option( + "--sandbox-compute-workspace-root ", + "Hosted sandbox workspace root override (optional)", + ) + .option( + "--sandbox-compute-identity-file ", + "Hosted sandbox SSH identity file override (optional)", + ) + .option( + "--sandbox-compute-fallback ", + "Hosted sandbox fallback mode: on|off (default: on)", + ) .option("--remote-url ", "Remote Gateway WebSocket URL") .option("--remote-token ", "Remote Gateway token (optional)") .option("--tailscale ", "Tailscale: off|serve|funnel") @@ -179,6 +201,15 @@ export function registerOnboardCommand(program: Command) { gatewayToken: opts.gatewayToken as string | undefined, gatewayTokenRefEnv: opts.gatewayTokenRefEnv as string | undefined, gatewayPassword: opts.gatewayPassword as string | undefined, + sandboxComputeProvider: opts.sandboxComputeProvider as + | SandboxComputeProviderId + | undefined, + sandboxComputeTarget: opts.sandboxComputeTarget as string | undefined, + sandboxComputeWorkspaceRoot: opts.sandboxComputeWorkspaceRoot as string | undefined, + sandboxComputeIdentityFile: opts.sandboxComputeIdentityFile as string | undefined, + sandboxComputeFallback: opts.sandboxComputeFallback as + | SandboxComputeFallbackMode + | undefined, remoteUrl: opts.remoteUrl as string | undefined, remoteToken: opts.remoteToken as string | undefined, tailscale: opts.tailscale as TailscaleMode | undefined, diff --git a/src/commands/onboard-non-interactive.gateway.test.ts b/src/commands/onboard-non-interactive.gateway.test.ts index 3ea1bf15..88167d07 100644 --- a/src/commands/onboard-non-interactive.gateway.test.ts +++ b/src/commands/onboard-non-interactive.gateway.test.ts @@ -1,19 +1,13 @@ import fs from "node:fs/promises"; import path from "node:path"; import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from "vitest"; +import type { OpenClawConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; import { makeTempWorkspace } from "../test-helpers/workspace.js"; import { captureEnv } from "../test-utils/env.js"; import { createThrowingRuntime, readJsonFile } from "./onboard-non-interactive.test-helpers.js"; import type { installGatewayDaemonNonInteractive } from "./onboard-non-interactive/local/daemon-install.js"; -const gatewayClientCalls: Array<{ - url?: string; - token?: string; - password?: string; - onHelloOk?: (hello: { features?: { methods?: string[] } }) => void; - onClose?: (code: number, reason: string) => void; -}> = []; const ensureWorkspaceAndSessionsMock = vi.fn(async (..._args: unknown[]) => {}); type InstallGatewayDaemonResult = Awaited>; const installGatewayDaemonNonInteractiveMock = vi.hoisted(() => @@ -32,6 +26,7 @@ const gatewayServiceMock = vi.hoisted(() => ({ const readLastGatewayErrorLineMock = vi.hoisted(() => vi.fn(async () => "Gateway failed to start: required secrets are unavailable."), ); +const healthCommandMock = vi.hoisted(() => vi.fn(async () => {})); let waitForGatewayReachableMock: | ((params: { url: string; token?: string; password?: string; deadlineMs?: number }) => Promise<{ ok: boolean; @@ -39,33 +34,6 @@ let waitForGatewayReachableMock: }>) | undefined; -vi.mock("../gateway/client.js", () => ({ - GatewayClient: class { - params: { - url?: string; - token?: string; - password?: string; - onHelloOk?: (hello: { features?: { methods?: string[] } }) => void; - }; - constructor(params: { - url?: string; - token?: string; - password?: string; - onHelloOk?: (hello: { features?: { methods?: string[] } }) => void; - }) { - this.params = params; - gatewayClientCalls.push(params); - } - async request() { - return { ok: true }; - } - start() { - queueMicrotask(() => this.params.onHelloOk?.({ features: { methods: ["health"] } })); - } - stop() {} - }, -})); - vi.mock("./onboard-helpers.js", async (importOriginal) => { const actual = await importOriginal(); return { @@ -90,10 +58,15 @@ vi.mock("../daemon/diagnostics.js", () => ({ readLastGatewayErrorLine: readLastGatewayErrorLineMock, })); +vi.mock("./health.js", () => ({ + healthCommand: healthCommandMock, +})); + const { runNonInteractiveSetup } = await import("./onboard-non-interactive.js"); const { resolveConfigPath: resolveStateConfigPath } = await import("../config/paths.js"); const { resolveConfigPath } = await import("../config/config.js"); -const { callGateway } = await import("../gateway/call.js"); +const { buildGatewayConnectionDetails } = await import("../gateway/call.js"); +const { resolveGatewayCredentialsFromConfig } = await import("../gateway/credentials.js"); function getPseudoPort(base: number): number { return base + (process.pid % 1000); @@ -163,6 +136,7 @@ describe("onboard (non-interactive): gateway and remote auth", () => { gatewayServiceMock.isLoaded.mockClear(); gatewayServiceMock.readRuntime.mockClear(); readLastGatewayErrorLineMock.mockClear(); + healthCommandMock.mockClear(); }); it("writes gateway token auth into config", async () => { @@ -318,7 +292,7 @@ describe("onboard (non-interactive): gateway and remote auth", () => { }); }, 60_000); - it("writes gateway.remote url/token and callGateway uses them", async () => { + it("writes gateway.remote url/token and resolves remote gateway credentials from config", async () => { await withStateDir("state-remote-", async () => { const port = getPseudoPort(30_000); const token = "tok_remote_123"; @@ -342,12 +316,16 @@ describe("onboard (non-interactive): gateway and remote auth", () => { expect(cfg.gateway?.remote?.url).toBe(`ws://127.0.0.1:${port}`); expect(cfg.gateway?.remote?.token).toBe(token); - gatewayClientCalls.length = 0; - const health = await callGateway<{ ok?: boolean }>({ method: "health" }); - expect(health?.ok).toBe(true); - const lastCall = gatewayClientCalls[gatewayClientCalls.length - 1]; - expect(lastCall?.url).toBe(`ws://127.0.0.1:${port}`); - expect(lastCall?.token).toBe(token); + const details = buildGatewayConnectionDetails({ config: cfg as OpenClawConfig }); + expect(details.url).toBe(`ws://127.0.0.1:${port}`); + expect(details.urlSource).toBe("config gateway.remote.url"); + + const credentials = resolveGatewayCredentialsFromConfig({ + cfg: cfg as OpenClawConfig, + env: {} as NodeJS.ProcessEnv, + }); + expect(credentials.token).toBe(token); + expect(credentials.password).toBeUndefined(); }); }, 60_000); @@ -414,7 +392,19 @@ describe("onboard (non-interactive): gateway and remote auth", () => { let capturedError = ""; const runtimeWithCapture: RuntimeEnv = { - log: () => {}, + log: (...args: unknown[]) => { + const firstArg = args[0]; + const rendered = + typeof firstArg === "string" + ? firstArg + : firstArg instanceof Error + ? firstArg.message + : (JSON.stringify(firstArg) ?? ""); + if (rendered.trim().startsWith("{")) { + capturedError = rendered; + throw new Error(capturedError); + } + }, error: (...args: unknown[]) => { const firstArg = args[0]; capturedError = @@ -426,7 +416,7 @@ describe("onboard (non-interactive): gateway and remote auth", () => { throw new Error(capturedError); }, exit: (_code: number) => { - throw new Error("exit should not be reached after runtime.error"); + throw new Error("exit should not be reached after runtime log/error"); }, }; @@ -492,7 +482,19 @@ describe("onboard (non-interactive): gateway and remote auth", () => { let capturedError = ""; const runtimeWithCapture: RuntimeEnv = { - log: () => {}, + log: (...args: unknown[]) => { + const firstArg = args[0]; + const rendered = + typeof firstArg === "string" + ? firstArg + : firstArg instanceof Error + ? firstArg.message + : (JSON.stringify(firstArg) ?? ""); + if (rendered.trim().startsWith("{")) { + capturedError = rendered; + throw new Error(capturedError); + } + }, error: (...args: unknown[]) => { const firstArg = args[0]; capturedError = @@ -504,7 +506,7 @@ describe("onboard (non-interactive): gateway and remote auth", () => { throw new Error(capturedError); }, exit: (_code: number) => { - throw new Error("exit should not be reached after runtime.error"); + throw new Error("exit should not be reached after runtime log/error"); }, }; diff --git a/src/commands/onboard-non-interactive/local.ts b/src/commands/onboard-non-interactive/local.ts index f14aae65..9030ea67 100644 --- a/src/commands/onboard-non-interactive/local.ts +++ b/src/commands/onboard-non-interactive/local.ts @@ -5,6 +5,10 @@ import { logConfigUpdated } from "../../config/logging.js"; import type { RuntimeEnv } from "../../runtime.js"; import { DEFAULT_GATEWAY_DAEMON_RUNTIME } from "../daemon-runtime.js"; import { applyLocalSetupWorkspaceConfig } from "../onboard-config.js"; +import { + applySandboxComputeFromOnboardOptions, + hasSandboxComputeOverrides, +} from "../onboard-sandbox-compute.js"; import { applyWizardMetadata, DEFAULT_WORKSPACE, @@ -82,6 +86,27 @@ export async function runNonInteractiveLocalSetup(params: { }); let nextConfig: OpenClawConfig = applyLocalSetupWorkspaceConfig(baseConfig, workspaceDir); + try { + nextConfig = applySandboxComputeFromOnboardOptions({ + cfg: nextConfig, + opts, + }); + } catch (error) { + logNonInteractiveOnboardingFailure({ + opts, + runtime, + mode, + phase: "sandbox-compute", + message: "Invalid sandbox compute configuration.", + detail: error instanceof Error ? error.message : String(error), + hints: [ + "Use --sandbox-compute-provider local|eigencloud|aws|digitalocean.", + "Hosted providers require --sandbox-compute-target unless sandbox.ssh.target is already configured.", + ], + }); + runtime.exit(1); + return; + } const inferredAuthChoice = inferAuthChoiceFromFlags(opts); if (!opts.authChoice && inferredAuthChoice.matches.length > 1) { @@ -256,6 +281,7 @@ export async function runNonInteractiveLocalSetup(params: { daemonRuntime: opts.installDaemon ? daemonRuntimeRaw : undefined, skipSkills: Boolean(opts.skipSkills), skipHealth: Boolean(opts.skipHealth), + sandboxComputeConfigured: hasSandboxComputeOverrides(opts), }); if (!opts.json) { diff --git a/src/commands/onboard-non-interactive/local/output.ts b/src/commands/onboard-non-interactive/local/output.ts index ef8af8e0..628803df 100644 --- a/src/commands/onboard-non-interactive/local/output.ts +++ b/src/commands/onboard-non-interactive/local/output.ts @@ -37,6 +37,7 @@ export function logNonInteractiveOnboardingJson(params: { daemonRuntime?: string; skipSkills?: boolean; skipHealth?: boolean; + sandboxComputeConfigured?: boolean; }) { if (!params.opts.json) { return; @@ -52,6 +53,7 @@ export function logNonInteractiveOnboardingJson(params: { daemonRuntime: params.daemonRuntime, skipSkills: Boolean(params.skipSkills), skipHealth: Boolean(params.skipHealth), + sandboxComputeConfigured: Boolean(params.sandboxComputeConfigured), }); } diff --git a/src/commands/onboard-sandbox-compute.test.ts b/src/commands/onboard-sandbox-compute.test.ts new file mode 100644 index 00000000..2854a25d --- /dev/null +++ b/src/commands/onboard-sandbox-compute.test.ts @@ -0,0 +1,116 @@ +import { describe, expect, it } from "vitest"; +import type { OpenClawConfig } from "../config/config.js"; +import { + applySandboxComputeFromOnboardOptions, + applySandboxComputeSelection, +} from "./onboard-sandbox-compute.js"; + +describe("onboard sandbox compute helpers", () => { + it("sets local compute provider with fallback default on", () => { + const cfg: OpenClawConfig = {}; + const next = applySandboxComputeSelection({ + cfg, + provider: "local", + }); + + expect(next.agents?.defaults?.sandbox?.compute).toEqual({ + provider: "local", + fallbackToLocalOnHostedFailure: true, + hosted: { + eigencloud: undefined, + aws: undefined, + digitalocean: undefined, + }, + }); + }); + + it("requires hosted compute target when no provider or ssh target is configured", () => { + expect(() => + applySandboxComputeSelection({ + cfg: {}, + provider: "eigencloud", + }), + ).toThrow('Hosted sandbox provider "eigencloud" requires an SSH target.'); + }); + + it("allows hosted provider selection when sandbox.ssh.target is already configured", () => { + const next = applySandboxComputeSelection({ + cfg: { + agents: { + defaults: { + sandbox: { + ssh: { + target: "ubuntu@shared-host:22", + }, + }, + }, + }, + }, + provider: "aws", + }); + + expect(next.agents?.defaults?.sandbox?.compute?.provider).toBe("aws"); + expect(next.agents?.defaults?.sandbox?.compute?.hosted?.aws?.target).toBe( + "ubuntu@shared-host:22", + ); + }); + + it("applies hosted target, fallback mode, and provider-specific overrides from options", () => { + const next = applySandboxComputeFromOnboardOptions({ + cfg: {}, + opts: { + sandboxComputeProvider: "digitalocean", + sandboxComputeTarget: "root@do-host:22", + sandboxComputeWorkspaceRoot: "/srv/openclaw", + sandboxComputeIdentityFile: "/home/user/.ssh/id_ed25519", + sandboxComputeFallback: "off", + }, + }); + + expect(next.agents?.defaults?.sandbox?.compute).toEqual({ + provider: "digitalocean", + fallbackToLocalOnHostedFailure: false, + hosted: { + eigencloud: undefined, + aws: undefined, + digitalocean: { + target: "root@do-host:22", + workspaceRoot: "/srv/openclaw", + identityFile: "/home/user/.ssh/id_ed25519", + }, + }, + }); + }); + + it("rejects hosted-only flags without provider when config is still local", () => { + expect(() => + applySandboxComputeFromOnboardOptions({ + cfg: {}, + opts: { + sandboxComputeTarget: "root@do-host:22", + }, + }), + ).toThrow("Pass --sandbox-compute-provider when setting hosted sandbox compute connection fields."); + }); + + it("returns config unchanged when no sandbox compute overrides are provided", () => { + const cfg: OpenClawConfig = { + agents: { + defaults: { + sandbox: { + compute: { + provider: "local", + }, + }, + }, + }, + }; + + const next = applySandboxComputeFromOnboardOptions({ + cfg, + opts: {}, + }); + + expect(next).toBe(cfg); + }); +}); diff --git a/src/commands/onboard-sandbox-compute.ts b/src/commands/onboard-sandbox-compute.ts new file mode 100644 index 00000000..7daa1199 --- /dev/null +++ b/src/commands/onboard-sandbox-compute.ts @@ -0,0 +1,176 @@ +import type { OpenClawConfig } from "../config/config.js"; +import type { + SandboxComputeHostedProviderSettings, + SandboxComputeProviderId, +} from "../config/types.sandbox.js"; +import type { OnboardOptions, SandboxComputeFallbackMode } from "./onboard-types.js"; + +export const SANDBOX_COMPUTE_PROVIDER_IDS = [ + "local", + "eigencloud", + "aws", + "digitalocean", +] as const satisfies readonly SandboxComputeProviderId[]; + +const HOSTED_SANDBOX_COMPUTE_PROVIDERS = new Set([ + "eigencloud", + "aws", + "digitalocean", +]); + +const SANDBOX_COMPUTE_FALLBACK_MODES = ["on", "off"] as const; + +function normalizeOptionalString(value: string | undefined): string | undefined { + const trimmed = value?.trim(); + return trimmed ? trimmed : undefined; +} + +export function isSandboxComputeProviderId(value: string): value is SandboxComputeProviderId { + return (SANDBOX_COMPUTE_PROVIDER_IDS as readonly string[]).includes(value); +} + +export function isHostedSandboxComputeProvider( + provider: SandboxComputeProviderId, +): provider is "eigencloud" | "aws" | "digitalocean" { + return HOSTED_SANDBOX_COMPUTE_PROVIDERS.has(provider); +} + +export function isSandboxComputeFallbackMode(value: string): value is SandboxComputeFallbackMode { + return (SANDBOX_COMPUTE_FALLBACK_MODES as readonly string[]).includes(value); +} + +export function resolveSandboxComputeProviderFromConfig(cfg: OpenClawConfig): SandboxComputeProviderId { + return cfg.agents?.defaults?.sandbox?.compute?.provider ?? "local"; +} + +function resolveHostedProviderConfigFromConfig(params: { + cfg: OpenClawConfig; + provider: "eigencloud" | "aws" | "digitalocean"; +}): SandboxComputeHostedProviderSettings | undefined { + return params.cfg.agents?.defaults?.sandbox?.compute?.hosted?.[params.provider]; +} + +function resolveComputeFallbackFromConfig(cfg: OpenClawConfig): boolean { + return cfg.agents?.defaults?.sandbox?.compute?.fallbackToLocalOnHostedFailure ?? true; +} + +function resolveFallbackFromMode(mode: SandboxComputeFallbackMode | undefined): boolean | undefined { + if (mode === undefined) { + return undefined; + } + return mode === "on"; +} + +export function hasSandboxComputeOverrides(opts: OnboardOptions): boolean { + return ( + opts.sandboxComputeProvider !== undefined || + opts.sandboxComputeTarget !== undefined || + opts.sandboxComputeWorkspaceRoot !== undefined || + opts.sandboxComputeIdentityFile !== undefined || + opts.sandboxComputeFallback !== undefined + ); +} + +export function applySandboxComputeSelection(params: { + cfg: OpenClawConfig; + provider: SandboxComputeProviderId; + fallbackToLocalOnHostedFailure?: boolean; + target?: string; + workspaceRoot?: string; + identityFile?: string; +}): OpenClawConfig { + const sandboxDefaults = params.cfg.agents?.defaults?.sandbox ?? {}; + const computeDefaults = sandboxDefaults.compute ?? {}; + const hostedDefaults = computeDefaults.hosted ?? {}; + const fallbackToLocalOnHostedFailure = + params.fallbackToLocalOnHostedFailure ?? resolveComputeFallbackFromConfig(params.cfg); + + const hosted = { + eigencloud: hostedDefaults.eigencloud, + aws: hostedDefaults.aws, + digitalocean: hostedDefaults.digitalocean, + }; + + if (isHostedSandboxComputeProvider(params.provider)) { + const currentProviderConfig = resolveHostedProviderConfigFromConfig({ + cfg: params.cfg, + provider: params.provider, + }); + const target = + normalizeOptionalString(params.target) ?? + normalizeOptionalString(currentProviderConfig?.target) ?? + normalizeOptionalString(sandboxDefaults.ssh?.target); + if (!target) { + throw new Error( + [ + `Hosted sandbox provider "${params.provider}" requires an SSH target.`, + "Provide --sandbox-compute-target or configure agents.defaults.sandbox.ssh.target first.", + ].join(" "), + ); + } + + const updatedProviderConfig: SandboxComputeHostedProviderSettings = { + ...currentProviderConfig, + target, + }; + if (params.workspaceRoot !== undefined) { + updatedProviderConfig.workspaceRoot = normalizeOptionalString(params.workspaceRoot); + } + if (params.identityFile !== undefined) { + updatedProviderConfig.identityFile = normalizeOptionalString(params.identityFile); + } + hosted[params.provider] = updatedProviderConfig; + } + + return { + ...params.cfg, + agents: { + ...params.cfg.agents, + defaults: { + ...params.cfg.agents?.defaults, + sandbox: { + ...sandboxDefaults, + compute: { + ...computeDefaults, + provider: params.provider, + fallbackToLocalOnHostedFailure, + hosted, + }, + }, + }, + }, + }; +} + +export function applySandboxComputeFromOnboardOptions(params: { + cfg: OpenClawConfig; + opts: OnboardOptions; +}): OpenClawConfig { + if (!hasSandboxComputeOverrides(params.opts)) { + return params.cfg; + } + + const provider = + params.opts.sandboxComputeProvider ?? resolveSandboxComputeProviderFromConfig(params.cfg); + + if ( + params.opts.sandboxComputeProvider === undefined && + (params.opts.sandboxComputeTarget !== undefined || + params.opts.sandboxComputeWorkspaceRoot !== undefined || + params.opts.sandboxComputeIdentityFile !== undefined) && + !isHostedSandboxComputeProvider(provider) + ) { + throw new Error( + "Pass --sandbox-compute-provider when setting hosted sandbox compute connection fields.", + ); + } + + return applySandboxComputeSelection({ + cfg: params.cfg, + provider, + fallbackToLocalOnHostedFailure: resolveFallbackFromMode(params.opts.sandboxComputeFallback), + target: params.opts.sandboxComputeTarget, + workspaceRoot: params.opts.sandboxComputeWorkspaceRoot, + identityFile: params.opts.sandboxComputeIdentityFile, + }); +} diff --git a/src/commands/onboard-types.ts b/src/commands/onboard-types.ts index 832fae75..4b4279b1 100644 --- a/src/commands/onboard-types.ts +++ b/src/commands/onboard-types.ts @@ -1,4 +1,5 @@ import type { ChannelId } from "../channels/plugins/types.js"; +import type { SandboxComputeProviderId } from "../config/types.sandbox.js"; import type { SecretInputMode } from "../plugins/provider-auth-types.js"; import type { GatewayDaemonRuntime } from "./daemon-runtime.js"; @@ -84,6 +85,7 @@ export type BuiltInAuthChoiceGroupId = | "custom"; export type AuthChoiceGroupId = BuiltInAuthChoiceGroupId | (string & {}); export type GatewayAuthChoice = "token" | "password"; +export type SandboxComputeFallbackMode = "on" | "off"; export type ResetScope = "config" | "config+creds+sessions" | "full"; export type GatewayBind = "loopback" | "lan" | "auto" | "custom" | "tailnet"; export type TailscaleMode = "off" | "serve" | "funnel"; @@ -153,6 +155,11 @@ export type OnboardOptions = { gatewayToken?: string; gatewayTokenRefEnv?: string; gatewayPassword?: string; + sandboxComputeProvider?: SandboxComputeProviderId; + sandboxComputeTarget?: string; + sandboxComputeWorkspaceRoot?: string; + sandboxComputeIdentityFile?: string; + sandboxComputeFallback?: SandboxComputeFallbackMode; tailscale?: TailscaleMode; tailscaleResetOnExit?: boolean; installDaemon?: boolean; diff --git a/src/commands/onboard.test.ts b/src/commands/onboard.test.ts index daa0899d..c89926a4 100644 --- a/src/commands/onboard.test.ts +++ b/src/commands/onboard.test.ts @@ -159,6 +159,40 @@ describe("setupWizardCommand", () => { expect(mocks.runNonInteractiveSetup).not.toHaveBeenCalled(); }); + it("fails fast for invalid --sandbox-compute-provider", async () => { + const runtime = makeRuntime(); + + await setupWizardCommand( + { + sandboxComputeProvider: "invalid-provider" as never, + }, + runtime, + ); + + expect(runtime.error).toHaveBeenCalledWith( + 'Invalid --sandbox-compute-provider. Use "local", "eigencloud", "aws", or "digitalocean".', + ); + expect(runtime.exit).toHaveBeenCalledWith(1); + expect(mocks.runInteractiveSetup).not.toHaveBeenCalled(); + expect(mocks.runNonInteractiveSetup).not.toHaveBeenCalled(); + }); + + it("fails fast for invalid --sandbox-compute-fallback", async () => { + const runtime = makeRuntime(); + + await setupWizardCommand( + { + sandboxComputeFallback: "invalid" as never, + }, + runtime, + ); + + expect(runtime.error).toHaveBeenCalledWith('Invalid --sandbox-compute-fallback. Use "on" or "off".'); + expect(runtime.exit).toHaveBeenCalledWith(1); + expect(mocks.runInteractiveSetup).not.toHaveBeenCalled(); + expect(mocks.runNonInteractiveSetup).not.toHaveBeenCalled(); + }); + it("keeps onboardCommand as an alias for setupWizardCommand", () => { expect(onboardCommand).toBe(setupWizardCommand); }); diff --git a/src/commands/onboard.ts b/src/commands/onboard.ts index c9af3fbf..641107ba 100644 --- a/src/commands/onboard.ts +++ b/src/commands/onboard.ts @@ -8,6 +8,10 @@ import { isDeprecatedAuthChoice, normalizeLegacyOnboardAuthChoice } from "./auth import { DEFAULT_WORKSPACE, handleReset } from "./onboard-helpers.js"; import { runInteractiveSetup } from "./onboard-interactive.js"; import { runNonInteractiveSetup } from "./onboard-non-interactive.js"; +import { + isSandboxComputeFallbackMode, + isSandboxComputeProviderId, +} from "./onboard-sandbox-compute.js"; import type { OnboardOptions, ResetScope } from "./onboard-types.js"; const VALID_RESET_SCOPES = new Set(["config", "config+creds+sessions", "full"]); @@ -50,6 +54,26 @@ export async function setupWizardCommand( return; } + if ( + normalizedOpts.sandboxComputeProvider && + !isSandboxComputeProviderId(normalizedOpts.sandboxComputeProvider) + ) { + runtime.error( + 'Invalid --sandbox-compute-provider. Use "local", "eigencloud", "aws", or "digitalocean".', + ); + runtime.exit(1); + return; + } + + if ( + normalizedOpts.sandboxComputeFallback && + !isSandboxComputeFallbackMode(normalizedOpts.sandboxComputeFallback) + ) { + runtime.error('Invalid --sandbox-compute-fallback. Use "on" or "off".'); + runtime.exit(1); + return; + } + if (normalizedOpts.resetScope && !VALID_RESET_SCOPES.has(normalizedOpts.resetScope)) { runtime.error('Invalid --reset-scope. Use "config", "config+creds+sessions", or "full".'); runtime.exit(1); diff --git a/src/wizard/setup.compute-provider.test.ts b/src/wizard/setup.compute-provider.test.ts new file mode 100644 index 00000000..32a92a22 --- /dev/null +++ b/src/wizard/setup.compute-provider.test.ts @@ -0,0 +1,96 @@ +import { describe, expect, it, vi } from "vitest"; +import { createWizardPrompter } from "../../test/helpers/wizard-prompter.js"; +import type { WizardSelectParams } from "./prompts.js"; +import { configureSandboxComputeForSetup } from "./setup.compute-provider.js"; + +describe("configureSandboxComputeForSetup", () => { + it("shows exact compute provider choices in the setup wizard", async () => { + let capturedSelect: WizardSelectParams | undefined; + const select = vi.fn(async (params: WizardSelectParams) => { + capturedSelect = params; + return "local"; + }); + const prompter = createWizardPrompter({ + select: select as unknown as ReturnType["select"], + }); + + await configureSandboxComputeForSetup({ + cfg: {}, + opts: {}, + prompter, + }); + + expect(capturedSelect?.options.map((option) => option.label)).toEqual([ + "EigenCloud", + "AWS", + "DigitalOcean", + "Local", + ]); + }); + + it("prompts for hosted target and fallback, then applies provider config", async () => { + const select = vi.fn(async (_params: WizardSelectParams) => "aws" as T); + const prompter = createWizardPrompter({ + select: select as unknown as ReturnType["select"], + text: vi.fn(async () => "ubuntu@aws-host:22"), + confirm: vi.fn(async () => false), + }); + + const next = await configureSandboxComputeForSetup({ + cfg: {}, + opts: {}, + prompter, + }); + + expect(next.agents?.defaults?.sandbox?.compute?.provider).toBe("aws"); + expect(next.agents?.defaults?.sandbox?.compute?.fallbackToLocalOnHostedFailure).toBe(false); + expect(next.agents?.defaults?.sandbox?.compute?.hosted?.aws?.target).toBe("ubuntu@aws-host:22"); + expect(prompter.text).toHaveBeenCalled(); + expect(prompter.confirm).toHaveBeenCalled(); + }); + + it("skips compute prompts when options are already provided", async () => { + const prompter = createWizardPrompter(); + + const next = await configureSandboxComputeForSetup({ + cfg: {}, + opts: { + sandboxComputeProvider: "digitalocean", + sandboxComputeTarget: "root@do-host:22", + sandboxComputeFallback: "off", + }, + prompter, + }); + + expect(next.agents?.defaults?.sandbox?.compute?.provider).toBe("digitalocean"); + expect(next.agents?.defaults?.sandbox?.compute?.hosted?.digitalocean?.target).toBe( + "root@do-host:22", + ); + expect(next.agents?.defaults?.sandbox?.compute?.fallbackToLocalOnHostedFailure).toBe(false); + expect(prompter.select).not.toHaveBeenCalled(); + expect(prompter.text).not.toHaveBeenCalled(); + expect(prompter.confirm).not.toHaveBeenCalled(); + }); + + it("skips compute provider prompt in fully skipped setup runs", async () => { + const cfg = {}; + const prompter = createWizardPrompter(); + + const next = await configureSandboxComputeForSetup({ + cfg, + opts: { + skipProviders: true, + skipSkills: true, + skipSearch: true, + skipHealth: true, + skipUi: true, + }, + prompter, + }); + + expect(next).toBe(cfg); + expect(prompter.select).not.toHaveBeenCalled(); + expect(prompter.text).not.toHaveBeenCalled(); + expect(prompter.confirm).not.toHaveBeenCalled(); + }); +}); diff --git a/src/wizard/setup.compute-provider.ts b/src/wizard/setup.compute-provider.ts new file mode 100644 index 00000000..dccd3837 --- /dev/null +++ b/src/wizard/setup.compute-provider.ts @@ -0,0 +1,131 @@ +import { + applySandboxComputeSelection, + isHostedSandboxComputeProvider, + resolveSandboxComputeProviderFromConfig, +} from "../commands/onboard-sandbox-compute.js"; +import type { OnboardOptions } from "../commands/onboard-types.js"; +import type { OpenClawConfig } from "../config/config.js"; +import type { SandboxComputeProviderId } from "../config/types.sandbox.js"; +import type { WizardPrompter } from "./prompts.js"; + +const SANDBOX_COMPUTE_PROVIDER_OPTIONS: Array<{ + value: SandboxComputeProviderId; + label: string; + hint: string; +}> = [ + { value: "eigencloud", label: "EigenCloud", hint: "Hosted compute via EigenCloud" }, + { value: "aws", label: "AWS", hint: "Hosted compute via Amazon Web Services" }, + { value: "digitalocean", label: "DigitalOcean", hint: "Hosted compute via DigitalOcean" }, + { value: "local", label: "Local", hint: "Run sandbox locally with Docker" }, +]; + +function normalizeOptionalString(value: string | undefined): string | undefined { + const trimmed = value?.trim(); + return trimmed ? trimmed : undefined; +} + +function resolveHostedTargetFromConfig(params: { + cfg: OpenClawConfig; + provider: "eigencloud" | "aws" | "digitalocean"; +}): string | undefined { + return ( + params.cfg.agents?.defaults?.sandbox?.compute?.hosted?.[params.provider]?.target ?? + params.cfg.agents?.defaults?.sandbox?.ssh?.target + ); +} + +function resolveHostedFallbackFromConfig(cfg: OpenClawConfig): boolean { + return cfg.agents?.defaults?.sandbox?.compute?.fallbackToLocalOnHostedFailure ?? true; +} + +function resolveFallbackFromOnboardOptions(opts: OnboardOptions): boolean | undefined { + if (opts.sandboxComputeFallback === undefined) { + return undefined; + } + return opts.sandboxComputeFallback === "on"; +} + +function shouldSkipComputeProviderPrompt(opts: OnboardOptions): boolean { + const hasHostedOverrides = + opts.sandboxComputeProvider !== undefined || + opts.sandboxComputeTarget !== undefined || + opts.sandboxComputeWorkspaceRoot !== undefined || + opts.sandboxComputeIdentityFile !== undefined || + opts.sandboxComputeFallback !== undefined; + if (hasHostedOverrides) { + return false; + } + + return ( + Boolean(opts.skipUi) && + Boolean(opts.skipHealth) && + Boolean(opts.skipSearch) && + Boolean(opts.skipSkills) && + Boolean(opts.skipChannels ?? opts.skipProviders) + ); +} + +export async function configureSandboxComputeForSetup(params: { + cfg: OpenClawConfig; + opts: OnboardOptions; + prompter: WizardPrompter; +}): Promise { + if (shouldSkipComputeProviderPrompt(params.opts)) { + return params.cfg; + } + + const initialProvider = resolveSandboxComputeProviderFromConfig(params.cfg); + const provider = + params.opts.sandboxComputeProvider ?? + (await params.prompter.select({ + message: "Sandbox compute provider", + options: SANDBOX_COMPUTE_PROVIDER_OPTIONS, + initialValue: initialProvider, + })); + + const fallbackFromOptions = resolveFallbackFromOnboardOptions(params.opts); + if (!isHostedSandboxComputeProvider(provider)) { + return applySandboxComputeSelection({ + cfg: params.cfg, + provider, + fallbackToLocalOnHostedFailure: + fallbackFromOptions ?? resolveHostedFallbackFromConfig(params.cfg), + }); + } + + const initialTarget = normalizeOptionalString( + params.opts.sandboxComputeTarget ?? + resolveHostedTargetFromConfig({ + cfg: params.cfg, + provider, + }), + ); + + const target = + normalizeOptionalString(params.opts.sandboxComputeTarget) ?? + (await params.prompter.text({ + message: `${provider} SSH target (user@host[:port])`, + initialValue: initialTarget ?? "", + placeholder: "ubuntu@host.example.com:22", + validate: (value) => + value.trim().length > 0 + ? undefined + : "Hosted sandbox providers require an SSH target.", + })); + + const fallbackToLocalOnHostedFailure = + fallbackFromOptions ?? + (await params.prompter.confirm({ + message: "Fallback to local sandbox when hosted provisioning fails?", + initialValue: resolveHostedFallbackFromConfig(params.cfg), + })); + + return applySandboxComputeSelection({ + cfg: params.cfg, + provider, + target, + fallbackToLocalOnHostedFailure, + workspaceRoot: params.opts.sandboxComputeWorkspaceRoot, + identityFile: params.opts.sandboxComputeIdentityFile, + }); +} diff --git a/src/wizard/setup.ts b/src/wizard/setup.ts index 6a93765f..21727535 100644 --- a/src/wizard/setup.ts +++ b/src/wizard/setup.ts @@ -432,6 +432,12 @@ export async function runSetupWizard( const { applyLocalSetupWorkspaceConfig } = await import("../commands/onboard-config.js"); let nextConfig: OpenClawConfig = applyLocalSetupWorkspaceConfig(baseConfig, workspaceDir); + const { configureSandboxComputeForSetup } = await import("./setup.compute-provider.js"); + nextConfig = await configureSandboxComputeForSetup({ + cfg: nextConfig, + opts, + prompter, + }); const { ensureAuthProfileStore } = await import("../agents/auth-profiles.runtime.js"); const { promptAuthChoiceGrouped } = await import("../commands/auth-choice-prompt.js"); From f26a105d3e57fe6675a32a172f5ab11d9657033b Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Thu, 9 Apr 2026 20:54:43 +0100 Subject: [PATCH 09/11] specs: align cloud compute architecture for multi-provider runtimes --- .../design_spec.md | 73 ++- .../product_spec.md | 88 ++- .../provider_architecture_addendum.md | 85 +++ .../technical_spec.md | 590 ++++++++++++------ 4 files changed, 603 insertions(+), 233 deletions(-) create mode 100644 specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md diff --git a/specs/22_should-add-support-for-cloud-compute/design_spec.md b/specs/22_should-add-support-for-cloud-compute/design_spec.md index 18aa2bb2..fb0ccd14 100644 --- a/specs/22_should-add-support-for-cloud-compute/design_spec.md +++ b/specs/22_should-add-support-for-cloud-compute/design_spec.md @@ -12,6 +12,7 @@ - Keep local provider as a first-class option. - Make fallback behavior understandable and configurable without hidden automation. - Expose provisioning and healthcheck status with clear outcomes and timings. +- Surface provider class differences honestly so EigenCloud is not presented as just another SSH/VM provider. ## Primary Users - Operator setting up compute for a new workspace. @@ -28,15 +29,16 @@ - Fallback Policy - Provisioning Status and Result - Provider Healthcheck Status + - Evidence / Attestation Status (when supported) ## User Flow Diagram ```mermaid flowchart TD A[Open Compute Setup] --> B{Choose Provider} B -->|Local| C[Show Local Summary] - B -->|EigenCloud| D[Show EigenCloud Config Form] - B -->|AWS| E[Show AWS Config Form] - B -->|DigitalOcean| F[Show DigitalOcean Config Form] + B -->|EigenCloud| D[Show Hosted Attested App Form] + B -->|AWS| E[Show Hosted VM Form] + B -->|DigitalOcean| F[Show Hosted VM Form] D --> G[Set Fallback Toggle] E --> G @@ -54,7 +56,8 @@ flowchart TD M -->|No| N[Show Fallback Failure] J --> O{Healthcheck Pass?} - O -->|Yes| P[Show Success + Provider + Duration] + O -->|Yes + Evidence Supported| P[Show Success + Provider + Duration + Evidence] + O -->|Yes + No Evidence| R[Show Success + Provider + Duration] O -->|No| Q[Show Healthcheck Failure] ``` @@ -64,6 +67,7 @@ flowchart TD 3. Fallback Policy Card 4. Provisioning Progress and Logs Panel 5. Provisioning Result Screen (success/failure/fallback outcomes) +6. Evidence Panel (attested providers only) ## Screen Specifications @@ -73,7 +77,7 @@ Allow explicit selection of `EigenCloud`, `AWS`, `DigitalOcean`, or `Local`. #### Components - Radio/segmented provider selector (single select) -- Provider cards with short capability summary +- Provider cards with short capability summary and provider-class badge - Continue button (disabled until valid selection) #### States @@ -81,6 +85,11 @@ Allow explicit selection of `EigenCloud`, `AWS`, `DigitalOcean`, or `Local`. - Selected provider: card highlighted, continue enabled - Editing existing profile: current provider preselected +#### Card content rules +- `Local`: label as `Local Docker` +- `AWS` and `DigitalOcean`: label as `Hosted VM` +- `EigenCloud`: label as `Hosted Attested App` + ### 2) Provider Configuration Form #### Purpose Capture provider-specific values needed for provisioning. @@ -93,17 +102,20 @@ Capture provider-specific values needed for provisioning. #### Provider-specific field groups - EigenCloud: - - Project/organization ID - - Region/zone - - API credential reference selector + - Auth key / credential reference selector + - Environment / network + - Image/version selection or allowlisted runtime image reference + - Secret release policy summary - AWS: - - Account/role profile reference + - Account/profile or role reference - Region - VPC/subnet selection (or reference) + - Image/instance size - DigitalOcean: - Project ID/tag - Region - API token reference selector + - Image/size - Local: - Runtime profile selection - Optional local resource caps @@ -121,6 +133,7 @@ Control auto-fallback to local when hosted creation fails. - Toggle shown for hosted providers. - For Local selection, toggle hidden and not applied. - Changes persist with provider configuration. +- Copy clarifies that fallback is a control-plane policy and does not imply provider equivalence. ### 4) Provisioning Progress and Logs Panel #### Purpose @@ -129,7 +142,7 @@ Make create + healthcheck lifecycle transparent. #### Components - Stepper/timeline: - `Submitting request` - - `Provisioning sandbox` + - `Provisioning runtime` - `Running healthcheck` - `Completed` - Timer showing elapsed duration @@ -138,6 +151,10 @@ Make create + healthcheck lifecycle transparent. - provider - event - status +- Optional capability rows: + - transport type + - attestation/evidence available + - secret release mode #### Hosted failure behavior - If fallback ON: @@ -152,11 +169,27 @@ Make create + healthcheck lifecycle transparent. - Show total duration - Show healthcheck pass status - Show fallback badge if fallback occurred +- Show provider class (`Local`, `Hosted VM`, `Hosted Attested App`) +- Show evidence summary only when provider supports it #### Failure - Show failing provider - Show failure reason category - Show retry action and edit settings action +- If fallback occurred and also failed, show both hosted and fallback failure summaries distinctly + +### 6) Evidence Panel +#### Purpose +Surface trust evidence only for providers that can produce it. + +#### Components +- Evidence availability badge +- Attestation identifier / verification link +- Secret release status + +#### Behavior +- Hidden for Local, AWS, and DigitalOcean in MVP +- Shown for EigenCloud when evidence is returned by the provider adapter ## Component Specifications @@ -168,6 +201,7 @@ Make create + healthcheck lifecycle transparent. - Requirements: - Keyboard navigable options - Consistent ordering: EigenCloud, AWS, DigitalOcean, Local + - Each option shows provider class and transport summary ### `ProviderConfigForm` - Inputs: @@ -177,6 +211,7 @@ Make create + healthcheck lifecycle transparent. - Requirements: - Provider-specific schema validation - Inline field-level errors + - Supports provider-class-specific helper text instead of generic hosted wording ### `FallbackPolicyToggle` - Inputs: @@ -195,9 +230,20 @@ Make create + healthcheck lifecycle transparent. - Requirements: - Event grouping by phase - Visual distinction between primary provider and fallback provider + - Visual distinction between attested evidence-bearing providers and plain VM providers + +### `EvidencePanel` +- Inputs: + - `supported` + - `evidence` + - `verificationUrl` +- Requirements: + - Hidden when unsupported + - Never shown with empty placeholder content ## Interaction Patterns - Switching provider resets provider-specific invalid fields and preserves cross-provider common values where safe. +- Switching between provider classes resets incompatible fields instead of attempting lossy reuse. - Submit button remains disabled until selected provider config validates. - During provisioning, prevent duplicate submissions and surface cancel/back behavior clearly. - Retry action reuses last valid configuration. @@ -226,7 +272,9 @@ Make create + healthcheck lifecycle transparent. - Hosted failure + fallback OFF: - "Hosted provisioning failed for . Local fallback is disabled." - Healthcheck failure: - - "Sandbox created, but healthcheck did not pass. Review provider logs." + - "Runtime created, but healthcheck did not pass. Review provider logs." +- Evidence available: + - "Runtime is healthy and trust evidence is available." ## Telemetry and Analytics Events - `compute_provider_selected` @@ -239,6 +287,8 @@ Make create + healthcheck lifecycle transparent. - `sandbox_fallback_failed` - `sandbox_healthcheck_passed` - `sandbox_healthcheck_failed` +- `sandbox_evidence_available` +- `sandbox_evidence_unavailable` ## Figma / Screenshots Placeholders - Figma board link: `TODO` @@ -252,3 +302,4 @@ Make create + healthcheck lifecycle transparent. - AC-3/4/5/6 (create + healthcheck success) -> Provisioning timeline + result states. - AC-7/8/9 (fallback behavior) -> Fallback policy card + hosted failure branches. - AC-10 (logging) -> Provisioning logs panel + telemetry events. +- AC-11 (provider evidence only when supported) -> Evidence panel + result state gating. diff --git a/specs/22_should-add-support-for-cloud-compute/product_spec.md b/specs/22_should-add-support-for-cloud-compute/product_spec.md index 3ea8f60d..273e0318 100644 --- a/specs/22_should-add-support-for-cloud-compute/product_spec.md +++ b/specs/22_should-add-support-for-cloud-compute/product_spec.md @@ -10,20 +10,23 @@ Jarvis currently needs a production-ready cloud compute path that keeps local execution as a first-class option while preserving one shared sandbox control-plane contract. Without this, teams cannot reliably choose compute providers per environment, and fallback behavior is inconsistent. ## Product Goal -Deliver a provider wizard and provisioning path that supports: -- Hosted providers: EigenCloud, AWS, DigitalOcean -- Local provider: local sandbox path -- One shared control-plane abstraction for sandbox lifecycle operations across all providers +Deliver a compute selection and runtime orchestration path that supports: +- Local compute: Docker-backed local sandbox path +- Hosted VM compute: AWS and DigitalOcean +- Hosted attested app compute: EigenCloud +- One shared control-plane abstraction for runtime lifecycle operations across all providers without forcing all providers into the same transport model ## Scope ### In Scope - Provider selection wizard supporting `EigenCloud`, `AWS`, `DigitalOcean`, and `Local`. - Shared provider interface and routing layer used by all provider adapters. +- Provider capability model covering transport, healthcheck, attestation/evidence, and secret release behavior. - Real provisioning integrations (not stubs) for EigenCloud, AWS, and DigitalOcean. - Local provider fallback toggle with default `ON`. - Automatic local fallback when hosted provisioning fails and fallback is enabled. -- Provider healthcheck validation after sandbox creation. -- Liveness target enforcement and reporting for hosted providers. +- Provider healthcheck validation after runtime creation. +- Evidence/attestation surfacing when the selected provider supports it. +- Readiness target enforcement and reporting using provider-class-appropriate timing budgets. - Tests for provider routing, success paths, and fallback behavior. ### Out of Scope @@ -31,6 +34,8 @@ Deliver a provider wizard and provisioning path that supports: - Multi-region optimization policies beyond minimum creation support. - Wallet/reward/PSH integration. - New business workflows unrelated to provider selection or sandbox provisioning. +- Treating the EigenCloud app wallet as the product treasury. +- Requiring attestation parity across all providers in MVP. ## Users and Primary Jobs - Operator/Developer: choose where sandbox compute runs and get predictable startup behavior. @@ -38,61 +43,77 @@ Deliver a provider wizard and provisioning path that supports: ## Functional Requirements -### FR-1 Shared Provider Contract -- Define and use a single provider contract for sandbox lifecycle operations: - - create sandbox - - run provider healthcheck +### FR-1 Shared Runtime Contract +- Define and use a single runtime contract for compute lifecycle operations: + - provision runtime + - run healthcheck - report status and failures + - expose provider capabilities - Hosted and local providers must implement this contract. +- The shared contract must not assume every provider is reached via SSH. ### FR-2 Provider Selection Wizard - User can explicitly select one of: `EigenCloud`, `AWS`, `DigitalOcean`, `Local`. - Wizard captures provider-specific configuration inputs required for provisioning. - Wizard persists enough context for deterministic routing to the selected adapter. - -### FR-3 Hosted Provider Integrations -- EigenCloud adapter performs real sandbox provisioning and healthcheck. -- AWS adapter performs real sandbox provisioning and healthcheck. -- DigitalOcean adapter performs real sandbox provisioning and healthcheck. - -### FR-4 Local Provider Path +- Wizard surfaces provider class differences clearly: + - `Local` + - `Hosted VM` + - `Hosted Attested App` + +### FR-3 Hosted VM Integrations +- AWS adapter performs real VM provisioning and healthcheck. +- DigitalOcean adapter performs real VM provisioning and healthcheck. +- VM-class providers may expose SSH access as the execution transport. + +### FR-4 Hosted Attested App Integration +- EigenCloud adapter performs real app deployment and healthcheck using the EigenCloud SDK. +- EigenCloud path exposes attestation/evidence metadata and explicit secret release support. +- EigenCloud integration must not be modeled as a raw VM/SSH provider in the final architecture. + +### FR-5 Local Provider Path - Local provider remains functional and reachable from the same control-plane API. - Local path behaves as a first-class compute option, not an emergency-only backdoor. -### FR-5 Fallback Policy +### FR-6 Fallback Policy - Config toggle controls fallback behavior (`fallback_to_local_on_hosted_failure` or equivalent). - Default value is `ON`. - When `ON`, a hosted provider failure in sandbox creation triggers automatic local creation attempt. - When `OFF`, hosted failure is returned as failure without local auto-attempt. -### FR-6 Liveness and Health Targets -- For each hosted provider, successful sandbox creation must complete in `< 60s`. -- Healthcheck must pass after creation for each hosted provider. -- Timing and healthcheck outcomes must be observable in logs/test output. +### FR-7 Readiness and Health Targets +- Healthcheck must pass after creation for each provider. +- Readiness timing must be measured and observable for each provider. +- Timing budgets may differ by provider class: + - fast app-deployment providers + - VM boot providers +- The system must not hardcode an EigenCloud-style readiness assumption onto AWS or DigitalOcean. -### FR-7 Observability +### FR-8 Observability - Log provider selection, provisioning outcome, duration, and fallback decisions. - On fallback execution, include: - original hosted provider - failure reason/classification - local fallback attempt result +- When supported, include attestation/evidence identifiers without logging secrets. ## Non-Functional Requirements -- Reliability: identical control-plane semantics across providers for create + healthcheck outcomes. +- Reliability: consistent lifecycle semantics across providers for provision + healthcheck + failure outcomes, while allowing provider-specific transports and capabilities. - Testability: all acceptance criteria map to deterministic automated tests. - Backward safety: local-only usage remains operational if no hosted provider is configured. ## Acceptance Criteria (Testable) - AC-1 Wizard lists exactly: `EigenCloud`, `AWS`, `DigitalOcean`, `Local`. - AC-2 Selected provider routes to the correct adapter path. -- AC-3 EigenCloud create+healthcheck succeeds under test harness in `< 60s`. -- AC-4 AWS create+healthcheck succeeds under test harness in `< 60s`. -- AC-5 DigitalOcean create+healthcheck succeeds under test harness in `< 60s`. +- AC-3 EigenCloud create+healthcheck succeeds under an EigenCloud integration harness and exposes provider evidence metadata. +- AC-4 AWS create+healthcheck succeeds under an AWS integration harness. +- AC-5 DigitalOcean create+healthcheck succeeds under a DigitalOcean integration harness. - AC-6 Local provider create+healthcheck succeeds through the same control-plane contract. - AC-7 Fallback toggle default is `ON`. - AC-8 With fallback `ON`, simulated hosted creation failure triggers local fallback and logs provider + reason. - AC-9 With fallback `OFF`, hosted creation failure does not trigger fallback and returns an explicit error path. - AC-10 Logs/telemetry include provider, duration, healthcheck result, and fallback decision metadata. +- AC-11 Attested-provider-only fields and evidence states are hidden for non-attested providers. ## Test Plan Requirements - Unit tests: @@ -100,15 +121,15 @@ Deliver a provider wizard and provisioning path that supports: - fallback policy gate behavior (`ON` vs `OFF`) - logging payload structure for success/failure/fallback - Integration tests: - - per-hosted-provider create + healthcheck path - - timeout/liveness assertion `< 60s` per hosted provider + - per-provider create + healthcheck path + - provider-class-specific readiness assertions - hosted failure simulation leading to local fallback when enabled ## Risks and Mitigations - Risk: provider API differences cause contract drift. - - Mitigation: enforce adapter conformance tests at contract boundary. -- Risk: one provider misses `< 60s` target under normal load. - - Mitigation: expose timing metrics and fail CI gates on regression scenarios. + - Mitigation: enforce adapter conformance tests at the runtime contract boundary and keep provider-specific capability flags explicit. +- Risk: an EigenCloud-specific design leaks into VM providers or vice versa. + - Mitigation: separate provider classes (`hosted-vm` vs `hosted-attested-app`) and validate transport assumptions per class. - Risk: fallback masks root hosted failures. - Mitigation: structured fallback logs with explicit reason and original provider ID. @@ -116,8 +137,9 @@ Deliver a provider wizard and provisioning path that supports: - Provider credentials/config for EigenCloud, AWS, DigitalOcean in test/runtime environments. - Existing sandbox control-plane module where provider adapter interface is enforced. - CI lanes capable of running provider integration and fallback behavior tests. +- EigenCloud SDK and deployment image pipeline for attested app runtime. ## Definition of Done - All acceptance criteria AC-1 through AC-10 are validated by tests or deterministic checks. -- Provider wizard, shared contract, hosted adapters, and local fallback behavior are implemented. +- Provider wizard, shared runtime contract, hosted adapters, and local fallback behavior are implemented. - CI checks covering provider selection, provisioning, fallback, and liveness are green. diff --git a/specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md b/specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md new file mode 100644 index 00000000..92895e4c --- /dev/null +++ b/specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md @@ -0,0 +1,85 @@ +# Provider Architecture Addendum + +## Purpose +This note records how the reviewed EigenCloud architecture note was adapted into a multi-provider runtime design for issue #22. + +## Source Inputs +- Reviewed note: + - `https://any.coop/A7AAFUdmufaBG3HDyzxAqzviXfxtPAUeCstfSCVmb5ZY9AGj/eigencloud` +- Reviewed official docs: + - EigenCompute overview + - Quickstart + - Use ecloud SDK + - Expose ports + - Verify trust guarantees + - EigenCompute KMS + +## What Stayed True +- EigenCloud is best treated as one long-lived operator core runtime, not a swarm of always-on external worker apps. +- Internal subagents should stay inside the core runtime by default. +- Durable state should remain outside provider memory. +- Explicit secret release remains the right platform-owned control plane. +- SDK-backed integration is preferred over shell-driven CLI automation. + +## What Changed +- EigenCloud is no longer the top-level architecture. +- The top-level architecture is now provider-neutral. +- AWS and DigitalOcean are VM providers first. +- EigenCloud is an attested app provider. +- Shared control-plane behavior is lifecycle-based, not SSH-based. + +## Final Model + +### Runtime classes +- `local-container` +- `hosted-vm` +- `hosted-attested-app` + +### Provider mapping +- `local` -> `local-container` +- `aws` -> `hosted-vm` +- `digitalocean` -> `hosted-vm` +- `eigencloud` -> `hosted-attested-app` + +### Design rule +Do not force all providers into one transport model. + +Correct transport expectations: +- `local` -> Docker/local process control +- `aws` and `digitalocean` -> SSH-capable VM access +- `eigencloud` -> provider-managed deployed app endpoint with evidence support + +## Why This Matters +If EigenCloud is modeled as just another SSH host: +- attestation becomes invisible +- secret release becomes bolted-on instead of first-class +- the design inherits VM assumptions that do not actually match the provider + +If AWS and DigitalOcean are modeled as EigenCloud-like attested apps: +- the shared contract becomes dishonest +- provider forms become confusing +- implementation work is blocked on capabilities those providers do not expose in MVP + +## Resulting Engineering Rule +Share: +- lifecycle contract +- healthcheck semantics +- fallback policy +- observability schema + +Do not over-share: +- transport details +- evidence model +- secret delivery mechanics +- provider-specific identity assumptions + +## Status +The branch currently implements the control-plane scaffolding: +- provider selection +- fallback policy +- hosted provider registry +- hosted healthcheck routing + +The remaining work is to complete provider-native runtime implementations: +- VM providers with real provisioning +- EigenCloud with SDK-backed attested app runtime diff --git a/specs/22_should-add-support-for-cloud-compute/technical_spec.md b/specs/22_should-add-support-for-cloud-compute/technical_spec.md index d4cf9e91..ed936afc 100644 --- a/specs/22_should-add-support-for-cloud-compute/technical_spec.md +++ b/specs/22_should-add-support-for-cloud-compute/technical_spec.md @@ -1,254 +1,466 @@ -# Technical Spec: Multi-Provider Cloud Compute for Sandbox Runtime +# Technical Spec: Multi-Provider Compute Runtime for Sandbox Execution ## Metadata - Issue: https://github.com/Flow-Research/Jarvis/issues/22 - PRD: `specs/22_should-add-support-for-cloud-compute/product_spec.md` - Design spec: `specs/22_should-add-support-for-cloud-compute/design_spec.md` -- Date: 2026-04-08 +- Date: 2026-04-09 - Phase: 6 (Tech spec) ## Implementation Objective -Implement hosted compute selection (`eigencloud`, `aws`, `digitalocean`) plus local compute (`local`) behind one control-plane path for sandbox creation and healthcheck, with configurable local fallback (default ON) when hosted provisioning fails. +Implement compute selection across `local`, `eigencloud`, `aws`, and `digitalocean` behind one control-plane path for runtime provisioning, healthcheck, failure handling, and fallback, without forcing all providers into the same transport or trust model. + +## Architectural Correction +The previous EigenCloud-only direction was useful for understanding EigenCloud, but it is not a correct top-level abstraction now that we support more than one hosted provider. + +The final architecture must distinguish three runtime classes: +- `local-container` +- `hosted-vm` +- `hosted-attested-app` + +Provider mapping: +- `local` -> `local-container` +- `aws` -> `hosted-vm` +- `digitalocean` -> `hosted-vm` +- `eigencloud` -> `hosted-attested-app` + +This is the key design rule: +- The shared control plane is lifecycle-oriented. +- Provider transports are capability-driven. +- EigenCloud is not modeled as a raw SSH VM in the final architecture. + +## External Constraints +The following constraints come from the reviewed EigenCloud note and official EigenCloud docs: +- EigenCompute deploys containerized services, not raw VMs. +- Deployments are image-based and exposed over bound ports. +- EigenCloud provides attestation/trust evidence. +- EigenCloud provides a deterministic TEE mnemonic and app wallet inside the TEE. +- Stopping/restarting preserves identity, but in-memory state is not durable. +- Terminating the app destroys access to the app wallet permanently. +- The SDK is the correct programmatic integration surface. + +That means: +- EigenCloud should be integrated as an attested app runtime. +- AWS and DigitalOcean should be integrated as VM runtimes first. +- Explicit platform-controlled secret release remains valid across all providers. ## Existing Architecture Baseline -- Sandbox runtime orchestration centers on: +- Sandbox orchestration today centers on: - `src/agents/sandbox/context.ts` - `src/agents/sandbox/backend.ts` - `src/agents/sandbox/types.ts` - `src/agents/sandbox/config.ts` -- Existing backend registry supports runtime backend IDs and factory registration (`docker`, `ssh`). -- Setup/onboarding flows are centralized in: +- Existing runtime backends are currently backend-oriented: + - `docker` + - `ssh` +- Onboarding and setup paths are centered on: - `src/wizard/setup.ts` - `src/commands/onboard*.ts` - `src/cli/program/register.onboard.ts` -- Config types/schemas for sandbox live in: - - `src/config/types.agents-shared.ts` - - `src/config/types.sandbox.ts` - - `src/config/zod-schema.agent-runtime.ts` - -## Proposed Minimal Architecture - -### 1) Compute Provider Contract (new) -Add a hosted provider contract that resolves provider-specific provisioning into a normalized runtime target. +- Current work already landed: + - provider selection wiring + - hosted provider registry scaffolding + - fallback routing + - setup/onboarding prompts and flags + +## Current Implemented State +The current branch now includes a valid phase-0 scaffold: +- provider selection in wizard/CLI/onboarding +- hosted provider registry +- hosted healthcheck execution +- local fallback policy +- sandbox context routing + +Current limitation: +- hosted providers are still modeled as SSH-oriented targets in code +- that is acceptable for `aws` and `digitalocean` as an interim path +- that is not the correct final model for `eigencloud` + +So the shipped scaffold should be treated as: +- a correct control-plane/fallback foundation +- not the final provider transport model + +## Final Architecture + +### 1) Shared Runtime Contract +The shared abstraction must be a provisioned runtime, not a raw SSH target. ```ts type ComputeProviderId = "local" | "eigencloud" | "aws" | "digitalocean"; -type ComputeProvisionResult = { +type ComputeRuntimeKind = "local-container" | "hosted-vm" | "hosted-attested-app"; + +type ComputeProviderCapabilities = { + access: + | { + ssh: boolean; + httpApi: boolean; + }; + attestation: boolean; + explicitSecretRelease: boolean; + startStop: boolean; + destroy: boolean; +}; + +type ProvisionedRuntime = { + providerId: ComputeProviderId; runtimeId: string; - runtimeLabel: string; - connection: { - transport: "ssh"; - target: string; - workspaceRoot: string; - identity?: SecretInput; - knownHosts?: SecretInput; + runtimeKind: ComputeRuntimeKind; + displayName: string; + endpoints: { + sshTarget?: string; + apiBaseUrl?: string; + }; + workspaceRoot?: string; + identityFileRef?: unknown; + evidence?: { + attestationId?: string; + verificationUrl?: string; + deploymentRecord?: string; }; - metadata?: Record; + metadata: Record; +}; + +type RuntimeHealthcheckResult = { + ok: boolean; + detail?: string; + durationMs: number; }; type HostedComputeProvider = { id: Exclude; - provision(params: ProvisionParams): Promise; - healthcheck(params: HealthcheckParams): Promise<{ ok: boolean; detail?: string }>; + capabilities: ComputeProviderCapabilities; + provision(params: ProvisionParams): Promise; + healthcheck(params: HealthcheckParams): Promise; + stop?(runtime: ProvisionedRuntime): Promise; + start?(runtime: ProvisionedRuntime): Promise; + destroy?(runtime: ProvisionedRuntime): Promise; + getEvidence?(runtime: ProvisionedRuntime): Promise; + releaseSecrets?(params: ReleaseSecretsParams): Promise; }; ``` -Design choice: -- Keep `docker` backend for local path. -- Add hosted compute adapter layer that feeds into sandbox runtime using a normalized SSH-oriented handoff for provider-created environments. -- Avoid introducing multiple incompatible control planes. +### 2) Provider Profiles + +#### Local +- Maps to existing `docker` backend. +- No attestation. +- No explicit secret release endpoint required. + +#### AWS +- First-class profile: `hosted-vm` +- Primary transport: SSH +- Provisioning target: EC2 or equivalent VM instance +- Execution path can continue to reuse the `ssh` backend +- Attestation is not required for MVP + +#### DigitalOcean +- First-class profile: `hosted-vm` +- Primary transport: SSH +- Provisioning target: Droplet +- Execution path can continue to reuse the `ssh` backend +- Attestation is not required for MVP + +#### EigenCloud +- First-class profile: `hosted-attested-app` +- Primary transport: provider-managed HTTP/API endpoint +- Provisioning target: deployed EigenCompute app via SDK +- Must expose evidence/attestation metadata +- Should support explicit secret release +- Must not be permanently forced through the `ssh` backend in the final design -### 2) Config Surface (extend existing sandbox config) -Add `sandbox.compute` config block under `AgentSandboxConfig`/schema: +### 3) Control-Plane Routing +Routing decisions happen in two stages: + +#### A. Provider stage +- Read `sandbox.compute.provider` +- Provision with the selected provider adapter +- Receive a `ProvisionedRuntime` + +#### B. Access stage +- Convert `ProvisionedRuntime` into the concrete execution backend: + - `local-container` -> `docker` + - `hosted-vm` with SSH -> `ssh` + - `hosted-attested-app` with HTTP API -> new `provider-managed` or `remote-api` execution path + +This keeps one control plane while allowing multiple execution transports. + +### 4) Fallback Policy +Fallback remains control-plane policy, not provider emulation. + +Rules: +- Hosted provider failure before readiness: + - if fallback `ON` -> try local + - if fallback `OFF` -> return hosted failure +- Healthcheck failure after provisioning: + - treated as hosted failure for fallback purposes +- Fallback logs must preserve: + - selected provider + - runtime kind + - failure class + - local fallback outcome + +### 5) Evidence and Secret Release +Evidence and secret release must be optional capabilities, not universal assumptions. + +Rules: +- `eigencloud`: + - supports evidence/attestation + - supports explicit secret release flow +- `aws` and `digitalocean` MVP: + - no attestation requirement + - secrets delivered through VM bootstrap/SSH-safe mechanisms +- `local`: + - no attestation + - no provider-level secret release + +## Config Surface +Retain the new `sandbox.compute` block, but evolve it to represent provider capabilities cleanly. ```ts compute?: { provider?: "local" | "eigencloud" | "aws" | "digitalocean"; - fallbackToLocalOnHostedFailure?: boolean; // default true + fallbackToLocalOnHostedFailure?: boolean; hosted?: { - eigencloud?: { projectId?: string; region?: string; credentialRef?: SecretInput }; - aws?: { region?: string; roleArn?: string; credentialRef?: SecretInput }; - digitalocean?: { projectId?: string; region?: string; tokenRef?: SecretInput }; + eigencloud?: { + authKeyRef?: SecretInput; + environment?: string; + imageRef?: string; + apiBaseUrl?: string; + }; + aws?: { + region?: string; + roleArn?: string; + imageId?: string; + instanceType?: string; + subnetId?: string; + target?: string; + identityFile?: string; + }; + digitalocean?: { + region?: string; + image?: string; + size?: string; + projectId?: string; + tokenRef?: SecretInput; + target?: string; + identityFile?: string; + }; }; } ``` -Validation rules: -- `provider` defaults to `local` when unset. -- `fallbackToLocalOnHostedFailure` defaults to `true`. -- Hosted provider-specific required fields validated when selected. - -### 3) Control-Plane Routing -In sandbox context resolution: -- Read `sandbox.compute.provider`. -- Route: - - `local` -> existing local path (docker backend). - - hosted provider -> hosted provisioner + healthcheck. -- On hosted failure: - - if fallback enabled -> attempt local provisioning in same request path. - - if fallback disabled -> return hosted failure. - -### 4) Wizard + CLI Integration -Extend setup/onboarding to configure provider and fallback: -- Interactive wizard: - - provider select: EigenCloud/AWS/DigitalOcean/Local - - provider-specific fields - - fallback toggle for hosted providers (default ON) -- Non-interactive: - - new flags for provider selection and hosted credentials references. - -### 5) Logging and Telemetry Schema -Add structured events for: -- provider selected -- provisioning started/succeeded/failed -- fallback attempted/succeeded/failed -- healthcheck passed/failed -- duration_ms and provider_id always attached - -## Detailed Change Plan - -### A) Config Types + Schema -Files: -- `src/config/types.agents-shared.ts` -- `src/config/types.sandbox.ts` -- `src/config/zod-schema.agent-runtime.ts` +Important rule: +- `target` remains valid for VM-class providers. +- `target` is not the final source of truth for EigenCloud. -Changes: -- add new `compute` type in `AgentSandboxConfig` -- add zod schema for provider enum, fallback toggle, provider-specific settings -- maintain backward compatibility: if `compute` absent, behavior remains existing local path +## Control-Plane Modules -### B) Hosted Provider Registry + Adapters -New files: +### A) Provider Registry +Files: - `src/agents/sandbox/compute/types.ts` - `src/agents/sandbox/compute/registry.ts` + +Responsibilities: +- register hosted provider adapters +- expose provider capabilities +- dispatch provision/healthcheck/evidence/release-secrets + +### B) Provider Adapters +Files: - `src/agents/sandbox/compute/providers/eigencloud.ts` - `src/agents/sandbox/compute/providers/aws.ts` - `src/agents/sandbox/compute/providers/digitalocean.ts` -- `src/agents/sandbox/compute/healthcheck.ts` +- `src/agents/sandbox/compute/providers/shared.ts` -Changes: -- register hosted provider adapters -- normalize provider outputs into common runtime shape +Responsibilities: +- convert provider config into a `ProvisionedRuntime` +- implement provider-native lifecycle behavior -### C) Sandbox Context Routing + Fallback +### C) Runtime Resolution Layer Files: - `src/agents/sandbox/context.ts` -- `src/agents/sandbox/config.ts` -- `src/agents/sandbox/types.ts` - -Changes: -- resolve selected compute provider from config -- branch execution: - - local direct path - - hosted provisioning path with healthcheck -- fallback flow with explicit logs and error propagation policy +- future: `src/agents/sandbox/provider-runtime.ts` + +Responsibilities: +- resolve provider from config +- provision runtime +- choose correct execution backend based on runtime kind and capabilities +- perform healthcheck and fallback + +### D) EigenCloud-Specific Runtime Access +New future files: +- `src/agents/sandbox/provider-managed.ts` +- `src/agents/sandbox/provider-managed.test.ts` + +Responsibilities: +- handle provider-managed API transport +- invoke `/health`, `/exec`, `/files/*`, `/release-secrets` +- carry attestation/evidence metadata + +This is the missing final leg for EigenCloud. + +## Onboarding and Wizard Surface +Already implemented: +- provider selection +- target/workspace/identity/fallback flags + +Needed refinement: +- keep `aws` and `digitalocean` forms SSH/VM-shaped +- evolve `eigencloud` form away from SSH-target-first UX toward: + - auth key reference + - image/version + - environment/network + - evidence-capable runtime explanation -### D) Wizard and Onboard Surface Files: - `src/wizard/setup.ts` -- `src/wizard/setup.types.ts` -- `src/commands/onboard-types.ts` -- `src/cli/program/register.onboard.ts` -- `src/commands/onboard-non-interactive/local.ts` - -New file: - `src/wizard/setup.compute-provider.ts` +- `src/commands/onboard.ts` +- `src/commands/onboard-sandbox-compute.ts` +- `src/cli/program/register.onboard.ts` -Changes: -- add provider selection and hosted credential prompts -- add fallback toggle prompt -- wire non-interactive flags into config application path - -### E) Observability -Files: -- `src/agents/sandbox/context.ts` (event emission points) -- `src/logging/*` (if dedicated schema helpers are required) - -Changes: -- standard event payload fields: - - `compute_provider` - - `selected_provider` - - `fallback_provider` (if used) - - `fallback_trigger_reason` - - `duration_ms` - - `healthcheck_ok` - -## Runtime Sequence -1. Load sandbox config and resolve `compute.provider`. -2. If provider=`local`: - - execute existing local runtime path. -3. If provider is hosted: - - run provider provisioner. - - run provider healthcheck. -4. On hosted error: - - if fallback ON: route to local create path and emit fallback event. - - else: return hosted failure. -5. Return unified runtime context regardless of provider. +## Observability Schema +Every lifecycle event should carry: +- `compute_provider` +- `runtime_kind` +- `capabilities` +- `duration_ms` +- `healthcheck_ok` +- `fallback_attempted` +- `fallback_result` + +Attested providers may also carry: +- `attestation_id` +- `verification_url` +- `deployment_record` + +Never log: +- raw secrets +- auth keys +- private key material +- identity file contents ## Failure Model -- Hosted provisioner error - - fallback ON -> continue with local path - - fallback OFF -> fail request -- Healthcheck failure after hosted create - - treated as hosted failure for fallback logic -- Local fallback failure - - return composite error: hosted failure + fallback failure detail - -## Backward Compatibility -- Existing configs without `sandbox.compute` remain valid and default to local. -- Existing `sandbox.backend` behavior remains supported. -- No changes to current default gateway behavior unless compute provider is configured. - -## Security and Secret Handling -- Hosted credentials must support SecretRef flows (env/file/exec) and avoid plaintext where possible. -- Do not log secret values; log only provider ID and non-sensitive failure categories. -- Reuse existing secret resolution and redaction patterns. + +### Hosted VM failure +- instance creation fails +- SSH not reachable +- bootstrapping fails +- healthcheck fails + +### Hosted attested app failure +- deployment submission fails +- app does not reach ready state +- healthcheck endpoint fails +- evidence retrieval fails +- secret release fails + +### Fallback behavior +- fallback only applies from hosted to local +- fallback preserves original hosted failure context +- final error may be composite: + - hosted failure + - local fallback failure + +## Security Rules +- Do not use EigenCloud app wallet as product treasury. +- Use provider capabilities instead of assuming attestation everywhere. +- Keep explicit secret release as the platform-owned policy gate. +- Reuse existing SecretRef and redaction flows for provider credentials. +- Treat provider evidence as trust metadata, not as an excuse to skip platform authorization and budget controls. ## Testing Plan -### Unit Tests -- Config schema and defaults: - - `src/config/config.sandbox-docker.test.ts` (extend) or add `src/config/config.sandbox.compute.test.ts` -- Provider registry: - - `src/agents/sandbox/compute/registry.test.ts` -- Fallback routing: - - `src/agents/sandbox/context.compute-fallback.test.ts` -- Wizard mapping: - - `src/wizard/setup.compute-provider.test.ts` -- Non-interactive flags mapping: - - `src/cli/program/register.onboard.test.ts` - - `src/commands/onboard-non-interactive/local.test.ts` - -### Integration Tests -- Hosted provider success path for each provider (mocked provider APIs): - - `src/agents/sandbox/compute/providers/eigencloud.test.ts` - - `src/agents/sandbox/compute/providers/aws.test.ts` - - `src/agents/sandbox/compute/providers/digitalocean.test.ts` -- Fallback ON: - - hosted failure -> local success -- Fallback OFF: - - hosted failure -> terminal error +### Already Implemented +- provider selection routing +- fallback enabled behavior +- fallback disabled behavior +- hosted healthcheck failure routing +- wizard/CLI mapping +- non-interactive setup coverage + +### Remaining Unit Tests +- provider capability matrix tests +- `ProvisionedRuntime` mapping tests +- EigenCloud evidence mapping tests +- provider-managed API transport tests + +### Remaining Integration Tests +- real DigitalOcean VM provisioning + SSH-ready healthcheck +- real AWS VM provisioning + SSH-ready healthcheck +- real EigenCloud SDK deployment + app healthcheck + evidence retrieval +- explicit secret release flow on EigenCloud ### Acceptance Mapping -- AC-1/2: wizard and route mapping tests -- AC-3/4/5: per-provider create + healthcheck tests with `< 60s` assertion harness -- AC-6: local provider contract parity tests -- AC-7/8/9: fallback default and toggle behavior tests -- AC-10: structured log event payload tests - -## Rollout Strategy -- Feature is enabled by config selection; default local behavior unchanged. -- Merge in increments: - 1. config + type plumbing - 2. provider contract + stubs with tests - 3. hosted adapters + fallback routing - 4. wizard/CLI surfaces - 5. end-to-end validation and docs +- AC-1/2: onboarding and routing tests +- AC-3/4/5: provider-specific integration harnesses +- AC-6: local path parity +- AC-7/8/9: fallback behavior tests +- AC-10: structured logging tests +- AC-11: evidence gating tests + +## Phased Delivery Plan + +### Phase 0: Scaffolding +Status: done on this branch + +Includes: +- provider selection +- config plumbing +- hosted provider registry +- hosted healthcheck path +- fallback routing + +### Phase 1: Runtime Contract Upgrade +Next + +Includes: +- `ProvisionedRuntime` +- provider capability matrix +- runtime-kind-aware routing + +### Phase 2: VM Providers +Next after phase 1 + +Includes: +- real DigitalOcean adapter +- real AWS adapter +- SSH-ready healthcheck and lifecycle behavior + +### Phase 3: EigenCloud Attested Runtime +After VM providers or in parallel if credentials and image pipeline are ready + +Includes: +- SDK-backed deploy/start/stop/destroy +- app endpoint readiness +- evidence retrieval +- explicit secret release +- provider-managed API execution path + +### Phase 4: Unified Operator Runtime Polishing +Final + +Includes: +- richer observability +- provider-specific docs +- full integration CI strategy ## Explicit Non-Goals -- Cost-based provider optimization. -- Multi-region placement heuristics. -- Wallet/reward/PSH integration. -- Changing existing trusted-boundary security model outside compute selection/fallback. +- Making every provider attested in MVP +- Using one provider’s lifecycle model as the universal model +- Treating EigenCloud wallet/KMS semantics as the generic hosted compute baseline +- Cost-based scheduling and PSH integration in this issue + +## Reference Notes +- Internal reference note reviewed: + - `https://any.coop/A7AAFUdmufaBG3HDyzxAqzviXfxtPAUeCstfSCVmb5ZY9AGj/eigencloud` +- Official EigenCloud docs reviewed: + - EigenCompute overview + - Quickstart + - Use ecloud SDK + - Expose ports + - Verify trust guarantees + - Create and use authentication keys + - EigenCompute KMS + - Security and trust model From ed3ae04ccb5adfeb5df1e5b81434762ecf10c03f Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Thu, 9 Apr 2026 20:55:00 +0100 Subject: [PATCH 10/11] sandbox: add compute runtime metadata to hosted contexts --- ...ed-runner.buildembeddedsandboxinfo.test.ts | 11 ++++ src/agents/pi-tools-agent-config.test.ts | 11 ++++ .../sandbox.resolveSandboxContext.test.ts | 11 ++++ src/agents/sandbox.ts | 8 +++ src/agents/sandbox/compute/providers/aws.ts | 4 +- .../sandbox/compute/providers/digitalocean.ts | 4 +- .../sandbox/compute/providers/eigencloud.ts | 7 +- .../sandbox/compute/providers/shared.ts | 31 ++++++++- src/agents/sandbox/compute/registry.test.ts | 11 +++- src/agents/sandbox/compute/registry.ts | 6 +- src/agents/sandbox/compute/types.ts | 17 ++++- .../sandbox/context.compute-fallback.test.ts | 65 +++++++++++++++++++ src/agents/sandbox/context.ts | 53 +++++++++++++++ src/agents/sandbox/test-fixtures.ts | 11 ++++ src/agents/sandbox/types.ts | 28 ++++++++ .../test-helpers/pi-tools-sandbox-context.ts | 11 ++++ src/plugin-sdk/sandbox.ts | 8 +++ 17 files changed, 286 insertions(+), 11 deletions(-) diff --git a/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.test.ts b/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.test.ts index 52289130..a776096b 100644 --- a/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.test.ts +++ b/src/agents/pi-embedded-runner.buildembeddedsandboxinfo.test.ts @@ -14,6 +14,17 @@ function createSandboxContext(overrides?: Partial): SandboxConte runtimeLabel: "openclaw-sbx-test", containerName: "openclaw-sbx-test", containerWorkdir: "/workspace", + compute: { + providerId: "local", + runtimeKind: "local-container", + access: {}, + capabilities: { + sshAccess: false, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + }, docker: { image: "openclaw-sandbox:bookworm-slim", containerPrefix: "openclaw-sbx-", diff --git a/src/agents/pi-tools-agent-config.test.ts b/src/agents/pi-tools-agent-config.test.ts index 353b0333..2a300d2a 100644 --- a/src/agents/pi-tools-agent-config.test.ts +++ b/src/agents/pi-tools-agent-config.test.ts @@ -583,6 +583,17 @@ describe("Agent-specific tool filtering", () => { runtimeLabel: "test-container", containerName: "test-container", containerWorkdir: "/workspace", + compute: { + providerId: "local", + runtimeKind: "local-container", + access: {}, + capabilities: { + sshAccess: false, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + }, docker: { image: "test-image", containerPrefix: "test-", diff --git a/src/agents/sandbox.resolveSandboxContext.test.ts b/src/agents/sandbox.resolveSandboxContext.test.ts index 66e0d515..e754e0c8 100644 --- a/src/agents/sandbox.resolveSandboxContext.test.ts +++ b/src/agents/sandbox.resolveSandboxContext.test.ts @@ -123,6 +123,17 @@ describe("resolveSandboxContext", () => { expect(result?.runtimeId).toBe("test-runtime"); expect(result?.containerName).toBe("test-runtime"); expect(result?.backend?.id).toBe("test-backend"); + expect(result?.compute).toEqual({ + providerId: "local", + runtimeKind: "local-container", + access: {}, + capabilities: { + sshAccess: false, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + }); } finally { restore(); } diff --git a/src/agents/sandbox.ts b/src/agents/sandbox.ts index d26dc752..018edada 100644 --- a/src/agents/sandbox.ts +++ b/src/agents/sandbox.ts @@ -67,9 +67,17 @@ export type { } from "./sandbox/ssh.js"; export type { + SandboxComputeAccess, + SandboxComputeCapabilities, SandboxBrowserConfig, SandboxBrowserContext, SandboxConfig, + SandboxComputeConfig, + SandboxComputeEvidence, + SandboxComputeHostedProviderConfig, + SandboxComputeProviderId, + SandboxComputeRuntimeInfo, + SandboxComputeRuntimeKind, SandboxContext, SandboxDockerConfig, SandboxPruneConfig, diff --git a/src/agents/sandbox/compute/providers/aws.ts b/src/agents/sandbox/compute/providers/aws.ts index d381873b..e5817e06 100644 --- a/src/agents/sandbox/compute/providers/aws.ts +++ b/src/agents/sandbox/compute/providers/aws.ts @@ -1,3 +1,5 @@ import { createHostedSshComputeProvider } from "./shared.js"; -export const awsHostedComputeProvider = createHostedSshComputeProvider("aws"); +export const awsHostedComputeProvider = createHostedSshComputeProvider("aws", { + runtimeKind: "hosted-vm", +}); diff --git a/src/agents/sandbox/compute/providers/digitalocean.ts b/src/agents/sandbox/compute/providers/digitalocean.ts index 0f61718d..19e32947 100644 --- a/src/agents/sandbox/compute/providers/digitalocean.ts +++ b/src/agents/sandbox/compute/providers/digitalocean.ts @@ -1,3 +1,5 @@ import { createHostedSshComputeProvider } from "./shared.js"; -export const digitaloceanHostedComputeProvider = createHostedSshComputeProvider("digitalocean"); +export const digitaloceanHostedComputeProvider = createHostedSshComputeProvider("digitalocean", { + runtimeKind: "hosted-vm", +}); diff --git a/src/agents/sandbox/compute/providers/eigencloud.ts b/src/agents/sandbox/compute/providers/eigencloud.ts index 92324b74..cacca127 100644 --- a/src/agents/sandbox/compute/providers/eigencloud.ts +++ b/src/agents/sandbox/compute/providers/eigencloud.ts @@ -1,3 +1,8 @@ import { createHostedSshComputeProvider } from "./shared.js"; -export const eigencloudHostedComputeProvider = createHostedSshComputeProvider("eigencloud"); +export const eigencloudHostedComputeProvider = createHostedSshComputeProvider("eigencloud", { + runtimeKind: "hosted-attested-app", + evidence: { + summary: "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", + }, +}); diff --git a/src/agents/sandbox/compute/providers/shared.ts b/src/agents/sandbox/compute/providers/shared.ts index 0d4e5aab..0793c6cb 100644 --- a/src/agents/sandbox/compute/providers/shared.ts +++ b/src/agents/sandbox/compute/providers/shared.ts @@ -2,6 +2,7 @@ import { performance } from "node:perf_hooks"; import type { HostedSandboxComputeProvider, HostedSandboxComputeProviderId, + HostedSandboxComputeRuntimeInfo, HostedSandboxHealthcheckParams, HostedSandboxHealthcheckResult, HostedSandboxProvisionParams, @@ -89,17 +90,43 @@ function validateHostedBackend(params: HostedSandboxProvisionParams): void { } } +type HostedSshComputeProviderOptions = { + runtimeKind: HostedSandboxComputeRuntimeInfo["runtimeKind"]; + capabilities?: Partial; + evidence?: HostedSandboxComputeRuntimeInfo["evidence"]; +}; + +function buildHostedCapabilities( + options?: HostedSshComputeProviderOptions, +): HostedSandboxComputeRuntimeInfo["capabilities"] { + return { + sshAccess: true, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + ...options?.capabilities, + }; +} + export function createHostedSshComputeProvider( id: HostedSandboxComputeProviderId, + options: HostedSshComputeProviderOptions, ): HostedSandboxComputeProvider { return { id, async provision(params): Promise { validateHostedBackend(params); return { - providerId: id, cfg: params.cfg, - target: resolveHostedTarget(params), + runtime: { + providerId: id, + runtimeKind: options.runtimeKind, + access: { + sshTarget: resolveHostedTarget(params), + }, + capabilities: buildHostedCapabilities(options), + evidence: options.evidence, + }, }; }, async healthcheck(params): Promise { diff --git a/src/agents/sandbox/compute/registry.test.ts b/src/agents/sandbox/compute/registry.test.ts index 37546f74..cb8110de 100644 --- a/src/agents/sandbox/compute/registry.test.ts +++ b/src/agents/sandbox/compute/registry.test.ts @@ -45,8 +45,15 @@ describe("sandbox compute registry", () => { runtime, }); - expect(result.providerId).toBe("aws"); - expect(result.target).toBe("ec2-user@aws-host:22"); + expect(result.runtime.providerId).toBe("aws"); + expect(result.runtime.runtimeKind).toBe("hosted-vm"); + expect(result.runtime.access.sshTarget).toBe("ec2-user@aws-host:22"); + expect(result.runtime.capabilities).toEqual({ + sshAccess: true, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }); expect(runtime.log).toHaveBeenCalled(); }); diff --git a/src/agents/sandbox/compute/registry.ts b/src/agents/sandbox/compute/registry.ts index a8c99fd0..7b1c9a11 100644 --- a/src/agents/sandbox/compute/registry.ts +++ b/src/agents/sandbox/compute/registry.ts @@ -45,6 +45,10 @@ function resolveRuntime(runtime: RuntimeEnv | undefined): RuntimeEnv { return runtime ?? defaultRuntime; } +function formatHostedRuntimeAccess(target: HostedSandboxProvisionResult["runtime"]["access"]): string { + return target.sshTarget ?? target.httpsBaseUrl ?? "n/a"; +} + export async function provisionHostedSandboxCompute(params: { providerId: HostedSandboxComputeProviderId; cfg: HostedSandboxProvisionParams["cfg"]; @@ -63,7 +67,7 @@ export async function provisionHostedSandboxCompute(params: { runtime, }); runtime.log( - `sandbox.compute provision ok provider=${params.providerId} target=${result.target} backend=${result.cfg.backend}`, + `sandbox.compute provision ok provider=${params.providerId} runtime_kind=${result.runtime.runtimeKind} access=${formatHostedRuntimeAccess(result.runtime.access)} backend=${result.cfg.backend}`, ); return result; } diff --git a/src/agents/sandbox/compute/types.ts b/src/agents/sandbox/compute/types.ts index 8124c722..3578a7ea 100644 --- a/src/agents/sandbox/compute/types.ts +++ b/src/agents/sandbox/compute/types.ts @@ -1,7 +1,19 @@ import type { RuntimeEnv } from "../../../runtime.js"; -import type { SandboxContext, SandboxConfig, SandboxComputeProviderId } from "../types.js"; +import type { + SandboxComputeRuntimeInfo, + SandboxComputeRuntimeKind, + SandboxContext, + SandboxConfig, + SandboxComputeProviderId, +} from "../types.js"; export type HostedSandboxComputeProviderId = Exclude; +export type HostedSandboxRuntimeKind = Exclude; + +export type HostedSandboxComputeRuntimeInfo = SandboxComputeRuntimeInfo & { + providerId: HostedSandboxComputeProviderId; + runtimeKind: HostedSandboxRuntimeKind; +}; export type HostedSandboxProvisionParams = { providerId: HostedSandboxComputeProviderId; @@ -11,9 +23,8 @@ export type HostedSandboxProvisionParams = { }; export type HostedSandboxProvisionResult = { - providerId: HostedSandboxComputeProviderId; cfg: SandboxConfig; - target: string; + runtime: HostedSandboxComputeRuntimeInfo; }; export type HostedSandboxHealthcheckParams = { diff --git a/src/agents/sandbox/context.compute-fallback.test.ts b/src/agents/sandbox/context.compute-fallback.test.ts index 35b9a9d2..8b326c45 100644 --- a/src/agents/sandbox/context.compute-fallback.test.ts +++ b/src/agents/sandbox/context.compute-fallback.test.ts @@ -63,6 +63,17 @@ describe("sandbox compute fallback routing", () => { expect(result?.backendId).toBe("docker"); expect(result?.runtimeId).toBe("local-ok"); + expect(result?.compute).toEqual({ + providerId: "local", + runtimeKind: "local-container", + access: {}, + capabilities: { + sshAccess: false, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + }); } finally { restoreDocker(); restoreHosted(); @@ -139,6 +150,8 @@ describe("sandbox compute fallback routing", () => { expect(result?.backendId).toBe("docker"); expect(result?.runtimeId).toBe("local-ok"); + expect(result?.compute.providerId).toBe("local"); + expect(result?.compute.runtimeKind).toBe("local-container"); } finally { restoreDocker(); restoreHosted(); @@ -181,4 +194,56 @@ describe("sandbox compute fallback routing", () => { restoreHosted(); } }); + + it("preserves hosted runtime metadata when hosted provisioning succeeds", async () => { + const restoreHosted = registerSandboxBackend("ssh", createStaticBackend("ssh", "hosted-ok")); + try { + const cfg: OpenClawConfig = { + agents: { + defaults: { + skipBootstrap: true, + sandbox: { + mode: "all", + scope: "session", + compute: { + provider: "eigencloud", + fallbackToLocalOnHostedFailure: true, + hosted: { + eigencloud: { target: "ubuntu@hosted-target:22" }, + }, + }, + }, + }, + }, + }; + + const result = await resolveSandboxContext({ + config: cfg, + sessionKey: "agent:worker:task", + workspaceDir: "/tmp/openclaw-test", + }); + + expect(result?.backendId).toBe("ssh"); + expect(result?.runtimeId).toBe("hosted-ok"); + expect(result?.compute).toEqual({ + providerId: "eigencloud", + runtimeKind: "hosted-attested-app", + access: { + sshTarget: "ubuntu@hosted-target:22", + }, + capabilities: { + sshAccess: true, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + evidence: { + summary: + "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", + }, + }); + } finally { + restoreHosted(); + } + }); }); diff --git a/src/agents/sandbox/context.ts b/src/agents/sandbox/context.ts index 6a6e8ebe..3614a44c 100644 --- a/src/agents/sandbox/context.ts +++ b/src/agents/sandbox/context.ts @@ -20,8 +20,10 @@ import { isHostedSandboxComputeProviderId, provisionHostedSandboxCompute, } from "./compute/registry.js"; +import type { HostedSandboxComputeRuntimeInfo } from "./compute/types.js"; import type { SandboxConfig, + SandboxComputeRuntimeInfo, SandboxContext, SandboxDockerConfig, SandboxWorkspaceInfo, @@ -127,11 +129,57 @@ function formatSandboxError(error: unknown): string { } } +function resolveSandboxComputeRuntimeInfo(params: { + cfg: SandboxConfig; + provisionedRuntime?: HostedSandboxComputeRuntimeInfo; +}): SandboxComputeRuntimeInfo { + if (params.provisionedRuntime) { + return params.provisionedRuntime; + } + + const providerId = params.cfg.compute?.provider ?? "local"; + if (providerId === "local") { + return { + providerId, + runtimeKind: "local-container", + access: {}, + capabilities: { + sshAccess: false, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + }; + } + + return { + providerId, + runtimeKind: providerId === "eigencloud" ? "hosted-attested-app" : "hosted-vm", + access: { + sshTarget: params.cfg.ssh.target, + }, + capabilities: { + sshAccess: params.cfg.backend === "ssh", + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + evidence: + providerId === "eigencloud" + ? { + summary: + "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", + } + : undefined, + }; +} + async function resolveSandboxContextWithConfig(params: { config?: OpenClawConfig; workspaceDir?: string; rawSessionKey: string; cfg: SandboxConfig; + provisionedRuntime?: HostedSandboxComputeRuntimeInfo; }): Promise { const { rawSessionKey, cfg } = params; @@ -216,6 +264,10 @@ async function resolveSandboxContextWithConfig(params: { containerName: backend.runtimeId, containerWorkdir: backend.workdir, docker: resolvedCfg.docker, + compute: resolveSandboxComputeRuntimeInfo({ + cfg: resolvedCfg, + provisionedRuntime: params.provisionedRuntime, + }), tools: resolvedCfg.tools, browserAllowHostControl: resolvedCfg.browser.allowHostControl, browser: browser ?? undefined, @@ -261,6 +313,7 @@ export async function resolveSandboxContext(params: { workspaceDir: params.workspaceDir, rawSessionKey, cfg: provisioned.cfg, + provisionedRuntime: provisioned.runtime, }); const healthcheck = await healthcheckHostedSandboxCompute({ providerId: computeProvider, diff --git a/src/agents/sandbox/test-fixtures.ts b/src/agents/sandbox/test-fixtures.ts index b20b5b45..c88752da 100644 --- a/src/agents/sandbox/test-fixtures.ts +++ b/src/agents/sandbox/test-fixtures.ts @@ -38,6 +38,17 @@ export function createSandboxTestContext(params?: { containerName: "openclaw-sbx-test", containerWorkdir: "/workspace", tools: { allow: ["*"], deny: [] }, + compute: { + providerId: "local", + runtimeKind: "local-container", + access: {}, + capabilities: { + sshAccess: false, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + }, browserAllowHostControl: false, ...sandboxOverrides, docker, diff --git a/src/agents/sandbox/types.ts b/src/agents/sandbox/types.ts index 9fe2891d..a9aea6d0 100644 --- a/src/agents/sandbox/types.ts +++ b/src/agents/sandbox/types.ts @@ -81,6 +81,33 @@ export type SandboxComputeHostedProviderConfig = { knownHostsData?: string; }; +export type SandboxComputeRuntimeKind = "local-container" | "hosted-vm" | "hosted-attested-app"; + +export type SandboxComputeAccess = { + sshTarget?: string; + httpsBaseUrl?: string; +}; + +export type SandboxComputeCapabilities = { + sshAccess: boolean; + httpsAccess: boolean; + supportsAttestation: boolean; + supportsSecretRelease: boolean; +}; + +export type SandboxComputeEvidence = { + summary?: string; + verifyUrl?: string; +}; + +export type SandboxComputeRuntimeInfo = { + providerId: SandboxComputeProviderId; + runtimeKind: SandboxComputeRuntimeKind; + access: SandboxComputeAccess; + capabilities: SandboxComputeCapabilities; + evidence?: SandboxComputeEvidence; +}; + export type SandboxComputeConfig = { provider: SandboxComputeProviderId; fallbackToLocalOnHostedFailure: boolean; @@ -125,6 +152,7 @@ export type SandboxContext = { containerName: string; containerWorkdir: string; docker: SandboxDockerConfig; + compute: SandboxComputeRuntimeInfo; tools: SandboxToolPolicy; browserAllowHostControl: boolean; browser?: SandboxBrowserContext; diff --git a/src/agents/test-helpers/pi-tools-sandbox-context.ts b/src/agents/test-helpers/pi-tools-sandbox-context.ts index abf712c2..1d64e9cb 100644 --- a/src/agents/test-helpers/pi-tools-sandbox-context.ts +++ b/src/agents/test-helpers/pi-tools-sandbox-context.ts @@ -28,6 +28,17 @@ export function createPiToolsSandboxContext(params: PiToolsSandboxContextParams) containerName: params.containerName ?? "openclaw-sbx-test", containerWorkdir: params.containerWorkdir ?? "/workspace", fsBridge: params.fsBridge, + compute: { + providerId: "local", + runtimeKind: "local-container", + access: {}, + capabilities: { + sshAccess: false, + httpsAccess: false, + supportsAttestation: false, + supportsSecretRelease: false, + }, + }, docker: { image: "openclaw-sandbox:bookworm-slim", containerPrefix: "openclaw-sbx-", diff --git a/src/plugin-sdk/sandbox.ts b/src/plugin-sdk/sandbox.ts index ce349fb9..3a62a740 100644 --- a/src/plugin-sdk/sandbox.ts +++ b/src/plugin-sdk/sandbox.ts @@ -13,6 +13,14 @@ export type { SandboxBackendManager, SandboxBackendRegistration, SandboxBackendRuntimeInfo, + SandboxComputeAccess, + SandboxComputeCapabilities, + SandboxComputeConfig, + SandboxComputeEvidence, + SandboxComputeHostedProviderConfig, + SandboxComputeProviderId, + SandboxComputeRuntimeInfo, + SandboxComputeRuntimeKind, SandboxContext, SandboxResolvedPath, SandboxSshConfig, From a86bc7db3f65b8c70c93b53c2b0789b73b335a80 Mon Sep 17 00:00:00 2001 From: Flow-Research Date: Thu, 9 Apr 2026 21:41:47 +0100 Subject: [PATCH 11/11] feat(sandbox): use openshell for hosted compute --- docs/.generated/config-baseline.json | 27140 +++++++++++++-- docs/.generated/config-baseline.jsonl | 2166 +- .../.issue-flow-state.json | 5 +- .../brainstorm_transcript.md | 22 +- .../design_review_summary.md | 8 + .../design_spec.md | 42 + .../issue_body_draft.md | 5 + .../issue_intake.md | 18 +- .../prd_review_summary.md | 5 + .../product_spec.md | 22 + .../provider_architecture_addendum.md | 17 + .../technical_spec.md | 77 +- .../techspec_review_summary.md | 8 + src/agents/sandbox-merge.test.ts | 22 +- src/agents/sandbox/compute/providers/aws.ts | 7 +- .../sandbox/compute/providers/digitalocean.ts | 7 +- .../sandbox/compute/providers/eigencloud.ts | 13 +- .../sandbox/compute/providers/shared.ts | 44 +- src/agents/sandbox/compute/registry.test.ts | 49 +- src/agents/sandbox/compute/registry.ts | 4 +- src/agents/sandbox/config.ts | 42 +- .../sandbox/context.compute-fallback.test.ts | 50 +- src/agents/sandbox/context.ts | 29 +- src/canvas-host/a2ui/a2ui.bundle.js | 27593 +++++++++------- src/cli/program/register.onboard.ts | 8 +- src/commands/onboard-non-interactive/local.ts | 8 +- src/commands/onboard-sandbox-compute.test.ts | 54 +- src/commands/onboard-sandbox-compute.ts | 95 +- src/commands/onboard.test.ts | 4 +- src/config/config.sandbox-docker.test.ts | 13 +- src/config/zod-schema.agent-runtime.ts | 27 +- src/wizard/setup.compute-provider.test.ts | 26 +- src/wizard/setup.compute-provider.ts | 32 +- 33 files changed, 42849 insertions(+), 14813 deletions(-) diff --git a/docs/.generated/config-baseline.json b/docs/.generated/config-baseline.json index 3b41da19..7c960b04 100644 --- a/docs/.generated/config-baseline.json +++ b/docs/.generated/config-baseline.json @@ -9385,25 +9385,20 @@ ], "label": "Discord", "help": "very well supported right now.", - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu", + "path": "channels.discord.accounts", "kind": "channel", "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Feishu", - "help": "飞书/Lark enterprise messaging with doc/wiki/drive tools.", + "tags": [], "hasChildren": true }, { - "path": "channels.feishu.accounts", + "path": "channels.discord.accounts.*", "kind": "channel", "type": "object", "required": false, @@ -9413,52 +9408,57 @@ "hasChildren": true }, { - "path": "channels.feishu.accounts.*", + "path": "channels.discord.accounts.*.ackReaction", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.actions", + "path": "channels.discord.accounts.*.ackReactionScope", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "group-mentions", + "group-all", + "direct", + "all", + "off", + "none" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.actions.reactions", + "path": "channels.discord.accounts.*.actions", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.allowFrom", + "path": "channels.discord.accounts.*.actions.channelInfo", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.allowFrom.*", + "path": "channels.discord.accounts.*.actions.channels", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9466,9 +9466,9 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.appId", + "path": "channels.discord.accounts.*.actions.emojiUploads", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9476,60 +9476,57 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.appSecret", + "path": "channels.discord.accounts.*.actions.events", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.appSecret.id", + "path": "channels.discord.accounts.*.actions.memberInfo", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.appSecret.provider", + "path": "channels.discord.accounts.*.actions.messages", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.appSecret.source", + "path": "channels.discord.accounts.*.actions.moderation", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce", + "path": "channels.discord.accounts.*.actions.permissions", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce.enabled", + "path": "channels.discord.accounts.*.actions.pins", "kind": "channel", "type": "boolean", "required": false, @@ -9539,9 +9536,9 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce.maxDelayMs", + "path": "channels.discord.accounts.*.actions.polls", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9549,9 +9546,9 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.blockStreamingCoalesce.minDelayMs", + "path": "channels.discord.accounts.*.actions.presence", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9559,19 +9556,19 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.capabilities", + "path": "channels.discord.accounts.*.actions.reactions", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.capabilities.*", + "path": "channels.discord.accounts.*.actions.roleInfo", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9579,21 +9576,17 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.chunkMode", + "path": "channels.discord.accounts.*.actions.roles", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "length", - "newline" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.configWrites", + "path": "channels.discord.accounts.*.actions.search", "kind": "channel", "type": "boolean", "required": false, @@ -9603,23 +9596,19 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.connectionMode", + "path": "channels.discord.accounts.*.actions.stickers", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "websocket", - "webhook" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.dmHistoryLimit", + "path": "channels.discord.accounts.*.actions.stickerUploads", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9627,44 +9616,39 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.dmPolicy", + "path": "channels.discord.accounts.*.actions.threads", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "open", - "pairing", - "allowlist" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.dms", + "path": "channels.discord.accounts.*.actions.voiceStatus", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.dms.*", + "path": "channels.discord.accounts.*.activity", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.dms.*.enabled", + "path": "channels.discord.accounts.*.activityType", "kind": "channel", - "type": "boolean", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -9672,7 +9656,7 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.dms.*.systemPrompt", + "path": "channels.discord.accounts.*.activityUrl", "kind": "channel", "type": "string", "required": false, @@ -9682,21 +9666,17 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.domain", + "path": "channels.discord.accounts.*.agentComponents", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "feishu", - "lark" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.enabled", + "path": "channels.discord.accounts.*.agentComponents.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -9706,65 +9686,65 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.encryptKey", + "path": "channels.discord.accounts.*.allowBots", "kind": "channel", "type": [ - "object", + "boolean", "string" ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.encryptKey.id", + "path": "channels.discord.accounts.*.allowFrom", "kind": "channel", - "type": "string", - "required": true, + "type": "array", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.encryptKey.provider", + "path": "channels.discord.accounts.*.allowFrom.*", "kind": "channel", - "type": "string", - "required": true, + "type": [ + "number", + "string" + ], + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.encryptKey.source", + "path": "channels.discord.accounts.*.autoPresence", "kind": "channel", - "type": "string", - "required": true, + "type": "object", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.groupAllowFrom", + "path": "channels.discord.accounts.*.autoPresence.degradedText", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groupAllowFrom.*", + "path": "channels.discord.accounts.*.autoPresence.enabled", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9772,57 +9752,49 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groupPolicy", + "path": "channels.discord.accounts.*.autoPresence.exhaustedText", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups", + "path": "channels.discord.accounts.*.autoPresence.healthyText", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*", + "path": "channels.discord.accounts.*.autoPresence.intervalMs", "kind": "channel", - "type": "object", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.allowFrom", + "path": "channels.discord.accounts.*.autoPresence.minUpdateIntervalMs", "kind": "channel", - "type": "array", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.allowFrom.*", + "path": "channels.discord.accounts.*.blockStreaming", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9830,49 +9802,39 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.enabled", + "path": "channels.discord.accounts.*.blockStreamingCoalesce", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.groups.*.groupSessionScope", + "path": "channels.discord.accounts.*.blockStreamingCoalesce.idleMs", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.replyInThread", + "path": "channels.discord.accounts.*.blockStreamingCoalesce.maxChars", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "disabled", - "enabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.requireMention", + "path": "channels.discord.accounts.*.blockStreamingCoalesce.minChars", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -9880,7 +9842,7 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.skills", + "path": "channels.discord.accounts.*.capabilities", "kind": "channel", "type": "array", "required": false, @@ -9890,7 +9852,7 @@ "hasChildren": true }, { - "path": "channels.feishu.accounts.*.groups.*.skills.*", + "path": "channels.discord.accounts.*.capabilities.*", "kind": "channel", "type": "string", "required": false, @@ -9900,17 +9862,21 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.systemPrompt", + "path": "channels.discord.accounts.*.chunkMode", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "length", + "newline" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.tools", + "path": "channels.discord.accounts.*.commands", "kind": "channel", "type": "object", "required": false, @@ -9920,19 +9886,25 @@ "hasChildren": true }, { - "path": "channels.feishu.accounts.*.groups.*.tools.allow", + "path": "channels.discord.accounts.*.commands.native", "kind": "channel", - "type": "array", + "type": [ + "boolean", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.tools.allow.*", + "path": "channels.discord.accounts.*.commands.nativeSkills", "kind": "channel", - "type": "string", + "type": [ + "boolean", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -9940,19 +9912,19 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.tools.deny", + "path": "channels.discord.accounts.*.configWrites", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.tools.deny.*", + "path": "channels.discord.accounts.*.dangerouslyAllowNameMatching", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -9960,21 +9932,27 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groups.*.topicSessionMode", + "path": "channels.discord.accounts.*.defaultTo", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "disabled", - "enabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groupSenderAllowFrom", + "path": "channels.discord.accounts.*.dm", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.accounts.*.dm.allowFrom", "kind": "channel", "type": "array", "required": false, @@ -9984,7 +9962,7 @@ "hasChildren": true }, { - "path": "channels.feishu.accounts.*.groupSenderAllowFrom.*", + "path": "channels.discord.accounts.*.dm.allowFrom.*", "kind": "channel", "type": [ "number", @@ -9997,25 +9975,19 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.groupSessionScope", + "path": "channels.discord.accounts.*.dm.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.heartbeat", + "path": "channels.discord.accounts.*.dm.groupChannels", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -10023,9 +9995,12 @@ "hasChildren": true }, { - "path": "channels.feishu.accounts.*.heartbeat.intervalMs", + "path": "channels.discord.accounts.*.dm.groupChannels.*", "kind": "channel", - "type": "integer", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -10033,31 +10008,33 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.heartbeat.visibility", + "path": "channels.discord.accounts.*.dm.groupEnabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "visible", - "hidden" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.historyLimit", + "path": "channels.discord.accounts.*.dm.policy", "kind": "channel", - "type": "integer", + "type": "string", "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.httpTimeoutMs", + "path": "channels.discord.accounts.*.dmHistoryLimit", "kind": "channel", "type": "integer", "required": false, @@ -10067,24 +10044,15 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.markdown", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.accounts.*.markdown.mode", + "path": "channels.discord.accounts.*.dmPolicy", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "native", - "escape", - "strip" + "pairing", + "allowlist", + "open", + "disabled" ], "deprecated": false, "sensitive": false, @@ -10092,34 +10060,29 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.markdown.tableMode", + "path": "channels.discord.accounts.*.dms", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "native", - "ascii", - "simple" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.mediaMaxMb", + "path": "channels.discord.accounts.*.dms.*", "kind": "channel", - "type": "number", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.name", + "path": "channels.discord.accounts.*.dms.*.historyLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -10127,53 +10090,39 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.reactionNotifications", + "path": "channels.discord.accounts.*.draftChunk", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "off", - "own", - "all" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.renderMode", + "path": "channels.discord.accounts.*.draftChunk.breakPreference", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "auto", - "raw", - "card" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.replyInThread", + "path": "channels.discord.accounts.*.draftChunk.maxChars", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "disabled", - "enabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.requireMention", + "path": "channels.discord.accounts.*.draftChunk.minChars", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -10181,7 +10130,7 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.resolveSenderNames", + "path": "channels.discord.accounts.*.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -10191,17 +10140,17 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.streaming", + "path": "channels.discord.accounts.*.eventQueue", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.textChunkLimit", + "path": "channels.discord.accounts.*.eventQueue.listenerTimeout", "kind": "channel", "type": "integer", "required": false, @@ -10211,19 +10160,19 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.tools", + "path": "channels.discord.accounts.*.eventQueue.maxConcurrency", "kind": "channel", - "type": "object", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.accounts.*.tools.chat", + "path": "channels.discord.accounts.*.eventQueue.maxQueueSize", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -10231,29 +10180,29 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.tools.doc", + "path": "channels.discord.accounts.*.execApprovals", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.tools.drive", + "path": "channels.discord.accounts.*.execApprovals.agentFilter", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.tools.perm", + "path": "channels.discord.accounts.*.execApprovals.agentFilter.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -10261,19 +10210,22 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.tools.scopes", + "path": "channels.discord.accounts.*.execApprovals.approvers", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.tools.wiki", + "path": "channels.discord.accounts.*.execApprovals.approvers.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -10281,21 +10233,17 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.topicSessionMode", + "path": "channels.discord.accounts.*.execApprovals.cleanupAfterResolve", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "disabled", - "enabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.typingIndicator", + "path": "channels.discord.accounts.*.execApprovals.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -10305,12 +10253,9 @@ "hasChildren": false }, { - "path": "channels.feishu.accounts.*.verificationToken", + "path": "channels.discord.accounts.*.execApprovals.sessionFilter", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -10318,67 +10263,78 @@ "hasChildren": true }, { - "path": "channels.feishu.accounts.*.verificationToken.id", + "path": "channels.discord.accounts.*.execApprovals.sessionFilter.*", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.verificationToken.provider", + "path": "channels.discord.accounts.*.execApprovals.target", "kind": "channel", "type": "string", - "required": true, + "required": false, + "enumValues": [ + "dm", + "channel", + "both" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.verificationToken.source", + "path": "channels.discord.accounts.*.groupPolicy", "kind": "channel", "type": "string", "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.accounts.*.webhookHost", + "path": "channels.discord.accounts.*.guilds", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.webhookPath", + "path": "channels.discord.accounts.*.guilds.*", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.accounts.*.webhookPort", + "path": "channels.discord.accounts.*.guilds.*.channels", "kind": "channel", - "type": "integer", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.actions", + "path": "channels.discord.accounts.*.guilds.*.channels.*", "kind": "channel", "type": "object", "required": false, @@ -10388,7 +10344,7 @@ "hasChildren": true }, { - "path": "channels.feishu.actions.reactions", + "path": "channels.discord.accounts.*.guilds.*.channels.*.allow", "kind": "channel", "type": "boolean", "required": false, @@ -10398,32 +10354,28 @@ "hasChildren": false }, { - "path": "channels.feishu.allowFrom", - "kind": "channel", - "type": "array", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.feishu.allowFrom.*", + "path": "channels.discord.accounts.*.guilds.*.channels.*.autoArchiveDuration", "kind": "channel", "type": [ "number", "string" ], "required": false, + "enumValues": [ + "60", + "1440", + "4320", + "10080" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.appId", + "path": "channels.discord.accounts.*.guilds.*.channels.*.autoThread", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -10431,52 +10383,49 @@ "hasChildren": false }, { - "path": "channels.feishu.appSecret", + "path": "channels.discord.accounts.*.guilds.*.channels.*.enabled", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.appSecret.id", + "path": "channels.discord.accounts.*.guilds.*.channels.*.ignoreOtherMentions", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.appSecret.provider", + "path": "channels.discord.accounts.*.guilds.*.channels.*.includeThreadStarter", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.appSecret.source", + "path": "channels.discord.accounts.*.guilds.*.channels.*.requireMention", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.blockStreamingCoalesce", + "path": "channels.discord.accounts.*.guilds.*.channels.*.roles", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -10484,9 +10433,12 @@ "hasChildren": true }, { - "path": "channels.feishu.blockStreamingCoalesce.enabled", + "path": "channels.discord.accounts.*.guilds.*.channels.*.roles.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -10494,19 +10446,19 @@ "hasChildren": false }, { - "path": "channels.feishu.blockStreamingCoalesce.maxDelayMs", + "path": "channels.discord.accounts.*.guilds.*.channels.*.skills", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.blockStreamingCoalesce.minDelayMs", + "path": "channels.discord.accounts.*.guilds.*.channels.*.skills.*", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -10514,43 +10466,39 @@ "hasChildren": false }, { - "path": "channels.feishu.capabilities", + "path": "channels.discord.accounts.*.guilds.*.channels.*.systemPrompt", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.capabilities.*", + "path": "channels.discord.accounts.*.guilds.*.channels.*.tools", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.chunkMode", + "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.allow", "kind": "channel", - "type": "string", + "type": "array", "required": false, - "enumValues": [ - "length", - "newline" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.configWrites", + "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.allow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -10558,22 +10506,17 @@ "hasChildren": false }, { - "path": "channels.feishu.connectionMode", + "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow", "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "websocket", - "webhook" - ], - "defaultValue": "websocket", + "type": "array", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.defaultAccount", + "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow.*", "kind": "channel", "type": "string", "required": false, @@ -10583,33 +10526,27 @@ "hasChildren": false }, { - "path": "channels.feishu.dmHistoryLimit", + "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.deny", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.dmPolicy", + "path": "channels.discord.accounts.*.guilds.*.channels.*.tools.deny.*", "kind": "channel", "type": "string", - "required": true, - "enumValues": [ - "open", - "pairing", - "allowlist" - ], - "defaultValue": "pairing", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.dms", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender", "kind": "channel", "type": "object", "required": false, @@ -10619,7 +10556,7 @@ "hasChildren": true }, { - "path": "channels.feishu.dms.*", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*", "kind": "channel", "type": "object", "required": false, @@ -10629,17 +10566,17 @@ "hasChildren": true }, { - "path": "channels.feishu.dms.*.enabled", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.dms.*.systemPrompt", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow.*", "kind": "channel", "type": "string", "required": false, @@ -10649,23 +10586,9 @@ "hasChildren": false }, { - "path": "channels.feishu.domain", - "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "feishu", - "lark" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dynamicAgentCreation", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -10673,7 +10596,7 @@ "hasChildren": true }, { - "path": "channels.feishu.dynamicAgentCreation.agentDirTemplate", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow.*", "kind": "channel", "type": "string", "required": false, @@ -10683,27 +10606,17 @@ "hasChildren": false }, { - "path": "channels.feishu.dynamicAgentCreation.enabled", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.dynamicAgentCreation.maxAgents", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.dynamicAgentCreation.workspaceTemplate", + "path": "channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny.*", "kind": "channel", "type": "string", "required": false, @@ -10713,60 +10626,66 @@ "hasChildren": false }, { - "path": "channels.feishu.enabled", + "path": "channels.discord.accounts.*.guilds.*.channels.*.users", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.encryptKey", + "path": "channels.discord.accounts.*.guilds.*.channels.*.users.*", "kind": "channel", "type": [ - "object", + "number", "string" ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.encryptKey.id", + "path": "channels.discord.accounts.*.guilds.*.ignoreOtherMentions", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.encryptKey.provider", + "path": "channels.discord.accounts.*.guilds.*.reactionNotifications", "kind": "channel", "type": "string", - "required": true, + "required": false, + "enumValues": [ + "off", + "own", + "all", + "allowlist" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.encryptKey.source", + "path": "channels.discord.accounts.*.guilds.*.requireMention", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.groupAllowFrom", + "path": "channels.discord.accounts.*.guilds.*.roles", "kind": "channel", "type": "array", "required": false, @@ -10776,7 +10695,7 @@ "hasChildren": true }, { - "path": "channels.feishu.groupAllowFrom.*", + "path": "channels.discord.accounts.*.guilds.*.roles.*", "kind": "channel", "type": [ "number", @@ -10789,32 +10708,17 @@ "hasChildren": false }, { - "path": "channels.feishu.groupPolicy", + "path": "channels.discord.accounts.*.guilds.*.slug", "kind": "channel", "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups", - "kind": "channel", - "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.groups.*", + "path": "channels.discord.accounts.*.guilds.*.tools", "kind": "channel", "type": "object", "required": false, @@ -10824,7 +10728,7 @@ "hasChildren": true }, { - "path": "channels.feishu.groups.*.allowFrom", + "path": "channels.discord.accounts.*.guilds.*.tools.allow", "kind": "channel", "type": "array", "required": false, @@ -10834,12 +10738,9 @@ "hasChildren": true }, { - "path": "channels.feishu.groups.*.allowFrom.*", + "path": "channels.discord.accounts.*.guilds.*.tools.allow.*", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -10847,49 +10748,39 @@ "hasChildren": false }, { - "path": "channels.feishu.groups.*.enabled", + "path": "channels.discord.accounts.*.guilds.*.tools.alsoAllow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.groups.*.groupSessionScope", + "path": "channels.discord.accounts.*.guilds.*.tools.alsoAllow.*", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.groups.*.replyInThread", + "path": "channels.discord.accounts.*.guilds.*.tools.deny", "kind": "channel", - "type": "string", + "type": "array", "required": false, - "enumValues": [ - "disabled", - "enabled" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.groups.*.requireMention", + "path": "channels.discord.accounts.*.guilds.*.tools.deny.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -10897,9 +10788,9 @@ "hasChildren": false }, { - "path": "channels.feishu.groups.*.skills", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -10907,37 +10798,37 @@ "hasChildren": true }, { - "path": "channels.feishu.groups.*.skills.*", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.groups.*.systemPrompt", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.allow", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.groups.*.tools", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.allow.*", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.feishu.groups.*.tools.allow", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow", "kind": "channel", "type": "array", "required": false, @@ -10947,7 +10838,7 @@ "hasChildren": true }, { - "path": "channels.feishu.groups.*.tools.allow.*", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow.*", "kind": "channel", "type": "string", "required": false, @@ -10957,7 +10848,7 @@ "hasChildren": false }, { - "path": "channels.feishu.groups.*.tools.deny", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.deny", "kind": "channel", "type": "array", "required": false, @@ -10967,31 +10858,17 @@ "hasChildren": true }, { - "path": "channels.feishu.groups.*.tools.deny.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.groups.*.topicSessionMode", + "path": "channels.discord.accounts.*.guilds.*.toolsBySender.*.deny.*", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "disabled", - "enabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.groupSenderAllowFrom", + "path": "channels.discord.accounts.*.guilds.*.users", "kind": "channel", "type": "array", "required": false, @@ -11001,7 +10878,7 @@ "hasChildren": true }, { - "path": "channels.feishu.groupSenderAllowFrom.*", + "path": "channels.discord.accounts.*.guilds.*.users.*", "kind": "channel", "type": [ "number", @@ -11014,23 +10891,27 @@ "hasChildren": false }, { - "path": "channels.feishu.groupSessionScope", + "path": "channels.discord.accounts.*.healthMonitor", "kind": "channel", - "type": "string", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.accounts.*.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", "required": false, - "enumValues": [ - "group", - "group_sender", - "group_topic", - "group_topic_sender" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.heartbeat", + "path": "channels.discord.accounts.*.heartbeat", "kind": "channel", "type": "object", "required": false, @@ -11040,9 +10921,9 @@ "hasChildren": true }, { - "path": "channels.feishu.heartbeat.intervalMs", + "path": "channels.discord.accounts.*.heartbeat.showAlerts", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11050,23 +10931,19 @@ "hasChildren": false }, { - "path": "channels.feishu.heartbeat.visibility", + "path": "channels.discord.accounts.*.heartbeat.showOk", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "visible", - "hidden" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.historyLimit", + "path": "channels.discord.accounts.*.heartbeat.useIndicator", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11074,7 +10951,7 @@ "hasChildren": false }, { - "path": "channels.feishu.httpTimeoutMs", + "path": "channels.discord.accounts.*.historyLimit", "kind": "channel", "type": "integer", "required": false, @@ -11084,7 +10961,7 @@ "hasChildren": false }, { - "path": "channels.feishu.markdown", + "path": "channels.discord.accounts.*.inboundWorker", "kind": "channel", "type": "object", "required": false, @@ -11094,39 +10971,29 @@ "hasChildren": true }, { - "path": "channels.feishu.markdown.mode", + "path": "channels.discord.accounts.*.inboundWorker.runTimeoutMs", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "native", - "escape", - "strip" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.markdown.tableMode", + "path": "channels.discord.accounts.*.intents", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "native", - "ascii", - "simple" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.mediaMaxMb", + "path": "channels.discord.accounts.*.intents.guildMembers", "kind": "channel", - "type": "number", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11134,44 +11001,34 @@ "hasChildren": false }, { - "path": "channels.feishu.reactionNotifications", + "path": "channels.discord.accounts.*.intents.presence", "kind": "channel", - "type": "string", - "required": true, - "enumValues": [ - "off", - "own", - "all" - ], - "defaultValue": "own", + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.renderMode", + "path": "channels.discord.accounts.*.markdown", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "auto", - "raw", - "card" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.replyInThread", + "path": "channels.discord.accounts.*.markdown.tables", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "disabled", - "enabled" + "off", + "bullets", + "code" ], "deprecated": false, "sensitive": false, @@ -11179,31 +11036,19 @@ "hasChildren": false }, { - "path": "channels.feishu.requireMention", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.feishu.resolveSenderNames", + "path": "channels.discord.accounts.*.maxLinesPerMessage", "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, + "type": "integer", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.streaming", + "path": "channels.discord.accounts.*.mediaMaxMb", "kind": "channel", - "type": "boolean", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -11211,9 +11056,9 @@ "hasChildren": false }, { - "path": "channels.feishu.textChunkLimit", + "path": "channels.discord.accounts.*.name", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11221,7 +11066,7 @@ "hasChildren": false }, { - "path": "channels.feishu.tools", + "path": "channels.discord.accounts.*.pluralkit", "kind": "channel", "type": "object", "required": false, @@ -11231,7 +11076,7 @@ "hasChildren": true }, { - "path": "channels.feishu.tools.chat", + "path": "channels.discord.accounts.*.pluralkit.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -11241,49 +11086,57 @@ "hasChildren": false }, { - "path": "channels.feishu.tools.doc", + "path": "channels.discord.accounts.*.pluralkit.token", "kind": "channel", - "type": "boolean", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true }, { - "path": "channels.feishu.tools.drive", + "path": "channels.discord.accounts.*.pluralkit.token.id", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.tools.perm", + "path": "channels.discord.accounts.*.pluralkit.token.provider", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.tools.scopes", + "path": "channels.discord.accounts.*.pluralkit.token.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.tools.wiki", + "path": "channels.discord.accounts.*.proxy", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11291,37 +11144,29 @@ "hasChildren": false }, { - "path": "channels.feishu.topicSessionMode", + "path": "channels.discord.accounts.*.replyToMode", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "disabled", - "enabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.typingIndicator", + "path": "channels.discord.accounts.*.responsePrefix", "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, + "type": "string", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.verificationToken", + "path": "channels.discord.accounts.*.retry", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -11329,39 +11174,39 @@ "hasChildren": true }, { - "path": "channels.feishu.verificationToken.id", + "path": "channels.discord.accounts.*.retry.attempts", "kind": "channel", - "type": "string", - "required": true, + "type": "integer", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.verificationToken.provider", + "path": "channels.discord.accounts.*.retry.jitter", "kind": "channel", - "type": "string", - "required": true, + "type": "number", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.verificationToken.source", + "path": "channels.discord.accounts.*.retry.maxDelayMs", "kind": "channel", - "type": "string", - "required": true, + "type": "integer", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.feishu.webhookHost", + "path": "channels.discord.accounts.*.retry.minDelayMs", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -11369,20 +11214,19 @@ "hasChildren": false }, { - "path": "channels.feishu.webhookPath", + "path": "channels.discord.accounts.*.slashCommand", "kind": "channel", - "type": "string", - "required": true, - "defaultValue": "/feishu/events", + "type": "object", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.feishu.webhookPort", + "path": "channels.discord.accounts.*.slashCommand.ephemeral", "kind": "channel", - "type": "integer", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11390,67 +11234,67 @@ "hasChildren": false }, { - "path": "channels.googlechat", + "path": "channels.discord.accounts.*.status", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "online", + "dnd", + "idle", + "invisible" + ], "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Google Chat", - "help": "Google Workspace Chat app via HTTP webhooks.", + "tags": [], "hasChildren": false }, { - "path": "channels.imessage", + "path": "channels.discord.accounts.*.streaming", "kind": "channel", - "type": "object", + "type": [ + "boolean", + "string" + ], "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "iMessage", - "help": "this is still a work in progress.", + "tags": [], "hasChildren": false }, { - "path": "channels.irc", + "path": "channels.discord.accounts.*.streamMode", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "partial", + "block", + "off" + ], "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "IRC", - "help": "classic IRC networks with DM/channel routing and pairing controls.", + "tags": [], "hasChildren": false }, { - "path": "channels.line", + "path": "channels.discord.accounts.*.textChunkLimit", "kind": "channel", - "type": "object", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "LINE", - "help": "LINE Messaging API bot for Japan/Taiwan/Thailand markets.", - "hasChildren": true + "tags": [], + "hasChildren": false }, { - "path": "channels.line.accounts", + "path": "channels.discord.accounts.*.threadBindings", "kind": "channel", "type": "object", "required": false, @@ -11460,32 +11304,29 @@ "hasChildren": true }, { - "path": "channels.line.accounts.*", + "path": "channels.discord.accounts.*.threadBindings.enabled", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.line.accounts.*.allowFrom", + "path": "channels.discord.accounts.*.threadBindings.idleHours", "kind": "channel", - "type": "array", + "type": "number", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.line.accounts.*.allowFrom.*", + "path": "channels.discord.accounts.*.threadBindings.maxAgeHours", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -11493,9 +11334,9 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.channelAccessToken", + "path": "channels.discord.accounts.*.threadBindings.spawnAcpSessions", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11503,9 +11344,9 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.channelSecret", + "path": "channels.discord.accounts.*.threadBindings.spawnSubagentSessions", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11513,36 +11354,57 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.dmPolicy", + "path": "channels.discord.accounts.*.token", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.discord.accounts.*.token.id", "kind": "channel", "type": "string", "required": true, - "enumValues": [ - "open", - "allowlist", - "pairing", - "disabled" - ], - "defaultValue": "pairing", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.accounts.*.enabled", + "path": "channels.discord.accounts.*.token.provider", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.accounts.*.groupAllowFrom", + "path": "channels.discord.accounts.*.token.source", "kind": "channel", - "type": "array", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.accounts.*.ui", + "kind": "channel", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -11550,36 +11412,27 @@ "hasChildren": true }, { - "path": "channels.line.accounts.*.groupAllowFrom.*", + "path": "channels.discord.accounts.*.ui.components", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.line.accounts.*.groupPolicy", + "path": "channels.discord.accounts.*.ui.components.accentColor", "kind": "channel", "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], - "defaultValue": "allowlist", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.accounts.*.groups", + "path": "channels.discord.accounts.*.voice", "kind": "channel", "type": "object", "required": false, @@ -11589,9 +11442,9 @@ "hasChildren": true }, { - "path": "channels.line.accounts.*.groups.*", + "path": "channels.discord.accounts.*.voice.autoJoin", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -11599,9 +11452,9 @@ "hasChildren": true }, { - "path": "channels.line.accounts.*.groups.*.allowFrom", + "path": "channels.discord.accounts.*.voice.autoJoin.*", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -11609,20 +11462,27 @@ "hasChildren": true }, { - "path": "channels.line.accounts.*.groups.*.allowFrom.*", + "path": "channels.discord.accounts.*.voice.autoJoin.*.channelId", "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.accounts.*.groups.*.enabled", + "path": "channels.discord.accounts.*.voice.autoJoin.*.guildId", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.accounts.*.voice.daveEncryption", "kind": "channel", "type": "boolean", "required": false, @@ -11632,7 +11492,17 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.groups.*.requireMention", + "path": "channels.discord.accounts.*.voice.decryptionFailureTolerance", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.accounts.*.voice.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -11642,9 +11512,9 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.groups.*.skills", + "path": "channels.discord.accounts.*.voice.tts", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -11652,17 +11522,43 @@ "hasChildren": true }, { - "path": "channels.line.accounts.*.groups.*.skills.*", + "path": "channels.discord.accounts.*.voice.tts.auto", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "off", + "always", + "inbound", + "tagged" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.accounts.*.groups.*.systemPrompt", + "path": "channels.discord.accounts.*.voice.tts.edge", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.accounts.*.voice.tts.edge.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.accounts.*.voice.tts.edge.lang", "kind": "channel", "type": "string", "required": false, @@ -11672,9 +11568,9 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.mediaMaxMb", + "path": "channels.discord.accounts.*.voice.tts.edge.outputFormat", "kind": "channel", - "type": "number", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11682,7 +11578,7 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.name", + "path": "channels.discord.accounts.*.voice.tts.edge.pitch", "kind": "channel", "type": "string", "required": false, @@ -11692,7 +11588,7 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.responsePrefix", + "path": "channels.discord.accounts.*.voice.tts.edge.proxy", "kind": "channel", "type": "string", "required": false, @@ -11702,7 +11598,7 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.secretFile", + "path": "channels.discord.accounts.*.voice.tts.edge.rate", "kind": "channel", "type": "string", "required": false, @@ -11712,7 +11608,27 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.tokenFile", + "path": "channels.discord.accounts.*.voice.tts.edge.saveSubtitles", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.accounts.*.voice.tts.edge.timeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.accounts.*.voice.tts.edge.voice", "kind": "channel", "type": "string", "required": false, @@ -11722,7 +11638,7 @@ "hasChildren": false }, { - "path": "channels.line.accounts.*.webhookPath", + "path": "channels.discord.accounts.*.voice.tts.edge.volume", "kind": "channel", "type": "string", "required": false, @@ -11732,9 +11648,9 @@ "hasChildren": false }, { - "path": "channels.line.allowFrom", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -11742,69 +11658,83 @@ "hasChildren": true }, { - "path": "channels.line.allowFrom.*", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey", "kind": "channel", "type": [ - "number", + "object", "string" ], "required": false, "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "media", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.channelAccessToken", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.provider", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.channelSecret", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.source", "kind": "channel", "type": "string", - "required": false, + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.defaultAccount", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.applyTextNormalization", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "auto", + "on", + "off" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.dmPolicy", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.baseUrl", "kind": "channel", "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "pairing", - "disabled" - ], - "defaultValue": "pairing", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.enabled", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.languageCode", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -11812,22 +11742,19 @@ "hasChildren": false }, { - "path": "channels.line.groupAllowFrom", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.modelId", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.line.groupAllowFrom.*", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.seed", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -11835,23 +11762,17 @@ "hasChildren": false }, { - "path": "channels.line.groupPolicy", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceId", "kind": "channel", "type": "string", - "required": true, - "enumValues": [ - "open", - "allowlist", - "disabled" - ], - "defaultValue": "allowlist", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.line.groups", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings", "kind": "channel", "type": "object", "required": false, @@ -11861,32 +11782,29 @@ "hasChildren": true }, { - "path": "channels.line.groups.*", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.similarityBoost", "kind": "channel", - "type": "object", + "type": "number", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.line.groups.*.allowFrom", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.speed", "kind": "channel", - "type": "array", + "type": "number", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.line.groups.*.allowFrom.*", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.stability", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -11894,9 +11812,9 @@ "hasChildren": false }, { - "path": "channels.line.groups.*.enabled", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.style", "kind": "channel", - "type": "boolean", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -11904,7 +11822,7 @@ "hasChildren": false }, { - "path": "channels.line.groups.*.requireMention", + "path": "channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost", "kind": "channel", "type": "boolean", "required": false, @@ -11914,19 +11832,19 @@ "hasChildren": false }, { - "path": "channels.line.groups.*.skills", + "path": "channels.discord.accounts.*.voice.tts.enabled", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.line.groups.*.skills.*", + "path": "channels.discord.accounts.*.voice.tts.maxTextLength", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -11934,19 +11852,19 @@ "hasChildren": false }, { - "path": "channels.line.groups.*.systemPrompt", + "path": "channels.discord.accounts.*.voice.tts.microsoft", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.line.mediaMaxMb", + "path": "channels.discord.accounts.*.voice.tts.microsoft.enabled", "kind": "channel", - "type": "number", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -11954,7 +11872,7 @@ "hasChildren": false }, { - "path": "channels.line.name", + "path": "channels.discord.accounts.*.voice.tts.microsoft.lang", "kind": "channel", "type": "string", "required": false, @@ -11964,7 +11882,7 @@ "hasChildren": false }, { - "path": "channels.line.responsePrefix", + "path": "channels.discord.accounts.*.voice.tts.microsoft.outputFormat", "kind": "channel", "type": "string", "required": false, @@ -11974,7 +11892,7 @@ "hasChildren": false }, { - "path": "channels.line.secretFile", + "path": "channels.discord.accounts.*.voice.tts.microsoft.pitch", "kind": "channel", "type": "string", "required": false, @@ -11984,7 +11902,7 @@ "hasChildren": false }, { - "path": "channels.line.tokenFile", + "path": "channels.discord.accounts.*.voice.tts.microsoft.proxy", "kind": "channel", "type": "string", "required": false, @@ -11994,7 +11912,7 @@ "hasChildren": false }, { - "path": "channels.line.webhookPath", + "path": "channels.discord.accounts.*.voice.tts.microsoft.rate", "kind": "channel", "type": "string", "required": false, @@ -12004,142 +11922,61 @@ "hasChildren": false }, { - "path": "channels.matrix", + "path": "channels.discord.accounts.*.voice.tts.microsoft.saveSubtitles", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Matrix", - "help": "open protocol; install the plugin to enable.", + "tags": [], "hasChildren": false }, { - "path": "channels.mattermost", + "path": "channels.discord.accounts.*.voice.tts.microsoft.timeoutMs", "kind": "channel", - "type": "object", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Mattermost", - "help": "self-hosted Slack-style chat; install the plugin to enable.", + "tags": [], "hasChildren": false }, { - "path": "channels.msteams", + "path": "channels.discord.accounts.*.voice.tts.microsoft.voice", "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Microsoft Teams", - "help": "Bot Framework; enterprise support.", - "hasChildren": false - }, - { - "path": "channels.nextcloud-talk", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Nextcloud Talk", - "help": "Self-hosted chat via Nextcloud Talk webhook bots.", - "hasChildren": false - }, - { - "path": "channels.nostr", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Nostr", - "help": "Decentralized protocol; encrypted DMs via NIP-04.", - "hasChildren": false - }, - { - "path": "channels.signal", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Signal", - "help": "signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").", - "hasChildren": false - }, - { - "path": "channels.slack", - "kind": "channel", - "type": "object", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack", - "help": "supported (Socket Mode).", - "hasChildren": true - }, - { - "path": "channels.slack.accounts", - "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*", + "path": "channels.discord.accounts.*.voice.tts.microsoft.volume", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.ackReaction", + "path": "channels.discord.accounts.*.voice.tts.mode", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "final", + "all" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.actions", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides", "kind": "channel", "type": "object", "required": false, @@ -12149,17 +11986,7 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.actions.channelInfo", - "kind": "channel", - "type": "boolean", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.actions.emojiList", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowModelId", "kind": "channel", "type": "boolean", "required": false, @@ -12169,7 +11996,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.actions.memberInfo", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowNormalization", "kind": "channel", "type": "boolean", "required": false, @@ -12179,7 +12006,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.actions.messages", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowProvider", "kind": "channel", "type": "boolean", "required": false, @@ -12189,7 +12016,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.actions.permissions", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowSeed", "kind": "channel", "type": "boolean", "required": false, @@ -12199,7 +12026,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.actions.pins", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowText", "kind": "channel", "type": "boolean", "required": false, @@ -12209,7 +12036,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.actions.reactions", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowVoice", "kind": "channel", "type": "boolean", "required": false, @@ -12219,7 +12046,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.actions.search", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.allowVoiceSettings", "kind": "channel", "type": "boolean", "required": false, @@ -12229,7 +12056,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.allowBots", + "path": "channels.discord.accounts.*.voice.tts.modelOverrides.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -12239,9 +12066,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.allowFrom", + "path": "channels.discord.accounts.*.voice.tts.openai", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -12249,20 +12076,7 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.allowFrom.*", - "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.appToken", + "path": "channels.discord.accounts.*.voice.tts.openai.apiKey", "kind": "channel", "type": [ "object", @@ -12274,13 +12088,14 @@ "tags": [ "auth", "channels", + "media", "network", "security" ], "hasChildren": true }, { - "path": "channels.slack.accounts.*.appToken.id", + "path": "channels.discord.accounts.*.voice.tts.openai.apiKey.id", "kind": "channel", "type": "string", "required": true, @@ -12290,7 +12105,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.appToken.provider", + "path": "channels.discord.accounts.*.voice.tts.openai.apiKey.provider", "kind": "channel", "type": "string", "required": true, @@ -12300,7 +12115,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.appToken.source", + "path": "channels.discord.accounts.*.voice.tts.openai.apiKey.source", "kind": "channel", "type": "string", "required": true, @@ -12310,9 +12125,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.blockStreaming", + "path": "channels.discord.accounts.*.voice.tts.openai.baseUrl", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12320,19 +12135,19 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.blockStreamingCoalesce", + "path": "channels.discord.accounts.*.voice.tts.openai.instructions", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.blockStreamingCoalesce.idleMs", + "path": "channels.discord.accounts.*.voice.tts.openai.model", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12340,9 +12155,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.blockStreamingCoalesce.maxChars", + "path": "channels.discord.accounts.*.voice.tts.openai.speed", "kind": "channel", - "type": "integer", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -12350,9 +12165,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.blockStreamingCoalesce.minChars", + "path": "channels.discord.accounts.*.voice.tts.openai.voice", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12360,68 +12175,47 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.botToken", - "kind": "channel", - "type": [ - "object", - "string" - ], - "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.botToken.id", + "path": "channels.discord.accounts.*.voice.tts.prefsPath", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.botToken.provider", + "path": "channels.discord.accounts.*.voice.tts.provider", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.botToken.source", + "path": "channels.discord.accounts.*.voice.tts.summaryModel", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.capabilities", + "path": "channels.discord.accounts.*.voice.tts.timeoutMs", "kind": "channel", - "type": [ - "array", - "object" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.capabilities.*", + "path": "channels.discord.ackReaction", "kind": "channel", "type": "string", "required": false, @@ -12431,17 +12225,25 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.capabilities.interactiveReplies", + "path": "channels.discord.ackReactionScope", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "group-mentions", + "group-all", + "direct", + "all", + "off", + "none" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels", + "path": "channels.discord.actions", "kind": "channel", "type": "object", "required": false, @@ -12451,17 +12253,17 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.channels.*", + "path": "channels.discord.actions.channelInfo", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.allow", + "path": "channels.discord.actions.channels", "kind": "channel", "type": "boolean", "required": false, @@ -12471,7 +12273,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.allowBots", + "path": "channels.discord.actions.emojiUploads", "kind": "channel", "type": "boolean", "required": false, @@ -12481,7 +12283,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.enabled", + "path": "channels.discord.actions.events", "kind": "channel", "type": "boolean", "required": false, @@ -12491,7 +12293,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.requireMention", + "path": "channels.discord.actions.memberInfo", "kind": "channel", "type": "boolean", "required": false, @@ -12501,19 +12303,19 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.skills", + "path": "channels.discord.actions.messages", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.skills.*", + "path": "channels.discord.actions.moderation", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12521,9 +12323,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.systemPrompt", + "path": "channels.discord.actions.permissions", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12531,29 +12333,29 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.tools", + "path": "channels.discord.actions.pins", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.tools.allow", + "path": "channels.discord.actions.polls", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.tools.allow.*", + "path": "channels.discord.actions.presence", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12561,19 +12363,19 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow", + "path": "channels.discord.actions.reactions", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow.*", + "path": "channels.discord.actions.roleInfo", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12581,19 +12383,19 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.tools.deny", + "path": "channels.discord.actions.roles", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.tools.deny.*", + "path": "channels.discord.actions.search", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12601,39 +12403,39 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.toolsBySender", + "path": "channels.discord.actions.stickers", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*", + "path": "channels.discord.actions.stickerUploads", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow", + "path": "channels.discord.actions.threads", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow.*", + "path": "channels.discord.actions.voiceStatus", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12641,49 +12443,54 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow", + "path": "channels.discord.activity", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow.*", - "kind": "channel", - "type": "string", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Presence Activity", + "help": "Discord presence activity text (defaults to custom status).", "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny", + "path": "channels.discord.activityType", "kind": "channel", - "type": "array", + "type": "number", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": true + "tags": [ + "channels", + "network" + ], + "label": "Discord Presence Activity Type", + "help": "Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing).", + "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny.*", + "path": "channels.discord.activityUrl", "kind": "channel", "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Presence Activity URL", + "help": "Discord presence streaming URL (required for activityType=1).", "hasChildren": false }, { - "path": "channels.slack.accounts.*.channels.*.users", + "path": "channels.discord.agentComponents", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -12691,12 +12498,9 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.channels.*.users.*", + "path": "channels.discord.agentComponents.enabled", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -12704,23 +12508,28 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.chunkMode", + "path": "channels.discord.allowBots", "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "length", - "newline" + "type": [ + "boolean", + "string" ], + "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "access", + "channels", + "network" + ], + "label": "Discord Allow Bot Messages", + "help": "Allow bot-authored messages to trigger Discord replies (default: false). Set \"mentions\" to only accept bot messages that mention the bot.", "hasChildren": false }, { - "path": "channels.slack.accounts.*.commands", + "path": "channels.discord.allowFrom", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -12728,10 +12537,10 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.commands.native", + "path": "channels.discord.allowFrom.*", "kind": "channel", "type": [ - "boolean", + "number", "string" ], "required": false, @@ -12741,83 +12550,110 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.commands.nativeSkills", + "path": "channels.discord.autoPresence", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.configWrites", + "path": "channels.discord.autoPresence.degradedText", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Auto Presence Degraded Text", + "help": "Optional custom status text while runtime/model availability is degraded or unknown (idle).", "hasChildren": false }, { - "path": "channels.slack.accounts.*.dangerouslyAllowNameMatching", + "path": "channels.discord.autoPresence.enabled", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Auto Presence Enabled", + "help": "Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd.", "hasChildren": false }, { - "path": "channels.slack.accounts.*.defaultTo", + "path": "channels.discord.autoPresence.exhaustedText", "kind": "channel", "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Auto Presence Exhausted Text", + "help": "Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder.", "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm", + "path": "channels.discord.autoPresence.healthyText", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": true + "tags": [ + "channels", + "network", + "reliability" + ], + "label": "Discord Auto Presence Healthy Text", + "help": "Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set.", + "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm.allowFrom", + "path": "channels.discord.autoPresence.intervalMs", "kind": "channel", - "type": "array", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": true + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Discord Auto Presence Check Interval (ms)", + "help": "How often to evaluate Discord auto-presence state in milliseconds (default: 30000).", + "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm.allowFrom.*", + "path": "channels.discord.autoPresence.minUpdateIntervalMs", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Discord Auto Presence Min Update Interval (ms)", + "help": "Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes.", "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm.enabled", + "path": "channels.discord.blockStreaming", "kind": "channel", "type": "boolean", "required": false, @@ -12827,9 +12663,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm.groupChannels", + "path": "channels.discord.blockStreamingCoalesce", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -12837,12 +12673,9 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.dm.groupChannels.*", + "path": "channels.discord.blockStreamingCoalesce.idleMs", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -12850,9 +12683,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm.groupEnabled", + "path": "channels.discord.blockStreamingCoalesce.maxChars", "kind": "channel", - "type": "boolean", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -12860,35 +12693,29 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm.policy", + "path": "channels.discord.blockStreamingCoalesce.minChars", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.dm.replyToMode", + "path": "channels.discord.capabilities", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.dmHistoryLimit", + "path": "channels.discord.capabilities.*", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12896,15 +12723,13 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.dmPolicy", + "path": "channels.discord.chunkMode", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "pairing", - "allowlist", - "open", - "disabled" + "length", + "newline" ], "deprecated": false, "sensitive": false, @@ -12912,7 +12737,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.dms", + "path": "channels.discord.commands", "kind": "channel", "type": "object", "required": false, @@ -12922,64 +12747,80 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.dms.*", + "path": "channels.discord.commands.native", "kind": "channel", - "type": "object", + "type": [ + "boolean", + "string" + ], "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": true + "tags": [ + "channels", + "network" + ], + "label": "Discord Native Commands", + "help": "Override native commands for Discord (bool or \"auto\").", + "hasChildren": false }, { - "path": "channels.slack.accounts.*.dms.*.historyLimit", + "path": "channels.discord.commands.nativeSkills", "kind": "channel", - "type": "integer", + "type": [ + "boolean", + "string" + ], "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Native Skill Commands", + "help": "Override native skill commands for Discord (bool or \"auto\").", "hasChildren": false }, { - "path": "channels.slack.accounts.*.enabled", + "path": "channels.discord.configWrites", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Config Writes", + "help": "Allow Discord to write config in response to channel events/commands (default: true).", "hasChildren": false }, { - "path": "channels.slack.accounts.*.groupPolicy", + "path": "channels.discord.dangerouslyAllowNameMatching", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.healthMonitor", + "path": "channels.discord.defaultAccount", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.accounts.*.healthMonitor.enabled", + "path": "channels.discord.defaultTo", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -12987,7 +12828,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.heartbeat", + "path": "channels.discord.dm", "kind": "channel", "type": "object", "required": false, @@ -12997,19 +12838,22 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.heartbeat.showAlerts", + "path": "channels.discord.dm.allowFrom", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.heartbeat.showOk", + "path": "channels.discord.dm.allowFrom.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -13017,7 +12861,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.heartbeat.useIndicator", + "path": "channels.discord.dm.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -13027,19 +12871,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.historyLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.accounts.*.markdown", + "path": "channels.discord.dm.groupChannels", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -13047,24 +12881,22 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.markdown.tables", + "path": "channels.discord.dm.groupChannels.*", "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" + "type": [ + "number", + "string" ], + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.mediaMaxMb", + "path": "channels.discord.dm.groupEnabled", "kind": "channel", - "type": "number", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13072,23 +12904,31 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.mode", + "path": "channels.discord.dm.policy", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "socket", - "http" + "pairing", + "allowlist", + "open", + "disabled" ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "access", + "channels", + "network" + ], + "label": "Discord DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"] (legacy: channels.discord.dm.allowFrom).", "hasChildren": false }, { - "path": "channels.slack.accounts.*.name", + "path": "channels.discord.dmHistoryLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -13096,19 +12936,31 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.nativeStreaming", + "path": "channels.discord.dmPolicy", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "access", + "channels", + "network" + ], + "label": "Discord DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"].", "hasChildren": false }, { - "path": "channels.slack.accounts.*.reactionAllowlist", + "path": "channels.discord.dms", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -13116,78 +12968,85 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.reactionAllowlist.*", + "path": "channels.discord.dms.*", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.reactionNotifications", + "path": "channels.discord.dms.*.historyLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "off", - "own", - "all", - "allowlist" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.replyToMode", + "path": "channels.discord.draftChunk", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.replyToModeByChatType", + "path": "channels.discord.draftChunk.breakPreference", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": true + "tags": [ + "channels", + "network" + ], + "label": "Discord Draft Chunk Break Preference", + "help": "Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph.", + "hasChildren": false }, { - "path": "channels.slack.accounts.*.replyToModeByChatType.channel", + "path": "channels.discord.draftChunk.maxChars", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Discord Draft Chunk Max Chars", + "help": "Target max size for a Discord stream preview chunk when channels.discord.streaming=\"block\" (default: 800; clamped to channels.discord.textChunkLimit).", "hasChildren": false }, { - "path": "channels.slack.accounts.*.replyToModeByChatType.direct", + "path": "channels.discord.draftChunk.minChars", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network" + ], + "label": "Discord Draft Chunk Min Chars", + "help": "Minimum chars before emitting a Discord stream preview update when channels.discord.streaming=\"block\" (default: 200).", "hasChildren": false }, { - "path": "channels.slack.accounts.*.replyToModeByChatType.group", + "path": "channels.discord.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13195,77 +13054,97 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.requireMention", + "path": "channels.discord.eventQueue", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.responsePrefix", + "path": "channels.discord.eventQueue.listenerTimeout", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Discord EventQueue Listener Timeout (ms)", + "help": "Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts..eventQueue.listenerTimeout.", "hasChildren": false }, { - "path": "channels.slack.accounts.*.signingSecret", + "path": "channels.discord.eventQueue.maxConcurrency", "kind": "channel", - "type": [ - "object", - "string" + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance" ], + "label": "Discord EventQueue Max Concurrency", + "help": "Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts..eventQueue.maxConcurrency.", + "hasChildren": false + }, + { + "path": "channels.discord.eventQueue.maxQueueSize", + "kind": "channel", + "type": "integer", "required": false, "deprecated": false, - "sensitive": true, + "sensitive": false, "tags": [ - "auth", "channels", "network", - "security" + "performance" ], - "hasChildren": true + "label": "Discord EventQueue Max Queue Size", + "help": "Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts..eventQueue.maxQueueSize.", + "hasChildren": false }, { - "path": "channels.slack.accounts.*.signingSecret.id", + "path": "channels.discord.execApprovals", "kind": "channel", - "type": "string", - "required": true, + "type": "object", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.signingSecret.provider", + "path": "channels.discord.execApprovals.agentFilter", "kind": "channel", - "type": "string", - "required": true, + "type": "array", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.signingSecret.source", + "path": "channels.discord.execApprovals.agentFilter.*", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.slashCommand", + "path": "channels.discord.execApprovals.approvers", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -13273,9 +13152,12 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.slashCommand.enabled", + "path": "channels.discord.execApprovals.approvers.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -13283,7 +13165,7 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.slashCommand.ephemeral", + "path": "channels.discord.execApprovals.cleanupAfterResolve", "kind": "channel", "type": "boolean", "required": false, @@ -13293,9 +13175,9 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.slashCommand.name", + "path": "channels.discord.execApprovals.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13303,43 +13185,34 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.slashCommand.sessionPrefix", + "path": "channels.discord.execApprovals.sessionFilter", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.streaming", + "path": "channels.discord.execApprovals.sessionFilter.*", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "string", "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.streamMode", + "path": "channels.discord.execApprovals.target", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "replace", - "status_final", - "append" + "dm", + "channel", + "both" ], "deprecated": false, "sensitive": false, @@ -13347,17 +13220,23 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.textChunkLimit", + "path": "channels.discord.groupPolicy", "kind": "channel", - "type": "integer", - "required": false, + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.thread", + "path": "channels.discord.guilds", "kind": "channel", "type": "object", "required": false, @@ -13367,43 +13246,39 @@ "hasChildren": true }, { - "path": "channels.slack.accounts.*.thread.historyScope", + "path": "channels.discord.guilds.*", "kind": "channel", - "type": "string", + "type": "object", "required": false, - "enumValues": [ - "thread", - "channel" - ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.thread.inheritParent", + "path": "channels.discord.guilds.*.channels", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.thread.initialHistoryLimit", + "path": "channels.discord.guilds.*.channels.*", "kind": "channel", - "type": "integer", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.accounts.*.typingReaction", + "path": "channels.discord.guilds.*.channels.*.allow", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13411,68 +13286,58 @@ "hasChildren": false }, { - "path": "channels.slack.accounts.*.userToken", + "path": "channels.discord.guilds.*.channels.*.autoArchiveDuration", "kind": "channel", "type": [ - "object", + "number", "string" ], "required": false, - "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" + "enumValues": [ + "60", + "1440", + "4320", + "10080" ], - "hasChildren": true - }, - { - "path": "channels.slack.accounts.*.userToken.id", - "kind": "channel", - "type": "string", - "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.userToken.provider", + "path": "channels.discord.guilds.*.channels.*.autoThread", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.userToken.source", + "path": "channels.discord.guilds.*.channels.*.enabled", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.userTokenReadOnly", + "path": "channels.discord.guilds.*.channels.*.ignoreOtherMentions", "kind": "channel", "type": "boolean", - "required": true, - "defaultValue": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.accounts.*.webhookPath", + "path": "channels.discord.guilds.*.channels.*.includeThreadStarter", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13480,9 +13345,9 @@ "hasChildren": false }, { - "path": "channels.slack.ackReaction", + "path": "channels.discord.guilds.*.channels.*.requireMention", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -13490,9 +13355,9 @@ "hasChildren": false }, { - "path": "channels.slack.actions", + "path": "channels.discord.guilds.*.channels.*.roles", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -13500,9 +13365,12 @@ "hasChildren": true }, { - "path": "channels.slack.actions.channelInfo", + "path": "channels.discord.guilds.*.channels.*.roles.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -13510,19 +13378,19 @@ "hasChildren": false }, { - "path": "channels.slack.actions.emojiList", + "path": "channels.discord.guilds.*.channels.*.skills", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.actions.memberInfo", + "path": "channels.discord.guilds.*.channels.*.skills.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13530,9 +13398,9 @@ "hasChildren": false }, { - "path": "channels.slack.actions.messages", + "path": "channels.discord.guilds.*.channels.*.systemPrompt", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13540,29 +13408,29 @@ "hasChildren": false }, { - "path": "channels.slack.actions.permissions", + "path": "channels.discord.guilds.*.channels.*.tools", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.actions.pins", + "path": "channels.discord.guilds.*.channels.*.tools.allow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.actions.reactions", + "path": "channels.discord.guilds.*.channels.*.tools.allow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13570,33 +13438,27 @@ "hasChildren": false }, { - "path": "channels.slack.actions.search", + "path": "channels.discord.guilds.*.channels.*.tools.alsoAllow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.allowBots", + "path": "channels.discord.guilds.*.channels.*.tools.alsoAllow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Slack Allow Bot Messages", - "help": "Allow bot-authored messages to trigger Slack replies (default: false).", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.allowFrom", + "path": "channels.discord.guilds.*.channels.*.tools.deny", "kind": "channel", "type": "array", "required": false, @@ -13606,12 +13468,9 @@ "hasChildren": true }, { - "path": "channels.slack.allowFrom.*", + "path": "channels.discord.guilds.*.channels.*.tools.deny.*", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13619,89 +13478,79 @@ "hasChildren": false }, { - "path": "channels.slack.appToken", + "path": "channels.discord.guilds.*.channels.*.toolsBySender", "kind": "channel", - "type": [ - "object", - "string" - ], + "type": "object", "required": false, "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Slack App Token", - "help": "Slack app-level token used for Socket Mode connections and event transport when enabled. Use least-privilege app scopes and store this token as a secret.", + "sensitive": false, + "tags": [], "hasChildren": true }, { - "path": "channels.slack.appToken.id", + "path": "channels.discord.guilds.*.channels.*.toolsBySender.*", "kind": "channel", - "type": "string", - "required": true, + "type": "object", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.appToken.provider", + "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.allow", "kind": "channel", - "type": "string", - "required": true, + "type": "array", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.appToken.source", + "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.allow.*", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.blockStreaming", + "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.blockStreamingCoalesce", + "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow.*", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.blockStreamingCoalesce.idleMs", + "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.deny", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.blockStreamingCoalesce.maxChars", + "path": "channels.discord.guilds.*.channels.*.toolsBySender.*.deny.*", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13709,115 +13558,99 @@ "hasChildren": false }, { - "path": "channels.slack.blockStreamingCoalesce.minChars", + "path": "channels.discord.guilds.*.channels.*.users", "kind": "channel", - "type": "integer", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.botToken", + "path": "channels.discord.guilds.*.channels.*.users.*", "kind": "channel", "type": [ - "object", + "number", "string" ], "required": false, "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Slack Bot Token", - "help": "Slack bot token used for standard chat actions in the configured workspace. Keep this credential scoped and rotate if workspace app permissions change.", - "hasChildren": true - }, - { - "path": "channels.slack.botToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.botToken.provider", + "path": "channels.discord.guilds.*.ignoreOtherMentions", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.botToken.source", + "path": "channels.discord.guilds.*.reactionNotifications", "kind": "channel", "type": "string", - "required": true, + "required": false, + "enumValues": [ + "off", + "own", + "all", + "allowlist" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.capabilities", + "path": "channels.discord.guilds.*.requireMention", "kind": "channel", - "type": [ - "array", - "object" - ], + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.capabilities.*", + "path": "channels.discord.guilds.*.roles", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.capabilities.interactiveReplies", + "path": "channels.discord.guilds.*.roles.*", "kind": "channel", - "type": "boolean", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Interactive Replies", - "help": "Enable agent-authored Slack interactive reply directives (`[[slack_buttons: ...]]`, `[[slack_select: ...]]`). Default: false.", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.channels", + "path": "channels.discord.guilds.*.slug", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.channels.*", + "path": "channels.discord.guilds.*.tools", "kind": "channel", "type": "object", "required": false, @@ -13827,19 +13660,19 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.allow", + "path": "channels.discord.guilds.*.tools.allow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.channels.*.allowBots", + "path": "channels.discord.guilds.*.tools.allow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13847,19 +13680,19 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.enabled", + "path": "channels.discord.guilds.*.tools.alsoAllow", "kind": "channel", - "type": "boolean", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.channels.*.requireMention", + "path": "channels.discord.guilds.*.tools.alsoAllow.*", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -13867,7 +13700,7 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.skills", + "path": "channels.discord.guilds.*.tools.deny", "kind": "channel", "type": "array", "required": false, @@ -13877,7 +13710,7 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.skills.*", + "path": "channels.discord.guilds.*.tools.deny.*", "kind": "channel", "type": "string", "required": false, @@ -13887,17 +13720,17 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.systemPrompt", + "path": "channels.discord.guilds.*.toolsBySender", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.channels.*.tools", + "path": "channels.discord.guilds.*.toolsBySender.*", "kind": "channel", "type": "object", "required": false, @@ -13907,7 +13740,7 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.tools.allow", + "path": "channels.discord.guilds.*.toolsBySender.*.allow", "kind": "channel", "type": "array", "required": false, @@ -13917,7 +13750,7 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.tools.allow.*", + "path": "channels.discord.guilds.*.toolsBySender.*.allow.*", "kind": "channel", "type": "string", "required": false, @@ -13927,7 +13760,7 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.tools.alsoAllow", + "path": "channels.discord.guilds.*.toolsBySender.*.alsoAllow", "kind": "channel", "type": "array", "required": false, @@ -13937,7 +13770,7 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.tools.alsoAllow.*", + "path": "channels.discord.guilds.*.toolsBySender.*.alsoAllow.*", "kind": "channel", "type": "string", "required": false, @@ -13947,7 +13780,7 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.tools.deny", + "path": "channels.discord.guilds.*.toolsBySender.*.deny", "kind": "channel", "type": "array", "required": false, @@ -13957,7 +13790,7 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.tools.deny.*", + "path": "channels.discord.guilds.*.toolsBySender.*.deny.*", "kind": "channel", "type": "string", "required": false, @@ -13967,9 +13800,9 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.toolsBySender", + "path": "channels.discord.guilds.*.users", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -13977,19 +13810,22 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.toolsBySender.*", + "path": "channels.discord.guilds.*.users.*", "kind": "channel", - "type": "object", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.channels.*.toolsBySender.*.allow", + "path": "channels.discord.healthMonitor", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -13997,9 +13833,9 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.toolsBySender.*.allow.*", + "path": "channels.discord.healthMonitor.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -14007,9 +13843,9 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow", + "path": "channels.discord.heartbeat", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -14017,9 +13853,9 @@ "hasChildren": true }, { - "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow.*", + "path": "channels.discord.heartbeat.showAlerts", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -14027,19 +13863,19 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.toolsBySender.*.deny", + "path": "channels.discord.heartbeat.showOk", "kind": "channel", - "type": "array", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.channels.*.toolsBySender.*.deny.*", + "path": "channels.discord.heartbeat.useIndicator", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -14047,44 +13883,43 @@ "hasChildren": false }, { - "path": "channels.slack.channels.*.users", + "path": "channels.discord.historyLimit", "kind": "channel", - "type": "array", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.channels.*.users.*", + "path": "channels.discord.inboundWorker", "kind": "channel", - "type": [ - "number", - "string" - ], + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.chunkMode", + "path": "channels.discord.inboundWorker.runTimeoutMs", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "length", - "newline" - ], "deprecated": false, "sensitive": false, - "tags": [], + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Discord Inbound Worker Timeout (ms)", + "help": "Optional queued Discord inbound worker timeout in ms. This is separate from Carbon listener timeouts; defaults to 1800000 and can be disabled with 0. Set per account via channels.discord.accounts..inboundWorker.runTimeoutMs.", "hasChildren": false }, { - "path": "channels.slack.commands", + "path": "channels.discord.intents", "kind": "channel", "type": "object", "required": false, @@ -14094,43 +13929,23522 @@ "hasChildren": true }, { - "path": "channels.slack.commands.native", + "path": "channels.discord.intents.guildMembers", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Guild Members Intent", + "help": "Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false.", + "hasChildren": false + }, + { + "path": "channels.discord.intents.presence", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Presence Intent", + "help": "Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false.", + "hasChildren": false + }, + { + "path": "channels.discord.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.maxLinesPerMessage", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Discord Max Lines Per Message", + "help": "Soft max line count per Discord message (default: 17).", + "hasChildren": false + }, + { + "path": "channels.discord.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.pluralkit", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.pluralkit.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord PluralKit Enabled", + "help": "Resolve PluralKit proxied messages and treat system members as distinct senders.", + "hasChildren": false + }, + { + "path": "channels.discord.pluralkit.token", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Discord PluralKit Token", + "help": "Optional PluralKit token for resolving private systems or members.", + "hasChildren": true + }, + { + "path": "channels.discord.pluralkit.token.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.pluralkit.token.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.pluralkit.token.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.proxy", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Proxy URL", + "help": "Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts..proxy.", + "hasChildren": false + }, + { + "path": "channels.discord.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.retry", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.retry.attempts", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "reliability" + ], + "label": "Discord Retry Attempts", + "help": "Max retry attempts for outbound Discord API calls (default: 3).", + "hasChildren": false + }, + { + "path": "channels.discord.retry.jitter", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "reliability" + ], + "label": "Discord Retry Jitter", + "help": "Jitter factor (0-1) applied to Discord retry delays.", + "hasChildren": false + }, + { + "path": "channels.discord.retry.maxDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance", + "reliability" + ], + "label": "Discord Retry Max Delay (ms)", + "help": "Maximum retry delay cap in ms for Discord outbound calls.", + "hasChildren": false + }, + { + "path": "channels.discord.retry.minDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "reliability" + ], + "label": "Discord Retry Min Delay (ms)", + "help": "Minimum retry delay in ms for Discord outbound calls.", + "hasChildren": false + }, + { + "path": "channels.discord.slashCommand", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.slashCommand.ephemeral", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.status", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "online", + "dnd", + "idle", + "invisible" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Presence Status", + "help": "Discord presence status (online, dnd, idle, invisible).", + "hasChildren": false + }, + { + "path": "channels.discord.streaming", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Streaming Mode", + "help": "Unified Discord stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". \"progress\" maps to \"partial\" on Discord. Legacy boolean/streamMode keys are auto-mapped.", + "hasChildren": false + }, + { + "path": "channels.discord.streamMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "partial", + "block", + "off" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Stream Mode (Legacy)", + "help": "Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.", + "hasChildren": false + }, + { + "path": "channels.discord.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.threadBindings", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.threadBindings.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Discord Thread Binding Enabled", + "help": "Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.", + "hasChildren": false + }, + { + "path": "channels.discord.threadBindings.idleHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Discord Thread Binding Idle Timeout (hours)", + "help": "Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.", + "hasChildren": false + }, + { + "path": "channels.discord.threadBindings.maxAgeHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance", + "storage" + ], + "label": "Discord Thread Binding Max Age (hours)", + "help": "Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.", + "hasChildren": false + }, + { + "path": "channels.discord.threadBindings.spawnAcpSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Discord Thread-Bound ACP Spawn", + "help": "Allow /acp spawn to auto-create and bind Discord threads for ACP sessions (default: false; opt-in). Set true to enable thread-bound ACP spawns for this account/channel.", + "hasChildren": false + }, + { + "path": "channels.discord.threadBindings.spawnSubagentSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Discord Thread-Bound Subagent Spawn", + "help": "Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.", + "hasChildren": false + }, + { + "path": "channels.discord.token", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Discord Bot Token", + "help": "Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.", + "hasChildren": true + }, + { + "path": "channels.discord.token.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.token.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.token.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.ui", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.ui.components", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.ui.components.accentColor", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Component Accent Color", + "help": "Accent color for Discord component containers (hex). Set per account via channels.discord.accounts..ui.components.accentColor.", + "hasChildren": false + }, + { + "path": "channels.discord.voice", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.autoJoin", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Voice Auto-Join", + "help": "Voice channels to auto-join on startup (list of guildId/channelId entries).", + "hasChildren": true + }, + { + "path": "channels.discord.voice.autoJoin.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.autoJoin.*.channelId", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.autoJoin.*.guildId", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.daveEncryption", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Voice DAVE Encryption", + "help": "Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this).", + "hasChildren": false + }, + { + "path": "channels.discord.voice.decryptionFailureTolerance", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Voice Decrypt Failure Tolerance", + "help": "Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24).", + "hasChildren": false + }, + { + "path": "channels.discord.voice.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Discord Voice Enabled", + "help": "Enable Discord voice channel conversations (default: true). Omit channels.discord.voice to keep voice support disabled for the account.", + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "media", + "network" + ], + "label": "Discord Voice Text-to-Speech", + "help": "Optional TTS overrides for Discord voice playback (merged with messages.tts).", + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.auto", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "always", + "inbound", + "tagged" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.edge.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.lang", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.outputFormat", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.pitch", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.proxy", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.rate", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.saveSubtitles", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.timeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.voice", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.edge.volume", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.elevenlabs.apiKey", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "media", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.elevenlabs.apiKey.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.apiKey.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.apiKey.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.applyTextNormalization", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "auto", + "on", + "off" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.baseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.languageCode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.modelId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.seed", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.voiceId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.voiceSettings", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.similarityBoost", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.speed", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.stability", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.style", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.maxTextLength", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.microsoft.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.lang", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.outputFormat", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.pitch", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.proxy", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.rate", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.saveSubtitles", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.timeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.voice", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.microsoft.volume", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.mode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "final", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.modelOverrides.allowModelId", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides.allowNormalization", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides.allowProvider", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides.allowSeed", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides.allowText", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides.allowVoice", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides.allowVoiceSettings", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.modelOverrides.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.openai.apiKey", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "media", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.discord.voice.tts.openai.apiKey.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai.apiKey.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai.apiKey.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai.baseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai.instructions", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai.model", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai.speed", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.openai.voice", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.prefsPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.provider", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.summaryModel", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.discord.voice.tts.timeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Feishu", + "help": "飞书/Lark enterprise messaging with doc/wiki/drive tools.", + "hasChildren": true + }, + { + "path": "channels.feishu.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.appId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.appSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.appSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.appSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.appSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.blockStreamingCoalesce.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.blockStreamingCoalesce.maxDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.blockStreamingCoalesce.minDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.connectionMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "websocket", + "webhook" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "pairing", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.dms.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.dms.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.domain", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "feishu", + "lark" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.encryptKey", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.encryptKey.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.encryptKey.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.encryptKey.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.groupSessionScope", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.replyInThread", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groups.*.topicSessionMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groupSenderAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.groupSenderAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.groupSessionScope", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.heartbeat.intervalMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.heartbeat.visibility", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "visible", + "hidden" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.httpTimeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.markdown.mode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "native", + "escape", + "strip" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.markdown.tableMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "native", + "ascii", + "simple" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.renderMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "auto", + "raw", + "card" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.replyInThread", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.resolveSenderNames", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.streaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.tools.chat", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.tools.doc", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.tools.drive", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.tools.perm", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.tools.scopes", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.tools.wiki", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.topicSessionMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.typingIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.verificationToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.accounts.*.verificationToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.verificationToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.verificationToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.webhookHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.accounts.*.webhookPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.appId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.appSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.appSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.appSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.appSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.blockStreamingCoalesce.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.blockStreamingCoalesce.maxDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.blockStreamingCoalesce.minDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.connectionMode", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "websocket", + "webhook" + ], + "defaultValue": "websocket", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "pairing", + "allowlist" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.dms.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dms.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.domain", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "feishu", + "lark" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dynamicAgentCreation", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.dynamicAgentCreation.agentDirTemplate", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dynamicAgentCreation.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dynamicAgentCreation.maxAgents", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.dynamicAgentCreation.workspaceTemplate", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.encryptKey", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.encryptKey.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.encryptKey.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.encryptKey.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.groupSessionScope", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.replyInThread", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groups.*.topicSessionMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groupSenderAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.groupSenderAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.groupSessionScope", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "group", + "group_sender", + "group_topic", + "group_topic_sender" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.heartbeat.intervalMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.heartbeat.visibility", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "visible", + "hidden" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.httpTimeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.markdown.mode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "native", + "escape", + "strip" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.markdown.tableMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "native", + "ascii", + "simple" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.reactionNotifications", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "off", + "own", + "all" + ], + "defaultValue": "own", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.renderMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "auto", + "raw", + "card" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.replyInThread", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.requireMention", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.resolveSenderNames", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.streaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.tools.chat", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.tools.doc", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.tools.drive", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.tools.perm", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.tools.scopes", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.tools.wiki", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.topicSessionMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "disabled", + "enabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.typingIndicator", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.verificationToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.feishu.verificationToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.verificationToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.verificationToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.webhookHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.webhookPath", + "kind": "channel", + "type": "string", + "required": true, + "defaultValue": "/feishu/events", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.feishu.webhookPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Google Chat", + "help": "Google Workspace Chat app via HTTP webhooks.", + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.allowBots", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.appPrincipal", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.audience", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.audienceType", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "app-url", + "project-number" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.botUser", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.dm", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.dm.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.dm.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.dm.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.dm.policy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.groups.*.allow", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.groups.*.users", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.groups.*.users.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccount", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.serviceAccount.*", + "kind": "channel", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccount.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccount.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccount.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccountFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccountRef", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.googlechat.accounts.*.serviceAccountRef.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccountRef.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.serviceAccountRef.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.streamMode", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "replace", + "status_final", + "append" + ], + "defaultValue": "replace", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.typingIndicator", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "none", + "message", + "reaction" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.accounts.*.webhookUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.allowBots", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.appPrincipal", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.audience", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.audienceType", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "app-url", + "project-number" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.botUser", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.dm", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.dm.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.dm.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.dm.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.dm.policy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.groups.*.allow", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.groups.*.users", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.groups.*.users.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.googlechat.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccount", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.googlechat.serviceAccount.*", + "kind": "channel", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccount.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccount.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccount.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccountFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccountRef", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.googlechat.serviceAccountRef.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccountRef.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.serviceAccountRef.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.streamMode", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "replace", + "status_final", + "append" + ], + "defaultValue": "replace", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.typingIndicator", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "none", + "message", + "reaction" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.googlechat.webhookUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "iMessage", + "help": "this is still a work in progress.", + "hasChildren": true + }, + { + "path": "channels.imessage.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.attachmentRoots", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.attachmentRoots.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.cliPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.dbPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.includeAttachments", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.region", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.remoteAttachmentRoots", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.accounts.*.remoteAttachmentRoots.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.remoteHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.service", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.attachmentRoots", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.attachmentRoots.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.cliPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "iMessage CLI Path", + "help": "Filesystem path to the iMessage bridge CLI binary used for send/receive operations. Set explicitly when the binary is not on PATH in service runtime environments.", + "hasChildren": false + }, + { + "path": "channels.imessage.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "iMessage Config Writes", + "help": "Allow iMessage to write config in response to channel events/commands (default: true).", + "hasChildren": false + }, + { + "path": "channels.imessage.dbPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "iMessage DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.imessage.allowFrom=[\"*\"].", + "hasChildren": false + }, + { + "path": "channels.imessage.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.includeAttachments", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.mediaMaxMb", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.region", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.remoteAttachmentRoots", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.imessage.remoteAttachmentRoots.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.remoteHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.service", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.imessage.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "IRC", + "help": "classic IRC networks with DM/channel routing and pairing controls.", + "hasChildren": true + }, + { + "path": "channels.irc.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.channels", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.channels.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.host", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.mentionPatterns", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.mentionPatterns.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.nick", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.nickserv", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.accounts.*.nickserv.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.nickserv.password", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.nickserv.passwordFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.nickserv.register", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.nickserv.registerEmail", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.nickserv.service", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.password", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.passwordFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.port", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.realname", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.tls", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.accounts.*.username", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.channels", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.channels.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "IRC DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.irc.allowFrom=[\"*\"].", + "hasChildren": false + }, + { + "path": "channels.irc.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.host", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.mentionPatterns", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.mentionPatterns.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.nick", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.nickserv", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.irc.nickserv.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "IRC NickServ Enabled", + "help": "Enable NickServ identify/register after connect (defaults to enabled when password is configured).", + "hasChildren": false + }, + { + "path": "channels.irc.nickserv.password", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "IRC NickServ Password", + "help": "NickServ password used for IDENTIFY/REGISTER (sensitive).", + "hasChildren": false + }, + { + "path": "channels.irc.nickserv.passwordFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "auth", + "channels", + "network", + "security", + "storage" + ], + "label": "IRC NickServ Password File", + "help": "Optional file path containing NickServ password.", + "hasChildren": false + }, + { + "path": "channels.irc.nickserv.register", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "IRC NickServ Register", + "help": "If true, send NickServ REGISTER on every connect. Use once for initial registration, then disable.", + "hasChildren": false + }, + { + "path": "channels.irc.nickserv.registerEmail", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "IRC NickServ Register Email", + "help": "Email used with NickServ REGISTER (required when register=true).", + "hasChildren": false + }, + { + "path": "channels.irc.nickserv.service", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "IRC NickServ Service", + "help": "NickServ service nick (default: NickServ).", + "hasChildren": false + }, + { + "path": "channels.irc.password", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": false + }, + { + "path": "channels.irc.passwordFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.port", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.realname", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.tls", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.irc.username", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "LINE", + "help": "LINE Messaging API bot for Japan/Taiwan/Thailand markets.", + "hasChildren": true + }, + { + "path": "channels.line.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.channelAccessToken", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.channelSecret", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "allowlist", + "pairing", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.accounts.*.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.secretFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.tokenFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.accounts.*.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.channelAccessToken", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.channelSecret", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "allowlist", + "pairing", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "allowlist", + "disabled" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.line.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.secretFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.tokenFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.line.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Matrix", + "help": "open protocol; install the plugin to enable.", + "hasChildren": true + }, + { + "path": "channels.matrix.accessToken", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.accounts.*", + "kind": "channel", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.ackReaction", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.ackReactionScope", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "group-mentions", + "group-all", + "direct", + "all", + "none", + "off" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.actions.channelInfo", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.actions.memberInfo", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.actions.messages", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.actions.pins", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.actions.profile", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.actions.verification", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.allowBots", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "Matrix Allow Bot Messages", + "help": "Allow messages from other configured Matrix bot accounts to trigger replies (default: false). Set \"mentions\" to only accept bot messages that visibly mention this bot.", + "hasChildren": false + }, + { + "path": "channels.matrix.allowlistOnly", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.allowPrivateNetwork", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.autoJoin", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "always", + "allowlist", + "off" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.autoJoinAllowlist", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.autoJoinAllowlist.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.avatarUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.deviceId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.deviceName", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.dm", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.dm.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.dm.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.dm.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.dm.policy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.encryption", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*.allow", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.allowBots", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.autoReply", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.groups.*.users", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.groups.*.users.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.homeserver", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.initialSyncLimit", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.password", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.password.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.password.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.password.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "first", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*.allow", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.allowBots", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.autoReply", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.rooms.*.users", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.rooms.*.users.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.startupVerification", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "if-unverified" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.startupVerificationCooldownHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.textChunkLimit", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.threadBindings", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.matrix.threadBindings.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.threadBindings.idleHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.threadBindings.maxAgeHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.threadBindings.spawnAcpSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.threadBindings.spawnSubagentSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.threadReplies", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "inbound", + "always" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.matrix.userId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Mattermost", + "help": "self-hosted Slack-style chat; install the plugin to enable.", + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.baseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.botToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.botToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.botToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.chatmode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "oncall", + "onmessage", + "onchar" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.commands", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.commands.callbackPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.commands.callbackUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.commands.native", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.commands.nativeSkills", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.dmChannelRetry", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.dmChannelRetry.initialDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.dmChannelRetry.maxDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.dmChannelRetry.maxRetries", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.dmChannelRetry.timeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.interactions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.interactions.allowedSourceIps", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.interactions.allowedSourceIps.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.interactions.callbackBaseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.oncharPrefixes", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.accounts.*.oncharPrefixes.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "first", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.baseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Mattermost Base URL", + "help": "Base URL for your Mattermost server (e.g., https://chat.example.com).", + "hasChildren": false + }, + { + "path": "channels.mattermost.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.botToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Mattermost Bot Token", + "help": "Bot token from Mattermost System Console -> Integrations -> Bot Accounts.", + "hasChildren": true + }, + { + "path": "channels.mattermost.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.botToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.botToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.chatmode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "oncall", + "onmessage", + "onchar" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Mattermost Chat Mode", + "help": "Reply to channel messages on mention (\"oncall\"), on trigger chars (\">\" or \"!\") (\"onchar\"), or on every message (\"onmessage\").", + "hasChildren": false + }, + { + "path": "channels.mattermost.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.commands", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.commands.callbackPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.commands.callbackUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.commands.native", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.commands.nativeSkills", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Mattermost Config Writes", + "help": "Allow Mattermost to write config in response to channel events/commands (default: true).", + "hasChildren": false + }, + { + "path": "channels.mattermost.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.dmChannelRetry", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.dmChannelRetry.initialDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.dmChannelRetry.maxDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.dmChannelRetry.maxRetries", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.dmChannelRetry.timeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.interactions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.interactions.allowedSourceIps", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.interactions.allowedSourceIps.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.interactions.callbackBaseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.mattermost.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.oncharPrefixes", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Mattermost Onchar Prefixes", + "help": "Trigger prefixes for onchar mode (default: [\">\", \"!\"]).", + "hasChildren": true + }, + { + "path": "channels.mattermost.oncharPrefixes.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "first", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Mattermost Require Mention", + "help": "Require @mention in channels before responding (default: true).", + "hasChildren": false + }, + { + "path": "channels.mattermost.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.mattermost.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Microsoft Teams", + "help": "Bot Framework; enterprise support.", + "hasChildren": true + }, + { + "path": "channels.msteams.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.appId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.appPassword", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.msteams.appPassword.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.appPassword.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.appPassword.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "MS Teams Config Writes", + "help": "Allow Microsoft Teams to write config in response to channel events/commands (default: true).", + "hasChildren": false + }, + { + "path": "channels.msteams.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.groupAllowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.mediaAllowHosts", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.mediaAllowHosts.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.mediaAuthAllowHosts", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.mediaAuthAllowHosts.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.replyStyle", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "thread", + "top-level" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.sharePointSiteId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.replyStyle", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "thread", + "top-level" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.channels.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.channels.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.channels.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.channels.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.channels.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.replyStyle", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "thread", + "top-level" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.teams.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.teams.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.tenantId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.webhook", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.msteams.webhook.path", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.msteams.webhook.port", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Nextcloud Talk", + "help": "Self-hosted chat via Nextcloud Talk webhook bots.", + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.apiPassword", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.apiPassword.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.apiPassword.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.apiPassword.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.apiPasswordFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.apiUser", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.baseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.botSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.botSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.botSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.botSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.botSecretFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.accounts.*.rooms.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.webhookHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.webhookPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.accounts.*.webhookPublicUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.apiPassword", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.apiPassword.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.apiPassword.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.apiPassword.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.apiPasswordFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.apiUser", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.baseUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.botSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.botSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.botSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.botSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.botSecretFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.groupAllowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.rooms.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nextcloud-talk.rooms.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.webhookHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.webhookPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nextcloud-talk.webhookPublicUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Nostr", + "help": "Decentralized protocol; encrypted DMs via NIP-04.", + "hasChildren": true + }, + { + "path": "channels.nostr.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nostr.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.dmPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nostr.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.privateKey", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nostr.profile.about", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile.banner", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile.displayName", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile.lud16", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile.nip05", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile.picture", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.profile.website", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.nostr.relays", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.nostr.relays.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Signal", + "help": "signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").", + "hasChildren": true + }, + { + "path": "channels.signal.account", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Signal Account", + "help": "Signal account identifier (phone/number handle) used to bind this channel config to a specific Signal identity. Keep this aligned with your linked device/session state.", + "hasChildren": false + }, + { + "path": "channels.signal.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.account", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.accountUuid", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.autoStart", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.cliPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.httpHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.httpPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.httpUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.ignoreAttachments", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.ignoreStories", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.reactionAllowlist", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.accounts.*.reactionAllowlist.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.reactionLevel", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "ack", + "minimal", + "extensive" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own", + "all", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.receiveMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.sendReadReceipts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.startupTimeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.accountUuid", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.autoStart", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.cliPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Signal Config Writes", + "help": "Allow Signal to write config in response to channel events/commands (default: true).", + "hasChildren": false + }, + { + "path": "channels.signal.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "Signal DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.signal.allowFrom=[\"*\"].", + "hasChildren": false + }, + { + "path": "channels.signal.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.httpHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.httpPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.httpUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.ignoreAttachments", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.ignoreStories", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.mediaMaxMb", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.reactionAllowlist", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.signal.reactionAllowlist.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.reactionLevel", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "ack", + "minimal", + "extensive" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own", + "all", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.receiveMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.sendReadReceipts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.startupTimeoutMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.signal.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack", + "help": "supported (Socket Mode).", + "hasChildren": true + }, + { + "path": "channels.slack.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.ackReaction", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.actions.channelInfo", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.emojiList", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.memberInfo", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.messages", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.permissions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.pins", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.actions.search", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.allowBots", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.appToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.appToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.appToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.appToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.botToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.botToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.botToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.capabilities", + "kind": "channel", + "type": [ + "array", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.capabilities.interactiveReplies", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.allow", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.allowBots", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.channels.*.users", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.channels.*.users.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.commands", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.commands.native", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.commands.nativeSkills", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dm", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.dm.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.dm.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dm.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dm.groupChannels", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.dm.groupChannels.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dm.groupEnabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dm.policy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dm.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.mode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "socket", + "http" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.nativeStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.reactionAllowlist", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.reactionAllowlist.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own", + "all", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.replyToModeByChatType", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.replyToModeByChatType.channel", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.replyToModeByChatType.direct", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.replyToModeByChatType.group", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.signingSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.signingSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.signingSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.signingSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.slashCommand", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.slashCommand.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.slashCommand.ephemeral", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.slashCommand.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.slashCommand.sessionPrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.streaming", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.streamMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "replace", + "status_final", + "append" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.thread", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.thread.historyScope", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "thread", + "channel" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.thread.inheritParent", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.thread.initialHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.typingReaction", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.userToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.slack.accounts.*.userToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.userToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.userToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.userTokenReadOnly", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.accounts.*.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.ackReaction", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.actions.channelInfo", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions.emojiList", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions.memberInfo", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions.messages", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions.permissions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions.pins", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.actions.search", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.allowBots", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "Slack Allow Bot Messages", + "help": "Allow bot-authored messages to trigger Slack replies (default: false).", + "hasChildren": false + }, + { + "path": "channels.slack.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.appToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Slack App Token", + "help": "Slack app-level token used for Socket Mode connections and event transport when enabled. Use least-privilege app scopes and store this token as a secret.", + "hasChildren": true + }, + { + "path": "channels.slack.appToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.appToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.appToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.botToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Slack Bot Token", + "help": "Slack bot token used for standard chat actions in the configured workspace. Keep this credential scoped and rotate if workspace app permissions change.", + "hasChildren": true + }, + { + "path": "channels.slack.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.botToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.botToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.capabilities", + "kind": "channel", + "type": [ + "array", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.capabilities.interactiveReplies", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Interactive Replies", + "help": "Enable agent-authored Slack interactive reply directives (`[[slack_buttons: ...]]`, `[[slack_select: ...]]`). Default: false.", + "hasChildren": false + }, + { + "path": "channels.slack.channels", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.allow", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.allowBots", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.channels.*.users", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.channels.*.users.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.commands", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.commands.native", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Native Commands", + "help": "Override native commands for Slack (bool or \"auto\").", + "hasChildren": false + }, + { + "path": "channels.slack.commands.nativeSkills", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Native Skill Commands", + "help": "Override native skill commands for Slack (bool or \"auto\").", + "hasChildren": false + }, + { + "path": "channels.slack.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Config Writes", + "help": "Allow Slack to write config in response to channel events/commands (default: true).", + "hasChildren": false + }, + { + "path": "channels.slack.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.dm", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.dm.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.dm.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.dm.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.dm.groupChannels", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.dm.groupChannels.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.dm.groupEnabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.dm.policy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "Slack DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"] (legacy: channels.slack.dm.allowFrom).", + "hasChildren": false + }, + { + "path": "channels.slack.dm.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.dmPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "Slack DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"].", + "hasChildren": false + }, + { + "path": "channels.slack.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.mode", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "socket", + "http" + ], + "defaultValue": "socket", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.nativeStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Native Streaming", + "help": "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).", + "hasChildren": false + }, + { + "path": "channels.slack.reactionAllowlist", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.reactionAllowlist.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own", + "all", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.replyToModeByChatType", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.replyToModeByChatType.channel", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.replyToModeByChatType.direct", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.replyToModeByChatType.group", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.signingSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.slack.signingSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.signingSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.signingSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.slashCommand", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.slashCommand.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.slashCommand.ephemeral", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.slashCommand.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.slashCommand.sessionPrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.streaming", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Streaming Mode", + "help": "Unified Slack stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". Legacy boolean/streamMode keys are auto-mapped.", + "hasChildren": false + }, + { + "path": "channels.slack.streamMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "replace", + "status_final", + "append" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Stream Mode (Legacy)", + "help": "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.", + "hasChildren": false + }, + { + "path": "channels.slack.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.thread", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.slack.thread.historyScope", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "thread", + "channel" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Thread History Scope", + "help": "Scope for Slack thread history context (\"thread\" isolates per thread; \"channel\" reuses channel history).", + "hasChildren": false + }, + { + "path": "channels.slack.thread.inheritParent", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Slack Thread Parent Inheritance", + "help": "If true, Slack thread sessions inherit the parent channel transcript (default: false).", + "hasChildren": false + }, + { + "path": "channels.slack.thread.initialHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Slack Thread Initial History Limit", + "help": "Maximum number of existing Slack thread messages to fetch when starting a new thread session (default: 20, set to 0 to disable).", + "hasChildren": false + }, + { + "path": "channels.slack.typingReaction", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.userToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Slack User Token", + "help": "Optional Slack user token for workflows requiring user-context API access beyond bot permissions. Use sparingly and audit scopes because this token can carry broader authority.", + "hasChildren": true + }, + { + "path": "channels.slack.userToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.userToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.userToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.slack.userTokenReadOnly", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Slack User Token Read Only", + "help": "When true, treat configured Slack user token usage as read-only helper behavior where possible. Keep enabled if you only need supplemental reads without user-context writes.", + "hasChildren": false + }, + { + "path": "channels.slack.webhookPath", + "kind": "channel", + "type": "string", + "required": true, + "defaultValue": "/slack/events", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.synology-chat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Synology Chat", + "help": "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.", + "hasChildren": true + }, + { + "path": "channels.synology-chat.*", + "kind": "channel", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.synology-chat.dangerouslyAllowInheritedWebhookPath", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.synology-chat.dangerouslyAllowNameMatching", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram", + "help": "simplest way to get started — register a bot with @BotFather and get going.", + "hasChildren": true + }, + { + "path": "channels.telegram.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.ackReaction", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.actions.createForumTopic", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions.deleteMessage", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions.editForumTopic", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions.editMessage", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions.poll", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions.sendMessage", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.actions.sticker", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.apiRoot", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.autoTopicLabel", + "kind": "channel", + "type": [ + "boolean", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.autoTopicLabel.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.autoTopicLabel.prompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.botToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.botToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.botToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.capabilities", + "kind": "channel", + "type": [ + "array", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.capabilities.inlineButtons", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "dm", + "group", + "all", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.commands", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.commands.native", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.commands.nativeSkills", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.customCommands", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.customCommands.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.customCommands.*.command", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.customCommands.*.description", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.defaultTo", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.autoTopicLabel", + "kind": "channel", + "type": [ + "boolean", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.autoTopicLabel.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.autoTopicLabel.prompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.requireTopic", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.agentId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.disableAudioPreflight", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.direct.*.topics.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.draftChunk", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.draftChunk.breakPreference", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.draftChunk.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.draftChunk.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.execApprovals", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.execApprovals.agentFilter", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.execApprovals.agentFilter.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.execApprovals.approvers", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.execApprovals.approvers.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.execApprovals.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.execApprovals.sessionFilter", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.execApprovals.sessionFilter.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.execApprovals.target", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "dm", + "channel", + "both" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.disableAudioPreflight", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.agentId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.disableAudioPreflight", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.groups.*.topics.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.linkPreview", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.network", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.network.autoSelectFamily", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.network.dnsResultOrder", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "ipv4first", + "verbatim" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.proxy", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.reactionLevel", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "ack", + "minimal", + "extensive" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.retry", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.retry.attempts", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.retry.jitter", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.retry.maxDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.retry.minDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.silentErrorReplies", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.streaming", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.streamMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "partial", + "block" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.threadBindings", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.threadBindings.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.threadBindings.idleHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.threadBindings.maxAgeHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.threadBindings.spawnAcpSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.threadBindings.spawnSubagentSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.timeoutSeconds", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.tokenFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookCertPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.telegram.accounts.*.webhookSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.accounts.*.webhookUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.ackReaction", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.actions.createForumTopic", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions.deleteMessage", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions.editForumTopic", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions.editMessage", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions.poll", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions.sendMessage", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.actions.sticker", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.apiRoot", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram API Root URL", + "help": "Custom Telegram Bot API root URL. Use for self-hosted Bot API servers (https://github.com/tdlib/telegram-bot-api) or reverse proxies in regions where api.telegram.org is blocked.", + "hasChildren": false + }, + { + "path": "channels.telegram.autoTopicLabel", + "kind": "channel", + "type": [ + "boolean", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Auto Topic Label", + "help": "Auto-rename DM forum topics on first message using LLM. Default: true. Set to false to disable, or use object form { enabled: true, prompt: '...' } for custom prompt.", + "hasChildren": true + }, + { + "path": "channels.telegram.autoTopicLabel.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Auto Topic Label Enabled", + "help": "Whether auto topic labeling is enabled. Default: true.", + "hasChildren": false + }, + { + "path": "channels.telegram.autoTopicLabel.prompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Auto Topic Label Prompt", + "help": "Custom prompt for LLM-based topic naming. The user message is appended after the prompt.", + "hasChildren": false + }, + { + "path": "channels.telegram.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.botToken", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "label": "Telegram Bot Token", + "help": "Telegram bot token used to authenticate Bot API requests for this account/provider config. Use secret/env substitution and rotate tokens if exposure is suspected.", + "hasChildren": true + }, + { + "path": "channels.telegram.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.botToken.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.botToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.capabilities", + "kind": "channel", + "type": [ + "array", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.capabilities.inlineButtons", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "dm", + "group", + "all", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Inline Buttons", + "help": "Enable Telegram inline button components for supported command and interaction surfaces. Disable if your deployment needs plain-text-only compatibility behavior.", + "hasChildren": false + }, + { + "path": "channels.telegram.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.commands", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.commands.native", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Native Commands", + "help": "Override native commands for Telegram (bool or \"auto\").", + "hasChildren": false + }, + { + "path": "channels.telegram.commands.nativeSkills", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Native Skill Commands", + "help": "Override native skill commands for Telegram (bool or \"auto\").", + "hasChildren": false + }, + { + "path": "channels.telegram.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Config Writes", + "help": "Allow Telegram to write config in response to channel events/commands (default: true).", + "hasChildren": false + }, + { + "path": "channels.telegram.customCommands", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Custom Commands", + "help": "Additional Telegram bot menu commands (merged with native; conflicts ignored).", + "hasChildren": true + }, + { + "path": "channels.telegram.customCommands.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.customCommands.*.command", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.customCommands.*.description", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.defaultTo", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.autoTopicLabel", + "kind": "channel", + "type": [ + "boolean", + "object" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.autoTopicLabel.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.autoTopicLabel.prompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.requireTopic", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.topics.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.topics.*.agentId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.topics.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics.*.disableAudioPreflight", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.direct.*.topics.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.direct.*.topics.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "Telegram DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.telegram.allowFrom=[\"*\"].", + "hasChildren": false + }, + { + "path": "channels.telegram.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.draftChunk", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.draftChunk.breakPreference", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.draftChunk.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.draftChunk.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.execApprovals", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Exec Approvals", + "help": "Telegram-native exec approval routing and approver authorization. Enable this only when Telegram should act as an explicit exec-approval client for the selected bot account.", + "hasChildren": true + }, + { + "path": "channels.telegram.execApprovals.agentFilter", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Exec Approval Agent Filter", + "help": "Optional allowlist of agent IDs eligible for Telegram exec approvals, for example `[\"main\", \"ops-agent\"]`. Use this to keep approval prompts scoped to the agents you actually operate from Telegram.", + "hasChildren": true + }, + { + "path": "channels.telegram.execApprovals.agentFilter.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.execApprovals.approvers", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Exec Approval Approvers", + "help": "Telegram user IDs allowed to approve exec requests for this bot account. Use numeric Telegram user IDs; prompts are only delivered to these approvers when target includes dm.", + "hasChildren": true + }, + { + "path": "channels.telegram.execApprovals.approvers.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.execApprovals.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Exec Approvals Enabled", + "help": "Enable Telegram exec approvals for this account. When false or unset, Telegram messages/buttons cannot approve exec requests.", + "hasChildren": false + }, + { + "path": "channels.telegram.execApprovals.sessionFilter", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Telegram Exec Approval Session Filter", + "help": "Optional session-key filters matched as substring or regex-style patterns before Telegram approval routing is used. Use narrow patterns so Telegram approvals only appear for intended sessions.", + "hasChildren": true + }, + { + "path": "channels.telegram.execApprovals.sessionFilter.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.execApprovals.target", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "dm", + "channel", + "both" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Exec Approval Target", + "help": "Controls where Telegram approval prompts are sent: \"dm\" sends to approver DMs (default), \"channel\" sends to the originating Telegram chat/topic, and \"both\" sends to both. Channel delivery exposes the command text to the chat, so only use it in trusted groups/topics.", + "hasChildren": false + }, + { + "path": "channels.telegram.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.disableAudioPreflight", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.topics.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.topics.*.agentId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.topics.*.allowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics.*.disableAudioPreflight", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics.*.skills", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.groups.*.topics.*.skills.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.groups.*.topics.*.systemPrompt", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.linkPreview", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.mediaMaxMb", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.network", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.network.autoSelectFamily", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram autoSelectFamily", + "help": "Override Node autoSelectFamily for Telegram (true=enable, false=disable).", + "hasChildren": false + }, + { + "path": "channels.telegram.network.dnsResultOrder", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "ipv4first", + "verbatim" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.proxy", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.reactionLevel", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "ack", + "minimal", + "extensive" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.reactionNotifications", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "own", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.replyToMode", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.retry", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.retry.attempts", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "reliability" + ], + "label": "Telegram Retry Attempts", + "help": "Max retry attempts for outbound Telegram API calls (default: 3).", + "hasChildren": false + }, + { + "path": "channels.telegram.retry.jitter", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "reliability" + ], + "label": "Telegram Retry Jitter", + "help": "Jitter factor (0-1) applied to Telegram retry delays.", + "hasChildren": false + }, + { + "path": "channels.telegram.retry.maxDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance", + "reliability" + ], + "label": "Telegram Retry Max Delay (ms)", + "help": "Maximum retry delay cap in ms for Telegram outbound calls.", + "hasChildren": false + }, + { + "path": "channels.telegram.retry.minDelayMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "reliability" + ], + "label": "Telegram Retry Min Delay (ms)", + "help": "Minimum retry delay in ms for Telegram outbound calls.", + "hasChildren": false + }, + { + "path": "channels.telegram.silentErrorReplies", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Silent Error Replies", + "help": "When true, Telegram bot replies marked as errors are sent silently (no notification sound). Default: false.", + "hasChildren": false + }, + { + "path": "channels.telegram.streaming", + "kind": "channel", + "type": [ + "boolean", + "string" + ], + "required": false, + "enumValues": [ + "off", + "partial", + "block", + "progress" + ], + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Telegram Streaming Mode", + "help": "Unified Telegram stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default: \"partial\"). \"progress\" maps to \"partial\" on Telegram. Legacy boolean/streamMode keys are auto-mapped.", + "hasChildren": false + }, + { + "path": "channels.telegram.streamMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "partial", + "block" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.threadBindings", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.telegram.threadBindings.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Telegram Thread Binding Enabled", + "help": "Enable Telegram conversation binding features (/focus, /unfocus, /agents, and /session idle|max-age). Overrides session.threadBindings.enabled when set.", + "hasChildren": false + }, + { + "path": "channels.telegram.threadBindings.idleHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Telegram Thread Binding Idle Timeout (hours)", + "help": "Inactivity window in hours for Telegram bound sessions. Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.", + "hasChildren": false + }, + { + "path": "channels.telegram.threadBindings.maxAgeHours", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance", + "storage" + ], + "label": "Telegram Thread Binding Max Age (hours)", + "help": "Optional hard max age in hours for Telegram bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.", + "hasChildren": false + }, + { + "path": "channels.telegram.threadBindings.spawnAcpSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Telegram Thread-Bound ACP Spawn", + "help": "Allow ACP spawns with thread=true to auto-bind Telegram current conversations when supported.", + "hasChildren": false + }, + { + "path": "channels.telegram.threadBindings.spawnSubagentSessions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "storage" + ], + "label": "Telegram Thread-Bound Subagent Spawn", + "help": "Allow subagent spawns with thread=true to auto-bind Telegram current conversations when supported.", + "hasChildren": false + }, + { + "path": "channels.telegram.timeoutSeconds", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance" + ], + "label": "Telegram API Timeout (seconds)", + "help": "Max seconds before Telegram API requests are aborted (default: 500 per grammY).", + "hasChildren": false + }, + { + "path": "channels.telegram.tokenFile", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookCertPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookHost", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookPath", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookPort", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookSecret", + "kind": "channel", + "type": [ + "object", + "string" + ], + "required": false, + "deprecated": false, + "sensitive": true, + "tags": [ + "auth", + "channels", + "network", + "security" + ], + "hasChildren": true + }, + { + "path": "channels.telegram.webhookSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookSecret.provider", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookSecret.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.telegram.webhookUrl", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Tlon", + "help": "decentralized messaging on Urbit; install the plugin to enable.", + "hasChildren": true + }, + { + "path": "channels.tlon.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.accounts.*.allowPrivateNetwork", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.autoAcceptDmInvites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.autoAcceptGroupInvites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.autoDiscoverChannels", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.code", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.dmAllowlist", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.accounts.*.dmAllowlist.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.groupChannels", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.accounts.*.groupChannels.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.ownerShip", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.ship", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.showModelSignature", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.accounts.*.url", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.allowPrivateNetwork", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.authorization", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.authorization.channelRules", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.authorization.channelRules.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.authorization.channelRules.*.allowedShips", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.authorization.channelRules.*.allowedShips.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.authorization.channelRules.*.mode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "restricted", + "open" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.autoAcceptDmInvites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.autoAcceptGroupInvites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.autoDiscoverChannels", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.code", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.defaultAuthorizedShips", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.defaultAuthorizedShips.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.dmAllowlist", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.dmAllowlist.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.groupChannels", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.tlon.groupChannels.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.ownerShip", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.ship", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.showModelSignature", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.tlon.url", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Twitch", + "help": "Twitch chat integration", + "hasChildren": true + }, + { + "path": "channels.twitch.accessToken", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts", + "kind": "channel", + "type": "object", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.twitch.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.twitch.accounts.*.accessToken", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.allowedRoles", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.twitch.accounts.*.allowedRoles.*", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "moderator", + "owner", + "vip", + "subscriber", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.twitch.accounts.*.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.channel", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.clientId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.clientSecret", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.expiresIn", + "kind": "channel", + "type": [ + "null", + "number" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.obtainmentTimestamp", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.refreshToken", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.accounts.*.username", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.allowedRoles", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.twitch.allowedRoles.*", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "moderator", + "owner", + "vip", + "subscriber", + "all" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.twitch.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.channel", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.clientId", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.clientSecret", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.expiresIn", + "kind": "channel", + "type": [ + "null", + "number" + ], + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.twitch.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "bullets", + "code", + "off" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.obtainmentTimestamp", + "kind": "channel", + "type": "number", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.refreshToken", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.twitch.username", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "WhatsApp", + "help": "works with your own number; recommend a separate phone + eSIM.", + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.ackReaction", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.ackReaction.direct", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.ackReaction.emoji", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.ackReaction.group", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "always", + "mentions", + "never" + ], + "defaultValue": "mentions", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.authDir", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.debounceMs", + "kind": "channel", + "type": "integer", + "required": true, + "defaultValue": 0, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.accounts.*.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.mediaMaxMb", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.messagePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.name", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.responsePrefix", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.selfChatMode", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.sendReadReceipts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.accounts.*.textChunkLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.ackReaction", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.ackReaction.direct", + "kind": "channel", + "type": "boolean", + "required": true, + "defaultValue": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.ackReaction.emoji", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.ackReaction.group", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "always", + "mentions", + "never" + ], + "defaultValue": "mentions", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.actions", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.actions.polls", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.actions.reactions", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.actions.sendMessage", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.allowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.allowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.blockStreaming", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.blockStreamingCoalesce", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.blockStreamingCoalesce.idleMs", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.blockStreamingCoalesce.maxChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.blockStreamingCoalesce.minChars", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.capabilities", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.capabilities.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.chunkMode", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "length", + "newline" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.configWrites", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "WhatsApp Config Writes", + "help": "Allow WhatsApp to write config in response to channel events/commands (default: true).", + "hasChildren": false + }, + { + "path": "channels.whatsapp.debounceMs", + "kind": "channel", + "type": "integer", + "required": true, + "defaultValue": 0, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network", + "performance" + ], + "label": "WhatsApp Message Debounce (ms)", + "help": "Debounce window (ms) for batching rapid consecutive messages from the same sender (0 to disable).", + "hasChildren": false + }, + { + "path": "channels.whatsapp.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.defaultTo", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.dmHistoryLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.dmPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], + "defaultValue": "pairing", + "deprecated": false, + "sensitive": false, + "tags": [ + "access", + "channels", + "network" + ], + "label": "WhatsApp DM Policy", + "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.whatsapp.allowFrom=[\"*\"].", + "hasChildren": false + }, + { + "path": "channels.whatsapp.dms", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.dms.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.dms.*.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groupAllowFrom", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groupAllowFrom.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, + "enumValues": [ + "open", + "disabled", + "allowlist" + ], + "defaultValue": "allowlist", + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groups", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.requireMention", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groups.*.tools", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.tools.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groups.*.tools.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.tools.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groups.*.tools.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.tools.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender.*", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender.*.allow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender.*.allow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender.*.alsoAllow", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender.*.alsoAllow.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender.*.deny", + "kind": "channel", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.groups.*.toolsBySender.*.deny.*", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.healthMonitor", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.healthMonitor.enabled", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.heartbeat", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.heartbeat.showAlerts", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.heartbeat.showOk", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.heartbeat.useIndicator", + "kind": "channel", + "type": "boolean", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.historyLimit", + "kind": "channel", + "type": "integer", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.whatsapp.markdown.tables", + "kind": "channel", + "type": "string", + "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.mediaMaxMb", + "kind": "channel", + "type": "integer", + "required": true, + "defaultValue": 50, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.whatsapp.messagePrefix", + "kind": "channel", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Native Commands", - "help": "Override native commands for Slack (bool or \"auto\").", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.commands.nativeSkills", + "path": "channels.whatsapp.responsePrefix", "kind": "channel", - "type": [ - "boolean", - "string" - ], + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Native Skill Commands", - "help": "Override native skill commands for Slack (bool or \"auto\").", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.configWrites", + "path": "channels.whatsapp.selfChatMode", "kind": "channel", "type": "boolean", "required": false, @@ -14140,12 +37454,12 @@ "channels", "network" ], - "label": "Slack Config Writes", - "help": "Allow Slack to write config in response to channel events/commands (default: true).", + "label": "WhatsApp Self-Phone Mode", + "help": "Same-phone setup (bot uses your personal WhatsApp number).", "hasChildren": false }, { - "path": "channels.slack.dangerouslyAllowNameMatching", + "path": "channels.whatsapp.sendReadReceipts", "kind": "channel", "type": "boolean", "required": false, @@ -14155,9 +37469,9 @@ "hasChildren": false }, { - "path": "channels.slack.defaultAccount", + "path": "channels.whatsapp.textChunkLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -14165,17 +37479,32 @@ "hasChildren": false }, { - "path": "channels.slack.defaultTo", + "path": "channels.zalo", "kind": "channel", - "type": "string", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [ + "channels", + "network" + ], + "label": "Zalo", + "help": "Vietnam-focused messaging platform with Bot API.", + "hasChildren": true + }, + { + "path": "channels.zalo.accounts", + "kind": "channel", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.dm", + "path": "channels.zalo.accounts.*", "kind": "channel", "type": "object", "required": false, @@ -14185,7 +37514,7 @@ "hasChildren": true }, { - "path": "channels.slack.dm.allowFrom", + "path": "channels.zalo.accounts.*.allowFrom", "kind": "channel", "type": "array", "required": false, @@ -14195,7 +37524,7 @@ "hasChildren": true }, { - "path": "channels.slack.dm.allowFrom.*", + "path": "channels.zalo.accounts.*.allowFrom.*", "kind": "channel", "type": [ "number", @@ -14208,50 +37537,50 @@ "hasChildren": false }, { - "path": "channels.slack.dm.enabled", + "path": "channels.zalo.accounts.*.botToken", "kind": "channel", - "type": "boolean", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.dm.groupChannels", + "path": "channels.zalo.accounts.*.botToken.id", "kind": "channel", - "type": "array", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.dm.groupChannels.*", + "path": "channels.zalo.accounts.*.botToken.provider", "kind": "channel", - "type": [ - "number", - "string" - ], - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.dm.groupEnabled", + "path": "channels.zalo.accounts.*.botToken.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.dm.policy", + "path": "channels.zalo.accounts.*.dmPolicy", "kind": "channel", "type": "string", "required": false, @@ -14263,19 +37592,13 @@ ], "deprecated": false, "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Slack DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"] (legacy: channels.slack.dm.allowFrom).", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.dm.replyToMode", + "path": "channels.zalo.accounts.*.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -14283,9 +37606,22 @@ "hasChildren": false }, { - "path": "channels.slack.dmHistoryLimit", + "path": "channels.zalo.accounts.*.groupAllowFrom", "kind": "channel", - "type": "integer", + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.zalo.accounts.*.groupAllowFrom.*", + "kind": "channel", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -14293,29 +37629,22 @@ "hasChildren": false }, { - "path": "channels.slack.dmPolicy", + "path": "channels.zalo.accounts.*.groupPolicy", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "pairing", - "allowlist", "open", - "disabled" + "disabled", + "allowlist" ], "deprecated": false, "sensitive": false, - "tags": [ - "access", - "channels", - "network" - ], - "label": "Slack DM Policy", - "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.slack.allowFrom=[\"*\"].", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.dms", + "path": "channels.zalo.accounts.*.markdown", "kind": "channel", "type": "object", "required": false, @@ -14325,19 +37654,24 @@ "hasChildren": true }, { - "path": "channels.slack.dms.*", + "path": "channels.zalo.accounts.*.markdown.tables", "kind": "channel", - "type": "object", + "type": "string", "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.dms.*.historyLimit", + "path": "channels.zalo.accounts.*.mediaMaxMb", "kind": "channel", - "type": "integer", + "type": "number", "required": false, "deprecated": false, "sensitive": false, @@ -14345,9 +37679,9 @@ "hasChildren": false }, { - "path": "channels.slack.enabled", + "path": "channels.zalo.accounts.*.name", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -14355,35 +37689,29 @@ "hasChildren": false }, { - "path": "channels.slack.groupPolicy", + "path": "channels.zalo.accounts.*.proxy", "kind": "channel", "type": "string", - "required": true, - "enumValues": [ - "open", - "disabled", - "allowlist" - ], - "defaultValue": "allowlist", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.healthMonitor", + "path": "channels.zalo.accounts.*.responsePrefix", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.healthMonitor.enabled", + "path": "channels.zalo.accounts.*.tokenFile", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -14391,49 +37719,62 @@ "hasChildren": false }, { - "path": "channels.slack.heartbeat", + "path": "channels.zalo.accounts.*.webhookPath", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.heartbeat.showAlerts", + "path": "channels.zalo.accounts.*.webhookSecret", "kind": "channel", - "type": "boolean", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], + "hasChildren": true + }, + { + "path": "channels.zalo.accounts.*.webhookSecret.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], "hasChildren": false }, { - "path": "channels.slack.heartbeat.showOk", + "path": "channels.zalo.accounts.*.webhookSecret.provider", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.heartbeat.useIndicator", + "path": "channels.zalo.accounts.*.webhookSecret.source", "kind": "channel", - "type": "boolean", - "required": false, + "type": "string", + "required": true, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.historyLimit", + "path": "channels.zalo.accounts.*.webhookUrl", "kind": "channel", - "type": "integer", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -14441,9 +37782,9 @@ "hasChildren": false }, { - "path": "channels.slack.markdown", + "path": "channels.zalo.allowFrom", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -14451,72 +37792,99 @@ "hasChildren": true }, { - "path": "channels.slack.markdown.tables", + "path": "channels.zalo.allowFrom.*", "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "off", - "bullets", - "code" + "type": [ + "number", + "string" ], + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.mediaMaxMb", + "path": "channels.zalo.botToken", "kind": "channel", - "type": "number", + "type": [ + "object", + "string" + ], "required": false, "deprecated": false, "sensitive": false, "tags": [], + "hasChildren": true + }, + { + "path": "channels.zalo.botToken.id", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], "hasChildren": false }, { - "path": "channels.slack.mode", + "path": "channels.zalo.botToken.provider", "kind": "channel", "type": "string", "required": true, - "enumValues": [ - "socket", - "http" - ], - "defaultValue": "socket", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.name", + "path": "channels.zalo.botToken.source", + "kind": "channel", + "type": "string", + "required": true, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.zalo.defaultAccount", + "kind": "channel", + "type": "string", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.zalo.dmPolicy", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.nativeStreaming", + "path": "channels.zalo.enabled", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Native Streaming", - "help": "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.reactionAllowlist", + "path": "channels.zalo.groupAllowFrom", "kind": "channel", "type": "array", "required": false, @@ -14526,7 +37894,7 @@ "hasChildren": true }, { - "path": "channels.slack.reactionAllowlist.*", + "path": "channels.zalo.groupAllowFrom.*", "kind": "channel", "type": [ "number", @@ -14539,14 +37907,13 @@ "hasChildren": false }, { - "path": "channels.slack.reactionNotifications", + "path": "channels.zalo.groupPolicy", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "off", - "own", - "all", + "open", + "disabled", "allowlist" ], "deprecated": false, @@ -14555,27 +37922,42 @@ "hasChildren": false }, { - "path": "channels.slack.replyToMode", + "path": "channels.zalo.markdown", + "kind": "channel", + "type": "object", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.zalo.markdown.tables", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.replyToModeByChatType", + "path": "channels.zalo.mediaMaxMb", "kind": "channel", - "type": "object", + "type": "number", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.replyToModeByChatType.channel", + "path": "channels.zalo.name", "kind": "channel", "type": "string", "required": false, @@ -14585,7 +37967,7 @@ "hasChildren": false }, { - "path": "channels.slack.replyToModeByChatType.direct", + "path": "channels.zalo.proxy", "kind": "channel", "type": "string", "required": false, @@ -14595,7 +37977,7 @@ "hasChildren": false }, { - "path": "channels.slack.replyToModeByChatType.group", + "path": "channels.zalo.responsePrefix", "kind": "channel", "type": "string", "required": false, @@ -14605,9 +37987,9 @@ "hasChildren": false }, { - "path": "channels.slack.requireMention", + "path": "channels.zalo.tokenFile", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -14615,7 +37997,7 @@ "hasChildren": false }, { - "path": "channels.slack.responsePrefix", + "path": "channels.zalo.webhookPath", "kind": "channel", "type": "string", "required": false, @@ -14625,7 +38007,7 @@ "hasChildren": false }, { - "path": "channels.slack.signingSecret", + "path": "channels.zalo.webhookSecret", "kind": "channel", "type": [ "object", @@ -14633,17 +38015,12 @@ ], "required": false, "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], + "sensitive": false, + "tags": [], "hasChildren": true }, { - "path": "channels.slack.signingSecret.id", + "path": "channels.zalo.webhookSecret.id", "kind": "channel", "type": "string", "required": true, @@ -14653,7 +38030,7 @@ "hasChildren": false }, { - "path": "channels.slack.signingSecret.provider", + "path": "channels.zalo.webhookSecret.provider", "kind": "channel", "type": "string", "required": true, @@ -14663,7 +38040,7 @@ "hasChildren": false }, { - "path": "channels.slack.signingSecret.source", + "path": "channels.zalo.webhookSecret.source", "kind": "channel", "type": "string", "required": true, @@ -14673,284 +38050,170 @@ "hasChildren": false }, { - "path": "channels.slack.slashCommand", + "path": "channels.zalo.webhookUrl", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.slashCommand.enabled", + "path": "channels.zalouser", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [], - "hasChildren": false + "tags": [ + "channels", + "network" + ], + "label": "Zalo Personal", + "help": "Zalo personal account via QR code login.", + "hasChildren": true }, { - "path": "channels.slack.slashCommand.ephemeral", + "path": "channels.zalouser.accounts", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.slashCommand.name", + "path": "channels.zalouser.accounts.*", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.slashCommand.sessionPrefix", + "path": "channels.zalouser.accounts.*.allowFrom", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.streaming", + "path": "channels.zalouser.accounts.*.allowFrom.*", "kind": "channel", "type": [ - "boolean", + "number", "string" ], "required": false, - "enumValues": [ - "off", - "partial", - "block", - "progress" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Streaming Mode", - "help": "Unified Slack stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". Legacy boolean/streamMode keys are auto-mapped.", - "hasChildren": false - }, - { - "path": "channels.slack.streamMode", - "kind": "channel", - "type": "string", - "required": false, - "enumValues": [ - "replace", - "status_final", - "append" - ], - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Stream Mode (Legacy)", - "help": "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.", - "hasChildren": false - }, - { - "path": "channels.slack.textChunkLimit", - "kind": "channel", - "type": "integer", - "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.thread", + "path": "channels.zalouser.accounts.*.dangerouslyAllowNameMatching", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.slack.thread.historyScope", + "path": "channels.zalouser.accounts.*.dmPolicy", "kind": "channel", "type": "string", "required": false, "enumValues": [ - "thread", - "channel" + "pairing", + "allowlist", + "open", + "disabled" ], "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Thread History Scope", - "help": "Scope for Slack thread history context (\"thread\" isolates per thread; \"channel\" reuses channel history).", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.thread.inheritParent", + "path": "channels.zalouser.accounts.*.enabled", "kind": "channel", "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Slack Thread Parent Inheritance", - "help": "If true, Slack thread sessions inherit the parent channel transcript (default: false).", - "hasChildren": false - }, - { - "path": "channels.slack.thread.initialHistoryLimit", - "kind": "channel", - "type": "integer", - "required": false, - "deprecated": false, - "sensitive": false, - "tags": [ - "channels", - "network", - "performance" - ], - "label": "Slack Thread Initial History Limit", - "help": "Maximum number of existing Slack thread messages to fetch when starting a new thread session (default: 20, set to 0 to disable).", + "tags": [], "hasChildren": false }, { - "path": "channels.slack.typingReaction", + "path": "channels.zalouser.accounts.*.groupAllowFrom", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.slack.userToken", + "path": "channels.zalouser.accounts.*.groupAllowFrom.*", "kind": "channel", "type": [ - "object", + "number", "string" ], "required": false, "deprecated": false, - "sensitive": true, - "tags": [ - "auth", - "channels", - "network", - "security" - ], - "label": "Slack User Token", - "help": "Optional Slack user token for workflows requiring user-context API access beyond bot permissions. Use sparingly and audit scopes because this token can carry broader authority.", - "hasChildren": true - }, - { - "path": "channels.slack.userToken.id", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.userToken.provider", - "kind": "channel", - "type": "string", - "required": true, - "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.slack.userToken.source", + "path": "channels.zalouser.accounts.*.groupPolicy", "kind": "channel", "type": "string", "required": true, - "deprecated": false, - "sensitive": false, - "tags": [], - "hasChildren": false - }, - { - "path": "channels.slack.userTokenReadOnly", - "kind": "channel", - "type": "boolean", - "required": true, - "defaultValue": true, - "deprecated": false, - "sensitive": false, - "tags": [ - "auth", - "channels", - "network", - "security" + "enumValues": [ + "open", + "disabled", + "allowlist" ], - "label": "Slack User Token Read Only", - "help": "When true, treat configured Slack user token usage as read-only helper behavior where possible. Keep enabled if you only need supplemental reads without user-context writes.", - "hasChildren": false - }, - { - "path": "channels.slack.webhookPath", - "kind": "channel", - "type": "string", - "required": true, - "defaultValue": "/slack/events", + "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.synology-chat", + "path": "channels.zalouser.accounts.*.groups", "kind": "channel", "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Synology Chat", - "help": "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.", + "tags": [], "hasChildren": true }, { - "path": "channels.synology-chat.*", + "path": "channels.zalouser.accounts.*.groups.*", "kind": "channel", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.synology-chat.dangerouslyAllowInheritedWebhookPath", + "path": "channels.zalouser.accounts.*.groups.*.allow", "kind": "channel", "type": "boolean", "required": false, @@ -14960,7 +38223,7 @@ "hasChildren": false }, { - "path": "channels.synology-chat.dangerouslyAllowNameMatching", + "path": "channels.zalouser.accounts.*.groups.*.enabled", "kind": "channel", "type": "boolean", "required": false, @@ -14970,121 +38233,99 @@ "hasChildren": false }, { - "path": "channels.telegram", + "path": "channels.zalouser.accounts.*.groups.*.requireMention", "kind": "channel", - "type": "object", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Telegram", - "help": "simplest way to get started — register a bot with @BotFather and get going.", + "tags": [], "hasChildren": false }, { - "path": "channels.tlon", + "path": "channels.zalouser.accounts.*.groups.*.tools", "kind": "channel", "type": "object", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Tlon", - "help": "decentralized messaging on Urbit; install the plugin to enable.", - "hasChildren": false + "tags": [], + "hasChildren": true }, { - "path": "channels.twitch", + "path": "channels.zalouser.accounts.*.groups.*.tools.allow", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Twitch", - "help": "Twitch chat integration", + "tags": [], "hasChildren": true }, { - "path": "channels.twitch.accessToken", + "path": "channels.zalouser.accounts.*.groups.*.tools.allow.*", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.accounts", + "path": "channels.zalouser.accounts.*.groups.*.tools.alsoAllow", "kind": "channel", - "type": "object", - "required": true, + "type": "array", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": true }, { - "path": "channels.twitch.accounts.*", + "path": "channels.zalouser.accounts.*.groups.*.tools.alsoAllow.*", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.twitch.accounts.*.accessToken", + "path": "channels.zalouser.accounts.*.groups.*.tools.deny", "kind": "channel", - "type": "string", - "required": true, + "type": "array", + "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.twitch.accounts.*.allowedRoles", + "path": "channels.zalouser.accounts.*.groups.*.tools.deny.*", "kind": "channel", - "type": "array", + "type": "string", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": true + "hasChildren": false }, { - "path": "channels.twitch.accounts.*.allowedRoles.*", + "path": "channels.zalouser.accounts.*.historyLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, - "enumValues": [ - "moderator", - "owner", - "vip", - "subscriber", - "all" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.accounts.*.allowFrom", + "path": "channels.zalouser.accounts.*.markdown", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -15092,27 +38333,32 @@ "hasChildren": true }, { - "path": "channels.twitch.accounts.*.allowFrom.*", + "path": "channels.zalouser.accounts.*.markdown.tables", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.accounts.*.channel", + "path": "channels.zalouser.accounts.*.messagePrefix", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.accounts.*.clientId", + "path": "channels.zalouser.accounts.*.name", "kind": "channel", "type": "string", "required": false, @@ -15122,7 +38368,7 @@ "hasChildren": false }, { - "path": "channels.twitch.accounts.*.clientSecret", + "path": "channels.zalouser.accounts.*.profile", "kind": "channel", "type": "string", "required": false, @@ -15132,9 +38378,9 @@ "hasChildren": false }, { - "path": "channels.twitch.accounts.*.enabled", + "path": "channels.zalouser.accounts.*.responsePrefix", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -15142,22 +38388,22 @@ "hasChildren": false }, { - "path": "channels.twitch.accounts.*.expiresIn", + "path": "channels.zalouser.allowFrom", "kind": "channel", - "type": [ - "null", - "number" - ], + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.twitch.accounts.*.obtainmentTimestamp", + "path": "channels.zalouser.allowFrom.*", "kind": "channel", - "type": "number", + "type": [ + "number", + "string" + ], "required": false, "deprecated": false, "sensitive": false, @@ -15165,9 +38411,9 @@ "hasChildren": false }, { - "path": "channels.twitch.accounts.*.refreshToken", + "path": "channels.zalouser.dangerouslyAllowNameMatching", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -15175,9 +38421,9 @@ "hasChildren": false }, { - "path": "channels.twitch.accounts.*.requireMention", + "path": "channels.zalouser.defaultAccount", "kind": "channel", - "type": "boolean", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -15185,27 +38431,33 @@ "hasChildren": false }, { - "path": "channels.twitch.accounts.*.responsePrefix", + "path": "channels.zalouser.dmPolicy", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "pairing", + "allowlist", + "open", + "disabled" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.accounts.*.username", + "path": "channels.zalouser.enabled", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.allowedRoles", + "path": "channels.zalouser.groupAllowFrom", "kind": "channel", "type": "array", "required": false, @@ -15215,26 +38467,38 @@ "hasChildren": true }, { - "path": "channels.twitch.allowedRoles.*", + "path": "channels.zalouser.groupAllowFrom.*", "kind": "channel", - "type": "string", + "type": [ + "number", + "string" + ], "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": false + }, + { + "path": "channels.zalouser.groupPolicy", + "kind": "channel", + "type": "string", + "required": true, "enumValues": [ - "moderator", - "owner", - "vip", - "subscriber", - "all" + "open", + "disabled", + "allowlist" ], + "defaultValue": "allowlist", "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.allowFrom", + "path": "channels.zalouser.groups", "kind": "channel", - "type": "array", + "type": "object", "required": false, "deprecated": false, "sensitive": false, @@ -15242,29 +38506,29 @@ "hasChildren": true }, { - "path": "channels.twitch.allowFrom.*", + "path": "channels.zalouser.groups.*", "kind": "channel", - "type": "string", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.twitch.channel", + "path": "channels.zalouser.groups.*.allow", "kind": "channel", - "type": "string", - "required": true, + "type": "boolean", + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.clientId", + "path": "channels.zalouser.groups.*.enabled", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -15272,9 +38536,9 @@ "hasChildren": false }, { - "path": "channels.twitch.clientSecret", + "path": "channels.zalouser.groups.*.requireMention", "kind": "channel", - "type": "string", + "type": "boolean", "required": false, "deprecated": false, "sensitive": false, @@ -15282,22 +38546,29 @@ "hasChildren": false }, { - "path": "channels.twitch.enabled", + "path": "channels.zalouser.groups.*.tools", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.twitch.expiresIn", + "path": "channels.zalouser.groups.*.tools.allow", "kind": "channel", - "type": [ - "null", - "number" - ], + "type": "array", + "required": false, + "deprecated": false, + "sensitive": false, + "tags": [], + "hasChildren": true + }, + { + "path": "channels.zalouser.groups.*.tools.allow.*", + "kind": "channel", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -15305,9 +38576,9 @@ "hasChildren": false }, { - "path": "channels.twitch.markdown", + "path": "channels.zalouser.groups.*.tools.alsoAllow", "kind": "channel", - "type": "object", + "type": "array", "required": false, "deprecated": false, "sensitive": false, @@ -15315,34 +38586,29 @@ "hasChildren": true }, { - "path": "channels.twitch.markdown.tables", + "path": "channels.zalouser.groups.*.tools.alsoAllow.*", "kind": "channel", "type": "string", "required": false, - "enumValues": [ - "bullets", - "code", - "off" - ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.name", + "path": "channels.zalouser.groups.*.tools.deny", "kind": "channel", - "type": "string", + "type": "array", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.twitch.obtainmentTimestamp", + "path": "channels.zalouser.groups.*.tools.deny.*", "kind": "channel", - "type": "number", + "type": "string", "required": false, "deprecated": false, "sensitive": false, @@ -15350,9 +38616,9 @@ "hasChildren": false }, { - "path": "channels.twitch.refreshToken", + "path": "channels.zalouser.historyLimit", "kind": "channel", - "type": "string", + "type": "integer", "required": false, "deprecated": false, "sensitive": false, @@ -15360,78 +38626,68 @@ "hasChildren": false }, { - "path": "channels.twitch.requireMention", + "path": "channels.zalouser.markdown", "kind": "channel", - "type": "boolean", + "type": "object", "required": false, "deprecated": false, "sensitive": false, "tags": [], - "hasChildren": false + "hasChildren": true }, { - "path": "channels.twitch.responsePrefix", + "path": "channels.zalouser.markdown.tables", "kind": "channel", "type": "string", "required": false, + "enumValues": [ + "off", + "bullets", + "code" + ], "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.twitch.username", + "path": "channels.zalouser.messagePrefix", "kind": "channel", "type": "string", - "required": true, + "required": false, "deprecated": false, "sensitive": false, "tags": [], "hasChildren": false }, { - "path": "channels.whatsapp", + "path": "channels.zalouser.name", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "WhatsApp", - "help": "works with your own number; recommend a separate phone + eSIM.", + "tags": [], "hasChildren": false }, { - "path": "channels.zalo", + "path": "channels.zalouser.profile", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Zalo", - "help": "Vietnam-focused messaging platform with Bot API.", + "tags": [], "hasChildren": false }, { - "path": "channels.zalouser", + "path": "channels.zalouser.responsePrefix", "kind": "channel", - "type": "object", + "type": "string", "required": false, "deprecated": false, "sensitive": false, - "tags": [ - "channels", - "network" - ], - "label": "Zalo Personal", - "help": "Zalo personal account via QR code login.", + "tags": [], "hasChildren": false }, { diff --git a/docs/.generated/config-baseline.jsonl b/docs/.generated/config-baseline.jsonl index 9328d2d2..f0574afd 100644 --- a/docs/.generated/config-baseline.jsonl +++ b/docs/.generated/config-baseline.jsonl @@ -1,4 +1,4 @@ -{"generatedBy":"scripts/generate-config-doc-baseline.ts","recordType":"meta","totalPaths":3485} +{"generatedBy":"scripts/generate-config-doc-baseline.ts","recordType":"meta","totalPaths":5619} {"recordType":"path","path":"acp","kind":"core","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"ACP","help":"ACP runtime controls for enabling dispatch, selecting backends, constraining allowed agent targets, and tuning streamed turn projection behavior.","hasChildren":true} {"recordType":"path","path":"acp.allowedAgents","kind":"core","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["access"],"label":"ACP Allowed Agents","help":"Allowlist of ACP target agent ids permitted for ACP runtime sessions. Empty means no additional allowlist restriction.","hasChildren":true} {"recordType":"path","path":"acp.allowedAgents.*","kind":"core","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} @@ -822,7 +822,540 @@ {"recordType":"path","path":"channels.bluebubbles.serverUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.bluebubbles.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.bluebubbles.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.discord","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord","help":"very well supported right now.","hasChildren":false} +{"recordType":"path","path":"channels.discord","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord","help":"very well supported right now.","hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.ackReactionScope","kind":"channel","type":"string","required":false,"enumValues":["group-mentions","group-all","direct","all","off","none"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.actions.channelInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.channels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.emojiUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.events","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.memberInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.messages","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.moderation","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.permissions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.pins","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.polls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.roleInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.roles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.search","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.stickers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.stickerUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.threads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.actions.voiceStatus","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.activity","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.activityType","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.activityUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.agentComponents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.agentComponents.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.autoPresence","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.degradedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.exhaustedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.healthyText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.intervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.autoPresence.minUpdateIntervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dm.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.dm.groupChannels.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dm.groupEnabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dm.policy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.eventQueue","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.eventQueue.listenerTimeout","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.eventQueue.maxConcurrency","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.eventQueue.maxQueueSize","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.cleanupAfterResolve","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.autoArchiveDuration","kind":"channel","type":["number","string"],"required":false,"enumValues":["60","1440","4320","10080"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.autoThread","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.includeThreadStarter","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.channels.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.slug","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.guilds.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.inboundWorker","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.inboundWorker.runTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.intents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.intents.guildMembers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.intents.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.maxLinesPerMessage","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.pluralkit","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.pluralkit.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.slashCommand","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.slashCommand.ephemeral","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.status","kind":"channel","type":"string","required":false,"enumValues":["online","dnd","idle","invisible"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.streamMode","kind":"channel","type":"string","required":false,"enumValues":["partial","block","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.ui","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.ui.components","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.ui.components.accentColor","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin.*.channelId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.autoJoin.*.guildId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.daveEncryption","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.decryptionFailureTolerance","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.auto","kind":"channel","type":"string","required":false,"enumValues":["off","always","inbound","tagged"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.edge.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.applyTextNormalization","kind":"channel","type":"string","required":false,"enumValues":["auto","on","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.languageCode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.modelId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.seed","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.similarityBoost","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.stability","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.style","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.maxTextLength","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.microsoft.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.mode","kind":"channel","type":"string","required":false,"enumValues":["final","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowModelId","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowNormalization","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowProvider","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowSeed","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowText","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowVoice","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.allowVoiceSettings","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.modelOverrides.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.instructions","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.model","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.openai.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.prefsPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.provider","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.summaryModel","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.accounts.*.voice.tts.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.ackReactionScope","kind":"channel","type":"string","required":false,"enumValues":["group-mentions","group-all","direct","all","off","none"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.actions.channelInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.channels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.emojiUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.events","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.memberInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.messages","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.moderation","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.permissions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.pins","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.polls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.roleInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.roles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.search","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.stickers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.stickerUploads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.threads","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.actions.voiceStatus","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.activity","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Activity","help":"Discord presence activity text (defaults to custom status).","hasChildren":false} +{"recordType":"path","path":"channels.discord.activityType","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Activity Type","help":"Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing).","hasChildren":false} +{"recordType":"path","path":"channels.discord.activityUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Activity URL","help":"Discord presence streaming URL (required for activityType=1).","hasChildren":false} +{"recordType":"path","path":"channels.discord.agentComponents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.agentComponents.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Discord Allow Bot Messages","help":"Allow bot-authored messages to trigger Discord replies (default: false). Set \"mentions\" to only accept bot messages that mention the bot.","hasChildren":false} +{"recordType":"path","path":"channels.discord.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.autoPresence","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.autoPresence.degradedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Auto Presence Degraded Text","help":"Optional custom status text while runtime/model availability is degraded or unknown (idle).","hasChildren":false} +{"recordType":"path","path":"channels.discord.autoPresence.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Auto Presence Enabled","help":"Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd.","hasChildren":false} +{"recordType":"path","path":"channels.discord.autoPresence.exhaustedText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Auto Presence Exhausted Text","help":"Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder.","hasChildren":false} +{"recordType":"path","path":"channels.discord.autoPresence.healthyText","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Auto Presence Healthy Text","help":"Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set.","hasChildren":false} +{"recordType":"path","path":"channels.discord.autoPresence.intervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Auto Presence Check Interval (ms)","help":"How often to evaluate Discord auto-presence state in milliseconds (default: 30000).","hasChildren":false} +{"recordType":"path","path":"channels.discord.autoPresence.minUpdateIntervalMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Auto Presence Min Update Interval (ms)","help":"Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes.","hasChildren":false} +{"recordType":"path","path":"channels.discord.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Native Commands","help":"Override native commands for Discord (bool or \"auto\").","hasChildren":false} +{"recordType":"path","path":"channels.discord.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Native Skill Commands","help":"Override native skill commands for Discord (bool or \"auto\").","hasChildren":false} +{"recordType":"path","path":"channels.discord.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Config Writes","help":"Allow Discord to write config in response to channel events/commands (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.discord.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.dm.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.dm.groupChannels.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.dm.groupEnabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.dm.policy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Discord DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"] (legacy: channels.discord.dm.allowFrom).","hasChildren":false} +{"recordType":"path","path":"channels.discord.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Discord DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"].","hasChildren":false} +{"recordType":"path","path":"channels.discord.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Draft Chunk Break Preference","help":"Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph.","hasChildren":false} +{"recordType":"path","path":"channels.discord.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Draft Chunk Max Chars","help":"Target max size for a Discord stream preview chunk when channels.discord.streaming=\"block\" (default: 800; clamped to channels.discord.textChunkLimit).","hasChildren":false} +{"recordType":"path","path":"channels.discord.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Draft Chunk Min Chars","help":"Minimum chars before emitting a Discord stream preview update when channels.discord.streaming=\"block\" (default: 200).","hasChildren":false} +{"recordType":"path","path":"channels.discord.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.eventQueue","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.eventQueue.listenerTimeout","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord EventQueue Listener Timeout (ms)","help":"Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts..eventQueue.listenerTimeout.","hasChildren":false} +{"recordType":"path","path":"channels.discord.eventQueue.maxConcurrency","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord EventQueue Max Concurrency","help":"Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts..eventQueue.maxConcurrency.","hasChildren":false} +{"recordType":"path","path":"channels.discord.eventQueue.maxQueueSize","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord EventQueue Max Queue Size","help":"Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts..eventQueue.maxQueueSize.","hasChildren":false} +{"recordType":"path","path":"channels.discord.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.execApprovals.cleanupAfterResolve","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.autoArchiveDuration","kind":"channel","type":["number","string"],"required":false,"enumValues":["60","1440","4320","10080"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.autoThread","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.includeThreadStarter","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.channels.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.ignoreOtherMentions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.roles","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.roles.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.slug","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.guilds.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.guilds.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.inboundWorker","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.inboundWorker.runTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Inbound Worker Timeout (ms)","help":"Optional queued Discord inbound worker timeout in ms. This is separate from Carbon listener timeouts; defaults to 1800000 and can be disabled with 0. Set per account via channels.discord.accounts..inboundWorker.runTimeoutMs.","hasChildren":false} +{"recordType":"path","path":"channels.discord.intents","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.intents.guildMembers","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Guild Members Intent","help":"Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false.","hasChildren":false} +{"recordType":"path","path":"channels.discord.intents.presence","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Intent","help":"Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false.","hasChildren":false} +{"recordType":"path","path":"channels.discord.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.maxLinesPerMessage","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Discord Max Lines Per Message","help":"Soft max line count per Discord message (default: 17).","hasChildren":false} +{"recordType":"path","path":"channels.discord.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.pluralkit","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.pluralkit.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord PluralKit Enabled","help":"Resolve PluralKit proxied messages and treat system members as distinct senders.","hasChildren":false} +{"recordType":"path","path":"channels.discord.pluralkit.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Discord PluralKit Token","help":"Optional PluralKit token for resolving private systems or members.","hasChildren":true} +{"recordType":"path","path":"channels.discord.pluralkit.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.pluralkit.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.pluralkit.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Proxy URL","help":"Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts..proxy.","hasChildren":false} +{"recordType":"path","path":"channels.discord.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Retry Attempts","help":"Max retry attempts for outbound Discord API calls (default: 3).","hasChildren":false} +{"recordType":"path","path":"channels.discord.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Retry Jitter","help":"Jitter factor (0-1) applied to Discord retry delays.","hasChildren":false} +{"recordType":"path","path":"channels.discord.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","reliability"],"label":"Discord Retry Max Delay (ms)","help":"Maximum retry delay cap in ms for Discord outbound calls.","hasChildren":false} +{"recordType":"path","path":"channels.discord.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Discord Retry Min Delay (ms)","help":"Minimum retry delay in ms for Discord outbound calls.","hasChildren":false} +{"recordType":"path","path":"channels.discord.slashCommand","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.slashCommand.ephemeral","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.status","kind":"channel","type":"string","required":false,"enumValues":["online","dnd","idle","invisible"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Presence Status","help":"Discord presence status (online, dnd, idle, invisible).","hasChildren":false} +{"recordType":"path","path":"channels.discord.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Streaming Mode","help":"Unified Discord stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". \"progress\" maps to \"partial\" on Discord. Legacy boolean/streamMode keys are auto-mapped.","hasChildren":false} +{"recordType":"path","path":"channels.discord.streamMode","kind":"channel","type":"string","required":false,"enumValues":["partial","block","off"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Stream Mode (Legacy)","help":"Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.","hasChildren":false} +{"recordType":"path","path":"channels.discord.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread Binding Enabled","help":"Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.","hasChildren":false} +{"recordType":"path","path":"channels.discord.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread Binding Idle Timeout (hours)","help":"Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.","hasChildren":false} +{"recordType":"path","path":"channels.discord.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","storage"],"label":"Discord Thread Binding Max Age (hours)","help":"Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.","hasChildren":false} +{"recordType":"path","path":"channels.discord.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread-Bound ACP Spawn","help":"Allow /acp spawn to auto-create and bind Discord threads for ACP sessions (default: false; opt-in). Set true to enable thread-bound ACP spawns for this account/channel.","hasChildren":false} +{"recordType":"path","path":"channels.discord.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Discord Thread-Bound Subagent Spawn","help":"Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.","hasChildren":false} +{"recordType":"path","path":"channels.discord.token","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Discord Bot Token","help":"Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.","hasChildren":true} +{"recordType":"path","path":"channels.discord.token.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.token.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.token.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.ui","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.ui.components","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.ui.components.accentColor","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Component Accent Color","help":"Accent color for Discord component containers (hex). Set per account via channels.discord.accounts..ui.components.accentColor.","hasChildren":false} +{"recordType":"path","path":"channels.discord.voice","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.autoJoin","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice Auto-Join","help":"Voice channels to auto-join on startup (list of guildId/channelId entries).","hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.autoJoin.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.autoJoin.*.channelId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.autoJoin.*.guildId","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.daveEncryption","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice DAVE Encryption","help":"Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this).","hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.decryptionFailureTolerance","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice Decrypt Failure Tolerance","help":"Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24).","hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Discord Voice Enabled","help":"Enable Discord voice channel conversations (default: true). Omit channels.discord.voice to keep voice support disabled for the account.","hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","media","network"],"label":"Discord Voice Text-to-Speech","help":"Optional TTS overrides for Discord voice playback (merged with messages.tts).","hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.auto","kind":"channel","type":"string","required":false,"enumValues":["off","always","inbound","tagged"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.edge.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.edge.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.applyTextNormalization","kind":"channel","type":"string","required":false,"enumValues":["auto","on","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.languageCode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.modelId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.seed","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.similarityBoost","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.stability","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.style","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.elevenlabs.voiceSettings.useSpeakerBoost","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.maxTextLength","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.lang","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.outputFormat","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.pitch","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.rate","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.saveSubtitles","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.microsoft.volume","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.mode","kind":"channel","type":"string","required":false,"enumValues":["final","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowModelId","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowNormalization","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowProvider","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowSeed","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowText","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowVoice","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.allowVoiceSettings","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.modelOverrides.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","media","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai.apiKey.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai.instructions","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai.model","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai.speed","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.openai.voice","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.prefsPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.provider","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.summaryModel","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.discord.voice.tts.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.feishu","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Feishu","help":"飞书/Lark enterprise messaging with doc/wiki/drive tools.","hasChildren":true} {"recordType":"path","path":"channels.feishu.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} {"recordType":"path","path":"channels.feishu.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -1003,9 +1536,402 @@ {"recordType":"path","path":"channels.feishu.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.feishu.webhookPath","kind":"channel","type":"string","required":true,"defaultValue":"/feishu/events","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.feishu.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.googlechat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Google Chat","help":"Google Workspace Chat app via HTTP webhooks.","hasChildren":false} -{"recordType":"path","path":"channels.imessage","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"iMessage","help":"this is still a work in progress.","hasChildren":false} -{"recordType":"path","path":"channels.irc","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC","help":"classic IRC networks with DM/channel routing and pairing controls.","hasChildren":false} +{"recordType":"path","path":"channels.googlechat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Google Chat","help":"Google Workspace Chat app via HTTP webhooks.","hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.allowBots","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.appPrincipal","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.audience","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.audienceType","kind":"channel","type":"string","required":false,"enumValues":["app-url","project-number"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.botUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.dm.policy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.groups.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccount.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.serviceAccountRef.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.streamMode","kind":"channel","type":"string","required":true,"enumValues":["replace","status_final","append"],"defaultValue":"replace","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.typingIndicator","kind":"channel","type":"string","required":false,"enumValues":["none","message","reaction"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.accounts.*.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.allowBots","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.appPrincipal","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.audience","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.audienceType","kind":"channel","type":"string","required":false,"enumValues":["app-url","project-number"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.botUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.dm.policy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.groups.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.groups.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccount","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.serviceAccount.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccount.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccount.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccount.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccountFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccountRef","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":true,"tags":["channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.googlechat.serviceAccountRef.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccountRef.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.serviceAccountRef.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.streamMode","kind":"channel","type":"string","required":true,"enumValues":["replace","status_final","append"],"defaultValue":"replace","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.typingIndicator","kind":"channel","type":"string","required":false,"enumValues":["none","message","reaction"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.googlechat.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"iMessage","help":"this is still a work in progress.","hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.attachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.attachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.dbPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.includeAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.region","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.remoteAttachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.accounts.*.remoteAttachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.remoteHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.attachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.attachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"iMessage CLI Path","help":"Filesystem path to the iMessage bridge CLI binary used for send/receive operations. Set explicitly when the binary is not on PATH in service runtime environments.","hasChildren":false} +{"recordType":"path","path":"channels.imessage.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"iMessage Config Writes","help":"Allow iMessage to write config in response to channel events/commands (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.imessage.dbPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"iMessage DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.imessage.allowFrom=[\"*\"].","hasChildren":false} +{"recordType":"path","path":"channels.imessage.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.includeAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.region","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.remoteAttachmentRoots","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.imessage.remoteAttachmentRoots.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.remoteHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.imessage.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC","help":"classic IRC networks with DM/channel routing and pairing controls.","hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.channels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.channels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.host","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.mentionPatterns","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.mentionPatterns.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.nick","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.nickserv","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.accounts.*.nickserv.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.nickserv.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.nickserv.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.nickserv.register","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.nickserv.registerEmail","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.nickserv.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.port","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.realname","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.tls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.accounts.*.username","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.channels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.channels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"IRC DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.irc.allowFrom=[\"*\"].","hasChildren":false} +{"recordType":"path","path":"channels.irc.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.host","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.mentionPatterns","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.mentionPatterns.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.nick","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.nickserv","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.irc.nickserv.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Enabled","help":"Enable NickServ identify/register after connect (defaults to enabled when password is configured).","hasChildren":false} +{"recordType":"path","path":"channels.irc.nickserv.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"IRC NickServ Password","help":"NickServ password used for IDENTIFY/REGISTER (sensitive).","hasChildren":false} +{"recordType":"path","path":"channels.irc.nickserv.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["auth","channels","network","security","storage"],"label":"IRC NickServ Password File","help":"Optional file path containing NickServ password.","hasChildren":false} +{"recordType":"path","path":"channels.irc.nickserv.register","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Register","help":"If true, send NickServ REGISTER on every connect. Use once for initial registration, then disable.","hasChildren":false} +{"recordType":"path","path":"channels.irc.nickserv.registerEmail","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Register Email","help":"Email used with NickServ REGISTER (required when register=true).","hasChildren":false} +{"recordType":"path","path":"channels.irc.nickserv.service","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"IRC NickServ Service","help":"NickServ service nick (default: NickServ).","hasChildren":false} +{"recordType":"path","path":"channels.irc.password","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":false} +{"recordType":"path","path":"channels.irc.passwordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.port","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.realname","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.tls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.irc.username","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.line","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"LINE","help":"LINE Messaging API bot for Japan/Taiwan/Thailand markets.","hasChildren":true} {"recordType":"path","path":"channels.line.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} {"recordType":"path","path":"channels.line.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -1058,12 +1984,572 @@ {"recordType":"path","path":"channels.line.secretFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.line.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.line.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.matrix","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Matrix","help":"open protocol; install the plugin to enable.","hasChildren":false} -{"recordType":"path","path":"channels.mattermost","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost","help":"self-hosted Slack-style chat; install the plugin to enable.","hasChildren":false} -{"recordType":"path","path":"channels.msteams","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Microsoft Teams","help":"Bot Framework; enterprise support.","hasChildren":false} -{"recordType":"path","path":"channels.nextcloud-talk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nextcloud Talk","help":"Self-hosted chat via Nextcloud Talk webhook bots.","hasChildren":false} -{"recordType":"path","path":"channels.nostr","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nostr","help":"Decentralized protocol; encrypted DMs via NIP-04.","hasChildren":false} -{"recordType":"path","path":"channels.signal","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal","help":"signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").","hasChildren":false} +{"recordType":"path","path":"channels.matrix","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Matrix","help":"open protocol; install the plugin to enable.","hasChildren":true} +{"recordType":"path","path":"channels.matrix.accessToken","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.accounts.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.ackReactionScope","kind":"channel","type":"string","required":false,"enumValues":["group-mentions","group-all","direct","all","none","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.actions.channelInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.actions.memberInfo","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.actions.messages","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.actions.pins","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.actions.profile","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.actions.verification","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Matrix Allow Bot Messages","help":"Allow messages from other configured Matrix bot accounts to trigger replies (default: false). Set \"mentions\" to only accept bot messages that visibly mention this bot.","hasChildren":false} +{"recordType":"path","path":"channels.matrix.allowlistOnly","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.allowPrivateNetwork","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.autoJoin","kind":"channel","type":"string","required":false,"enumValues":["always","allowlist","off"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.autoJoinAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.autoJoinAllowlist.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.avatarUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.deviceId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.deviceName","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.dm","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.dm.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.dm.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.dm.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.dm.policy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.encryption","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.autoReply","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.groups.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.groups.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.homeserver","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.initialSyncLimit","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.password","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.password.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.password.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.password.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.replyToMode","kind":"channel","type":"string","required":false,"enumValues":["off","first","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.allowBots","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.autoReply","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.rooms.*.users","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.rooms.*.users.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.startupVerification","kind":"channel","type":"string","required":false,"enumValues":["off","if-unverified"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.startupVerificationCooldownHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.textChunkLimit","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.matrix.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.threadReplies","kind":"channel","type":"string","required":false,"enumValues":["off","inbound","always"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.matrix.userId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost","help":"self-hosted Slack-style chat; install the plugin to enable.","hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.chatmode","kind":"channel","type":"string","required":false,"enumValues":["oncall","onmessage","onchar"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.commands.callbackPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.commands.callbackUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.initialDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.maxRetries","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.dmChannelRetry.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.interactions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.interactions.allowedSourceIps","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.interactions.allowedSourceIps.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.interactions.callbackBaseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.oncharPrefixes","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.accounts.*.oncharPrefixes.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"enumValues":["off","first","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Base URL","help":"Base URL for your Mattermost server (e.g., https://chat.example.com).","hasChildren":false} +{"recordType":"path","path":"channels.mattermost.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Mattermost Bot Token","help":"Bot token from Mattermost System Console -> Integrations -> Bot Accounts.","hasChildren":true} +{"recordType":"path","path":"channels.mattermost.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.chatmode","kind":"channel","type":"string","required":false,"enumValues":["oncall","onmessage","onchar"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Chat Mode","help":"Reply to channel messages on mention (\"oncall\"), on trigger chars (\">\" or \"!\") (\"onchar\"), or on every message (\"onmessage\").","hasChildren":false} +{"recordType":"path","path":"channels.mattermost.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.commands.callbackPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.commands.callbackUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Config Writes","help":"Allow Mattermost to write config in response to channel events/commands (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.mattermost.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.dmChannelRetry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.dmChannelRetry.initialDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.dmChannelRetry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.dmChannelRetry.maxRetries","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.dmChannelRetry.timeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.interactions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.interactions.allowedSourceIps","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.interactions.allowedSourceIps.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.interactions.callbackBaseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.mattermost.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.oncharPrefixes","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Onchar Prefixes","help":"Trigger prefixes for onchar mode (default: [\">\", \"!\"]).","hasChildren":true} +{"recordType":"path","path":"channels.mattermost.oncharPrefixes.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.replyToMode","kind":"channel","type":"string","required":false,"enumValues":["off","first","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Mattermost Require Mention","help":"Require @mention in channels before responding (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.mattermost.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.mattermost.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Microsoft Teams","help":"Bot Framework; enterprise support.","hasChildren":true} +{"recordType":"path","path":"channels.msteams.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.appId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.appPassword","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.appPassword.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.appPassword.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.appPassword.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"MS Teams Config Writes","help":"Allow Microsoft Teams to write config in response to channel events/commands (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.msteams.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.mediaAllowHosts","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.mediaAllowHosts.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.mediaAuthAllowHosts","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.mediaAuthAllowHosts.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.replyStyle","kind":"channel","type":"string","required":false,"enumValues":["thread","top-level"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.sharePointSiteId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.replyStyle","kind":"channel","type":"string","required":false,"enumValues":["thread","top-level"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.channels.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.replyStyle","kind":"channel","type":"string","required":false,"enumValues":["thread","top-level"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.teams.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.tenantId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.webhook","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.msteams.webhook.path","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.msteams.webhook.port","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nextcloud Talk","help":"Self-hosted chat via Nextcloud Talk webhook bots.","hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPassword.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiPasswordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.apiUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.botSecretFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.rooms.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.accounts.*.webhookPublicUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.apiPassword","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.apiPassword.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.apiPassword.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.apiPassword.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.apiPasswordFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.apiUser","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.baseUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.botSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.botSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.botSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.botSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.botSecretFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nextcloud-talk.rooms.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nextcloud-talk.webhookPublicUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Nostr","help":"Decentralized protocol; encrypted DMs via NIP-04.","hasChildren":true} +{"recordType":"path","path":"channels.nostr.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nostr.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nostr.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.privateKey","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nostr.profile.about","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile.banner","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile.displayName","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile.lud16","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile.nip05","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile.picture","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.profile.website","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.nostr.relays","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.nostr.relays.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal","help":"signal-cli linked device; more setup (David Reagans: \"Hop on Discord.\").","hasChildren":true} +{"recordType":"path","path":"channels.signal.account","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal Account","help":"Signal account identifier (phone/number handle) used to bind this channel config to a specific Signal identity. Keep this aligned with your linked device/session state.","hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.account","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.accountUuid","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.autoStart","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.httpHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.httpPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.httpUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.ignoreAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.ignoreStories","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.reactionAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.accounts.*.reactionAllowlist.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.receiveMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.startupTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.accountUuid","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.autoStart","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.cliPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Signal Config Writes","help":"Allow Signal to write config in response to channel events/commands (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.signal.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Signal DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.signal.allowFrom=[\"*\"].","hasChildren":false} +{"recordType":"path","path":"channels.signal.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.httpHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.httpPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.httpUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.ignoreAttachments","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.ignoreStories","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.reactionAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.signal.reactionAllowlist.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.receiveMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.startupTimeoutMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.signal.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.slack","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Slack","help":"supported (Socket Mode).","hasChildren":true} {"recordType":"path","path":"channels.slack.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} {"recordType":"path","path":"channels.slack.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -1320,8 +2806,421 @@ {"recordType":"path","path":"channels.synology-chat.*","kind":"channel","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.synology-chat.dangerouslyAllowInheritedWebhookPath","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.synology-chat.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.telegram","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram","help":"simplest way to get started — register a bot with @BotFather and get going.","hasChildren":false} -{"recordType":"path","path":"channels.tlon","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Tlon","help":"decentralized messaging on Urbit; install the plugin to enable.","hasChildren":false} +{"recordType":"path","path":"channels.telegram","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram","help":"simplest way to get started — register a bot with @BotFather and get going.","hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.createForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.deleteMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.editForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.editMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.poll","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.sendMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.actions.sticker","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.apiRoot","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.capabilities","kind":"channel","type":["array","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.capabilities.inlineButtons","kind":"channel","type":"string","required":false,"enumValues":["off","dm","group","all","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.customCommands","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.customCommands.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.customCommands.*.command","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.customCommands.*.description","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.defaultTo","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.requireTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.direct.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.groups.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.linkPreview","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.network","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.network.autoSelectFamily","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.network.dnsResultOrder","kind":"channel","type":"string","required":false,"enumValues":["ipv4first","verbatim"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.silentErrorReplies","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.streamMode","kind":"channel","type":"string","required":false,"enumValues":["off","partial","block"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.timeoutSeconds","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookCertPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.accounts.*.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.ackReaction","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.actions.createForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions.deleteMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions.editForumTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions.editMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions.poll","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions.sendMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.actions.sticker","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.apiRoot","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram API Root URL","help":"Custom Telegram Bot API root URL. Use for self-hosted Bot API servers (https://github.com/tdlib/telegram-bot-api) or reverse proxies in regions where api.telegram.org is blocked.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Auto Topic Label","help":"Auto-rename DM forum topics on first message using LLM. Default: true. Set to false to disable, or use object form { enabled: true, prompt: '...' } for custom prompt.","hasChildren":true} +{"recordType":"path","path":"channels.telegram.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Auto Topic Label Enabled","help":"Whether auto topic labeling is enabled. Default: true.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Auto Topic Label Prompt","help":"Custom prompt for LLM-based topic naming. The user message is appended after the prompt.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"label":"Telegram Bot Token","help":"Telegram bot token used to authenticate Bot API requests for this account/provider config. Use secret/env substitution and rotate tokens if exposure is suspected.","hasChildren":true} +{"recordType":"path","path":"channels.telegram.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.capabilities","kind":"channel","type":["array","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.capabilities.inlineButtons","kind":"channel","type":"string","required":false,"enumValues":["off","dm","group","all","allowlist"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Inline Buttons","help":"Enable Telegram inline button components for supported command and interaction surfaces. Disable if your deployment needs plain-text-only compatibility behavior.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.commands","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.commands.native","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Native Commands","help":"Override native commands for Telegram (bool or \"auto\").","hasChildren":false} +{"recordType":"path","path":"channels.telegram.commands.nativeSkills","kind":"channel","type":["boolean","string"],"required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Native Skill Commands","help":"Override native skill commands for Telegram (bool or \"auto\").","hasChildren":false} +{"recordType":"path","path":"channels.telegram.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Config Writes","help":"Allow Telegram to write config in response to channel events/commands (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.telegram.customCommands","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Custom Commands","help":"Additional Telegram bot menu commands (merged with native; conflicts ignored).","hasChildren":true} +{"recordType":"path","path":"channels.telegram.customCommands.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.customCommands.*.command","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.customCommands.*.description","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.defaultTo","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.autoTopicLabel","kind":"channel","type":["boolean","object"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.autoTopicLabel.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.autoTopicLabel.prompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.requireTopic","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.direct.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"Telegram DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.telegram.allowFrom=[\"*\"].","hasChildren":false} +{"recordType":"path","path":"channels.telegram.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.draftChunk","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.draftChunk.breakPreference","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.draftChunk.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.draftChunk.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.execApprovals","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approvals","help":"Telegram-native exec approval routing and approver authorization. Enable this only when Telegram should act as an explicit exec-approval client for the selected bot account.","hasChildren":true} +{"recordType":"path","path":"channels.telegram.execApprovals.agentFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approval Agent Filter","help":"Optional allowlist of agent IDs eligible for Telegram exec approvals, for example `[\"main\", \"ops-agent\"]`. Use this to keep approval prompts scoped to the agents you actually operate from Telegram.","hasChildren":true} +{"recordType":"path","path":"channels.telegram.execApprovals.agentFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.execApprovals.approvers","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approval Approvers","help":"Telegram user IDs allowed to approve exec requests for this bot account. Use numeric Telegram user IDs; prompts are only delivered to these approvers when target includes dm.","hasChildren":true} +{"recordType":"path","path":"channels.telegram.execApprovals.approvers.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.execApprovals.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approvals Enabled","help":"Enable Telegram exec approvals for this account. When false or unset, Telegram messages/buttons cannot approve exec requests.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.execApprovals.sessionFilter","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Exec Approval Session Filter","help":"Optional session-key filters matched as substring or regex-style patterns before Telegram approval routing is used. Use narrow patterns so Telegram approvals only appear for intended sessions.","hasChildren":true} +{"recordType":"path","path":"channels.telegram.execApprovals.sessionFilter.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.execApprovals.target","kind":"channel","type":"string","required":false,"enumValues":["dm","channel","both"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Exec Approval Target","help":"Controls where Telegram approval prompts are sent: \"dm\" sends to approver DMs (default), \"channel\" sends to the originating Telegram chat/topic, and \"both\" sends to both. Channel delivery exposes the command text to the chat, so only use it in trusted groups/topics.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.agentId","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.disableAudioPreflight","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.skills","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.skills.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.groups.*.topics.*.systemPrompt","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.linkPreview","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.network","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.network.autoSelectFamily","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram autoSelectFamily","help":"Override Node autoSelectFamily for Telegram (true=enable, false=disable).","hasChildren":false} +{"recordType":"path","path":"channels.telegram.network.dnsResultOrder","kind":"channel","type":"string","required":false,"enumValues":["ipv4first","verbatim"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.reactionLevel","kind":"channel","type":"string","required":false,"enumValues":["off","ack","minimal","extensive"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.reactionNotifications","kind":"channel","type":"string","required":false,"enumValues":["off","own","all"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.replyToMode","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.retry","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.retry.attempts","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Telegram Retry Attempts","help":"Max retry attempts for outbound Telegram API calls (default: 3).","hasChildren":false} +{"recordType":"path","path":"channels.telegram.retry.jitter","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Telegram Retry Jitter","help":"Jitter factor (0-1) applied to Telegram retry delays.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.retry.maxDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","reliability"],"label":"Telegram Retry Max Delay (ms)","help":"Maximum retry delay cap in ms for Telegram outbound calls.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.retry.minDelayMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","reliability"],"label":"Telegram Retry Min Delay (ms)","help":"Minimum retry delay in ms for Telegram outbound calls.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.silentErrorReplies","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Silent Error Replies","help":"When true, Telegram bot replies marked as errors are sent silently (no notification sound). Default: false.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.streaming","kind":"channel","type":["boolean","string"],"required":false,"enumValues":["off","partial","block","progress"],"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Telegram Streaming Mode","help":"Unified Telegram stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default: \"partial\"). \"progress\" maps to \"partial\" on Telegram. Legacy boolean/streamMode keys are auto-mapped.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.streamMode","kind":"channel","type":"string","required":false,"enumValues":["off","partial","block"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.threadBindings","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.threadBindings.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread Binding Enabled","help":"Enable Telegram conversation binding features (/focus, /unfocus, /agents, and /session idle|max-age). Overrides session.threadBindings.enabled when set.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.threadBindings.idleHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread Binding Idle Timeout (hours)","help":"Inactivity window in hours for Telegram bound sessions. Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.threadBindings.maxAgeHours","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance","storage"],"label":"Telegram Thread Binding Max Age (hours)","help":"Optional hard max age in hours for Telegram bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.threadBindings.spawnAcpSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread-Bound ACP Spawn","help":"Allow ACP spawns with thread=true to auto-bind Telegram current conversations when supported.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.threadBindings.spawnSubagentSessions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","storage"],"label":"Telegram Thread-Bound Subagent Spawn","help":"Allow subagent spawns with thread=true to auto-bind Telegram current conversations when supported.","hasChildren":false} +{"recordType":"path","path":"channels.telegram.timeoutSeconds","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"Telegram API Timeout (seconds)","help":"Max seconds before Telegram API requests are aborted (default: 500 per grammY).","hasChildren":false} +{"recordType":"path","path":"channels.telegram.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookCertPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookHost","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookPort","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":true,"tags":["auth","channels","network","security"],"hasChildren":true} +{"recordType":"path","path":"channels.telegram.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.telegram.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Tlon","help":"decentralized messaging on Urbit; install the plugin to enable.","hasChildren":true} +{"recordType":"path","path":"channels.tlon.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.accounts.*.allowPrivateNetwork","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.autoAcceptDmInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.autoAcceptGroupInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.autoDiscoverChannels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.code","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.dmAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.accounts.*.dmAllowlist.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.accounts.*.groupChannels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.ownerShip","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.ship","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.showModelSignature","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.accounts.*.url","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.allowPrivateNetwork","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.authorization","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.authorization.channelRules","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.authorization.channelRules.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.authorization.channelRules.*.allowedShips","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.authorization.channelRules.*.allowedShips.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.authorization.channelRules.*.mode","kind":"channel","type":"string","required":false,"enumValues":["restricted","open"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.autoAcceptDmInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.autoAcceptGroupInvites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.autoDiscoverChannels","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.code","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.defaultAuthorizedShips","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.defaultAuthorizedShips.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.dmAllowlist","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.dmAllowlist.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.groupChannels","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.tlon.groupChannels.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.ownerShip","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.ship","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.showModelSignature","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.tlon.url","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.twitch","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Twitch","help":"Twitch chat integration","hasChildren":true} {"recordType":"path","path":"channels.twitch.accessToken","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.twitch.accounts","kind":"channel","type":"object","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} @@ -1358,9 +3257,244 @@ {"recordType":"path","path":"channels.twitch.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.twitch.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"channels.twitch.username","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} -{"recordType":"path","path":"channels.whatsapp","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp","help":"works with your own number; recommend a separate phone + eSIM.","hasChildren":false} -{"recordType":"path","path":"channels.zalo","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo","help":"Vietnam-focused messaging platform with Bot API.","hasChildren":false} -{"recordType":"path","path":"channels.zalouser","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo Personal","help":"Zalo personal account via QR code login.","hasChildren":false} +{"recordType":"path","path":"channels.whatsapp","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp","help":"works with your own number; recommend a separate phone + eSIM.","hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction.direct","kind":"channel","type":"boolean","required":true,"defaultValue":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction.emoji","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.ackReaction.group","kind":"channel","type":"string","required":true,"enumValues":["always","mentions","never"],"defaultValue":"mentions","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.authDir","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.debounceMs","kind":"channel","type":"integer","required":true,"defaultValue":0,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.mediaMaxMb","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.selfChatMode","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.accounts.*.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.ackReaction","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.ackReaction.direct","kind":"channel","type":"boolean","required":true,"defaultValue":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.ackReaction.emoji","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.ackReaction.group","kind":"channel","type":"string","required":true,"enumValues":["always","mentions","never"],"defaultValue":"mentions","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.actions","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.actions.polls","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.actions.reactions","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.actions.sendMessage","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.allowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.blockStreaming","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce.idleMs","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce.maxChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.blockStreamingCoalesce.minChars","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.capabilities","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.capabilities.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.chunkMode","kind":"channel","type":"string","required":false,"enumValues":["length","newline"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.configWrites","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp Config Writes","help":"Allow WhatsApp to write config in response to channel events/commands (default: true).","hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.debounceMs","kind":"channel","type":"integer","required":true,"defaultValue":0,"deprecated":false,"sensitive":false,"tags":["channels","network","performance"],"label":"WhatsApp Message Debounce (ms)","help":"Debounce window (ms) for batching rapid consecutive messages from the same sender (0 to disable).","hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.defaultTo","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.dmHistoryLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.dmPolicy","kind":"channel","type":"string","required":true,"enumValues":["pairing","allowlist","open","disabled"],"defaultValue":"pairing","deprecated":false,"sensitive":false,"tags":["access","channels","network"],"label":"WhatsApp DM Policy","help":"Direct message access control (\"pairing\" recommended). \"open\" requires channels.whatsapp.allowFrom=[\"*\"].","hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.dms","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.dms.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.dms.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groupAllowFrom.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.groups.*.toolsBySender.*.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.healthMonitor","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.healthMonitor.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.heartbeat","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.heartbeat.showAlerts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.heartbeat.showOk","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.heartbeat.useIndicator","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.whatsapp.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.mediaMaxMb","kind":"channel","type":"integer","required":true,"defaultValue":50,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.selfChatMode","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"WhatsApp Self-Phone Mode","help":"Same-phone setup (bot uses your personal WhatsApp number).","hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.sendReadReceipts","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.whatsapp.textChunkLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo","help":"Vietnam-focused messaging platform with Bot API.","hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts.*.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.accounts.*.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.botToken","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.botToken.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.botToken.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.botToken.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.groupPolicy","kind":"channel","type":"string","required":false,"enumValues":["open","disabled","allowlist"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.mediaMaxMb","kind":"channel","type":"number","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.proxy","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.tokenFile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.webhookPath","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.webhookSecret","kind":"channel","type":["object","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalo.webhookSecret.id","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.webhookSecret.provider","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.webhookSecret.source","kind":"channel","type":"string","required":true,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalo.webhookUrl","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["channels","network"],"label":"Zalo Personal","help":"Zalo personal account via QR code login.","hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.accounts.*.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.profile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.accounts.*.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.allowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.allowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.dangerouslyAllowNameMatching","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.defaultAccount","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.dmPolicy","kind":"channel","type":"string","required":false,"enumValues":["pairing","allowlist","open","disabled"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groupAllowFrom","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.groupAllowFrom.*","kind":"channel","type":["number","string"],"required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groupPolicy","kind":"channel","type":"string","required":true,"enumValues":["open","disabled","allowlist"],"defaultValue":"allowlist","deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groups","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.groups.*","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.groups.*.allow","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groups.*.enabled","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groups.*.requireMention","kind":"channel","type":"boolean","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groups.*.tools","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.groups.*.tools.allow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.groups.*.tools.allow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groups.*.tools.alsoAllow","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.groups.*.tools.alsoAllow.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.groups.*.tools.deny","kind":"channel","type":"array","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.groups.*.tools.deny.*","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.historyLimit","kind":"channel","type":"integer","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.markdown","kind":"channel","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":true} +{"recordType":"path","path":"channels.zalouser.markdown.tables","kind":"channel","type":"string","required":false,"enumValues":["off","bullets","code"],"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.messagePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.name","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.profile","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} +{"recordType":"path","path":"channels.zalouser.responsePrefix","kind":"channel","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":[],"hasChildren":false} {"recordType":"path","path":"cli","kind":"core","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"CLI","help":"CLI presentation controls for local command output behavior such as banner and tagline style. Use this section to keep startup output aligned with operator preference without changing runtime behavior.","hasChildren":true} {"recordType":"path","path":"cli.banner","kind":"core","type":"object","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"CLI Banner","help":"CLI startup banner controls for title/version line and tagline style behavior. Keep banner enabled for fast version/context checks, then tune tagline mode to your preferred noise level.","hasChildren":true} {"recordType":"path","path":"cli.banner.taglineMode","kind":"core","type":"string","required":false,"deprecated":false,"sensitive":false,"tags":["advanced"],"label":"CLI Banner Tagline Mode","help":"Controls tagline style in the CLI startup banner: \"random\" (default) picks from the rotating tagline pool, \"default\" always shows the neutral default tagline, and \"off\" hides tagline text while keeping the banner version line.","hasChildren":false} diff --git a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json index 0f6d50a8..1ea30c14 100644 --- a/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json +++ b/specs/22_should-add-support-for-cloud-compute/.issue-flow-state.json @@ -33,10 +33,7 @@ "ci_url": null, "last_sync_at": "2026-04-08T14:39:28Z", "gh_available": true, - "issue_assignees": [ - "catchmeifyoucaan", - "ojogu" - ], + "issue_assignees": ["catchmeifyoucaan", "ojogu"], "issue_labels": [] }, "gates": { diff --git a/specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md b/specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md index c74136e6..c09d43fa 100644 --- a/specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md +++ b/specs/22_should-add-support-for-cloud-compute/brainstorm_transcript.md @@ -1,58 +1,72 @@ # Brainstorm Transcript: Issue #22 ## Session + - Date: 2026-03-27 - Mode: discovery-recovery - Goal: close testability gaps so acceptance criteria become implementation-ready. ## Q1 -What is the minimum shippable slice for this issue: -1) abstraction/interface scaffolding only, -2) abstraction + one hosted provider integration (EigenCompute), or -3) abstraction + hosted + local fully wired end-to-end? + +What is the minimum shippable slice for this issue: + +1. abstraction/interface scaffolding only, +2. abstraction + one hosted provider integration (EigenCompute), or +3. abstraction + hosted + local fully wired end-to-end? ### A1 + `3` - abstraction + hosted + local fully wired end-to-end. ## Q2 + For hosted provider scope in this issue, should it be: A) EigenCloud only, or B) provider wizard with multiple hosted providers? ### A2 + Provider wizard with multiple hosted providers, not EigenCloud only. Initial targets: EigenCloud, DigitalOcean, and AWS. ## Q3 + For local provider behavior, what is the required rule for this issue? A) auto-fallback to local when cloud is unavailable B) no auto-fallback, explicit local selection only C) both with a configurable toggle ### A3 + `C` - both with a configurable toggle. ## Q4 + For this issue's MVP depth: A) real provisioning integration for EigenCloud, AWS, and DigitalOcean, or B) provider wizard + provider interface + validated adapter wiring, with real provisioning for one provider and stubs for others. ### A4 + `A` - real provisioning integration for EigenCloud, AWS, and DigitalOcean. ## Q5 + Pick the minimum liveness acceptance target for this issue: A) successful sandbox creation in < 120s for each provider + healthcheck pass B) successful sandbox creation in < 60s for each provider + healthcheck pass C) custom target ### A5 + `B` - successful sandbox creation in < 60s for each provider + healthcheck pass. ## Q6 + For the configurable local fallback toggle, what should be the default? A) default ON (auto-fallback to local when cloud fails) B) default OFF (explicit local selection required) ### A6 + `A` - default ON (auto-fallback to local when cloud fails). diff --git a/specs/22_should-add-support-for-cloud-compute/design_review_summary.md b/specs/22_should-add-support-for-cloud-compute/design_review_summary.md index 95e9ea73..9b2d30b0 100644 --- a/specs/22_should-add-support-for-cloud-compute/design_review_summary.md +++ b/specs/22_should-add-support-for-cloud-compute/design_review_summary.md @@ -1,40 +1,48 @@ # Design Review Summary: Issue #22 ## Metadata + - Date: 2026-04-08 - Input: `specs/22_should-add-support-for-cloud-compute/design_spec.md` - Phase: 5 (Design review) ## Lens 1: UX Research + - Primary user goals are represented: selection, configuration, status visibility, and failure recovery. - Flow accounts for first-time setup and settings-based updates. - No blocker found. ## Lens 2: Interaction Design + - End-to-end flow is deterministic and includes fallback branches. - Step transitions and disable/enable rules for submission are explicit. - No blocker found. ## Lens 3: Accessibility + - Keyboard navigation, labels, live-region updates, and non-color status indicators are defined. - Mobile touch target and responsive constraints are included. - No blocker found. ## Lens 4: Visual/Brand + - Component inventory is cohesive and supports clear status storytelling. - Placeholder references exist for visual design handoff artifacts. - No blocker found. ## Lens 5: Frontend Engineering + - Components are decomposed into implementable units (`ProviderSelector`, `ProviderConfigForm`, `FallbackPolicyToggle`, `ProvisioningTimeline`). - State and behavior boundaries are clear for implementation and testing. - No blocker found. ## Gate Decision + - `design_completeness_gate`: **passed** - `design_approval`: **pending human approval** ## Non-Blocking Follow-Ups + - Finalize exact field schema names during technical spec phase. - Define canonical provider ordering constant to avoid UI drift. - Confirm copy strings with docs/content owner before implementation freeze. diff --git a/specs/22_should-add-support-for-cloud-compute/design_spec.md b/specs/22_should-add-support-for-cloud-compute/design_spec.md index fb0ccd14..c02edcfa 100644 --- a/specs/22_should-add-support-for-cloud-compute/design_spec.md +++ b/specs/22_should-add-support-for-cloud-compute/design_spec.md @@ -1,12 +1,14 @@ # Design Spec: Cloud Compute Provider Wizard and Provisioning UX ## Metadata + - Issue: https://github.com/Flow-Research/Jarvis/issues/22 - PRD source: `specs/22_should-add-support-for-cloud-compute/product_spec.md` - Date: 2026-04-08 - Phase: 4 (Design specification) ## Design Goals + - Make provider selection explicit, low-friction, and reversible. - Use one user-facing flow regardless of provider while preserving provider-specific configuration. - Keep local provider as a first-class option. @@ -15,11 +17,13 @@ - Surface provider class differences honestly so EigenCloud is not presented as just another SSH/VM provider. ## Primary Users + - Operator setting up compute for a new workspace. - Existing user updating compute provider in settings. - Platform maintainer diagnosing provider provisioning failures. ## Information Architecture + - Entry points: - Onboarding wizard step: `Compute Provider` - Settings page: `Compute` -> `Provider` tab @@ -32,6 +36,7 @@ - Evidence / Attestation Status (when supported) ## User Flow Diagram + ```mermaid flowchart TD A[Open Compute Setup] --> B{Choose Provider} @@ -62,6 +67,7 @@ flowchart TD ``` ## Screen Inventory + 1. Compute Provider Selection (wizard step / settings tab root) 2. Provider Configuration Form (dynamic by provider) 3. Fallback Policy Card @@ -72,35 +78,44 @@ flowchart TD ## Screen Specifications ### 1) Compute Provider Selection + #### Purpose + Allow explicit selection of `EigenCloud`, `AWS`, `DigitalOcean`, or `Local`. #### Components + - Radio/segmented provider selector (single select) - Provider cards with short capability summary and provider-class badge - Continue button (disabled until valid selection) #### States + - Default: no selection - Selected provider: card highlighted, continue enabled - Editing existing profile: current provider preselected #### Card content rules + - `Local`: label as `Local Docker` - `AWS` and `DigitalOcean`: label as `Hosted VM` - `EigenCloud`: label as `Hosted Attested App` ### 2) Provider Configuration Form + #### Purpose + Capture provider-specific values needed for provisioning. #### Shared layout + - Header: provider name + icon - Required fields section - Advanced fields (collapsible) - Inline validation + error messages #### Provider-specific field groups + - EigenCloud: - Auth key / credential reference selector - Environment / network @@ -121,25 +136,32 @@ Capture provider-specific values needed for provisioning. - Optional local resource caps ### 3) Fallback Policy Card + #### Purpose + Control auto-fallback to local when hosted creation fails. #### Components + - Toggle: `Auto-fallback to Local on hosted creation failure` - Description text for ON/OFF behavior - Default value indicator: ON #### Behavior + - Toggle shown for hosted providers. - For Local selection, toggle hidden and not applied. - Changes persist with provider configuration. - Copy clarifies that fallback is a control-plane policy and does not imply provider equivalence. ### 4) Provisioning Progress and Logs Panel + #### Purpose + Make create + healthcheck lifecycle transparent. #### Components + - Stepper/timeline: - `Submitting request` - `Provisioning runtime` @@ -157,6 +179,7 @@ Make create + healthcheck lifecycle transparent. - secret release mode #### Hosted failure behavior + - If fallback ON: - Add explicit event `Hosted provisioning failed, attempting local fallback` - Start local provisioning step @@ -164,7 +187,9 @@ Make create + healthcheck lifecycle transparent. - Show terminal hosted failure without fallback step ### 5) Provisioning Result Screen + #### Success + - Show final provider used - Show total duration - Show healthcheck pass status @@ -173,27 +198,33 @@ Make create + healthcheck lifecycle transparent. - Show evidence summary only when provider supports it #### Failure + - Show failing provider - Show failure reason category - Show retry action and edit settings action - If fallback occurred and also failed, show both hosted and fallback failure summaries distinctly ### 6) Evidence Panel + #### Purpose + Surface trust evidence only for providers that can produce it. #### Components + - Evidence availability badge - Attestation identifier / verification link - Secret release status #### Behavior + - Hidden for Local, AWS, and DigitalOcean in MVP - Shown for EigenCloud when evidence is returned by the provider adapter ## Component Specifications ### `ProviderSelector` + - Inputs: - `providers: ProviderOption[]` - `selectedProvider: ProviderId | null` @@ -204,6 +235,7 @@ Surface trust evidence only for providers that can produce it. - Each option shows provider class and transport summary ### `ProviderConfigForm` + - Inputs: - `providerId` - `initialValues` @@ -214,6 +246,7 @@ Surface trust evidence only for providers that can produce it. - Supports provider-class-specific helper text instead of generic hosted wording ### `FallbackPolicyToggle` + - Inputs: - `enabled` - `defaultEnabled = true` @@ -223,6 +256,7 @@ Surface trust evidence only for providers that can produce it. - Must display default ON guidance ### `ProvisioningTimeline` + - Inputs: - `events[]` - `elapsedMs` @@ -233,6 +267,7 @@ Surface trust evidence only for providers that can produce it. - Visual distinction between attested evidence-bearing providers and plain VM providers ### `EvidencePanel` + - Inputs: - `supported` - `evidence` @@ -242,6 +277,7 @@ Surface trust evidence only for providers that can produce it. - Never shown with empty placeholder content ## Interaction Patterns + - Switching provider resets provider-specific invalid fields and preserves cross-provider common values where safe. - Switching between provider classes resets incompatible fields instead of attempting lossy reuse. - Submit button remains disabled until selected provider config validates. @@ -250,6 +286,7 @@ Surface trust evidence only for providers that can produce it. - Fallback events are never silent; user sees explicit status transition. ## Accessibility Requirements + - All form controls have associated labels and descriptions. - Provider selector supports keyboard navigation and visible focus state. - Error text is linked to invalid fields with ARIA attributes. @@ -258,6 +295,7 @@ Surface trust evidence only for providers that can produce it. - Minimum touch target size 44x44 CSS px on mobile. ## Responsive Behavior + - Desktop/tablet: - Two-column layout for provider card + form - Timeline and event logs side-by-side @@ -267,6 +305,7 @@ Surface trust evidence only for providers that can produce it. - Collapsible advanced fields by default ## Copy and Messaging Rules + - Hosted failure + fallback ON: - "Hosted provisioning failed for . Switching to Local fallback." - Hosted failure + fallback OFF: @@ -277,6 +316,7 @@ Surface trust evidence only for providers that can produce it. - "Runtime is healthy and trust evidence is available." ## Telemetry and Analytics Events + - `compute_provider_selected` - `compute_provider_config_validated` - `sandbox_create_started` @@ -291,12 +331,14 @@ Surface trust evidence only for providers that can produce it. - `sandbox_evidence_unavailable` ## Figma / Screenshots Placeholders + - Figma board link: `TODO` - Onboarding provider step screenshot: `TODO` - Settings provider tab screenshot: `TODO` - Provisioning timeline screenshot: `TODO` ## PRD Traceability + - AC-1 (provider list) -> Provider Selection screen + `ProviderSelector`. - AC-2 (routing) -> ProviderConfig + submit flow mapping. - AC-3/4/5/6 (create + healthcheck success) -> Provisioning timeline + result states. diff --git a/specs/22_should-add-support-for-cloud-compute/issue_body_draft.md b/specs/22_should-add-support-for-cloud-compute/issue_body_draft.md index 5f30011a..d9a6df70 100644 --- a/specs/22_should-add-support-for-cloud-compute/issue_body_draft.md +++ b/specs/22_should-add-support-for-cloud-compute/issue_body_draft.md @@ -1,6 +1,7 @@ # Proposed Issue Clarification Update (Append-Only) ## Clarified Scope (MVP for this issue) + - Build a provider wizard that supports hosted provider selection across: - EigenCloud - AWS @@ -9,12 +10,14 @@ - Use one shared control-plane abstraction for sandbox creation regardless of provider. ## Provider and Fallback Rules + - Hosted path is multi-provider (not EigenCloud-only). - Local fallback behavior is configurable. - Default fallback mode is **ON**: - If selected hosted provider fails during sandbox creation, system auto-falls back to local provider. ## Required Implementation Depth + - Deliver **real provisioning integration** for: - EigenCloud - AWS @@ -22,6 +25,7 @@ - No stub-only hosted provider adapters for this issue. ## Measurable Acceptance Criteria + - Wizard allows selecting `EigenCloud`, `AWS`, `DigitalOcean`, or `Local`. - Sandbox creation path uses the same provider interface/contract across all providers. - For each hosted provider: @@ -38,6 +42,7 @@ - healthcheck + timing assertion path ## Out of Scope for this issue + - Advanced provider cost optimization policies. - Multi-region scheduling policies beyond minimum integration needed for creation flow. - Wallet/reward/PSH integration. diff --git a/specs/22_should-add-support-for-cloud-compute/issue_intake.md b/specs/22_should-add-support-for-cloud-compute/issue_intake.md index da74cdf4..0afcf1dc 100644 --- a/specs/22_should-add-support-for-cloud-compute/issue_intake.md +++ b/specs/22_should-add-support-for-cloud-compute/issue_intake.md @@ -1,10 +1,12 @@ # Issue Intake: #22 should add support for cloud compute ## Source + - Issue URL: https://github.com/Flow-Research/Jarvis/issues/22 - Captured at: 2026-03-27T14:07:12Z ## Issue Snapshot + - State: open - Author: @Sheys11 - Assignees: @catchmeifyoucaan, @ojogu @@ -13,24 +15,31 @@ - Body comments: 0 ## Extracted Problem Statement + Jarvis needs support for cloud compute so personal operators can get compute resources while preserving task execution and liveness guarantees. ## Extracted Goal + Support a hybrid sandbox architecture where sandbox provisioning uses the same control-plane abstraction across: + - hosted providers (containerized, attested execution) - local providers (local-first execution on user-owned devices) ## Stated Scope + - Introduce/extend provider-class support for `hosted` and `local`. - Ensure sandbox creation path is unified regardless of provider. ## Explicit Non-goals + Not specified in the issue body. ## Acceptance Criteria Assessment + Current issue text is directionally clear but not yet testable as delivery criteria. Missing details that block execution-ready classification: + - No explicit API/CLI surface requirements (inputs/outputs/errors). - No compatibility or migration requirements for existing local-only paths. - No definition of "liveness guarantees" measurable in tests. @@ -38,24 +47,31 @@ Missing details that block execution-ready classification: - No rollout constraints or out-of-scope boundaries. ## Strategy Sources Consulted + Strategy context unavailable: + - `.jarvis/context/docs/strategy/` not found. - `docs/strategy/` not found. ## Strategic Context + No local strategy documentation was available in-repo, so strategic alignment must be inferred from issue intent and validated during brainstorm. ## Strategic Alignment Hypothesis + The request appears aligned with platform reliability and deployment flexibility by introducing a provider abstraction layer that supports both hosted and local compute. ## Strategy Gaps / Questions + - Is cloud compute support expected to be production-ready in this issue or scaffold-only? - Is EigenCompute the only hosted provider target for this slice? - Which reliability/SLO dimensions are mandatory in this issue vs deferred? ## Classification + - Mode: discovery-recovery - Rationale: acceptance criteria are not yet testable enough to move directly into PRD/implementation. ## Recommended Next Action -Run Phase 1 brainstorming with focused clarification to produce testable acceptance criteria and an append-only issue update draft. \ No newline at end of file + +Run Phase 1 brainstorming with focused clarification to produce testable acceptance criteria and an append-only issue update draft. diff --git a/specs/22_should-add-support-for-cloud-compute/prd_review_summary.md b/specs/22_should-add-support-for-cloud-compute/prd_review_summary.md index 49c99082..a4debf3b 100644 --- a/specs/22_should-add-support-for-cloud-compute/prd_review_summary.md +++ b/specs/22_should-add-support-for-cloud-compute/prd_review_summary.md @@ -1,16 +1,19 @@ # PRD Review Summary: Issue #22 ## Review Metadata + - Date: 2026-04-01 - Input: `specs/22_should-add-support-for-cloud-compute/product_spec.md` - Phase: 3 (PRD review) ## Review Outcome + - Blocking issues: **none** - Spec gate recommendation: **PASS** - Human approval required to advance: `prd_approval` ## What Was Verified + - Scope is explicit and bounded to provider wizard + shared control-plane + real integrations for EigenCloud, AWS, and DigitalOcean. - Local provider is preserved as a first-class path. - Fallback behavior is explicitly defined, configurable, and defaulted to ON. @@ -19,10 +22,12 @@ - Non-goals are clearly documented to prevent scope drift. ## Minor Improvements (Non-Blocking) + - Add exact config key names once technical spec finalizes naming conventions. - Add explicit test environment assumptions for cloud provider credentials in CI docs. - Confirm whether `< 60s` target applies to cold-start only or both cold/warm starts. ## Gate Decision + - `spec_gate`: **passed** - `prd_approval`: **pending user approval** diff --git a/specs/22_should-add-support-for-cloud-compute/product_spec.md b/specs/22_should-add-support-for-cloud-compute/product_spec.md index 273e0318..8dfab8cf 100644 --- a/specs/22_should-add-support-for-cloud-compute/product_spec.md +++ b/specs/22_should-add-support-for-cloud-compute/product_spec.md @@ -1,23 +1,29 @@ # Product Spec: Cloud Compute Provider Support ## Metadata + - Issue: https://github.com/Flow-Research/Jarvis/issues/22 - Epic path: `specs/22_should-add-support-for-cloud-compute` - Phase: 2 (PRD) - Date: 2026-04-01 ## Problem Statement + Jarvis currently needs a production-ready cloud compute path that keeps local execution as a first-class option while preserving one shared sandbox control-plane contract. Without this, teams cannot reliably choose compute providers per environment, and fallback behavior is inconsistent. ## Product Goal + Deliver a compute selection and runtime orchestration path that supports: + - Local compute: Docker-backed local sandbox path - Hosted VM compute: AWS and DigitalOcean - Hosted attested app compute: EigenCloud - One shared control-plane abstraction for runtime lifecycle operations across all providers without forcing all providers into the same transport model ## Scope + ### In Scope + - Provider selection wizard supporting `EigenCloud`, `AWS`, `DigitalOcean`, and `Local`. - Shared provider interface and routing layer used by all provider adapters. - Provider capability model covering transport, healthcheck, attestation/evidence, and secret release behavior. @@ -30,6 +36,7 @@ Deliver a compute selection and runtime orchestration path that supports: - Tests for provider routing, success paths, and fallback behavior. ### Out of Scope + - Cost optimization and dynamic provider pricing decisions. - Multi-region optimization policies beyond minimum creation support. - Wallet/reward/PSH integration. @@ -38,12 +45,14 @@ Deliver a compute selection and runtime orchestration path that supports: - Requiring attestation parity across all providers in MVP. ## Users and Primary Jobs + - Operator/Developer: choose where sandbox compute runs and get predictable startup behavior. - Platform/Infra owner: enforce unified control-plane behavior and observe provider reliability. ## Functional Requirements ### FR-1 Shared Runtime Contract + - Define and use a single runtime contract for compute lifecycle operations: - provision runtime - run healthcheck @@ -53,6 +62,7 @@ Deliver a compute selection and runtime orchestration path that supports: - The shared contract must not assume every provider is reached via SSH. ### FR-2 Provider Selection Wizard + - User can explicitly select one of: `EigenCloud`, `AWS`, `DigitalOcean`, `Local`. - Wizard captures provider-specific configuration inputs required for provisioning. - Wizard persists enough context for deterministic routing to the selected adapter. @@ -62,26 +72,31 @@ Deliver a compute selection and runtime orchestration path that supports: - `Hosted Attested App` ### FR-3 Hosted VM Integrations + - AWS adapter performs real VM provisioning and healthcheck. - DigitalOcean adapter performs real VM provisioning and healthcheck. - VM-class providers may expose SSH access as the execution transport. ### FR-4 Hosted Attested App Integration + - EigenCloud adapter performs real app deployment and healthcheck using the EigenCloud SDK. - EigenCloud path exposes attestation/evidence metadata and explicit secret release support. - EigenCloud integration must not be modeled as a raw VM/SSH provider in the final architecture. ### FR-5 Local Provider Path + - Local provider remains functional and reachable from the same control-plane API. - Local path behaves as a first-class compute option, not an emergency-only backdoor. ### FR-6 Fallback Policy + - Config toggle controls fallback behavior (`fallback_to_local_on_hosted_failure` or equivalent). - Default value is `ON`. - When `ON`, a hosted provider failure in sandbox creation triggers automatic local creation attempt. - When `OFF`, hosted failure is returned as failure without local auto-attempt. ### FR-7 Readiness and Health Targets + - Healthcheck must pass after creation for each provider. - Readiness timing must be measured and observable for each provider. - Timing budgets may differ by provider class: @@ -90,6 +105,7 @@ Deliver a compute selection and runtime orchestration path that supports: - The system must not hardcode an EigenCloud-style readiness assumption onto AWS or DigitalOcean. ### FR-8 Observability + - Log provider selection, provisioning outcome, duration, and fallback decisions. - On fallback execution, include: - original hosted provider @@ -98,11 +114,13 @@ Deliver a compute selection and runtime orchestration path that supports: - When supported, include attestation/evidence identifiers without logging secrets. ## Non-Functional Requirements + - Reliability: consistent lifecycle semantics across providers for provision + healthcheck + failure outcomes, while allowing provider-specific transports and capabilities. - Testability: all acceptance criteria map to deterministic automated tests. - Backward safety: local-only usage remains operational if no hosted provider is configured. ## Acceptance Criteria (Testable) + - AC-1 Wizard lists exactly: `EigenCloud`, `AWS`, `DigitalOcean`, `Local`. - AC-2 Selected provider routes to the correct adapter path. - AC-3 EigenCloud create+healthcheck succeeds under an EigenCloud integration harness and exposes provider evidence metadata. @@ -116,6 +134,7 @@ Deliver a compute selection and runtime orchestration path that supports: - AC-11 Attested-provider-only fields and evidence states are hidden for non-attested providers. ## Test Plan Requirements + - Unit tests: - provider routing matrix for all 4 providers - fallback policy gate behavior (`ON` vs `OFF`) @@ -126,6 +145,7 @@ Deliver a compute selection and runtime orchestration path that supports: - hosted failure simulation leading to local fallback when enabled ## Risks and Mitigations + - Risk: provider API differences cause contract drift. - Mitigation: enforce adapter conformance tests at the runtime contract boundary and keep provider-specific capability flags explicit. - Risk: an EigenCloud-specific design leaks into VM providers or vice versa. @@ -134,12 +154,14 @@ Deliver a compute selection and runtime orchestration path that supports: - Mitigation: structured fallback logs with explicit reason and original provider ID. ## Dependencies + - Provider credentials/config for EigenCloud, AWS, DigitalOcean in test/runtime environments. - Existing sandbox control-plane module where provider adapter interface is enforced. - CI lanes capable of running provider integration and fallback behavior tests. - EigenCloud SDK and deployment image pipeline for attested app runtime. ## Definition of Done + - All acceptance criteria AC-1 through AC-10 are validated by tests or deterministic checks. - Provider wizard, shared runtime contract, hosted adapters, and local fallback behavior are implemented. - CI checks covering provider selection, provisioning, fallback, and liveness are green. diff --git a/specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md b/specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md index 92895e4c..97195220 100644 --- a/specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md +++ b/specs/22_should-add-support-for-cloud-compute/provider_architecture_addendum.md @@ -1,9 +1,11 @@ # Provider Architecture Addendum ## Purpose + This note records how the reviewed EigenCloud architecture note was adapted into a multi-provider runtime design for issue #22. ## Source Inputs + - Reviewed note: - `https://any.coop/A7AAFUdmufaBG3HDyzxAqzviXfxtPAUeCstfSCVmb5ZY9AGj/eigencloud` - Reviewed official docs: @@ -15,6 +17,7 @@ This note records how the reviewed EigenCloud architecture note was adapted into - EigenCompute KMS ## What Stayed True + - EigenCloud is best treated as one long-lived operator core runtime, not a swarm of always-on external worker apps. - Internal subagents should stay inside the core runtime by default. - Durable state should remain outside provider memory. @@ -22,6 +25,7 @@ This note records how the reviewed EigenCloud architecture note was adapted into - SDK-backed integration is preferred over shell-driven CLI automation. ## What Changed + - EigenCloud is no longer the top-level architecture. - The top-level architecture is now provider-neutral. - AWS and DigitalOcean are VM providers first. @@ -31,55 +35,68 @@ This note records how the reviewed EigenCloud architecture note was adapted into ## Final Model ### Runtime classes + - `local-container` - `hosted-vm` - `hosted-attested-app` ### Provider mapping + - `local` -> `local-container` - `aws` -> `hosted-vm` - `digitalocean` -> `hosted-vm` - `eigencloud` -> `hosted-attested-app` ### Design rule + Do not force all providers into one transport model. Correct transport expectations: + - `local` -> Docker/local process control - `aws` and `digitalocean` -> SSH-capable VM access - `eigencloud` -> provider-managed deployed app endpoint with evidence support ## Why This Matters + If EigenCloud is modeled as just another SSH host: + - attestation becomes invisible - secret release becomes bolted-on instead of first-class - the design inherits VM assumptions that do not actually match the provider If AWS and DigitalOcean are modeled as EigenCloud-like attested apps: + - the shared contract becomes dishonest - provider forms become confusing - implementation work is blocked on capabilities those providers do not expose in MVP ## Resulting Engineering Rule + Share: + - lifecycle contract - healthcheck semantics - fallback policy - observability schema Do not over-share: + - transport details - evidence model - secret delivery mechanics - provider-specific identity assumptions ## Status + The branch currently implements the control-plane scaffolding: + - provider selection - fallback policy - hosted provider registry - hosted healthcheck routing The remaining work is to complete provider-native runtime implementations: + - VM providers with real provisioning - EigenCloud with SDK-backed attested app runtime diff --git a/specs/22_should-add-support-for-cloud-compute/technical_spec.md b/specs/22_should-add-support-for-cloud-compute/technical_spec.md index ed936afc..56cf40af 100644 --- a/specs/22_should-add-support-for-cloud-compute/technical_spec.md +++ b/specs/22_should-add-support-for-cloud-compute/technical_spec.md @@ -1,6 +1,7 @@ # Technical Spec: Multi-Provider Compute Runtime for Sandbox Execution ## Metadata + - Issue: https://github.com/Flow-Research/Jarvis/issues/22 - PRD: `specs/22_should-add-support-for-cloud-compute/product_spec.md` - Design spec: `specs/22_should-add-support-for-cloud-compute/design_spec.md` @@ -8,29 +9,36 @@ - Phase: 6 (Tech spec) ## Implementation Objective + Implement compute selection across `local`, `eigencloud`, `aws`, and `digitalocean` behind one control-plane path for runtime provisioning, healthcheck, failure handling, and fallback, without forcing all providers into the same transport or trust model. ## Architectural Correction + The previous EigenCloud-only direction was useful for understanding EigenCloud, but it is not a correct top-level abstraction now that we support more than one hosted provider. The final architecture must distinguish three runtime classes: + - `local-container` - `hosted-vm` - `hosted-attested-app` Provider mapping: + - `local` -> `local-container` - `aws` -> `hosted-vm` - `digitalocean` -> `hosted-vm` - `eigencloud` -> `hosted-attested-app` This is the key design rule: + - The shared control plane is lifecycle-oriented. - Provider transports are capability-driven. - EigenCloud is not modeled as a raw SSH VM in the final architecture. ## External Constraints + The following constraints come from the reviewed EigenCloud note and official EigenCloud docs: + - EigenCompute deploys containerized services, not raw VMs. - Deployments are image-based and exposed over bound ports. - EigenCloud provides attestation/trust evidence. @@ -40,11 +48,13 @@ The following constraints come from the reviewed EigenCloud note and official Ei - The SDK is the correct programmatic integration surface. That means: + - EigenCloud should be integrated as an attested app runtime. - AWS and DigitalOcean should be integrated as VM runtimes first. - Explicit platform-controlled secret release remains valid across all providers. ## Existing Architecture Baseline + - Sandbox orchestration today centers on: - `src/agents/sandbox/context.ts` - `src/agents/sandbox/backend.ts` @@ -64,7 +74,9 @@ That means: - setup/onboarding prompts and flags ## Current Implemented State + The current branch now includes a valid phase-0 scaffold: + - provider selection in wizard/CLI/onboarding - hosted provider registry - hosted healthcheck execution @@ -72,17 +84,20 @@ The current branch now includes a valid phase-0 scaffold: - sandbox context routing Current limitation: + - hosted providers are still modeled as SSH-oriented targets in code - that is acceptable for `aws` and `digitalocean` as an interim path - that is not the correct final model for `eigencloud` So the shipped scaffold should be treated as: + - a correct control-plane/fallback foundation - not the final provider transport model ## Final Architecture ### 1) Shared Runtime Contract + The shared abstraction must be a provisioned runtime, not a raw SSH target. ```ts @@ -91,11 +106,10 @@ type ComputeProviderId = "local" | "eigencloud" | "aws" | "digitalocean"; type ComputeRuntimeKind = "local-container" | "hosted-vm" | "hosted-attested-app"; type ComputeProviderCapabilities = { - access: - | { - ssh: boolean; - httpApi: boolean; - }; + access: { + ssh: boolean; + httpApi: boolean; + }; attestation: boolean; explicitSecretRelease: boolean; startStop: boolean; @@ -143,11 +157,13 @@ type HostedComputeProvider = { ### 2) Provider Profiles #### Local + - Maps to existing `docker` backend. - No attestation. - No explicit secret release endpoint required. #### AWS + - First-class profile: `hosted-vm` - Primary transport: SSH - Provisioning target: EC2 or equivalent VM instance @@ -155,6 +171,7 @@ type HostedComputeProvider = { - Attestation is not required for MVP #### DigitalOcean + - First-class profile: `hosted-vm` - Primary transport: SSH - Provisioning target: Droplet @@ -162,6 +179,7 @@ type HostedComputeProvider = { - Attestation is not required for MVP #### EigenCloud + - First-class profile: `hosted-attested-app` - Primary transport: provider-managed HTTP/API endpoint - Provisioning target: deployed EigenCompute app via SDK @@ -170,14 +188,17 @@ type HostedComputeProvider = { - Must not be permanently forced through the `ssh` backend in the final design ### 3) Control-Plane Routing + Routing decisions happen in two stages: #### A. Provider stage + - Read `sandbox.compute.provider` - Provision with the selected provider adapter - Receive a `ProvisionedRuntime` #### B. Access stage + - Convert `ProvisionedRuntime` into the concrete execution backend: - `local-container` -> `docker` - `hosted-vm` with SSH -> `ssh` @@ -186,9 +207,11 @@ Routing decisions happen in two stages: This keeps one control plane while allowing multiple execution transports. ### 4) Fallback Policy + Fallback remains control-plane policy, not provider emulation. Rules: + - Hosted provider failure before readiness: - if fallback `ON` -> try local - if fallback `OFF` -> return hosted failure @@ -201,9 +224,11 @@ Rules: - local fallback outcome ### 5) Evidence and Secret Release + Evidence and secret release must be optional capabilities, not universal assumptions. Rules: + - `eigencloud`: - supports evidence/attestation - supports explicit secret release flow @@ -215,6 +240,7 @@ Rules: - no provider-level secret release ## Config Surface + Retain the new `sandbox.compute` block, but evolve it to represent provider capabilities cleanly. ```ts @@ -251,49 +277,62 @@ compute?: { ``` Important rule: + - `target` remains valid for VM-class providers. - `target` is not the final source of truth for EigenCloud. ## Control-Plane Modules ### A) Provider Registry + Files: + - `src/agents/sandbox/compute/types.ts` - `src/agents/sandbox/compute/registry.ts` Responsibilities: + - register hosted provider adapters - expose provider capabilities - dispatch provision/healthcheck/evidence/release-secrets ### B) Provider Adapters + Files: + - `src/agents/sandbox/compute/providers/eigencloud.ts` - `src/agents/sandbox/compute/providers/aws.ts` - `src/agents/sandbox/compute/providers/digitalocean.ts` - `src/agents/sandbox/compute/providers/shared.ts` Responsibilities: + - convert provider config into a `ProvisionedRuntime` - implement provider-native lifecycle behavior ### C) Runtime Resolution Layer + Files: + - `src/agents/sandbox/context.ts` - future: `src/agents/sandbox/provider-runtime.ts` Responsibilities: + - resolve provider from config - provision runtime - choose correct execution backend based on runtime kind and capabilities - perform healthcheck and fallback ### D) EigenCloud-Specific Runtime Access + New future files: + - `src/agents/sandbox/provider-managed.ts` - `src/agents/sandbox/provider-managed.test.ts` Responsibilities: + - handle provider-managed API transport - invoke `/health`, `/exec`, `/files/*`, `/release-secrets` - carry attestation/evidence metadata @@ -301,11 +340,14 @@ Responsibilities: This is the missing final leg for EigenCloud. ## Onboarding and Wizard Surface + Already implemented: + - provider selection - target/workspace/identity/fallback flags Needed refinement: + - keep `aws` and `digitalocean` forms SSH/VM-shaped - evolve `eigencloud` form away from SSH-target-first UX toward: - auth key reference @@ -314,6 +356,7 @@ Needed refinement: - evidence-capable runtime explanation Files: + - `src/wizard/setup.ts` - `src/wizard/setup.compute-provider.ts` - `src/commands/onboard.ts` @@ -321,7 +364,9 @@ Files: - `src/cli/program/register.onboard.ts` ## Observability Schema + Every lifecycle event should carry: + - `compute_provider` - `runtime_kind` - `capabilities` @@ -331,11 +376,13 @@ Every lifecycle event should carry: - `fallback_result` Attested providers may also carry: + - `attestation_id` - `verification_url` - `deployment_record` Never log: + - raw secrets - auth keys - private key material @@ -344,12 +391,14 @@ Never log: ## Failure Model ### Hosted VM failure + - instance creation fails - SSH not reachable - bootstrapping fails - healthcheck fails ### Hosted attested app failure + - deployment submission fails - app does not reach ready state - healthcheck endpoint fails @@ -357,6 +406,7 @@ Never log: - secret release fails ### Fallback behavior + - fallback only applies from hosted to local - fallback preserves original hosted failure context - final error may be composite: @@ -364,6 +414,7 @@ Never log: - local fallback failure ## Security Rules + - Do not use EigenCloud app wallet as product treasury. - Use provider capabilities instead of assuming attestation everywhere. - Keep explicit secret release as the platform-owned policy gate. @@ -373,6 +424,7 @@ Never log: ## Testing Plan ### Already Implemented + - provider selection routing - fallback enabled behavior - fallback disabled behavior @@ -381,18 +433,21 @@ Never log: - non-interactive setup coverage ### Remaining Unit Tests + - provider capability matrix tests - `ProvisionedRuntime` mapping tests - EigenCloud evidence mapping tests - provider-managed API transport tests ### Remaining Integration Tests + - real DigitalOcean VM provisioning + SSH-ready healthcheck - real AWS VM provisioning + SSH-ready healthcheck - real EigenCloud SDK deployment + app healthcheck + evidence retrieval - explicit secret release flow on EigenCloud ### Acceptance Mapping + - AC-1/2: onboarding and routing tests - AC-3/4/5: provider-specific integration harnesses - AC-6: local path parity @@ -403,9 +458,11 @@ Never log: ## Phased Delivery Plan ### Phase 0: Scaffolding + Status: done on this branch Includes: + - provider selection - config plumbing - hosted provider registry @@ -413,25 +470,31 @@ Includes: - fallback routing ### Phase 1: Runtime Contract Upgrade + Next Includes: + - `ProvisionedRuntime` - provider capability matrix - runtime-kind-aware routing ### Phase 2: VM Providers + Next after phase 1 Includes: + - real DigitalOcean adapter - real AWS adapter - SSH-ready healthcheck and lifecycle behavior ### Phase 3: EigenCloud Attested Runtime + After VM providers or in parallel if credentials and image pipeline are ready Includes: + - SDK-backed deploy/start/stop/destroy - app endpoint readiness - evidence retrieval @@ -439,20 +502,24 @@ Includes: - provider-managed API execution path ### Phase 4: Unified Operator Runtime Polishing + Final Includes: + - richer observability - provider-specific docs - full integration CI strategy ## Explicit Non-Goals + - Making every provider attested in MVP - Using one provider’s lifecycle model as the universal model - Treating EigenCloud wallet/KMS semantics as the generic hosted compute baseline - Cost-based scheduling and PSH integration in this issue ## Reference Notes + - Internal reference note reviewed: - `https://any.coop/A7AAFUdmufaBG3HDyzxAqzviXfxtPAUeCstfSCVmb5ZY9AGj/eigencloud` - Official EigenCloud docs reviewed: diff --git a/specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md b/specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md index e5e9a396..b2fb66f8 100644 --- a/specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md +++ b/specs/22_should-add-support-for-cloud-compute/techspec_review_summary.md @@ -1,11 +1,13 @@ # Tech Spec Review Summary: Issue #22 ## Metadata + - Date: 2026-04-08 - Input: `specs/22_should-add-support-for-cloud-compute/technical_spec.md` - Phase: 7 (Tech spec review) ## Review Focus + - Simplicity and architectural fitness - Alignment with existing sandbox + onboarding architecture - Testability and acceptance-criteria traceability @@ -13,11 +15,13 @@ ## Findings ### 1) Architecture Fit + - The spec extends existing sandbox/onboarding structure instead of introducing a separate orchestration stack. - It reuses current config and backend primitives (`context.ts`, backend registry, wizard/onboard flow). - Result: **fit is good**, no redesign blocker. ### 2) Simplicity Check + - Minimal approach selected: - Add a compute provider contract and route through existing control-plane entry. - Keep local path as current default. @@ -26,18 +30,22 @@ - Result: **passes simplicity gate**. ### 3) Testability + - Acceptance criteria map cleanly to concrete unit/integration tests. - Fallback-on/fallback-off behaviors are explicitly testable. - Result: **testability is sufficient**. ## Non-Blocking Adjustments + - Keep provider field names consistent between wizard, CLI flags, and config schema (`eigencloud`/`aws`/`digitalocean`). - Ensure timing assertions (`< 60s`) use stable mocked clocks/harnesses where live provider timing is nondeterministic. - Confirm final event schema names before implementation to avoid log migration churn. ## Gate Decision + - `design_simplicity_gate`: **passed** - `tech_spec_approval`: **pending human approval** ## Recommendation + - Ready to proceed once tech spec approval is recorded. diff --git a/src/agents/sandbox-merge.test.ts b/src/agents/sandbox-merge.test.ts index 8b7ab490..9e71ca3a 100644 --- a/src/agents/sandbox-merge.test.ts +++ b/src/agents/sandbox-merge.test.ts @@ -175,12 +175,32 @@ describe("sandbox config merges", () => { }); }); - it("routes hosted compute providers to ssh by default and applies provider ssh overrides", () => { + it("routes hosted compute providers to openshell by default", () => { const resolved = resolveSandboxConfigForAgent({ agents: { defaults: { sandbox: { mode: "all", + compute: { + provider: "aws", + }, + }, + }, + }, + }); + + expect(resolved.compute?.provider).toBe("aws"); + expect(resolved.backend).toBe("openshell"); + expect(resolved.ssh.target).toBeUndefined(); + }); + + it("applies provider ssh overrides when hosted backend is explicitly ssh", () => { + const resolved = resolveSandboxConfigForAgent({ + agents: { + defaults: { + sandbox: { + mode: "all", + backend: "ssh", ssh: { target: "global@example.com:22" }, compute: { provider: "aws", diff --git a/src/agents/sandbox/compute/providers/aws.ts b/src/agents/sandbox/compute/providers/aws.ts index e5817e06..f28af180 100644 --- a/src/agents/sandbox/compute/providers/aws.ts +++ b/src/agents/sandbox/compute/providers/aws.ts @@ -1,5 +1,8 @@ -import { createHostedSshComputeProvider } from "./shared.js"; +import { createHostedComputeProvider } from "./shared.js"; -export const awsHostedComputeProvider = createHostedSshComputeProvider("aws", { +export const awsHostedComputeProvider = createHostedComputeProvider("aws", { runtimeKind: "hosted-vm", + managedEvidence: { + summary: "Managed via OpenShell provider-backed sandbox provisioning.", + }, }); diff --git a/src/agents/sandbox/compute/providers/digitalocean.ts b/src/agents/sandbox/compute/providers/digitalocean.ts index 19e32947..53aa40c5 100644 --- a/src/agents/sandbox/compute/providers/digitalocean.ts +++ b/src/agents/sandbox/compute/providers/digitalocean.ts @@ -1,5 +1,8 @@ -import { createHostedSshComputeProvider } from "./shared.js"; +import { createHostedComputeProvider } from "./shared.js"; -export const digitaloceanHostedComputeProvider = createHostedSshComputeProvider("digitalocean", { +export const digitaloceanHostedComputeProvider = createHostedComputeProvider("digitalocean", { runtimeKind: "hosted-vm", + managedEvidence: { + summary: "Managed via OpenShell provider-backed sandbox provisioning.", + }, }); diff --git a/src/agents/sandbox/compute/providers/eigencloud.ts b/src/agents/sandbox/compute/providers/eigencloud.ts index cacca127..14f37ef1 100644 --- a/src/agents/sandbox/compute/providers/eigencloud.ts +++ b/src/agents/sandbox/compute/providers/eigencloud.ts @@ -1,8 +1,13 @@ -import { createHostedSshComputeProvider } from "./shared.js"; +import { createHostedComputeProvider } from "./shared.js"; -export const eigencloudHostedComputeProvider = createHostedSshComputeProvider("eigencloud", { +export const eigencloudHostedComputeProvider = createHostedComputeProvider("eigencloud", { runtimeKind: "hosted-attested-app", - evidence: { - summary: "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", + managedEvidence: { + summary: + "Managed via OpenShell on EigenCloud; attestation verification is not exposed through the current sandbox contract yet.", + }, + sshEvidence: { + summary: + "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", }, }); diff --git a/src/agents/sandbox/compute/providers/shared.ts b/src/agents/sandbox/compute/providers/shared.ts index 0793c6cb..cadc9d8b 100644 --- a/src/agents/sandbox/compute/providers/shared.ts +++ b/src/agents/sandbox/compute/providers/shared.ts @@ -90,31 +90,57 @@ function validateHostedBackend(params: HostedSandboxProvisionParams): void { } } -type HostedSshComputeProviderOptions = { +function validateProviderManagedBackend(params: HostedSandboxProvisionParams): void { + if (params.cfg.backend !== "openshell") { + throw new Error( + [ + `Hosted sandbox provider "${params.providerId}" requires the OpenShell or SSH backend.`, + `Resolved backend: "${params.cfg.backend}".`, + ].join(" "), + ); + } +} + +type HostedComputeProviderOptions = { runtimeKind: HostedSandboxComputeRuntimeInfo["runtimeKind"]; - capabilities?: Partial; - evidence?: HostedSandboxComputeRuntimeInfo["evidence"]; + managedCapabilities?: Partial; + managedEvidence?: HostedSandboxComputeRuntimeInfo["evidence"]; + sshCapabilities?: Partial; + sshEvidence?: HostedSandboxComputeRuntimeInfo["evidence"]; }; function buildHostedCapabilities( - options?: HostedSshComputeProviderOptions, + overrides?: Partial, ): HostedSandboxComputeRuntimeInfo["capabilities"] { return { sshAccess: true, httpsAccess: false, supportsAttestation: false, supportsSecretRelease: false, - ...options?.capabilities, + ...overrides, }; } -export function createHostedSshComputeProvider( +export function createHostedComputeProvider( id: HostedSandboxComputeProviderId, - options: HostedSshComputeProviderOptions, + options: HostedComputeProviderOptions, ): HostedSandboxComputeProvider { return { id, async provision(params): Promise { + if (params.cfg.backend === "openshell") { + validateProviderManagedBackend(params); + return { + cfg: params.cfg, + runtime: { + providerId: id, + runtimeKind: options.runtimeKind, + access: {}, + capabilities: buildHostedCapabilities(options.managedCapabilities), + evidence: options.managedEvidence, + }, + }; + } validateHostedBackend(params); return { cfg: params.cfg, @@ -124,8 +150,8 @@ export function createHostedSshComputeProvider( access: { sshTarget: resolveHostedTarget(params), }, - capabilities: buildHostedCapabilities(options), - evidence: options.evidence, + capabilities: buildHostedCapabilities(options.sshCapabilities), + evidence: options.sshEvidence, }, }; }, diff --git a/src/agents/sandbox/compute/registry.test.ts b/src/agents/sandbox/compute/registry.test.ts index cb8110de..63d0bff0 100644 --- a/src/agents/sandbox/compute/registry.test.ts +++ b/src/agents/sandbox/compute/registry.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import type { SandboxContext } from "../types.js"; import { resolveSandboxConfigForAgent } from "../config.js"; +import type { SandboxContext } from "../types.js"; import { healthcheckHostedSandboxCompute, isHostedSandboxComputeProviderId, @@ -15,7 +15,7 @@ describe("sandbox compute registry", () => { expect(isHostedSandboxComputeProviderId("local")).toBe(false); }); - it("provisions hosted compute providers with resolved targets", async () => { + it("provisions hosted compute providers through openshell by default", async () => { const runtime = { log: vi.fn(), error: vi.fn(), @@ -29,9 +29,6 @@ describe("sandbox compute registry", () => { scope: "session", compute: { provider: "aws", - hosted: { - aws: { target: "ec2-user@aws-host:22" }, - }, }, }, }, @@ -47,16 +44,55 @@ describe("sandbox compute registry", () => { expect(result.runtime.providerId).toBe("aws"); expect(result.runtime.runtimeKind).toBe("hosted-vm"); - expect(result.runtime.access.sshTarget).toBe("ec2-user@aws-host:22"); + expect(result.cfg.backend).toBe("openshell"); + expect(result.runtime.access).toEqual({}); expect(result.runtime.capabilities).toEqual({ sshAccess: true, httpsAccess: false, supportsAttestation: false, supportsSecretRelease: false, }); + expect(result.runtime.evidence).toEqual({ + summary: "Managed via OpenShell provider-backed sandbox provisioning.", + }); expect(runtime.log).toHaveBeenCalled(); }); + it("supports explicit ssh overrides for hosted providers", async () => { + const runtime = { + log: vi.fn(), + error: vi.fn(), + exit: vi.fn(), + }; + const cfg = resolveSandboxConfigForAgent({ + agents: { + defaults: { + sandbox: { + mode: "all", + scope: "session", + backend: "ssh", + compute: { + provider: "aws", + hosted: { + aws: { target: "ec2-user@aws-host:22" }, + }, + }, + }, + }, + }, + }); + + const result = await provisionHostedSandboxCompute({ + providerId: "aws", + cfg, + sessionKey: "agent:worker:task", + runtime, + }); + + expect(result.cfg.backend).toBe("ssh"); + expect(result.runtime.access.sshTarget).toBe("ec2-user@aws-host:22"); + }); + it("reports healthcheck failures with details", async () => { const runtime = { log: vi.fn(), @@ -98,6 +134,7 @@ describe("sandbox compute registry", () => { }); expect(result.ok).toBe(false); + expect(result.durationMs).toBeGreaterThanOrEqual(0); expect(result.detail).toContain("exit code 1"); expect(runtime.error).toHaveBeenCalled(); }); diff --git a/src/agents/sandbox/compute/registry.ts b/src/agents/sandbox/compute/registry.ts index 7b1c9a11..8ff3dc97 100644 --- a/src/agents/sandbox/compute/registry.ts +++ b/src/agents/sandbox/compute/registry.ts @@ -45,7 +45,9 @@ function resolveRuntime(runtime: RuntimeEnv | undefined): RuntimeEnv { return runtime ?? defaultRuntime; } -function formatHostedRuntimeAccess(target: HostedSandboxProvisionResult["runtime"]["access"]): string { +function formatHostedRuntimeAccess( + target: HostedSandboxProvisionResult["runtime"]["access"], +): string { return target.sshTarget ?? target.httpsBaseUrl ?? "n/a"; } diff --git a/src/agents/sandbox/config.ts b/src/agents/sandbox/config.ts index 01a2bab7..ebbfb689 100644 --- a/src/agents/sandbox/config.ts +++ b/src/agents/sandbox/config.ts @@ -212,14 +212,18 @@ function resolveSandboxComputeHostedProviderConfig(params: { const strictHostKeyChecking = agentHosted?.strictHostKeyChecking ?? globalHosted?.strictHostKeyChecking; const updateHostKeys = agentHosted?.updateHostKeys ?? globalHosted?.updateHostKeys; - const identityFile = normalizeOptionalString(agentHosted?.identityFile ?? globalHosted?.identityFile); + const identityFile = normalizeOptionalString( + agentHosted?.identityFile ?? globalHosted?.identityFile, + ); const certificateFile = normalizeOptionalString( agentHosted?.certificateFile ?? globalHosted?.certificateFile, ); const knownHostsFile = normalizeOptionalString( agentHosted?.knownHostsFile ?? globalHosted?.knownHostsFile, ); - const identityData = normalizeSecretInputString(agentHosted?.identityData ?? globalHosted?.identityData); + const identityData = normalizeSecretInputString( + agentHosted?.identityData ?? globalHosted?.identityData, + ); const certificateData = normalizeSecretInputString( agentHosted?.certificateData ?? globalHosted?.certificateData, ); @@ -250,8 +254,7 @@ export function resolveSandboxComputeConfig(params: { const agentCompute = params.scope === "shared" ? undefined : params.agentCompute; const globalCompute = params.globalCompute; return { - provider: - agentCompute?.provider ?? globalCompute?.provider ?? DEFAULT_SANDBOX_COMPUTE_PROVIDER, + provider: agentCompute?.provider ?? globalCompute?.provider ?? DEFAULT_SANDBOX_COMPUTE_PROVIDER, fallbackToLocalOnHostedFailure: agentCompute?.fallbackToLocalOnHostedFailure ?? globalCompute?.fallbackToLocalOnHostedFailure ?? @@ -281,7 +284,7 @@ function resolveSandboxBackendFromCompute(params: { if (configuredBackend) { return configuredBackend; } - return params.provider === "local" ? "docker" : "ssh"; + return params.provider === "local" ? "docker" : "openshell"; } function resolveHostedComputeProviderSshOverride( @@ -379,21 +382,26 @@ export function resolveSandboxConfigForAgent( globalCompute: agent?.compute, agentCompute: agentSandbox?.compute, }); - const ssh = mergeSandboxSshConfigWithHostedOverride( - resolveSandboxSshConfig({ - scope, - globalSsh: agent?.ssh, - agentSsh: agentSandbox?.ssh, - }), - resolveHostedComputeProviderSshOverride(compute), - ); + const backend = resolveSandboxBackendFromCompute({ + provider: compute.provider, + configuredBackend: agentSandbox?.backend ?? agent?.backend, + }); + const sshBase = resolveSandboxSshConfig({ + scope, + globalSsh: agent?.ssh, + agentSsh: agentSandbox?.ssh, + }); + const ssh = + backend === "ssh" + ? mergeSandboxSshConfigWithHostedOverride( + sshBase, + resolveHostedComputeProviderSshOverride(compute), + ) + : sshBase; return { mode: agentSandbox?.mode ?? agent?.mode ?? "off", - backend: resolveSandboxBackendFromCompute({ - provider: compute.provider, - configuredBackend: agentSandbox?.backend ?? agent?.backend, - }), + backend, scope, workspaceAccess: agentSandbox?.workspaceAccess ?? agent?.workspaceAccess ?? "none", workspaceRoot: diff --git a/src/agents/sandbox/context.compute-fallback.test.ts b/src/agents/sandbox/context.compute-fallback.test.ts index 8b326c45..084023fc 100644 --- a/src/agents/sandbox/context.compute-fallback.test.ts +++ b/src/agents/sandbox/context.compute-fallback.test.ts @@ -31,10 +31,13 @@ function createStaticBackend( describe("sandbox compute fallback routing", () => { it("falls back to local backend when hosted provider fails and fallback is enabled", async () => { - const restoreHosted = registerSandboxBackend("ssh", async () => { + const restoreHosted = registerSandboxBackend("openshell", async () => { throw new Error("hosted backend failed"); }); - const restoreDocker = registerSandboxBackend("docker", createStaticBackend("docker", "local-ok")); + const restoreDocker = registerSandboxBackend( + "docker", + createStaticBackend("docker", "local-ok"), + ); try { const cfg: OpenClawConfig = { agents: { @@ -46,9 +49,6 @@ describe("sandbox compute fallback routing", () => { compute: { provider: "eigencloud", fallbackToLocalOnHostedFailure: true, - hosted: { - eigencloud: { target: "ubuntu@hosted-target:22" }, - }, }, }, }, @@ -81,7 +81,7 @@ describe("sandbox compute fallback routing", () => { }); it("returns hosted failure when fallback is disabled", async () => { - const restoreHosted = registerSandboxBackend("ssh", async () => { + const restoreHosted = registerSandboxBackend("openshell", async () => { throw new Error("hosted backend failed"); }); try { @@ -95,9 +95,6 @@ describe("sandbox compute fallback routing", () => { compute: { provider: "aws", fallbackToLocalOnHostedFailure: false, - hosted: { - aws: { target: "ec2-user@hosted-target:22" }, - }, }, }, }, @@ -118,10 +115,13 @@ describe("sandbox compute fallback routing", () => { it("falls back to local backend when hosted healthcheck fails and fallback is enabled", async () => { const restoreHosted = registerSandboxBackend( - "ssh", - createStaticBackend("ssh", "hosted-runtime", { healthcheckCode: 1 }), + "openshell", + createStaticBackend("openshell", "hosted-runtime", { healthcheckCode: 1 }), + ); + const restoreDocker = registerSandboxBackend( + "docker", + createStaticBackend("docker", "local-ok"), ); - const restoreDocker = registerSandboxBackend("docker", createStaticBackend("docker", "local-ok")); try { const cfg: OpenClawConfig = { agents: { @@ -133,9 +133,6 @@ describe("sandbox compute fallback routing", () => { compute: { provider: "digitalocean", fallbackToLocalOnHostedFailure: true, - hosted: { - digitalocean: { target: "root@hosted-target:22" }, - }, }, }, }, @@ -160,8 +157,8 @@ describe("sandbox compute fallback routing", () => { it("returns healthcheck failure when fallback is disabled", async () => { const restoreHosted = registerSandboxBackend( - "ssh", - createStaticBackend("ssh", "hosted-runtime", { healthcheckCode: 1 }), + "openshell", + createStaticBackend("openshell", "hosted-runtime", { healthcheckCode: 1 }), ); try { const cfg: OpenClawConfig = { @@ -174,9 +171,6 @@ describe("sandbox compute fallback routing", () => { compute: { provider: "digitalocean", fallbackToLocalOnHostedFailure: false, - hosted: { - digitalocean: { target: "root@hosted-target:22" }, - }, }, }, }, @@ -196,7 +190,10 @@ describe("sandbox compute fallback routing", () => { }); it("preserves hosted runtime metadata when hosted provisioning succeeds", async () => { - const restoreHosted = registerSandboxBackend("ssh", createStaticBackend("ssh", "hosted-ok")); + const restoreHosted = registerSandboxBackend( + "openshell", + createStaticBackend("openshell", "hosted-ok"), + ); try { const cfg: OpenClawConfig = { agents: { @@ -208,9 +205,6 @@ describe("sandbox compute fallback routing", () => { compute: { provider: "eigencloud", fallbackToLocalOnHostedFailure: true, - hosted: { - eigencloud: { target: "ubuntu@hosted-target:22" }, - }, }, }, }, @@ -223,14 +217,12 @@ describe("sandbox compute fallback routing", () => { workspaceDir: "/tmp/openclaw-test", }); - expect(result?.backendId).toBe("ssh"); + expect(result?.backendId).toBe("openshell"); expect(result?.runtimeId).toBe("hosted-ok"); expect(result?.compute).toEqual({ providerId: "eigencloud", runtimeKind: "hosted-attested-app", - access: { - sshTarget: "ubuntu@hosted-target:22", - }, + access: {}, capabilities: { sshAccess: true, httpsAccess: false, @@ -239,7 +231,7 @@ describe("sandbox compute fallback routing", () => { }, evidence: { summary: - "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", + "Managed via OpenShell on EigenCloud; attestation verification is not exposed through the current sandbox contract yet.", }, }); } finally { diff --git a/src/agents/sandbox/context.ts b/src/agents/sandbox/context.ts index 3614a44c..bd2e3513 100644 --- a/src/agents/sandbox/context.ts +++ b/src/agents/sandbox/context.ts @@ -9,18 +9,18 @@ import { syncSkillsToWorkspace } from "../skills.js"; import { DEFAULT_AGENT_WORKSPACE_DIR } from "../workspace.js"; import { requireSandboxBackendFactory } from "./backend.js"; import { ensureSandboxBrowser } from "./browser.js"; -import { resolveSandboxConfigForAgent } from "./config.js"; -import { createSandboxFsBridge } from "./fs-bridge.js"; -import { maybePruneSandboxes } from "./prune.js"; -import { updateRegistry } from "./registry.js"; -import { resolveSandboxRuntimeStatus } from "./runtime-status.js"; -import { resolveSandboxScopeKey, resolveSandboxWorkspaceDir } from "./shared.js"; import { healthcheckHostedSandboxCompute, isHostedSandboxComputeProviderId, provisionHostedSandboxCompute, } from "./compute/registry.js"; import type { HostedSandboxComputeRuntimeInfo } from "./compute/types.js"; +import { resolveSandboxConfigForAgent } from "./config.js"; +import { createSandboxFsBridge } from "./fs-bridge.js"; +import { maybePruneSandboxes } from "./prune.js"; +import { updateRegistry } from "./registry.js"; +import { resolveSandboxRuntimeStatus } from "./runtime-status.js"; +import { resolveSandboxScopeKey, resolveSandboxWorkspaceDir } from "./shared.js"; import type { SandboxConfig, SandboxComputeRuntimeInfo, @@ -155,11 +155,9 @@ function resolveSandboxComputeRuntimeInfo(params: { return { providerId, runtimeKind: providerId === "eigencloud" ? "hosted-attested-app" : "hosted-vm", - access: { - sshTarget: params.cfg.ssh.target, - }, + access: params.cfg.backend === "ssh" ? { sshTarget: params.cfg.ssh.target } : {}, capabilities: { - sshAccess: params.cfg.backend === "ssh", + sshAccess: params.cfg.backend === "ssh" || params.cfg.backend === "openshell", httpsAccess: false, supportsAttestation: false, supportsSecretRelease: false, @@ -168,7 +166,9 @@ function resolveSandboxComputeRuntimeInfo(params: { providerId === "eigencloud" ? { summary: - "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", + params.cfg.backend === "openshell" + ? "Managed via OpenShell on EigenCloud; attestation verification is not exposed through the current sandbox contract yet." + : "Phase-0 SSH scaffold; native EigenCloud attestation and secret-release hooks are not wired yet.", } : undefined, }; @@ -230,7 +230,9 @@ async function resolveSandboxContextWithConfig(params: { const ensured = await ensureBrowserControlAuth({ cfg: cfgForAuth }); browserAuth = ensured.auth; } catch (error) { - defaultRuntime.error?.(`Sandbox browser auth ensure failed: ${formatSandboxError(error)}`); + defaultRuntime.error?.( + `Sandbox browser auth ensure failed: ${formatSandboxError(error)}`, + ); } return browserAuth; })() @@ -338,7 +340,7 @@ export async function resolveSandboxContext(params: { throw hostedError; } defaultRuntime.log?.( - `Sandbox compute provider "${computeProvider}" failed; retrying with local backend.`, + `Sandbox compute provider "${computeProvider}" failed; retrying with local backend. detail=${formatSandboxError(hostedError)}`, ); const fallbackCfg: SandboxConfig = { ...cfg, @@ -370,6 +372,7 @@ export async function resolveSandboxContext(params: { `Hosted error: ${formatSandboxError(hostedError)}`, `Local fallback error: ${formatSandboxError(fallbackError)}`, ].join("\n"), + { cause: fallbackError }, ); } } diff --git a/src/canvas-host/a2ui/a2ui.bundle.js b/src/canvas-host/a2ui/a2ui.bundle.js index 4193fb64..84abe173 100644 --- a/src/canvas-host/a2ui/a2ui.bundle.js +++ b/src/canvas-host/a2ui/a2ui.bundle.js @@ -1,849 +1,1205 @@ var __defProp$1 = Object.defineProperty; var __exportAll = (all, no_symbols) => { - let target = {}; - for (var name in all) __defProp$1(target, name, { - get: all[name], - enumerable: true - }); - if (!no_symbols) __defProp$1(target, Symbol.toStringTag, { value: "Module" }); - return target; + let target = {}; + for (var name in all) + __defProp$1(target, name, { + get: all[name], + enumerable: true, + }); + if (!no_symbols) __defProp$1(target, Symbol.toStringTag, { value: "Module" }); + return target; }; /** -* @license -* Copyright 2019 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ -const t$6 = globalThis, e$13 = t$6.ShadowRoot && (void 0 === t$6.ShadyCSS || t$6.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, s$8 = Symbol(), o$14 = /* @__PURE__ */ new WeakMap(); + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ +const t$6 = globalThis, + e$13 = + t$6.ShadowRoot && + (void 0 === t$6.ShadyCSS || t$6.ShadyCSS.nativeShadow) && + "adoptedStyleSheets" in Document.prototype && + "replace" in CSSStyleSheet.prototype, + s$8 = Symbol(), + o$14 = /* @__PURE__ */ new WeakMap(); var n$12 = class { - constructor(t, e, o) { - if (this._$cssResult$ = !0, o !== s$8) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead."); - this.cssText = t, this.t = e; - } - get styleSheet() { - let t = this.o; - const s = this.t; - if (e$13 && void 0 === t) { - const e = void 0 !== s && 1 === s.length; - e && (t = o$14.get(s)), void 0 === t && ((this.o = t = new CSSStyleSheet()).replaceSync(this.cssText), e && o$14.set(s, t)); - } - return t; - } - toString() { - return this.cssText; - } -}; -const r$11 = (t) => new n$12("string" == typeof t ? t : t + "", void 0, s$8), i$9 = (t, ...e) => { - return new n$12(1 === t.length ? t[0] : e.reduce((e, s, o) => e + ((t) => { - if (!0 === t._$cssResult$) return t.cssText; - if ("number" == typeof t) return t; - throw Error("Value passed to 'css' function must be a 'css' function result: " + t + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security."); - })(s) + t[o + 1], t[0]), t, s$8); -}, S$1 = (s, o) => { - if (e$13) s.adoptedStyleSheets = o.map((t) => t instanceof CSSStyleSheet ? t : t.styleSheet); - else for (const e of o) { - const o = document.createElement("style"), n = t$6.litNonce; - void 0 !== n && o.setAttribute("nonce", n), o.textContent = e.cssText, s.appendChild(o); - } -}, c$6 = e$13 ? (t) => t : (t) => t instanceof CSSStyleSheet ? ((t) => { - let e = ""; - for (const s of t.cssRules) e += s.cssText; - return r$11(e); -})(t) : t; + constructor(t, e, o) { + if (((this._$cssResult$ = !0), o !== s$8)) + throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead."); + ((this.cssText = t), (this.t = e)); + } + get styleSheet() { + let t = this.o; + const s = this.t; + if (e$13 && void 0 === t) { + const e = void 0 !== s && 1 === s.length; + (e && (t = o$14.get(s)), + void 0 === t && + ((this.o = t = new CSSStyleSheet()).replaceSync(this.cssText), e && o$14.set(s, t))); + } + return t; + } + toString() { + return this.cssText; + } +}; +const r$11 = (t) => new n$12("string" == typeof t ? t : t + "", void 0, s$8), + i$9 = (t, ...e) => { + return new n$12( + 1 === t.length + ? t[0] + : e.reduce( + (e, s, o) => + e + + ((t) => { + if (!0 === t._$cssResult$) return t.cssText; + if ("number" == typeof t) return t; + throw Error( + "Value passed to 'css' function must be a 'css' function result: " + + t + + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.", + ); + })(s) + + t[o + 1], + t[0], + ), + t, + s$8, + ); + }, + S$1 = (s, o) => { + if (e$13) s.adoptedStyleSheets = o.map((t) => (t instanceof CSSStyleSheet ? t : t.styleSheet)); + else + for (const e of o) { + const o = document.createElement("style"), + n = t$6.litNonce; + (void 0 !== n && o.setAttribute("nonce", n), (o.textContent = e.cssText), s.appendChild(o)); + } + }, + c$6 = e$13 + ? (t) => t + : (t) => + t instanceof CSSStyleSheet + ? ((t) => { + let e = ""; + for (const s of t.cssRules) e += s.cssText; + return r$11(e); + })(t) + : t; /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ const { is: i$8, defineProperty: e$12, getOwnPropertyDescriptor: h$6, getOwnPropertyNames: r$10, getOwnPropertySymbols: o$13, getPrototypeOf: n$11 } = Object, a$1 = globalThis, c$5 = a$1.trustedTypes, l$4 = c$5 ? c$5.emptyScript : "", p$2 = a$1.reactiveElementPolyfillSupport, d$2 = (t, s) => t, u$3 = { - toAttribute(t, s) { - switch (s) { - case Boolean: - t = t ? l$4 : null; - break; - case Object: - case Array: t = null == t ? t : JSON.stringify(t); - } - return t; - }, - fromAttribute(t, s) { - let i = t; - switch (s) { - case Boolean: - i = null !== t; - break; - case Number: - i = null === t ? null : Number(t); - break; - case Object: - case Array: try { - i = JSON.parse(t); - } catch (t) { - i = null; - } - } - return i; - } -}, f$3 = (t, s) => !i$8(t, s), b$1 = { - attribute: !0, - type: String, - converter: u$3, - reflect: !1, - useDefault: !1, - hasChanged: f$3 -}; -Symbol.metadata ??= Symbol("metadata"), a$1.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap(); + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const { + is: i$8, + defineProperty: e$12, + getOwnPropertyDescriptor: h$6, + getOwnPropertyNames: r$10, + getOwnPropertySymbols: o$13, + getPrototypeOf: n$11, + } = Object, + a$1 = globalThis, + c$5 = a$1.trustedTypes, + l$4 = c$5 ? c$5.emptyScript : "", + p$2 = a$1.reactiveElementPolyfillSupport, + d$2 = (t, s) => t, + u$3 = { + toAttribute(t, s) { + switch (s) { + case Boolean: + t = t ? l$4 : null; + break; + case Object: + case Array: + t = null == t ? t : JSON.stringify(t); + } + return t; + }, + fromAttribute(t, s) { + let i = t; + switch (s) { + case Boolean: + i = null !== t; + break; + case Number: + i = null === t ? null : Number(t); + break; + case Object: + case Array: + try { + i = JSON.parse(t); + } catch (t) { + i = null; + } + } + return i; + }, + }, + f$3 = (t, s) => !i$8(t, s), + b$1 = { + attribute: !0, + type: String, + converter: u$3, + reflect: !1, + useDefault: !1, + hasChanged: f$3, + }; +((Symbol.metadata ??= Symbol("metadata")), + (a$1.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap())); var y$1 = class extends HTMLElement { - static addInitializer(t) { - this._$Ei(), (this.l ??= []).push(t); - } - static get observedAttributes() { - return this.finalize(), this._$Eh && [...this._$Eh.keys()]; - } - static createProperty(t, s = b$1) { - if (s.state && (s.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(t) && ((s = Object.create(s)).wrapped = !0), this.elementProperties.set(t, s), !s.noAccessor) { - const i = Symbol(), h = this.getPropertyDescriptor(t, i, s); - void 0 !== h && e$12(this.prototype, t, h); - } - } - static getPropertyDescriptor(t, s, i) { - const { get: e, set: r } = h$6(this.prototype, t) ?? { - get() { - return this[s]; - }, - set(t) { - this[s] = t; - } - }; - return { - get: e, - set(s) { - const h = e?.call(this); - r?.call(this, s), this.requestUpdate(t, h, i); - }, - configurable: !0, - enumerable: !0 - }; - } - static getPropertyOptions(t) { - return this.elementProperties.get(t) ?? b$1; - } - static _$Ei() { - if (this.hasOwnProperty(d$2("elementProperties"))) return; - const t = n$11(this); - t.finalize(), void 0 !== t.l && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties); - } - static finalize() { - if (this.hasOwnProperty(d$2("finalized"))) return; - if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(d$2("properties"))) { - const t = this.properties, s = [...r$10(t), ...o$13(t)]; - for (const i of s) this.createProperty(i, t[i]); - } - const t = this[Symbol.metadata]; - if (null !== t) { - const s = litPropertyMetadata.get(t); - if (void 0 !== s) for (const [t, i] of s) this.elementProperties.set(t, i); - } - this._$Eh = /* @__PURE__ */ new Map(); - for (const [t, s] of this.elementProperties) { - const i = this._$Eu(t, s); - void 0 !== i && this._$Eh.set(i, t); - } - this.elementStyles = this.finalizeStyles(this.styles); - } - static finalizeStyles(s) { - const i = []; - if (Array.isArray(s)) { - const e = new Set(s.flat(Infinity).reverse()); - for (const s of e) i.unshift(c$6(s)); - } else void 0 !== s && i.push(c$6(s)); - return i; - } - static _$Eu(t, s) { - const i = s.attribute; - return !1 === i ? void 0 : "string" == typeof i ? i : "string" == typeof t ? t.toLowerCase() : void 0; - } - constructor() { - super(), this._$Ep = void 0, this.isUpdatePending = !1, this.hasUpdated = !1, this._$Em = null, this._$Ev(); - } - _$Ev() { - this._$ES = new Promise((t) => this.enableUpdating = t), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach((t) => t(this)); - } - addController(t) { - (this._$EO ??= /* @__PURE__ */ new Set()).add(t), void 0 !== this.renderRoot && this.isConnected && t.hostConnected?.(); - } - removeController(t) { - this._$EO?.delete(t); - } - _$E_() { - const t = /* @__PURE__ */ new Map(), s = this.constructor.elementProperties; - for (const i of s.keys()) this.hasOwnProperty(i) && (t.set(i, this[i]), delete this[i]); - t.size > 0 && (this._$Ep = t); - } - createRenderRoot() { - const t = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions); - return S$1(t, this.constructor.elementStyles), t; - } - connectedCallback() { - this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(!0), this._$EO?.forEach((t) => t.hostConnected?.()); - } - enableUpdating(t) {} - disconnectedCallback() { - this._$EO?.forEach((t) => t.hostDisconnected?.()); - } - attributeChangedCallback(t, s, i) { - this._$AK(t, i); - } - _$ET(t, s) { - const i = this.constructor.elementProperties.get(t), e = this.constructor._$Eu(t, i); - if (void 0 !== e && !0 === i.reflect) { - const h = (void 0 !== i.converter?.toAttribute ? i.converter : u$3).toAttribute(s, i.type); - this._$Em = t, null == h ? this.removeAttribute(e) : this.setAttribute(e, h), this._$Em = null; - } - } - _$AK(t, s) { - const i = this.constructor, e = i._$Eh.get(t); - if (void 0 !== e && this._$Em !== e) { - const t = i.getPropertyOptions(e), h = "function" == typeof t.converter ? { fromAttribute: t.converter } : void 0 !== t.converter?.fromAttribute ? t.converter : u$3; - this._$Em = e; - const r = h.fromAttribute(s, t.type); - this[e] = r ?? this._$Ej?.get(e) ?? r, this._$Em = null; - } - } - requestUpdate(t, s, i, e = !1, h) { - if (void 0 !== t) { - const r = this.constructor; - if (!1 === e && (h = this[t]), i ??= r.getPropertyOptions(t), !((i.hasChanged ?? f$3)(h, s) || i.useDefault && i.reflect && h === this._$Ej?.get(t) && !this.hasAttribute(r._$Eu(t, i)))) return; - this.C(t, s, i); - } - !1 === this.isUpdatePending && (this._$ES = this._$EP()); - } - C(t, s, { useDefault: i, reflect: e, wrapped: h }, r) { - i && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(t, r ?? s ?? this[t]), !0 !== h || void 0 !== r) || (this._$AL.has(t) || (this.hasUpdated || i || (s = void 0), this._$AL.set(t, s)), !0 === e && this._$Em !== t && (this._$Eq ??= /* @__PURE__ */ new Set()).add(t)); - } - async _$EP() { - this.isUpdatePending = !0; - try { - await this._$ES; - } catch (t) { - Promise.reject(t); - } - const t = this.scheduleUpdate(); - return null != t && await t, !this.isUpdatePending; - } - scheduleUpdate() { - return this.performUpdate(); - } - performUpdate() { - if (!this.isUpdatePending) return; - if (!this.hasUpdated) { - if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) { - for (const [t, s] of this._$Ep) this[t] = s; - this._$Ep = void 0; - } - const t = this.constructor.elementProperties; - if (t.size > 0) for (const [s, i] of t) { - const { wrapped: t } = i, e = this[s]; - !0 !== t || this._$AL.has(s) || void 0 === e || this.C(s, void 0, i, e); - } - } - let t = !1; - const s = this._$AL; - try { - t = this.shouldUpdate(s), t ? (this.willUpdate(s), this._$EO?.forEach((t) => t.hostUpdate?.()), this.update(s)) : this._$EM(); - } catch (s) { - throw t = !1, this._$EM(), s; - } - t && this._$AE(s); - } - willUpdate(t) {} - _$AE(t) { - this._$EO?.forEach((t) => t.hostUpdated?.()), this.hasUpdated || (this.hasUpdated = !0, this.firstUpdated(t)), this.updated(t); - } - _$EM() { - this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = !1; - } - get updateComplete() { - return this.getUpdateComplete(); - } - getUpdateComplete() { - return this._$ES; - } - shouldUpdate(t) { - return !0; - } - update(t) { - this._$Eq &&= this._$Eq.forEach((t) => this._$ET(t, this[t])), this._$EM(); - } - updated(t) {} - firstUpdated(t) {} -}; -y$1.elementStyles = [], y$1.shadowRootOptions = { mode: "open" }, y$1[d$2("elementProperties")] = /* @__PURE__ */ new Map(), y$1[d$2("finalized")] = /* @__PURE__ */ new Map(), p$2?.({ ReactiveElement: y$1 }), (a$1.reactiveElementVersions ??= []).push("2.1.2"); + static addInitializer(t) { + (this._$Ei(), (this.l ??= []).push(t)); + } + static get observedAttributes() { + return (this.finalize(), this._$Eh && [...this._$Eh.keys()]); + } + static createProperty(t, s = b$1) { + if ( + (s.state && (s.attribute = !1), + this._$Ei(), + this.prototype.hasOwnProperty(t) && ((s = Object.create(s)).wrapped = !0), + this.elementProperties.set(t, s), + !s.noAccessor) + ) { + const i = Symbol(), + h = this.getPropertyDescriptor(t, i, s); + void 0 !== h && e$12(this.prototype, t, h); + } + } + static getPropertyDescriptor(t, s, i) { + const { get: e, set: r } = h$6(this.prototype, t) ?? { + get() { + return this[s]; + }, + set(t) { + this[s] = t; + }, + }; + return { + get: e, + set(s) { + const h = e?.call(this); + (r?.call(this, s), this.requestUpdate(t, h, i)); + }, + configurable: !0, + enumerable: !0, + }; + } + static getPropertyOptions(t) { + return this.elementProperties.get(t) ?? b$1; + } + static _$Ei() { + if (this.hasOwnProperty(d$2("elementProperties"))) return; + const t = n$11(this); + (t.finalize(), + void 0 !== t.l && (this.l = [...t.l]), + (this.elementProperties = new Map(t.elementProperties))); + } + static finalize() { + if (this.hasOwnProperty(d$2("finalized"))) return; + if (((this.finalized = !0), this._$Ei(), this.hasOwnProperty(d$2("properties")))) { + const t = this.properties, + s = [...r$10(t), ...o$13(t)]; + for (const i of s) this.createProperty(i, t[i]); + } + const t = this[Symbol.metadata]; + if (null !== t) { + const s = litPropertyMetadata.get(t); + if (void 0 !== s) for (const [t, i] of s) this.elementProperties.set(t, i); + } + this._$Eh = /* @__PURE__ */ new Map(); + for (const [t, s] of this.elementProperties) { + const i = this._$Eu(t, s); + void 0 !== i && this._$Eh.set(i, t); + } + this.elementStyles = this.finalizeStyles(this.styles); + } + static finalizeStyles(s) { + const i = []; + if (Array.isArray(s)) { + const e = new Set(s.flat(Infinity).reverse()); + for (const s of e) i.unshift(c$6(s)); + } else void 0 !== s && i.push(c$6(s)); + return i; + } + static _$Eu(t, s) { + const i = s.attribute; + return !1 === i + ? void 0 + : "string" == typeof i + ? i + : "string" == typeof t + ? t.toLowerCase() + : void 0; + } + constructor() { + (super(), + (this._$Ep = void 0), + (this.isUpdatePending = !1), + (this.hasUpdated = !1), + (this._$Em = null), + this._$Ev()); + } + _$Ev() { + ((this._$ES = new Promise((t) => (this.enableUpdating = t))), + (this._$AL = /* @__PURE__ */ new Map()), + this._$E_(), + this.requestUpdate(), + this.constructor.l?.forEach((t) => t(this))); + } + addController(t) { + ((this._$EO ??= /* @__PURE__ */ new Set()).add(t), + void 0 !== this.renderRoot && this.isConnected && t.hostConnected?.()); + } + removeController(t) { + this._$EO?.delete(t); + } + _$E_() { + const t = /* @__PURE__ */ new Map(), + s = this.constructor.elementProperties; + for (const i of s.keys()) this.hasOwnProperty(i) && (t.set(i, this[i]), delete this[i]); + t.size > 0 && (this._$Ep = t); + } + createRenderRoot() { + const t = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions); + return (S$1(t, this.constructor.elementStyles), t); + } + connectedCallback() { + ((this.renderRoot ??= this.createRenderRoot()), + this.enableUpdating(!0), + this._$EO?.forEach((t) => t.hostConnected?.())); + } + enableUpdating(t) {} + disconnectedCallback() { + this._$EO?.forEach((t) => t.hostDisconnected?.()); + } + attributeChangedCallback(t, s, i) { + this._$AK(t, i); + } + _$ET(t, s) { + const i = this.constructor.elementProperties.get(t), + e = this.constructor._$Eu(t, i); + if (void 0 !== e && !0 === i.reflect) { + const h = (void 0 !== i.converter?.toAttribute ? i.converter : u$3).toAttribute(s, i.type); + ((this._$Em = t), + null == h ? this.removeAttribute(e) : this.setAttribute(e, h), + (this._$Em = null)); + } + } + _$AK(t, s) { + const i = this.constructor, + e = i._$Eh.get(t); + if (void 0 !== e && this._$Em !== e) { + const t = i.getPropertyOptions(e), + h = + "function" == typeof t.converter + ? { fromAttribute: t.converter } + : void 0 !== t.converter?.fromAttribute + ? t.converter + : u$3; + this._$Em = e; + const r = h.fromAttribute(s, t.type); + ((this[e] = r ?? this._$Ej?.get(e) ?? r), (this._$Em = null)); + } + } + requestUpdate(t, s, i, e = !1, h) { + if (void 0 !== t) { + const r = this.constructor; + if ( + (!1 === e && (h = this[t]), + (i ??= r.getPropertyOptions(t)), + !( + (i.hasChanged ?? f$3)(h, s) || + (i.useDefault && i.reflect && h === this._$Ej?.get(t) && !this.hasAttribute(r._$Eu(t, i))) + )) + ) + return; + this.C(t, s, i); + } + !1 === this.isUpdatePending && (this._$ES = this._$EP()); + } + C(t, s, { useDefault: i, reflect: e, wrapped: h }, r) { + (i && + !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && + (this._$Ej.set(t, r ?? s ?? this[t]), !0 !== h || void 0 !== r)) || + (this._$AL.has(t) || (this.hasUpdated || i || (s = void 0), this._$AL.set(t, s)), + !0 === e && this._$Em !== t && (this._$Eq ??= /* @__PURE__ */ new Set()).add(t)); + } + async _$EP() { + this.isUpdatePending = !0; + try { + await this._$ES; + } catch (t) { + Promise.reject(t); + } + const t = this.scheduleUpdate(); + return (null != t && (await t), !this.isUpdatePending); + } + scheduleUpdate() { + return this.performUpdate(); + } + performUpdate() { + if (!this.isUpdatePending) return; + if (!this.hasUpdated) { + if (((this.renderRoot ??= this.createRenderRoot()), this._$Ep)) { + for (const [t, s] of this._$Ep) this[t] = s; + this._$Ep = void 0; + } + const t = this.constructor.elementProperties; + if (t.size > 0) + for (const [s, i] of t) { + const { wrapped: t } = i, + e = this[s]; + !0 !== t || this._$AL.has(s) || void 0 === e || this.C(s, void 0, i, e); + } + } + let t = !1; + const s = this._$AL; + try { + ((t = this.shouldUpdate(s)), + t + ? (this.willUpdate(s), this._$EO?.forEach((t) => t.hostUpdate?.()), this.update(s)) + : this._$EM()); + } catch (s) { + throw ((t = !1), this._$EM(), s); + } + t && this._$AE(s); + } + willUpdate(t) {} + _$AE(t) { + (this._$EO?.forEach((t) => t.hostUpdated?.()), + this.hasUpdated || ((this.hasUpdated = !0), this.firstUpdated(t)), + this.updated(t)); + } + _$EM() { + ((this._$AL = /* @__PURE__ */ new Map()), (this.isUpdatePending = !1)); + } + get updateComplete() { + return this.getUpdateComplete(); + } + getUpdateComplete() { + return this._$ES; + } + shouldUpdate(t) { + return !0; + } + update(t) { + ((this._$Eq &&= this._$Eq.forEach((t) => this._$ET(t, this[t]))), this._$EM()); + } + updated(t) {} + firstUpdated(t) {} +}; +((y$1.elementStyles = []), + (y$1.shadowRootOptions = { mode: "open" }), + (y$1[d$2("elementProperties")] = /* @__PURE__ */ new Map()), + (y$1[d$2("finalized")] = /* @__PURE__ */ new Map()), + p$2?.({ ReactiveElement: y$1 }), + (a$1.reactiveElementVersions ??= []).push("2.1.2")); /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ -const t$5 = globalThis, i$7 = (t) => t, s$7 = t$5.trustedTypes, e$11 = s$7 ? s$7.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, h$5 = "$lit$", o$12 = `lit$${Math.random().toFixed(9).slice(2)}$`, n$10 = "?" + o$12, r$9 = `<${n$10}>`, l$3 = document, c$4 = () => l$3.createComment(""), a = (t) => null === t || "object" != typeof t && "function" != typeof t, u$2 = Array.isArray, d$1 = (t) => u$2(t) || "function" == typeof t?.[Symbol.iterator], f$2 = "[ \n\f\r]", v$1 = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, _ = /-->/g, m$2 = />/g, p$1 = RegExp(`>|${f$2}(?:([^\\s"'>=/]+)(${f$2}*=${f$2}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"), g = /'/g, $ = /"/g, y = /^(?:script|style|textarea|title)$/i, x = (t) => (i, ...s) => ({ - _$litType$: t, - strings: i, - values: s -}), b = x(1), w = x(2); + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ +const t$5 = globalThis, + i$7 = (t) => t, + s$7 = t$5.trustedTypes, + e$11 = s$7 ? s$7.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, + h$5 = "$lit$", + o$12 = `lit$${Math.random().toFixed(9).slice(2)}$`, + n$10 = "?" + o$12, + r$9 = `<${n$10}>`, + l$3 = document, + c$4 = () => l$3.createComment(""), + a = (t) => null === t || ("object" != typeof t && "function" != typeof t), + u$2 = Array.isArray, + d$1 = (t) => u$2(t) || "function" == typeof t?.[Symbol.iterator], + f$2 = "[ \n\f\r]", + v$1 = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, + _ = /-->/g, + m$2 = />/g, + p$1 = RegExp(`>|${f$2}(?:([^\\s"'>=/]+)(${f$2}*=${f$2}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"), + g = /'/g, + $ = /"/g, + y = /^(?:script|style|textarea|title)$/i, + x = + (t) => + (i, ...s) => ({ + _$litType$: t, + strings: i, + values: s, + }), + b = x(1), + w = x(2); x(3); -const E = Symbol.for("lit-noChange"), A = Symbol.for("lit-nothing"), C = /* @__PURE__ */ new WeakMap(), P = l$3.createTreeWalker(l$3, 129); +const E = Symbol.for("lit-noChange"), + A = Symbol.for("lit-nothing"), + C = /* @__PURE__ */ new WeakMap(), + P = l$3.createTreeWalker(l$3, 129); function V(t, i) { - if (!u$2(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array"); - return void 0 !== e$11 ? e$11.createHTML(i) : i; + if (!u$2(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array"); + return void 0 !== e$11 ? e$11.createHTML(i) : i; } const N = (t, i) => { - const s = t.length - 1, e = []; - let n, l = 2 === i ? "" : 3 === i ? "" : "", c = v$1; - for (let i = 0; i < s; i++) { - const s = t[i]; - let a, u, d = -1, f = 0; - for (; f < s.length && (c.lastIndex = f, u = c.exec(s), null !== u);) f = c.lastIndex, c === v$1 ? "!--" === u[1] ? c = _ : void 0 !== u[1] ? c = m$2 : void 0 !== u[2] ? (y.test(u[2]) && (n = RegExp("" === u[0] ? (c = n ?? v$1, d = -1) : void 0 === u[1] ? d = -2 : (d = c.lastIndex - u[2].length, a = u[1], c = void 0 === u[3] ? p$1 : "\"" === u[3] ? $ : g) : c === $ || c === g ? c = p$1 : c === _ || c === m$2 ? c = v$1 : (c = p$1, n = void 0); - const x = c === p$1 && t[i + 1].startsWith("/>") ? " " : ""; - l += c === v$1 ? s + r$9 : d >= 0 ? (e.push(a), s.slice(0, d) + h$5 + s.slice(d) + o$12 + x) : s + o$12 + (-2 === d ? i : x); - } - return [V(t, l + (t[s] || "") + (2 === i ? "" : 3 === i ? "" : "")), e]; + const s = t.length - 1, + e = []; + let n, + l = 2 === i ? "" : 3 === i ? "" : "", + c = v$1; + for (let i = 0; i < s; i++) { + const s = t[i]; + let a, + u, + d = -1, + f = 0; + for (; f < s.length && ((c.lastIndex = f), (u = c.exec(s)), null !== u); ) + ((f = c.lastIndex), + c === v$1 + ? "!--" === u[1] + ? (c = _) + : void 0 !== u[1] + ? (c = m$2) + : void 0 !== u[2] + ? (y.test(u[2]) && (n = RegExp("" === u[0] + ? ((c = n ?? v$1), (d = -1)) + : void 0 === u[1] + ? (d = -2) + : ((d = c.lastIndex - u[2].length), + (a = u[1]), + (c = void 0 === u[3] ? p$1 : '"' === u[3] ? $ : g)) + : c === $ || c === g + ? (c = p$1) + : c === _ || c === m$2 + ? (c = v$1) + : ((c = p$1), (n = void 0))); + const x = c === p$1 && t[i + 1].startsWith("/>") ? " " : ""; + l += + c === v$1 + ? s + r$9 + : d >= 0 + ? (e.push(a), s.slice(0, d) + h$5 + s.slice(d) + o$12 + x) + : s + o$12 + (-2 === d ? i : x); + } + return [V(t, l + (t[s] || "") + (2 === i ? "" : 3 === i ? "" : "")), e]; }; var S = class S { - constructor({ strings: t, _$litType$: i }, e) { - let r; - this.parts = []; - let l = 0, a = 0; - const u = t.length - 1, d = this.parts, [f, v] = N(t, i); - if (this.el = S.createElement(f, e), P.currentNode = this.el.content, 2 === i || 3 === i) { - const t = this.el.content.firstChild; - t.replaceWith(...t.childNodes); - } - for (; null !== (r = P.nextNode()) && d.length < u;) { - if (1 === r.nodeType) { - if (r.hasAttributes()) for (const t of r.getAttributeNames()) if (t.endsWith(h$5)) { - const i = v[a++], s = r.getAttribute(t).split(o$12), e = /([.?@])?(.*)/.exec(i); - d.push({ - type: 1, - index: l, - name: e[2], - strings: s, - ctor: "." === e[1] ? I : "?" === e[1] ? L : "@" === e[1] ? z : H - }), r.removeAttribute(t); - } else t.startsWith(o$12) && (d.push({ - type: 6, - index: l - }), r.removeAttribute(t)); - if (y.test(r.tagName)) { - const t = r.textContent.split(o$12), i = t.length - 1; - if (i > 0) { - r.textContent = s$7 ? s$7.emptyScript : ""; - for (let s = 0; s < i; s++) r.append(t[s], c$4()), P.nextNode(), d.push({ - type: 2, - index: ++l - }); - r.append(t[i], c$4()); - } - } - } else if (8 === r.nodeType) if (r.data === n$10) d.push({ - type: 2, - index: l - }); - else { - let t = -1; - for (; -1 !== (t = r.data.indexOf(o$12, t + 1));) d.push({ - type: 7, - index: l - }), t += o$12.length - 1; - } - l++; - } - } - static createElement(t, i) { - const s = l$3.createElement("template"); - return s.innerHTML = t, s; - } + constructor({ strings: t, _$litType$: i }, e) { + let r; + this.parts = []; + let l = 0, + a = 0; + const u = t.length - 1, + d = this.parts, + [f, v] = N(t, i); + if ( + ((this.el = S.createElement(f, e)), (P.currentNode = this.el.content), 2 === i || 3 === i) + ) { + const t = this.el.content.firstChild; + t.replaceWith(...t.childNodes); + } + for (; null !== (r = P.nextNode()) && d.length < u; ) { + if (1 === r.nodeType) { + if (r.hasAttributes()) + for (const t of r.getAttributeNames()) + if (t.endsWith(h$5)) { + const i = v[a++], + s = r.getAttribute(t).split(o$12), + e = /([.?@])?(.*)/.exec(i); + (d.push({ + type: 1, + index: l, + name: e[2], + strings: s, + ctor: "." === e[1] ? I : "?" === e[1] ? L : "@" === e[1] ? z : H, + }), + r.removeAttribute(t)); + } else + t.startsWith(o$12) && + (d.push({ + type: 6, + index: l, + }), + r.removeAttribute(t)); + if (y.test(r.tagName)) { + const t = r.textContent.split(o$12), + i = t.length - 1; + if (i > 0) { + r.textContent = s$7 ? s$7.emptyScript : ""; + for (let s = 0; s < i; s++) + (r.append(t[s], c$4()), + P.nextNode(), + d.push({ + type: 2, + index: ++l, + })); + r.append(t[i], c$4()); + } + } + } else if (8 === r.nodeType) + if (r.data === n$10) + d.push({ + type: 2, + index: l, + }); + else { + let t = -1; + for (; -1 !== (t = r.data.indexOf(o$12, t + 1)); ) + (d.push({ + type: 7, + index: l, + }), + (t += o$12.length - 1)); + } + l++; + } + } + static createElement(t, i) { + const s = l$3.createElement("template"); + return ((s.innerHTML = t), s); + } }; function M$1(t, i, s = t, e) { - if (i === E) return i; - let h = void 0 !== e ? s._$Co?.[e] : s._$Cl; - const o = a(i) ? void 0 : i._$litDirective$; - return h?.constructor !== o && (h?._$AO?.(!1), void 0 === o ? h = void 0 : (h = new o(t), h._$AT(t, s, e)), void 0 !== e ? (s._$Co ??= [])[e] = h : s._$Cl = h), void 0 !== h && (i = M$1(t, h._$AS(t, i.values), h, e)), i; + if (i === E) return i; + let h = void 0 !== e ? s._$Co?.[e] : s._$Cl; + const o = a(i) ? void 0 : i._$litDirective$; + return ( + h?.constructor !== o && + (h?._$AO?.(!1), + void 0 === o ? (h = void 0) : ((h = new o(t)), h._$AT(t, s, e)), + void 0 !== e ? ((s._$Co ??= [])[e] = h) : (s._$Cl = h)), + void 0 !== h && (i = M$1(t, h._$AS(t, i.values), h, e)), + i + ); } var R = class { - constructor(t, i) { - this._$AV = [], this._$AN = void 0, this._$AD = t, this._$AM = i; - } - get parentNode() { - return this._$AM.parentNode; - } - get _$AU() { - return this._$AM._$AU; - } - u(t) { - const { el: { content: i }, parts: s } = this._$AD, e = (t?.creationScope ?? l$3).importNode(i, !0); - P.currentNode = e; - let h = P.nextNode(), o = 0, n = 0, r = s[0]; - for (; void 0 !== r;) { - if (o === r.index) { - let i; - 2 === r.type ? i = new k(h, h.nextSibling, this, t) : 1 === r.type ? i = new r.ctor(h, r.name, r.strings, this, t) : 6 === r.type && (i = new Z(h, this, t)), this._$AV.push(i), r = s[++n]; - } - o !== r?.index && (h = P.nextNode(), o++); - } - return P.currentNode = l$3, e; - } - p(t) { - let i = 0; - for (const s of this._$AV) void 0 !== s && (void 0 !== s.strings ? (s._$AI(t, s, i), i += s.strings.length - 2) : s._$AI(t[i])), i++; - } + constructor(t, i) { + ((this._$AV = []), (this._$AN = void 0), (this._$AD = t), (this._$AM = i)); + } + get parentNode() { + return this._$AM.parentNode; + } + get _$AU() { + return this._$AM._$AU; + } + u(t) { + const { + el: { content: i }, + parts: s, + } = this._$AD, + e = (t?.creationScope ?? l$3).importNode(i, !0); + P.currentNode = e; + let h = P.nextNode(), + o = 0, + n = 0, + r = s[0]; + for (; void 0 !== r; ) { + if (o === r.index) { + let i; + (2 === r.type + ? (i = new k(h, h.nextSibling, this, t)) + : 1 === r.type + ? (i = new r.ctor(h, r.name, r.strings, this, t)) + : 6 === r.type && (i = new Z(h, this, t)), + this._$AV.push(i), + (r = s[++n])); + } + o !== r?.index && ((h = P.nextNode()), o++); + } + return ((P.currentNode = l$3), e); + } + p(t) { + let i = 0; + for (const s of this._$AV) + (void 0 !== s && + (void 0 !== s.strings ? (s._$AI(t, s, i), (i += s.strings.length - 2)) : s._$AI(t[i])), + i++); + } }; var k = class k { - get _$AU() { - return this._$AM?._$AU ?? this._$Cv; - } - constructor(t, i, s, e) { - this.type = 2, this._$AH = A, this._$AN = void 0, this._$AA = t, this._$AB = i, this._$AM = s, this.options = e, this._$Cv = e?.isConnected ?? !0; - } - get parentNode() { - let t = this._$AA.parentNode; - const i = this._$AM; - return void 0 !== i && 11 === t?.nodeType && (t = i.parentNode), t; - } - get startNode() { - return this._$AA; - } - get endNode() { - return this._$AB; - } - _$AI(t, i = this) { - t = M$1(this, t, i), a(t) ? t === A || null == t || "" === t ? (this._$AH !== A && this._$AR(), this._$AH = A) : t !== this._$AH && t !== E && this._(t) : void 0 !== t._$litType$ ? this.$(t) : void 0 !== t.nodeType ? this.T(t) : d$1(t) ? this.k(t) : this._(t); - } - O(t) { - return this._$AA.parentNode.insertBefore(t, this._$AB); - } - T(t) { - this._$AH !== t && (this._$AR(), this._$AH = this.O(t)); - } - _(t) { - this._$AH !== A && a(this._$AH) ? this._$AA.nextSibling.data = t : this.T(l$3.createTextNode(t)), this._$AH = t; - } - $(t) { - const { values: i, _$litType$: s } = t, e = "number" == typeof s ? this._$AC(t) : (void 0 === s.el && (s.el = S.createElement(V(s.h, s.h[0]), this.options)), s); - if (this._$AH?._$AD === e) this._$AH.p(i); - else { - const t = new R(e, this), s = t.u(this.options); - t.p(i), this.T(s), this._$AH = t; - } - } - _$AC(t) { - let i = C.get(t.strings); - return void 0 === i && C.set(t.strings, i = new S(t)), i; - } - k(t) { - u$2(this._$AH) || (this._$AH = [], this._$AR()); - const i = this._$AH; - let s, e = 0; - for (const h of t) e === i.length ? i.push(s = new k(this.O(c$4()), this.O(c$4()), this, this.options)) : s = i[e], s._$AI(h), e++; - e < i.length && (this._$AR(s && s._$AB.nextSibling, e), i.length = e); - } - _$AR(t = this._$AA.nextSibling, s) { - for (this._$AP?.(!1, !0, s); t !== this._$AB;) { - const s = i$7(t).nextSibling; - i$7(t).remove(), t = s; - } - } - setConnected(t) { - void 0 === this._$AM && (this._$Cv = t, this._$AP?.(t)); - } + get _$AU() { + return this._$AM?._$AU ?? this._$Cv; + } + constructor(t, i, s, e) { + ((this.type = 2), + (this._$AH = A), + (this._$AN = void 0), + (this._$AA = t), + (this._$AB = i), + (this._$AM = s), + (this.options = e), + (this._$Cv = e?.isConnected ?? !0)); + } + get parentNode() { + let t = this._$AA.parentNode; + const i = this._$AM; + return (void 0 !== i && 11 === t?.nodeType && (t = i.parentNode), t); + } + get startNode() { + return this._$AA; + } + get endNode() { + return this._$AB; + } + _$AI(t, i = this) { + ((t = M$1(this, t, i)), + a(t) + ? t === A || null == t || "" === t + ? (this._$AH !== A && this._$AR(), (this._$AH = A)) + : t !== this._$AH && t !== E && this._(t) + : void 0 !== t._$litType$ + ? this.$(t) + : void 0 !== t.nodeType + ? this.T(t) + : d$1(t) + ? this.k(t) + : this._(t)); + } + O(t) { + return this._$AA.parentNode.insertBefore(t, this._$AB); + } + T(t) { + this._$AH !== t && (this._$AR(), (this._$AH = this.O(t))); + } + _(t) { + (this._$AH !== A && a(this._$AH) + ? (this._$AA.nextSibling.data = t) + : this.T(l$3.createTextNode(t)), + (this._$AH = t)); + } + $(t) { + const { values: i, _$litType$: s } = t, + e = + "number" == typeof s + ? this._$AC(t) + : (void 0 === s.el && (s.el = S.createElement(V(s.h, s.h[0]), this.options)), s); + if (this._$AH?._$AD === e) this._$AH.p(i); + else { + const t = new R(e, this), + s = t.u(this.options); + (t.p(i), this.T(s), (this._$AH = t)); + } + } + _$AC(t) { + let i = C.get(t.strings); + return (void 0 === i && C.set(t.strings, (i = new S(t))), i); + } + k(t) { + u$2(this._$AH) || ((this._$AH = []), this._$AR()); + const i = this._$AH; + let s, + e = 0; + for (const h of t) + (e === i.length + ? i.push((s = new k(this.O(c$4()), this.O(c$4()), this, this.options))) + : (s = i[e]), + s._$AI(h), + e++); + e < i.length && (this._$AR(s && s._$AB.nextSibling, e), (i.length = e)); + } + _$AR(t = this._$AA.nextSibling, s) { + for (this._$AP?.(!1, !0, s); t !== this._$AB; ) { + const s = i$7(t).nextSibling; + (i$7(t).remove(), (t = s)); + } + } + setConnected(t) { + void 0 === this._$AM && ((this._$Cv = t), this._$AP?.(t)); + } }; var H = class { - get tagName() { - return this.element.tagName; - } - get _$AU() { - return this._$AM._$AU; - } - constructor(t, i, s, e, h) { - this.type = 1, this._$AH = A, this._$AN = void 0, this.element = t, this.name = i, this._$AM = e, this.options = h, s.length > 2 || "" !== s[0] || "" !== s[1] ? (this._$AH = Array(s.length - 1).fill(/* @__PURE__ */ new String()), this.strings = s) : this._$AH = A; - } - _$AI(t, i = this, s, e) { - const h = this.strings; - let o = !1; - if (void 0 === h) t = M$1(this, t, i, 0), o = !a(t) || t !== this._$AH && t !== E, o && (this._$AH = t); - else { - const e = t; - let n, r; - for (t = h[0], n = 0; n < h.length - 1; n++) r = M$1(this, e[s + n], i, n), r === E && (r = this._$AH[n]), o ||= !a(r) || r !== this._$AH[n], r === A ? t = A : t !== A && (t += (r ?? "") + h[n + 1]), this._$AH[n] = r; - } - o && !e && this.j(t); - } - j(t) { - t === A ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? ""); - } + get tagName() { + return this.element.tagName; + } + get _$AU() { + return this._$AM._$AU; + } + constructor(t, i, s, e, h) { + ((this.type = 1), + (this._$AH = A), + (this._$AN = void 0), + (this.element = t), + (this.name = i), + (this._$AM = e), + (this.options = h), + s.length > 2 || "" !== s[0] || "" !== s[1] + ? ((this._$AH = Array(s.length - 1).fill(/* @__PURE__ */ new String())), (this.strings = s)) + : (this._$AH = A)); + } + _$AI(t, i = this, s, e) { + const h = this.strings; + let o = !1; + if (void 0 === h) + ((t = M$1(this, t, i, 0)), (o = !a(t) || (t !== this._$AH && t !== E)), o && (this._$AH = t)); + else { + const e = t; + let n, r; + for (t = h[0], n = 0; n < h.length - 1; n++) + ((r = M$1(this, e[s + n], i, n)), + r === E && (r = this._$AH[n]), + (o ||= !a(r) || r !== this._$AH[n]), + r === A ? (t = A) : t !== A && (t += (r ?? "") + h[n + 1]), + (this._$AH[n] = r)); + } + o && !e && this.j(t); + } + j(t) { + t === A + ? this.element.removeAttribute(this.name) + : this.element.setAttribute(this.name, t ?? ""); + } }; var I = class extends H { - constructor() { - super(...arguments), this.type = 3; - } - j(t) { - this.element[this.name] = t === A ? void 0 : t; - } + constructor() { + (super(...arguments), (this.type = 3)); + } + j(t) { + this.element[this.name] = t === A ? void 0 : t; + } }; var L = class extends H { - constructor() { - super(...arguments), this.type = 4; - } - j(t) { - this.element.toggleAttribute(this.name, !!t && t !== A); - } + constructor() { + (super(...arguments), (this.type = 4)); + } + j(t) { + this.element.toggleAttribute(this.name, !!t && t !== A); + } }; var z = class extends H { - constructor(t, i, s, e, h) { - super(t, i, s, e, h), this.type = 5; - } - _$AI(t, i = this) { - if ((t = M$1(this, t, i, 0) ?? A) === E) return; - const s = this._$AH, e = t === A && s !== A || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive, h = t !== A && (s === A || e); - e && this.element.removeEventListener(this.name, this, s), h && this.element.addEventListener(this.name, this, t), this._$AH = t; - } - handleEvent(t) { - "function" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t) : this._$AH.handleEvent(t); - } + constructor(t, i, s, e, h) { + (super(t, i, s, e, h), (this.type = 5)); + } + _$AI(t, i = this) { + if ((t = M$1(this, t, i, 0) ?? A) === E) return; + const s = this._$AH, + e = + (t === A && s !== A) || + t.capture !== s.capture || + t.once !== s.once || + t.passive !== s.passive, + h = t !== A && (s === A || e); + (e && this.element.removeEventListener(this.name, this, s), + h && this.element.addEventListener(this.name, this, t), + (this._$AH = t)); + } + handleEvent(t) { + "function" == typeof this._$AH + ? this._$AH.call(this.options?.host ?? this.element, t) + : this._$AH.handleEvent(t); + } }; var Z = class { - constructor(t, i, s) { - this.element = t, this.type = 6, this._$AN = void 0, this._$AM = i, this.options = s; - } - get _$AU() { - return this._$AM._$AU; - } - _$AI(t) { - M$1(this, t); - } + constructor(t, i, s) { + ((this.element = t), + (this.type = 6), + (this._$AN = void 0), + (this._$AM = i), + (this.options = s)); + } + get _$AU() { + return this._$AM._$AU; + } + _$AI(t) { + M$1(this, t); + } }; const j$1 = { - M: h$5, - P: o$12, - A: n$10, - C: 1, - L: N, - R, - D: d$1, - V: M$1, - I: k, - H, - N: L, - U: z, - B: I, - F: Z -}, B = t$5.litHtmlPolyfillSupport; -B?.(S, k), (t$5.litHtmlVersions ??= []).push("3.3.2"); + M: h$5, + P: o$12, + A: n$10, + C: 1, + L: N, + R, + D: d$1, + V: M$1, + I: k, + H, + N: L, + U: z, + B: I, + F: Z, + }, + B = t$5.litHtmlPolyfillSupport; +(B?.(S, k), (t$5.litHtmlVersions ??= []).push("3.3.2")); const D = (t, i, s) => { - const e = s?.renderBefore ?? i; - let h = e._$litPart$; - if (void 0 === h) { - const t = s?.renderBefore ?? null; - e._$litPart$ = h = new k(i.insertBefore(c$4(), t), t, void 0, s ?? {}); - } - return h._$AI(t), h; + const e = s?.renderBefore ?? i; + let h = e._$litPart$; + if (void 0 === h) { + const t = s?.renderBefore ?? null; + e._$litPart$ = h = new k(i.insertBefore(c$4(), t), t, void 0, s ?? {}); + } + return (h._$AI(t), h); }; /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ const s$6 = globalThis; + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const s$6 = globalThis; var i$6 = class extends y$1 { - constructor() { - super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0; - } - createRenderRoot() { - const t = super.createRenderRoot(); - return this.renderOptions.renderBefore ??= t.firstChild, t; - } - update(t) { - const r = this.render(); - this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do = D(r, this.renderRoot, this.renderOptions); - } - connectedCallback() { - super.connectedCallback(), this._$Do?.setConnected(!0); - } - disconnectedCallback() { - super.disconnectedCallback(), this._$Do?.setConnected(!1); - } - render() { - return E; - } -}; -i$6._$litElement$ = !0, i$6["finalized"] = !0, s$6.litElementHydrateSupport?.({ LitElement: i$6 }); + constructor() { + (super(...arguments), (this.renderOptions = { host: this }), (this._$Do = void 0)); + } + createRenderRoot() { + const t = super.createRenderRoot(); + return ((this.renderOptions.renderBefore ??= t.firstChild), t); + } + update(t) { + const r = this.render(); + (this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), + super.update(t), + (this._$Do = D(r, this.renderRoot, this.renderOptions))); + } + connectedCallback() { + (super.connectedCallback(), this._$Do?.setConnected(!0)); + } + disconnectedCallback() { + (super.disconnectedCallback(), this._$Do?.setConnected(!1)); + } + render() { + return E; + } +}; +((i$6._$litElement$ = !0), + (i$6["finalized"] = !0), + s$6.litElementHydrateSupport?.({ LitElement: i$6 })); const o$11 = s$6.litElementPolyfillSupport; o$11?.({ LitElement: i$6 }); (s$6.litElementVersions ??= []).push("4.2.2"); /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const t$4 = { - ATTRIBUTE: 1, - CHILD: 2, - PROPERTY: 3, - BOOLEAN_ATTRIBUTE: 4, - EVENT: 5, - ELEMENT: 6 -}, e$10 = (t) => (...e) => ({ - _$litDirective$: t, - values: e -}); + ATTRIBUTE: 1, + CHILD: 2, + PROPERTY: 3, + BOOLEAN_ATTRIBUTE: 4, + EVENT: 5, + ELEMENT: 6, + }, + e$10 = + (t) => + (...e) => ({ + _$litDirective$: t, + values: e, + }); var i$5 = class { - constructor(t) {} - get _$AU() { - return this._$AM._$AU; - } - _$AT(t, e, i) { - this._$Ct = t, this._$AM = e, this._$Ci = i; - } - _$AS(t, e) { - return this.update(t, e); - } - update(t, e) { - return this.render(...e); - } + constructor(t) {} + get _$AU() { + return this._$AM._$AU; + } + _$AT(t, e, i) { + ((this._$Ct = t), (this._$AM = e), (this._$Ci = i)); + } + _$AS(t, e) { + return this.update(t, e); + } + update(t, e) { + return this.render(...e); + } }; /** -* @license -* Copyright 2020 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ const { I: t$3 } = j$1, i$4 = (o) => o, r$8 = (o) => void 0 === o.strings, s$5 = () => document.createComment(""), v = (o, n, e) => { - const l = o._$AA.parentNode, d = void 0 === n ? o._$AB : n._$AA; - if (void 0 === e) e = new t$3(l.insertBefore(s$5(), d), l.insertBefore(s$5(), d), o, o.options); - else { - const t = e._$AB.nextSibling, n = e._$AM, c = n !== o; - if (c) { - let t; - e._$AQ?.(o), e._$AM = o, void 0 !== e._$AP && (t = o._$AU) !== n._$AU && e._$AP(t); - } - if (t !== d || c) { - let o = e._$AA; - for (; o !== t;) { - const t = i$4(o).nextSibling; - i$4(l).insertBefore(o, d), o = t; - } - } - } - return e; -}, u$1 = (o, t, i = o) => (o._$AI(t, i), o), m$1 = {}, p = (o, t = m$1) => o._$AH = t, M = (o) => o._$AH, h$4 = (o) => { - o._$AR(), o._$AA.remove(); -}; + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const { I: t$3 } = j$1, + i$4 = (o) => o, + r$8 = (o) => void 0 === o.strings, + s$5 = () => document.createComment(""), + v = (o, n, e) => { + const l = o._$AA.parentNode, + d = void 0 === n ? o._$AB : n._$AA; + if (void 0 === e) e = new t$3(l.insertBefore(s$5(), d), l.insertBefore(s$5(), d), o, o.options); + else { + const t = e._$AB.nextSibling, + n = e._$AM, + c = n !== o; + if (c) { + let t; + (e._$AQ?.(o), (e._$AM = o), void 0 !== e._$AP && (t = o._$AU) !== n._$AU && e._$AP(t)); + } + if (t !== d || c) { + let o = e._$AA; + for (; o !== t; ) { + const t = i$4(o).nextSibling; + (i$4(l).insertBefore(o, d), (o = t)); + } + } + } + return e; + }, + u$1 = (o, t, i = o) => (o._$AI(t, i), o), + m$1 = {}, + p = (o, t = m$1) => (o._$AH = t), + M = (o) => o._$AH, + h$4 = (o) => { + (o._$AR(), o._$AA.remove()); + }; /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const u = (e, s, t) => { - const r = /* @__PURE__ */ new Map(); - for (let l = s; l <= t; l++) r.set(e[l], l); - return r; -}, c$2 = e$10(class extends i$5 { - constructor(e) { - if (super(e), e.type !== t$4.CHILD) throw Error("repeat() can only be used in text expressions"); - } - dt(e, s, t) { - let r; - void 0 === t ? t = s : void 0 !== s && (r = s); - const l = [], o = []; - let i = 0; - for (const s of e) l[i] = r ? r(s, i) : i, o[i] = t(s, i), i++; - return { - values: o, - keys: l - }; - } - render(e, s, t) { - return this.dt(e, s, t).values; - } - update(s, [t, r, c]) { - const d = M(s), { values: p$3, keys: a } = this.dt(t, r, c); - if (!Array.isArray(d)) return this.ut = a, p$3; - const h = this.ut ??= [], v$2 = []; - let m, y, x = 0, j = d.length - 1, k = 0, w = p$3.length - 1; - for (; x <= j && k <= w;) if (null === d[x]) x++; - else if (null === d[j]) j--; - else if (h[x] === a[k]) v$2[k] = u$1(d[x], p$3[k]), x++, k++; - else if (h[j] === a[w]) v$2[w] = u$1(d[j], p$3[w]), j--, w--; - else if (h[x] === a[w]) v$2[w] = u$1(d[x], p$3[w]), v(s, v$2[w + 1], d[x]), x++, w--; - else if (h[j] === a[k]) v$2[k] = u$1(d[j], p$3[k]), v(s, d[x], d[j]), j--, k++; - else if (void 0 === m && (m = u(a, k, w), y = u(h, x, j)), m.has(h[x])) if (m.has(h[j])) { - const e = y.get(a[k]), t = void 0 !== e ? d[e] : null; - if (null === t) { - const e = v(s, d[x]); - u$1(e, p$3[k]), v$2[k] = e; - } else v$2[k] = u$1(t, p$3[k]), v(s, d[x], t), d[e] = null; - k++; - } else h$4(d[j]), j--; - else h$4(d[x]), x++; - for (; k <= w;) { - const e = v(s, v$2[w + 1]); - u$1(e, p$3[k]), v$2[k++] = e; - } - for (; x <= j;) { - const e = d[x++]; - null !== e && h$4(e); - } - return this.ut = a, p(s, v$2), E; - } -}); + const r = /* @__PURE__ */ new Map(); + for (let l = s; l <= t; l++) r.set(e[l], l); + return r; + }, + c$2 = e$10( + class extends i$5 { + constructor(e) { + if ((super(e), e.type !== t$4.CHILD)) + throw Error("repeat() can only be used in text expressions"); + } + dt(e, s, t) { + let r; + void 0 === t ? (t = s) : void 0 !== s && (r = s); + const l = [], + o = []; + let i = 0; + for (const s of e) ((l[i] = r ? r(s, i) : i), (o[i] = t(s, i)), i++); + return { + values: o, + keys: l, + }; + } + render(e, s, t) { + return this.dt(e, s, t).values; + } + update(s, [t, r, c]) { + const d = M(s), + { values: p$3, keys: a } = this.dt(t, r, c); + if (!Array.isArray(d)) return ((this.ut = a), p$3); + const h = (this.ut ??= []), + v$2 = []; + let m, + y, + x = 0, + j = d.length - 1, + k = 0, + w = p$3.length - 1; + for (; x <= j && k <= w; ) + if (null === d[x]) x++; + else if (null === d[j]) j--; + else if (h[x] === a[k]) ((v$2[k] = u$1(d[x], p$3[k])), x++, k++); + else if (h[j] === a[w]) ((v$2[w] = u$1(d[j], p$3[w])), j--, w--); + else if (h[x] === a[w]) ((v$2[w] = u$1(d[x], p$3[w])), v(s, v$2[w + 1], d[x]), x++, w--); + else if (h[j] === a[k]) ((v$2[k] = u$1(d[j], p$3[k])), v(s, d[x], d[j]), j--, k++); + else if ((void 0 === m && ((m = u(a, k, w)), (y = u(h, x, j))), m.has(h[x]))) + if (m.has(h[j])) { + const e = y.get(a[k]), + t = void 0 !== e ? d[e] : null; + if (null === t) { + const e = v(s, d[x]); + (u$1(e, p$3[k]), (v$2[k] = e)); + } else ((v$2[k] = u$1(t, p$3[k])), v(s, d[x], t), (d[e] = null)); + k++; + } else (h$4(d[j]), j--); + else (h$4(d[x]), x++); + for (; k <= w; ) { + const e = v(s, v$2[w + 1]); + (u$1(e, p$3[k]), (v$2[k++] = e)); + } + for (; x <= j; ) { + const e = d[x++]; + null !== e && h$4(e); + } + return ((this.ut = a), p(s, v$2), E); + } + }, + ); /** -* @license -* Copyright 2021 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ var s$4 = class extends Event { - constructor(s, t, e, o) { - super("context-request", { - bubbles: !0, - composed: !0 - }), this.context = s, this.contextTarget = t, this.callback = e, this.subscribe = o ?? !1; - } + constructor(s, t, e, o) { + (super("context-request", { + bubbles: !0, + composed: !0, + }), + (this.context = s), + (this.contextTarget = t), + (this.callback = e), + (this.subscribe = o ?? !1)); + } }; /** -* @license -* Copyright 2021 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ function n$7(n) { - return n; + return n; } /** -* @license -* Copyright 2021 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ var s$3 = class { - constructor(t, s, i, h) { - if (this.subscribe = !1, this.provided = !1, this.value = void 0, this.t = (t, s) => { - this.unsubscribe && (this.unsubscribe !== s && (this.provided = !1, this.unsubscribe()), this.subscribe || this.unsubscribe()), this.value = t, this.host.requestUpdate(), this.provided && !this.subscribe || (this.provided = !0, this.callback && this.callback(t, s)), this.unsubscribe = s; - }, this.host = t, void 0 !== s.context) { - const t = s; - this.context = t.context, this.callback = t.callback, this.subscribe = t.subscribe ?? !1; - } else this.context = s, this.callback = i, this.subscribe = h ?? !1; - this.host.addController(this); - } - hostConnected() { - this.dispatchRequest(); - } - hostDisconnected() { - this.unsubscribe && (this.unsubscribe(), this.unsubscribe = void 0); - } - dispatchRequest() { - this.host.dispatchEvent(new s$4(this.context, this.host, this.t, this.subscribe)); - } + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ var s$3 = class { + constructor(t, s, i, h) { + if ( + ((this.subscribe = !1), + (this.provided = !1), + (this.value = void 0), + (this.t = (t, s) => { + (this.unsubscribe && + (this.unsubscribe !== s && ((this.provided = !1), this.unsubscribe()), + this.subscribe || this.unsubscribe()), + (this.value = t), + this.host.requestUpdate(), + (this.provided && !this.subscribe) || + ((this.provided = !0), this.callback && this.callback(t, s)), + (this.unsubscribe = s)); + }), + (this.host = t), + void 0 !== s.context) + ) { + const t = s; + ((this.context = t.context), + (this.callback = t.callback), + (this.subscribe = t.subscribe ?? !1)); + } else ((this.context = s), (this.callback = i), (this.subscribe = h ?? !1)); + this.host.addController(this); + } + hostConnected() { + this.dispatchRequest(); + } + hostDisconnected() { + this.unsubscribe && (this.unsubscribe(), (this.unsubscribe = void 0)); + } + dispatchRequest() { + this.host.dispatchEvent(new s$4(this.context, this.host, this.t, this.subscribe)); + } }; /** -* @license -* Copyright 2021 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ var s$2 = class { - get value() { - return this.o; - } - set value(s) { - this.setValue(s); - } - setValue(s, t = !1) { - const i = t || !Object.is(s, this.o); - this.o = s, i && this.updateObservers(); - } - constructor(s) { - this.subscriptions = /* @__PURE__ */ new Map(), this.updateObservers = () => { - for (const [s, { disposer: t }] of this.subscriptions) s(this.o, t); - }, void 0 !== s && (this.value = s); - } - addCallback(s, t, i) { - if (!i) return void s(this.value); - this.subscriptions.has(s) || this.subscriptions.set(s, { - disposer: () => { - this.subscriptions.delete(s); - }, - consumerHost: t - }); - const { disposer: h } = this.subscriptions.get(s); - s(this.value, h); - } - clearCallbacks() { - this.subscriptions.clear(); - } + get value() { + return this.o; + } + set value(s) { + this.setValue(s); + } + setValue(s, t = !1) { + const i = t || !Object.is(s, this.o); + ((this.o = s), i && this.updateObservers()); + } + constructor(s) { + ((this.subscriptions = /* @__PURE__ */ new Map()), + (this.updateObservers = () => { + for (const [s, { disposer: t }] of this.subscriptions) s(this.o, t); + }), + void 0 !== s && (this.value = s)); + } + addCallback(s, t, i) { + if (!i) return void s(this.value); + this.subscriptions.has(s) || + this.subscriptions.set(s, { + disposer: () => { + this.subscriptions.delete(s); + }, + consumerHost: t, + }); + const { disposer: h } = this.subscriptions.get(s); + s(this.value, h); + } + clearCallbacks() { + this.subscriptions.clear(); + } }; /** -* @license -* Copyright 2021 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ var e$8 = class extends Event { - constructor(t, s) { - super("context-provider", { - bubbles: !0, - composed: !0 - }), this.context = t, this.contextTarget = s; - } + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ var e$8 = class extends Event { + constructor(t, s) { + (super("context-provider", { + bubbles: !0, + composed: !0, + }), + (this.context = t), + (this.contextTarget = s)); + } }; var i$3 = class extends s$2 { - constructor(s, e, i) { - super(void 0 !== e.context ? e.initialValue : i), this.onContextRequest = (t) => { - if (t.context !== this.context) return; - const s = t.contextTarget ?? t.composedPath()[0]; - s !== this.host && (t.stopPropagation(), this.addCallback(t.callback, s, t.subscribe)); - }, this.onProviderRequest = (s) => { - if (s.context !== this.context) return; - if ((s.contextTarget ?? s.composedPath()[0]) === this.host) return; - const e = /* @__PURE__ */ new Set(); - for (const [s, { consumerHost: i }] of this.subscriptions) e.has(s) || (e.add(s), i.dispatchEvent(new s$4(this.context, i, s, !0))); - s.stopPropagation(); - }, this.host = s, void 0 !== e.context ? this.context = e.context : this.context = e, this.attachListeners(), this.host.addController?.(this); - } - attachListeners() { - this.host.addEventListener("context-request", this.onContextRequest), this.host.addEventListener("context-provider", this.onProviderRequest); - } - hostConnected() { - this.host.dispatchEvent(new e$8(this.context, this.host)); - } + constructor(s, e, i) { + (super(void 0 !== e.context ? e.initialValue : i), + (this.onContextRequest = (t) => { + if (t.context !== this.context) return; + const s = t.contextTarget ?? t.composedPath()[0]; + s !== this.host && (t.stopPropagation(), this.addCallback(t.callback, s, t.subscribe)); + }), + (this.onProviderRequest = (s) => { + if (s.context !== this.context) return; + if ((s.contextTarget ?? s.composedPath()[0]) === this.host) return; + const e = /* @__PURE__ */ new Set(); + for (const [s, { consumerHost: i }] of this.subscriptions) + e.has(s) || (e.add(s), i.dispatchEvent(new s$4(this.context, i, s, !0))); + s.stopPropagation(); + }), + (this.host = s), + void 0 !== e.context ? (this.context = e.context) : (this.context = e), + this.attachListeners(), + this.host.addController?.(this)); + } + attachListeners() { + (this.host.addEventListener("context-request", this.onContextRequest), + this.host.addEventListener("context-provider", this.onProviderRequest)); + } + hostConnected() { + this.host.dispatchEvent(new e$8(this.context, this.host)); + } }; /** -* @license -* Copyright 2022 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ function c$1({ context: c, subscribe: e }) { - return (o, n) => { - "object" == typeof n ? n.addInitializer((function() { - new s$3(this, { - context: c, - callback: (t) => { - o.set.call(this, t); - }, - subscribe: e - }); - })) : o.constructor.addInitializer(((o) => { - new s$3(o, { - context: c, - callback: (t) => { - o[n] = t; - }, - subscribe: e - }); - })); - }; + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ function c$1({ context: c, subscribe: e }) { + return (o, n) => { + "object" == typeof n + ? n.addInitializer(function () { + new s$3(this, { + context: c, + callback: (t) => { + o.set.call(this, t); + }, + subscribe: e, + }); + }) + : o.constructor.addInitializer((o) => { + new s$3(o, { + context: c, + callback: (t) => { + o[n] = t; + }, + subscribe: e, + }); + }); + }; } const eventInit = { - bubbles: true, - cancelable: true, - composed: true + bubbles: true, + cancelable: true, + composed: true, }; var StateEvent = class StateEvent extends CustomEvent { - static { - this.eventName = "a2uiaction"; - } - constructor(payload) { - super(StateEvent.eventName, { - detail: payload, - ...eventInit - }); - this.payload = payload; - } + static { + this.eventName = "a2uiaction"; + } + constructor(payload) { + super(StateEvent.eventName, { + detail: payload, + ...eventInit, + }); + this.payload = payload; + } }; const opacityBehavior = ` &:not([disabled]) { @@ -857,12 +1213,15 @@ const opacityBehavior = ` } }`; const behavior = ` - ${new Array(21).fill(0).map((_, idx) => { - return `.behavior-ho-${idx * 5} { + ${new Array(21) + .fill(0) + .map((_, idx) => { + return `.behavior-ho-${idx * 5} { --opacity: ${idx / 20}; ${opacityBehavior} }`; -}).join("\n")} + }) + .join("\n")} .behavior-o-s { overflow: scroll; @@ -881,8 +1240,10 @@ const behavior = ` } `; const border = ` - ${new Array(25).fill(0).map((_, idx) => { - return ` + ${new Array(25) + .fill(0) + .map((_, idx) => { + return ` .border-bw-${idx} { border-width: ${idx}px; } .border-btw-${idx} { border-top-width: ${idx}px; } .border-bbw-${idx} { border-bottom-width: ${idx}px; } @@ -891,7 +1252,8 @@ const border = ` .border-ow-${idx} { outline-width: ${idx}px; } .border-br-${idx} { border-radius: ${idx * 4}px; overflow: hidden;}`; -}).join("\n")} + }) + .join("\n")} .border-br-50pc { border-radius: 50%; @@ -901,98 +1263,92 @@ const border = ` border-style: solid; } `; -const shades = [ - 0, - 5, - 10, - 15, - 20, - 25, - 30, - 35, - 40, - 50, - 60, - 70, - 80, - 90, - 95, - 98, - 99, - 100 -]; +const shades = [0, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100]; function merge(...classes) { - const styles = {}; - for (const clazz of classes) for (const [key, val] of Object.entries(clazz)) { - const prefix = key.split("-").with(-1, "").join("-"); - const existingKeys = Object.keys(styles).filter((key) => key.startsWith(prefix)); - for (const existingKey of existingKeys) delete styles[existingKey]; - styles[key] = val; - } - return styles; + const styles = {}; + for (const clazz of classes) + for (const [key, val] of Object.entries(clazz)) { + const prefix = key.split("-").with(-1, "").join("-"); + const existingKeys = Object.keys(styles).filter((key) => key.startsWith(prefix)); + for (const existingKey of existingKeys) delete styles[existingKey]; + styles[key] = val; + } + return styles; } function appendToAll(target, exclusions, ...classes) { - const updatedTarget = structuredClone(target); - for (const clazz of classes) for (const key of Object.keys(clazz)) { - const prefix = key.split("-").with(-1, "").join("-"); - for (const [tagName, classesToAdd] of Object.entries(updatedTarget)) { - if (exclusions.includes(tagName)) continue; - let found = false; - for (let t = 0; t < classesToAdd.length; t++) if (classesToAdd[t].startsWith(prefix)) { - found = true; - classesToAdd[t] = key; - } - if (!found) classesToAdd.push(key); - } - } - return updatedTarget; + const updatedTarget = structuredClone(target); + for (const clazz of classes) + for (const key of Object.keys(clazz)) { + const prefix = key.split("-").with(-1, "").join("-"); + for (const [tagName, classesToAdd] of Object.entries(updatedTarget)) { + if (exclusions.includes(tagName)) continue; + let found = false; + for (let t = 0; t < classesToAdd.length; t++) + if (classesToAdd[t].startsWith(prefix)) { + found = true; + classesToAdd[t] = key; + } + if (!found) classesToAdd.push(key); + } + } + return updatedTarget; } function toProp(key) { - if (key.startsWith("nv")) return `--nv-${key.slice(2)}`; - return `--${key[0]}-${key.slice(1)}`; + if (key.startsWith("nv")) return `--nv-${key.slice(2)}`; + return `--${key[0]}-${key.slice(1)}`; } const color = (src) => ` - ${src.map((key) => { - const inverseKey = getInverseKey(key); - return `.color-bc-${key} { border-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`; -}).join("\n")} - - ${src.map((key) => { - const inverseKey = getInverseKey(key); - const vals = [`.color-bgc-${key} { background-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`, `.color-bbgc-${key}::backdrop { background-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`]; - for (let o = .1; o < 1; o += .1) vals.push(`.color-bbgc-${key}_${(o * 100).toFixed(0)}::backdrop { + ${src + .map((key) => { + const inverseKey = getInverseKey(key); + return `.color-bc-${key} { border-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`; + }) + .join("\n")} + + ${src + .map((key) => { + const inverseKey = getInverseKey(key); + const vals = [ + `.color-bgc-${key} { background-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`, + `.color-bbgc-${key}::backdrop { background-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`, + ]; + for (let o = 0.1; o < 1; o += 0.1) + vals.push(`.color-bbgc-${key}_${(o * 100).toFixed(0)}::backdrop { background-color: light-dark(oklch(from var(${toProp(key)}) l c h / calc(alpha * ${o.toFixed(1)})), oklch(from var(${toProp(inverseKey)}) l c h / calc(alpha * ${o.toFixed(1)})) ); } `); - return vals.join("\n"); -}).join("\n")} + return vals.join("\n"); + }) + .join("\n")} - ${src.map((key) => { - const inverseKey = getInverseKey(key); - return `.color-c-${key} { color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`; -}).join("\n")} + ${src + .map((key) => { + const inverseKey = getInverseKey(key); + return `.color-c-${key} { color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`; + }) + .join("\n")} `; const getInverseKey = (key) => { - const match = key.match(/^([a-z]+)(\d+)$/); - if (!match) return key; - const [, prefix, shadeStr] = match; - const target = 100 - parseInt(shadeStr, 10); - return `${prefix}${shades.reduce((prev, curr) => Math.abs(curr - target) < Math.abs(prev - target) ? curr : prev)}`; + const match = key.match(/^([a-z]+)(\d+)$/); + if (!match) return key; + const [, prefix, shadeStr] = match; + const target = 100 - parseInt(shadeStr, 10); + return `${prefix}${shades.reduce((prev, curr) => (Math.abs(curr - target) < Math.abs(prev - target) ? curr : prev))}`; }; const keyFactory = (prefix) => { - return shades.map((v) => `${prefix}${v}`); + return shades.map((v) => `${prefix}${v}`); }; const structuralStyles$1 = [ - behavior, - border, - [ - color(keyFactory("p")), - color(keyFactory("s")), - color(keyFactory("t")), - color(keyFactory("n")), - color(keyFactory("nv")), - color(keyFactory("e")), - ` + behavior, + border, + [ + color(keyFactory("p")), + color(keyFactory("s")), + color(keyFactory("t")), + color(keyFactory("n")), + color(keyFactory("nv")), + color(keyFactory("e")), + ` .color-bgc-transparent { background-color: transparent; } @@ -1000,9 +1356,9 @@ const structuralStyles$1 = [ :host { color-scheme: var(--color-scheme); } + `, + ], ` - ], - ` .g-icon { font-family: "Material Symbols Outlined", "Google Symbols"; font-weight: normal; @@ -1037,17 +1393,22 @@ const structuralStyles$1 = [ } } `, - ` + ` :host { - ${new Array(16).fill(0).map((_, idx) => { - return `--g-${idx + 1}: ${(idx + 1) * 4}px;`; - }).join("\n")} + ${new Array(16) + .fill(0) + .map((_, idx) => { + return `--g-${idx + 1}: ${(idx + 1) * 4}px;`; + }) + .join("\n")} } - ${new Array(49).fill(0).map((_, index) => { - const idx = index - 24; - const lbl = idx < 0 ? `n${Math.abs(idx)}` : idx.toString(); - return ` + ${new Array(49) + .fill(0) + .map((_, index) => { + const idx = index - 24; + const lbl = idx < 0 ? `n${Math.abs(idx)}` : idx.toString(); + return ` .layout-p-${lbl} { --padding: ${idx * 4}px; padding: var(--padding); } .layout-pt-${lbl} { padding-top: ${idx * 4}px; } .layout-pr-${lbl} { padding-right: ${idx * 4}px; } @@ -1064,17 +1425,24 @@ const structuralStyles$1 = [ .layout-r-${lbl} { right: ${idx * 4}px; } .layout-b-${lbl} { bottom: ${idx * 4}px; } .layout-l-${lbl} { left: ${idx * 4}px; }`; - }).join("\n")} + }) + .join("\n")} - ${new Array(25).fill(0).map((_, idx) => { - return ` + ${new Array(25) + .fill(0) + .map((_, idx) => { + return ` .layout-g-${idx} { gap: ${idx * 4}px; }`; - }).join("\n")} + }) + .join("\n")} - ${new Array(8).fill(0).map((_, idx) => { - return ` + ${new Array(8) + .fill(0) + .map((_, idx) => { + return ` .layout-grd-col${idx + 1} { grid-template-columns: ${"1fr ".repeat(idx + 1).trim()}; }`; - }).join("\n")} + }) + .join("\n")} .layout-pos-a { position: absolute; @@ -1184,25 +1552,37 @@ const structuralStyles$1 = [ /** Widths **/ - ${new Array(10).fill(0).map((_, idx) => { - const weight = (idx + 1) * 10; - return `.layout-w-${weight} { width: ${weight}%; max-width: ${weight}%; }`; - }).join("\n")} + ${new Array(10) + .fill(0) + .map((_, idx) => { + const weight = (idx + 1) * 10; + return `.layout-w-${weight} { width: ${weight}%; max-width: ${weight}%; }`; + }) + .join("\n")} - ${new Array(16).fill(0).map((_, idx) => { - return `.layout-wp-${idx} { width: ${idx * 4}px; }`; - }).join("\n")} + ${new Array(16) + .fill(0) + .map((_, idx) => { + return `.layout-wp-${idx} { width: ${idx * 4}px; }`; + }) + .join("\n")} /** Heights **/ - ${new Array(10).fill(0).map((_, idx) => { - const height = (idx + 1) * 10; - return `.layout-h-${height} { height: ${height}%; }`; - }).join("\n")} + ${new Array(10) + .fill(0) + .map((_, idx) => { + const height = (idx + 1) * 10; + return `.layout-h-${height} { height: ${height}%; }`; + }) + .join("\n")} - ${new Array(16).fill(0).map((_, idx) => { - return `.layout-hp-${idx} { height: ${idx * 4}px; }`; - }).join("\n")} + ${new Array(16) + .fill(0) + .map((_, idx) => { + return `.layout-hp-${idx} { height: ${idx * 4}px; }`; + }) + .join("\n")} .layout-el-cv { & img, @@ -1224,12 +1604,15 @@ const structuralStyles$1 = [ height: calc(100% + var(--padding) * 2); } `, - ` - ${new Array(21).fill(0).map((_, idx) => { - return `.opacity-el-${idx * 5} { opacity: ${idx / 20}; }`; - }).join("\n")} + ` + ${new Array(21) + .fill(0) + .map((_, idx) => { + return `.opacity-el-${idx * 5} { opacity: ${idx / 20}; }`; + }) + .join("\n")} `, - ` + ` :host { --default-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; --default-font-family-mono: "Courier New", Courier, monospace; @@ -1361,2029 +1744,2448 @@ const structuralStyles$1 = [ /** Weights **/ - ${new Array(9).fill(0).map((_, idx) => { - const weight = (idx + 1) * 100; - return `.typography-w-${weight} { font-weight: ${weight}; }`; - }).join("\n")} -` -].flat(Infinity).join("\n"); + ${new Array(9) + .fill(0) + .map((_, idx) => { + const weight = (idx + 1) * 100; + return `.typography-w-${weight} { font-weight: ${weight}; }`; + }) + .join("\n")} +`, +] + .flat(Infinity) + .join("\n"); var guards_exports = /* @__PURE__ */ __exportAll({ - isComponentArrayReference: () => isComponentArrayReference, - isObject: () => isObject$1, - isPath: () => isPath, - isResolvedAudioPlayer: () => isResolvedAudioPlayer, - isResolvedButton: () => isResolvedButton, - isResolvedCard: () => isResolvedCard, - isResolvedCheckbox: () => isResolvedCheckbox, - isResolvedColumn: () => isResolvedColumn, - isResolvedDateTimeInput: () => isResolvedDateTimeInput, - isResolvedDivider: () => isResolvedDivider, - isResolvedIcon: () => isResolvedIcon, - isResolvedImage: () => isResolvedImage, - isResolvedList: () => isResolvedList, - isResolvedModal: () => isResolvedModal, - isResolvedMultipleChoice: () => isResolvedMultipleChoice, - isResolvedRow: () => isResolvedRow, - isResolvedSlider: () => isResolvedSlider, - isResolvedTabs: () => isResolvedTabs, - isResolvedText: () => isResolvedText, - isResolvedTextField: () => isResolvedTextField, - isResolvedVideo: () => isResolvedVideo, - isValueMap: () => isValueMap + isComponentArrayReference: () => isComponentArrayReference, + isObject: () => isObject$1, + isPath: () => isPath, + isResolvedAudioPlayer: () => isResolvedAudioPlayer, + isResolvedButton: () => isResolvedButton, + isResolvedCard: () => isResolvedCard, + isResolvedCheckbox: () => isResolvedCheckbox, + isResolvedColumn: () => isResolvedColumn, + isResolvedDateTimeInput: () => isResolvedDateTimeInput, + isResolvedDivider: () => isResolvedDivider, + isResolvedIcon: () => isResolvedIcon, + isResolvedImage: () => isResolvedImage, + isResolvedList: () => isResolvedList, + isResolvedModal: () => isResolvedModal, + isResolvedMultipleChoice: () => isResolvedMultipleChoice, + isResolvedRow: () => isResolvedRow, + isResolvedSlider: () => isResolvedSlider, + isResolvedTabs: () => isResolvedTabs, + isResolvedText: () => isResolvedText, + isResolvedTextField: () => isResolvedTextField, + isResolvedVideo: () => isResolvedVideo, + isValueMap: () => isValueMap, }); function isValueMap(value) { - return isObject$1(value) && "key" in value; + return isObject$1(value) && "key" in value; } function isPath(key, value) { - return key === "path" && typeof value === "string"; + return key === "path" && typeof value === "string"; } function isObject$1(value) { - return typeof value === "object" && value !== null && !Array.isArray(value); + return typeof value === "object" && value !== null && !Array.isArray(value); } function isComponentArrayReference(value) { - if (!isObject$1(value)) return false; - return "explicitList" in value || "template" in value; + if (!isObject$1(value)) return false; + return "explicitList" in value || "template" in value; } function isStringValue(value) { - return isObject$1(value) && ("path" in value || "literal" in value && typeof value.literal === "string" || "literalString" in value); + return ( + isObject$1(value) && + ("path" in value || + ("literal" in value && typeof value.literal === "string") || + "literalString" in value) + ); } function isNumberValue(value) { - return isObject$1(value) && ("path" in value || "literal" in value && typeof value.literal === "number" || "literalNumber" in value); + return ( + isObject$1(value) && + ("path" in value || + ("literal" in value && typeof value.literal === "number") || + "literalNumber" in value) + ); } function isBooleanValue(value) { - return isObject$1(value) && ("path" in value || "literal" in value && typeof value.literal === "boolean" || "literalBoolean" in value); + return ( + isObject$1(value) && + ("path" in value || + ("literal" in value && typeof value.literal === "boolean") || + "literalBoolean" in value) + ); } function isAnyComponentNode(value) { - if (!isObject$1(value)) return false; - if (!("id" in value && "type" in value && "properties" in value)) return false; - return true; + if (!isObject$1(value)) return false; + if (!("id" in value && "type" in value && "properties" in value)) return false; + return true; } function isResolvedAudioPlayer(props) { - return isObject$1(props) && "url" in props && isStringValue(props.url); + return isObject$1(props) && "url" in props && isStringValue(props.url); } function isResolvedButton(props) { - return isObject$1(props) && "child" in props && isAnyComponentNode(props.child) && "action" in props; + return ( + isObject$1(props) && "child" in props && isAnyComponentNode(props.child) && "action" in props + ); } function isResolvedCard(props) { - if (!isObject$1(props)) return false; - if (!("child" in props)) if (!("children" in props)) return false; - else return Array.isArray(props.children) && props.children.every(isAnyComponentNode); - return isAnyComponentNode(props.child); + if (!isObject$1(props)) return false; + if (!("child" in props)) + if (!("children" in props)) return false; + else return Array.isArray(props.children) && props.children.every(isAnyComponentNode); + return isAnyComponentNode(props.child); } function isResolvedCheckbox(props) { - return isObject$1(props) && "label" in props && isStringValue(props.label) && "value" in props && isBooleanValue(props.value); + return ( + isObject$1(props) && + "label" in props && + isStringValue(props.label) && + "value" in props && + isBooleanValue(props.value) + ); } function isResolvedColumn(props) { - return isObject$1(props) && "children" in props && Array.isArray(props.children) && props.children.every(isAnyComponentNode); + return ( + isObject$1(props) && + "children" in props && + Array.isArray(props.children) && + props.children.every(isAnyComponentNode) + ); } function isResolvedDateTimeInput(props) { - return isObject$1(props) && "value" in props && isStringValue(props.value); + return isObject$1(props) && "value" in props && isStringValue(props.value); } function isResolvedDivider(props) { - return isObject$1(props); + return isObject$1(props); } function isResolvedImage(props) { - return isObject$1(props) && "url" in props && isStringValue(props.url); + return isObject$1(props) && "url" in props && isStringValue(props.url); } function isResolvedIcon(props) { - return isObject$1(props) && "name" in props && isStringValue(props.name); + return isObject$1(props) && "name" in props && isStringValue(props.name); } function isResolvedList(props) { - return isObject$1(props) && "children" in props && Array.isArray(props.children) && props.children.every(isAnyComponentNode); + return ( + isObject$1(props) && + "children" in props && + Array.isArray(props.children) && + props.children.every(isAnyComponentNode) + ); } function isResolvedModal(props) { - return isObject$1(props) && "entryPointChild" in props && isAnyComponentNode(props.entryPointChild) && "contentChild" in props && isAnyComponentNode(props.contentChild); + return ( + isObject$1(props) && + "entryPointChild" in props && + isAnyComponentNode(props.entryPointChild) && + "contentChild" in props && + isAnyComponentNode(props.contentChild) + ); } function isResolvedMultipleChoice(props) { - return isObject$1(props) && "selections" in props; + return isObject$1(props) && "selections" in props; } function isResolvedRow(props) { - return isObject$1(props) && "children" in props && Array.isArray(props.children) && props.children.every(isAnyComponentNode); + return ( + isObject$1(props) && + "children" in props && + Array.isArray(props.children) && + props.children.every(isAnyComponentNode) + ); } function isResolvedSlider(props) { - return isObject$1(props) && "value" in props && isNumberValue(props.value); + return isObject$1(props) && "value" in props && isNumberValue(props.value); } function isResolvedTabItem(item) { - return isObject$1(item) && "title" in item && isStringValue(item.title) && "child" in item && isAnyComponentNode(item.child); + return ( + isObject$1(item) && + "title" in item && + isStringValue(item.title) && + "child" in item && + isAnyComponentNode(item.child) + ); } function isResolvedTabs(props) { - return isObject$1(props) && "tabItems" in props && Array.isArray(props.tabItems) && props.tabItems.every(isResolvedTabItem); + return ( + isObject$1(props) && + "tabItems" in props && + Array.isArray(props.tabItems) && + props.tabItems.every(isResolvedTabItem) + ); } function isResolvedText(props) { - return isObject$1(props) && "text" in props && isStringValue(props.text); + return isObject$1(props) && "text" in props && isStringValue(props.text); } function isResolvedTextField(props) { - return isObject$1(props) && "label" in props && isStringValue(props.label); + return isObject$1(props) && "label" in props && isStringValue(props.label); } function isResolvedVideo(props) { - return isObject$1(props) && "url" in props && isStringValue(props.url); + return isObject$1(props) && "url" in props && isStringValue(props.url); } /** -* Processes and consolidates A2UIProtocolMessage objects into a structured, -* hierarchical model of UI surfaces. -*/ + * Processes and consolidates A2UIProtocolMessage objects into a structured, + * hierarchical model of UI surfaces. + */ var A2uiMessageProcessor = class A2uiMessageProcessor { - static { - this.DEFAULT_SURFACE_ID = "@default"; - } - #mapCtor = Map; - #arrayCtor = Array; - #setCtor = Set; - #objCtor = Object; - #surfaces; - constructor(opts = { - mapCtor: Map, - arrayCtor: Array, - setCtor: Set, - objCtor: Object - }) { - this.opts = opts; - this.#arrayCtor = opts.arrayCtor; - this.#mapCtor = opts.mapCtor; - this.#setCtor = opts.setCtor; - this.#objCtor = opts.objCtor; - this.#surfaces = new opts.mapCtor(); - } - getSurfaces() { - return this.#surfaces; - } - clearSurfaces() { - this.#surfaces.clear(); - } - processMessages(messages) { - for (const message of messages) { - if (message.beginRendering) this.#handleBeginRendering(message.beginRendering, message.beginRendering.surfaceId); - if (message.surfaceUpdate) this.#handleSurfaceUpdate(message.surfaceUpdate, message.surfaceUpdate.surfaceId); - if (message.dataModelUpdate) this.#handleDataModelUpdate(message.dataModelUpdate, message.dataModelUpdate.surfaceId); - if (message.deleteSurface) this.#handleDeleteSurface(message.deleteSurface); - } - } - /** - * Retrieves the data for a given component node and a relative path string. - * This correctly handles the special `.` path, which refers to the node's - * own data context. - */ - getData(node, relativePath, surfaceId = A2uiMessageProcessor.DEFAULT_SURFACE_ID) { - const surface = this.#getOrCreateSurface(surfaceId); - if (!surface) return null; - let finalPath; - if (relativePath === "." || relativePath === "") finalPath = node.dataContextPath ?? "/"; - else finalPath = this.resolvePath(relativePath, node.dataContextPath); - return this.#getDataByPath(surface.dataModel, finalPath); - } - setData(node, relativePath, value, surfaceId = A2uiMessageProcessor.DEFAULT_SURFACE_ID) { - if (!node) { - console.warn("No component node set"); - return; - } - const surface = this.#getOrCreateSurface(surfaceId); - if (!surface) return; - let finalPath; - if (relativePath === "." || relativePath === "") finalPath = node.dataContextPath ?? "/"; - else finalPath = this.resolvePath(relativePath, node.dataContextPath); - this.#setDataByPath(surface.dataModel, finalPath, value); - } - resolvePath(path, dataContextPath) { - if (path.startsWith("/")) return path; - if (dataContextPath && dataContextPath !== "/") return dataContextPath.endsWith("/") ? `${dataContextPath}${path}` : `${dataContextPath}/${path}`; - return `/${path}`; - } - #parseIfJsonString(value) { - if (typeof value !== "string") return value; - const trimmedValue = value.trim(); - if (trimmedValue.startsWith("{") && trimmedValue.endsWith("}") || trimmedValue.startsWith("[") && trimmedValue.endsWith("]")) try { - return JSON.parse(value); - } catch (e) { - console.warn(`Failed to parse potential JSON string: "${value.substring(0, 50)}..."`, e); - return value; - } - return value; - } - /** - * Converts a specific array format [{key: "...", value_string: "..."}, ...] - * into a standard Map. It also attempts to parse any string values that - * appear to be stringified JSON. - */ - #convertKeyValueArrayToMap(arr) { - const map = new this.#mapCtor(); - for (const item of arr) { - if (!isObject$1(item) || !("key" in item)) continue; - const key = item.key; - const valueKey = this.#findValueKey(item); - if (!valueKey) continue; - let value = item[valueKey]; - if (valueKey === "valueMap" && Array.isArray(value)) value = this.#convertKeyValueArrayToMap(value); - else if (typeof value === "string") value = this.#parseIfJsonString(value); - this.#setDataByPath(map, key, value); - } - return map; - } - #setDataByPath(root, path, value) { - if (Array.isArray(value) && (value.length === 0 || isObject$1(value[0]) && "key" in value[0])) if (value.length === 1 && isObject$1(value[0]) && value[0].key === ".") { - const item = value[0]; - const valueKey = this.#findValueKey(item); - if (valueKey) { - value = item[valueKey]; - if (valueKey === "valueMap" && Array.isArray(value)) value = this.#convertKeyValueArrayToMap(value); - else if (typeof value === "string") value = this.#parseIfJsonString(value); - } else value = this.#convertKeyValueArrayToMap(value); - } else value = this.#convertKeyValueArrayToMap(value); - const segments = this.#normalizePath(path).split("/").filter((s) => s); - if (segments.length === 0) { - if (value instanceof Map || isObject$1(value)) { - if (!(value instanceof Map) && isObject$1(value)) value = new this.#mapCtor(Object.entries(value)); - root.clear(); - for (const [key, v] of value.entries()) root.set(key, v); - } else console.error("Cannot set root of DataModel to a non-Map value."); - return; - } - let current = root; - for (let i = 0; i < segments.length - 1; i++) { - const segment = segments[i]; - let target; - if (current instanceof Map) target = current.get(segment); - else if (Array.isArray(current) && /^\d+$/.test(segment)) target = current[parseInt(segment, 10)]; - if (target === void 0 || typeof target !== "object" || target === null) { - target = new this.#mapCtor(); - if (current instanceof this.#mapCtor) current.set(segment, target); - else if (Array.isArray(current)) current[parseInt(segment, 10)] = target; - } - current = target; - } - const finalSegment = segments[segments.length - 1]; - const storedValue = value; - if (current instanceof this.#mapCtor) current.set(finalSegment, storedValue); - else if (Array.isArray(current) && /^\d+$/.test(finalSegment)) current[parseInt(finalSegment, 10)] = storedValue; - } - /** - * Normalizes a path string into a consistent, slash-delimited format. - * Converts bracket notation and dot notation in a two-pass. - * e.g., "bookRecommendations[0].title" -> "/bookRecommendations/0/title" - * e.g., "book.0.title" -> "/book/0/title" - */ - #normalizePath(path) { - return "/" + path.replace(/\[(\d+)\]/g, ".$1").split(".").filter((s) => s.length > 0).join("/"); - } - #getDataByPath(root, path) { - const segments = this.#normalizePath(path).split("/").filter((s) => s); - let current = root; - for (const segment of segments) { - if (current === void 0 || current === null) return null; - if (current instanceof Map) current = current.get(segment); - else if (Array.isArray(current) && /^\d+$/.test(segment)) current = current[parseInt(segment, 10)]; - else if (isObject$1(current)) current = current[segment]; - else return null; - } - return current; - } - #getOrCreateSurface(surfaceId) { - let surface = this.#surfaces.get(surfaceId); - if (!surface) { - surface = new this.#objCtor({ - rootComponentId: null, - componentTree: null, - dataModel: new this.#mapCtor(), - components: new this.#mapCtor(), - styles: new this.#objCtor() - }); - this.#surfaces.set(surfaceId, surface); - } - return surface; - } - #handleBeginRendering(message, surfaceId) { - const surface = this.#getOrCreateSurface(surfaceId); - surface.rootComponentId = message.root; - surface.styles = message.styles ?? {}; - this.#rebuildComponentTree(surface); - } - #handleSurfaceUpdate(message, surfaceId) { - const surface = this.#getOrCreateSurface(surfaceId); - for (const component of message.components) surface.components.set(component.id, component); - this.#rebuildComponentTree(surface); - } - #handleDataModelUpdate(message, surfaceId) { - const surface = this.#getOrCreateSurface(surfaceId); - const path = message.path ?? "/"; - this.#setDataByPath(surface.dataModel, path, message.contents); - this.#rebuildComponentTree(surface); - } - #handleDeleteSurface(message) { - this.#surfaces.delete(message.surfaceId); - } - /** - * Starts at the root component of the surface and builds out the tree - * recursively. This process involves resolving all properties of the child - * components, and expanding on any explicit children lists or templates - * found in the structure. - * - * @param surface The surface to be built. - */ - #rebuildComponentTree(surface) { - if (!surface.rootComponentId) { - surface.componentTree = null; - return; - } - const visited = new this.#setCtor(); - surface.componentTree = this.#buildNodeRecursive(surface.rootComponentId, surface, visited, "/", ""); - } - /** Finds a value key in a map. */ - #findValueKey(value) { - return Object.keys(value).find((k) => k.startsWith("value")); - } - /** - * Builds out the nodes recursively. - */ - #buildNodeRecursive(baseComponentId, surface, visited, dataContextPath, idSuffix = "") { - const fullId = `${baseComponentId}${idSuffix}`; - const { components } = surface; - if (!components.has(baseComponentId)) return null; - if (visited.has(fullId)) throw new Error(`Circular dependency for component "${fullId}".`); - visited.add(fullId); - const componentData = components.get(baseComponentId); - const componentProps = componentData.component ?? {}; - const componentType = Object.keys(componentProps)[0]; - const unresolvedProperties = componentProps[componentType]; - const resolvedProperties = new this.#objCtor(); - if (isObject$1(unresolvedProperties)) for (const [key, value] of Object.entries(unresolvedProperties)) resolvedProperties[key] = this.#resolvePropertyValue(value, surface, visited, dataContextPath, idSuffix, key); - visited.delete(fullId); - const baseNode = { - id: fullId, - dataContextPath, - weight: componentData.weight ?? "initial" - }; - switch (componentType) { - case "Text": - if (!isResolvedText(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Text", - properties: resolvedProperties - }); - case "Image": - if (!isResolvedImage(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Image", - properties: resolvedProperties - }); - case "Icon": - if (!isResolvedIcon(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Icon", - properties: resolvedProperties - }); - case "Video": - if (!isResolvedVideo(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Video", - properties: resolvedProperties - }); - case "AudioPlayer": - if (!isResolvedAudioPlayer(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "AudioPlayer", - properties: resolvedProperties - }); - case "Row": - if (!isResolvedRow(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Row", - properties: resolvedProperties - }); - case "Column": - if (!isResolvedColumn(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Column", - properties: resolvedProperties - }); - case "List": - if (!isResolvedList(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "List", - properties: resolvedProperties - }); - case "Card": - if (!isResolvedCard(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Card", - properties: resolvedProperties - }); - case "Tabs": - if (!isResolvedTabs(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Tabs", - properties: resolvedProperties - }); - case "Divider": - if (!isResolvedDivider(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Divider", - properties: resolvedProperties - }); - case "Modal": - if (!isResolvedModal(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Modal", - properties: resolvedProperties - }); - case "Button": - if (!isResolvedButton(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Button", - properties: resolvedProperties - }); - case "CheckBox": - if (!isResolvedCheckbox(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "CheckBox", - properties: resolvedProperties - }); - case "TextField": - if (!isResolvedTextField(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "TextField", - properties: resolvedProperties - }); - case "DateTimeInput": - if (!isResolvedDateTimeInput(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "DateTimeInput", - properties: resolvedProperties - }); - case "MultipleChoice": - if (!isResolvedMultipleChoice(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "MultipleChoice", - properties: resolvedProperties - }); - case "Slider": - if (!isResolvedSlider(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); - return new this.#objCtor({ - ...baseNode, - type: "Slider", - properties: resolvedProperties - }); - default: return new this.#objCtor({ - ...baseNode, - type: componentType, - properties: resolvedProperties - }); - } - } - /** - * Recursively resolves an individual property value. If a property indicates - * a child node (a string that matches a component ID), an explicitList of - * children, or a template, these will be built out here. - */ - #resolvePropertyValue(value, surface, visited, dataContextPath, idSuffix = "", propertyKey = null) { - const isComponentIdReferenceKey = (key) => key === "child" || key.endsWith("Child"); - if (typeof value === "string" && propertyKey && isComponentIdReferenceKey(propertyKey) && surface.components.has(value)) return this.#buildNodeRecursive(value, surface, visited, dataContextPath, idSuffix); - if (isComponentArrayReference(value)) { - if (value.explicitList) return value.explicitList.map((id) => this.#buildNodeRecursive(id, surface, visited, dataContextPath, idSuffix)); - if (value.template) { - const fullDataPath = this.resolvePath(value.template.dataBinding, dataContextPath); - const data = this.#getDataByPath(surface.dataModel, fullDataPath); - const template = value.template; - if (Array.isArray(data)) return data.map((_, index) => { - const newSuffix = `:${[...dataContextPath.split("/").filter((segment) => /^\d+$/.test(segment)), index].join(":")}`; - const childDataContextPath = `${fullDataPath}/${index}`; - return this.#buildNodeRecursive(template.componentId, surface, visited, childDataContextPath, newSuffix); - }); - if (data instanceof this.#mapCtor) return Array.from(data.keys(), (key) => { - const newSuffix = `:${key}`; - const childDataContextPath = `${fullDataPath}/${key}`; - return this.#buildNodeRecursive(template.componentId, surface, visited, childDataContextPath, newSuffix); - }); - return new this.#arrayCtor(); - } - } - if (Array.isArray(value)) return value.map((item) => this.#resolvePropertyValue(item, surface, visited, dataContextPath, idSuffix, propertyKey)); - if (isObject$1(value)) { - const newObj = new this.#objCtor(); - for (const [key, propValue] of Object.entries(value)) { - let propertyValue = propValue; - if (isPath(key, propValue) && dataContextPath !== "/") { - propertyValue = propValue.replace(/^\.?\/item/, "").replace(/^\.?\/text/, "").replace(/^\.?\/label/, "").replace(/^\.?\//, ""); - newObj[key] = propertyValue; - continue; - } - newObj[key] = this.#resolvePropertyValue(propertyValue, surface, visited, dataContextPath, idSuffix, key); - } - return newObj; - } - return value; - } + static { + this.DEFAULT_SURFACE_ID = "@default"; + } + #mapCtor = Map; + #arrayCtor = Array; + #setCtor = Set; + #objCtor = Object; + #surfaces; + constructor( + opts = { + mapCtor: Map, + arrayCtor: Array, + setCtor: Set, + objCtor: Object, + }, + ) { + this.opts = opts; + this.#arrayCtor = opts.arrayCtor; + this.#mapCtor = opts.mapCtor; + this.#setCtor = opts.setCtor; + this.#objCtor = opts.objCtor; + this.#surfaces = new opts.mapCtor(); + } + getSurfaces() { + return this.#surfaces; + } + clearSurfaces() { + this.#surfaces.clear(); + } + processMessages(messages) { + for (const message of messages) { + if (message.beginRendering) + this.#handleBeginRendering(message.beginRendering, message.beginRendering.surfaceId); + if (message.surfaceUpdate) + this.#handleSurfaceUpdate(message.surfaceUpdate, message.surfaceUpdate.surfaceId); + if (message.dataModelUpdate) + this.#handleDataModelUpdate(message.dataModelUpdate, message.dataModelUpdate.surfaceId); + if (message.deleteSurface) this.#handleDeleteSurface(message.deleteSurface); + } + } + /** + * Retrieves the data for a given component node and a relative path string. + * This correctly handles the special `.` path, which refers to the node's + * own data context. + */ + getData(node, relativePath, surfaceId = A2uiMessageProcessor.DEFAULT_SURFACE_ID) { + const surface = this.#getOrCreateSurface(surfaceId); + if (!surface) return null; + let finalPath; + if (relativePath === "." || relativePath === "") finalPath = node.dataContextPath ?? "/"; + else finalPath = this.resolvePath(relativePath, node.dataContextPath); + return this.#getDataByPath(surface.dataModel, finalPath); + } + setData(node, relativePath, value, surfaceId = A2uiMessageProcessor.DEFAULT_SURFACE_ID) { + if (!node) { + console.warn("No component node set"); + return; + } + const surface = this.#getOrCreateSurface(surfaceId); + if (!surface) return; + let finalPath; + if (relativePath === "." || relativePath === "") finalPath = node.dataContextPath ?? "/"; + else finalPath = this.resolvePath(relativePath, node.dataContextPath); + this.#setDataByPath(surface.dataModel, finalPath, value); + } + resolvePath(path, dataContextPath) { + if (path.startsWith("/")) return path; + if (dataContextPath && dataContextPath !== "/") + return dataContextPath.endsWith("/") + ? `${dataContextPath}${path}` + : `${dataContextPath}/${path}`; + return `/${path}`; + } + #parseIfJsonString(value) { + if (typeof value !== "string") return value; + const trimmedValue = value.trim(); + if ( + (trimmedValue.startsWith("{") && trimmedValue.endsWith("}")) || + (trimmedValue.startsWith("[") && trimmedValue.endsWith("]")) + ) + try { + return JSON.parse(value); + } catch (e) { + console.warn(`Failed to parse potential JSON string: "${value.substring(0, 50)}..."`, e); + return value; + } + return value; + } + /** + * Converts a specific array format [{key: "...", value_string: "..."}, ...] + * into a standard Map. It also attempts to parse any string values that + * appear to be stringified JSON. + */ + #convertKeyValueArrayToMap(arr) { + const map = new this.#mapCtor(); + for (const item of arr) { + if (!isObject$1(item) || !("key" in item)) continue; + const key = item.key; + const valueKey = this.#findValueKey(item); + if (!valueKey) continue; + let value = item[valueKey]; + if (valueKey === "valueMap" && Array.isArray(value)) + value = this.#convertKeyValueArrayToMap(value); + else if (typeof value === "string") value = this.#parseIfJsonString(value); + this.#setDataByPath(map, key, value); + } + return map; + } + #setDataByPath(root, path, value) { + if (Array.isArray(value) && (value.length === 0 || (isObject$1(value[0]) && "key" in value[0]))) + if (value.length === 1 && isObject$1(value[0]) && value[0].key === ".") { + const item = value[0]; + const valueKey = this.#findValueKey(item); + if (valueKey) { + value = item[valueKey]; + if (valueKey === "valueMap" && Array.isArray(value)) + value = this.#convertKeyValueArrayToMap(value); + else if (typeof value === "string") value = this.#parseIfJsonString(value); + } else value = this.#convertKeyValueArrayToMap(value); + } else value = this.#convertKeyValueArrayToMap(value); + const segments = this.#normalizePath(path) + .split("/") + .filter((s) => s); + if (segments.length === 0) { + if (value instanceof Map || isObject$1(value)) { + if (!(value instanceof Map) && isObject$1(value)) + value = new this.#mapCtor(Object.entries(value)); + root.clear(); + for (const [key, v] of value.entries()) root.set(key, v); + } else console.error("Cannot set root of DataModel to a non-Map value."); + return; + } + let current = root; + for (let i = 0; i < segments.length - 1; i++) { + const segment = segments[i]; + let target; + if (current instanceof Map) target = current.get(segment); + else if (Array.isArray(current) && /^\d+$/.test(segment)) + target = current[parseInt(segment, 10)]; + if (target === void 0 || typeof target !== "object" || target === null) { + target = new this.#mapCtor(); + if (current instanceof this.#mapCtor) current.set(segment, target); + else if (Array.isArray(current)) current[parseInt(segment, 10)] = target; + } + current = target; + } + const finalSegment = segments[segments.length - 1]; + const storedValue = value; + if (current instanceof this.#mapCtor) current.set(finalSegment, storedValue); + else if (Array.isArray(current) && /^\d+$/.test(finalSegment)) + current[parseInt(finalSegment, 10)] = storedValue; + } + /** + * Normalizes a path string into a consistent, slash-delimited format. + * Converts bracket notation and dot notation in a two-pass. + * e.g., "bookRecommendations[0].title" -> "/bookRecommendations/0/title" + * e.g., "book.0.title" -> "/book/0/title" + */ + #normalizePath(path) { + return ( + "/" + + path + .replace(/\[(\d+)\]/g, ".$1") + .split(".") + .filter((s) => s.length > 0) + .join("/") + ); + } + #getDataByPath(root, path) { + const segments = this.#normalizePath(path) + .split("/") + .filter((s) => s); + let current = root; + for (const segment of segments) { + if (current === void 0 || current === null) return null; + if (current instanceof Map) current = current.get(segment); + else if (Array.isArray(current) && /^\d+$/.test(segment)) + current = current[parseInt(segment, 10)]; + else if (isObject$1(current)) current = current[segment]; + else return null; + } + return current; + } + #getOrCreateSurface(surfaceId) { + let surface = this.#surfaces.get(surfaceId); + if (!surface) { + surface = new this.#objCtor({ + rootComponentId: null, + componentTree: null, + dataModel: new this.#mapCtor(), + components: new this.#mapCtor(), + styles: new this.#objCtor(), + }); + this.#surfaces.set(surfaceId, surface); + } + return surface; + } + #handleBeginRendering(message, surfaceId) { + const surface = this.#getOrCreateSurface(surfaceId); + surface.rootComponentId = message.root; + surface.styles = message.styles ?? {}; + this.#rebuildComponentTree(surface); + } + #handleSurfaceUpdate(message, surfaceId) { + const surface = this.#getOrCreateSurface(surfaceId); + for (const component of message.components) surface.components.set(component.id, component); + this.#rebuildComponentTree(surface); + } + #handleDataModelUpdate(message, surfaceId) { + const surface = this.#getOrCreateSurface(surfaceId); + const path = message.path ?? "/"; + this.#setDataByPath(surface.dataModel, path, message.contents); + this.#rebuildComponentTree(surface); + } + #handleDeleteSurface(message) { + this.#surfaces.delete(message.surfaceId); + } + /** + * Starts at the root component of the surface and builds out the tree + * recursively. This process involves resolving all properties of the child + * components, and expanding on any explicit children lists or templates + * found in the structure. + * + * @param surface The surface to be built. + */ + #rebuildComponentTree(surface) { + if (!surface.rootComponentId) { + surface.componentTree = null; + return; + } + const visited = new this.#setCtor(); + surface.componentTree = this.#buildNodeRecursive( + surface.rootComponentId, + surface, + visited, + "/", + "", + ); + } + /** Finds a value key in a map. */ + #findValueKey(value) { + return Object.keys(value).find((k) => k.startsWith("value")); + } + /** + * Builds out the nodes recursively. + */ + #buildNodeRecursive(baseComponentId, surface, visited, dataContextPath, idSuffix = "") { + const fullId = `${baseComponentId}${idSuffix}`; + const { components } = surface; + if (!components.has(baseComponentId)) return null; + if (visited.has(fullId)) throw new Error(`Circular dependency for component "${fullId}".`); + visited.add(fullId); + const componentData = components.get(baseComponentId); + const componentProps = componentData.component ?? {}; + const componentType = Object.keys(componentProps)[0]; + const unresolvedProperties = componentProps[componentType]; + const resolvedProperties = new this.#objCtor(); + if (isObject$1(unresolvedProperties)) + for (const [key, value] of Object.entries(unresolvedProperties)) + resolvedProperties[key] = this.#resolvePropertyValue( + value, + surface, + visited, + dataContextPath, + idSuffix, + key, + ); + visited.delete(fullId); + const baseNode = { + id: fullId, + dataContextPath, + weight: componentData.weight ?? "initial", + }; + switch (componentType) { + case "Text": + if (!isResolvedText(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Text", + properties: resolvedProperties, + }); + case "Image": + if (!isResolvedImage(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Image", + properties: resolvedProperties, + }); + case "Icon": + if (!isResolvedIcon(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Icon", + properties: resolvedProperties, + }); + case "Video": + if (!isResolvedVideo(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Video", + properties: resolvedProperties, + }); + case "AudioPlayer": + if (!isResolvedAudioPlayer(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "AudioPlayer", + properties: resolvedProperties, + }); + case "Row": + if (!isResolvedRow(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Row", + properties: resolvedProperties, + }); + case "Column": + if (!isResolvedColumn(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Column", + properties: resolvedProperties, + }); + case "List": + if (!isResolvedList(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "List", + properties: resolvedProperties, + }); + case "Card": + if (!isResolvedCard(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Card", + properties: resolvedProperties, + }); + case "Tabs": + if (!isResolvedTabs(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Tabs", + properties: resolvedProperties, + }); + case "Divider": + if (!isResolvedDivider(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Divider", + properties: resolvedProperties, + }); + case "Modal": + if (!isResolvedModal(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Modal", + properties: resolvedProperties, + }); + case "Button": + if (!isResolvedButton(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Button", + properties: resolvedProperties, + }); + case "CheckBox": + if (!isResolvedCheckbox(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "CheckBox", + properties: resolvedProperties, + }); + case "TextField": + if (!isResolvedTextField(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "TextField", + properties: resolvedProperties, + }); + case "DateTimeInput": + if (!isResolvedDateTimeInput(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "DateTimeInput", + properties: resolvedProperties, + }); + case "MultipleChoice": + if (!isResolvedMultipleChoice(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "MultipleChoice", + properties: resolvedProperties, + }); + case "Slider": + if (!isResolvedSlider(resolvedProperties)) + throw new Error(`Invalid data; expected ${componentType}`); + return new this.#objCtor({ + ...baseNode, + type: "Slider", + properties: resolvedProperties, + }); + default: + return new this.#objCtor({ + ...baseNode, + type: componentType, + properties: resolvedProperties, + }); + } + } + /** + * Recursively resolves an individual property value. If a property indicates + * a child node (a string that matches a component ID), an explicitList of + * children, or a template, these will be built out here. + */ + #resolvePropertyValue( + value, + surface, + visited, + dataContextPath, + idSuffix = "", + propertyKey = null, + ) { + const isComponentIdReferenceKey = (key) => key === "child" || key.endsWith("Child"); + if ( + typeof value === "string" && + propertyKey && + isComponentIdReferenceKey(propertyKey) && + surface.components.has(value) + ) + return this.#buildNodeRecursive(value, surface, visited, dataContextPath, idSuffix); + if (isComponentArrayReference(value)) { + if (value.explicitList) + return value.explicitList.map((id) => + this.#buildNodeRecursive(id, surface, visited, dataContextPath, idSuffix), + ); + if (value.template) { + const fullDataPath = this.resolvePath(value.template.dataBinding, dataContextPath); + const data = this.#getDataByPath(surface.dataModel, fullDataPath); + const template = value.template; + if (Array.isArray(data)) + return data.map((_, index) => { + const newSuffix = `:${[...dataContextPath.split("/").filter((segment) => /^\d+$/.test(segment)), index].join(":")}`; + const childDataContextPath = `${fullDataPath}/${index}`; + return this.#buildNodeRecursive( + template.componentId, + surface, + visited, + childDataContextPath, + newSuffix, + ); + }); + if (data instanceof this.#mapCtor) + return Array.from(data.keys(), (key) => { + const newSuffix = `:${key}`; + const childDataContextPath = `${fullDataPath}/${key}`; + return this.#buildNodeRecursive( + template.componentId, + surface, + visited, + childDataContextPath, + newSuffix, + ); + }); + return new this.#arrayCtor(); + } + } + if (Array.isArray(value)) + return value.map((item) => + this.#resolvePropertyValue(item, surface, visited, dataContextPath, idSuffix, propertyKey), + ); + if (isObject$1(value)) { + const newObj = new this.#objCtor(); + for (const [key, propValue] of Object.entries(value)) { + let propertyValue = propValue; + if (isPath(key, propValue) && dataContextPath !== "/") { + propertyValue = propValue + .replace(/^\.?\/item/, "") + .replace(/^\.?\/text/, "") + .replace(/^\.?\/label/, "") + .replace(/^\.?\//, ""); + newObj[key] = propertyValue; + continue; + } + newObj[key] = this.#resolvePropertyValue( + propertyValue, + surface, + visited, + dataContextPath, + idSuffix, + key, + ); + } + return newObj; + } + return value; + } }; var __defProp = Object.defineProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; +var __defNormalProp = (obj, key, value) => + key in obj + ? __defProp(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value, + }) + : (obj[key] = value); var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; }; var __accessCheck = (obj, member, msg) => { - if (!member.has(obj)) throw TypeError("Cannot " + msg); + if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateIn = (member, obj) => { - if (Object(obj) !== obj) throw TypeError("Cannot use the \"in\" operator on this value"); - return member.has(obj); + if (Object(obj) !== obj) throw TypeError('Cannot use the "in" operator on this value'); + return member.has(obj); }; var __privateAdd = (obj, member, value) => { - if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); - member instanceof WeakSet ? member.add(obj) : member.set(obj, value); + if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateMethod = (obj, member, method) => { - __accessCheck(obj, member, "access private method"); - return method; + __accessCheck(obj, member, "access private method"); + return method; }; /** -* @license -* Copyright Google LLC All Rights Reserved. -* -* Use of this source code is governed by an MIT-style license that can be -* found in the LICENSE file at https://angular.io/license -*/ + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ function defaultEquals(a, b) { - return Object.is(a, b); + return Object.is(a, b); } /** -* @license -* Copyright Google LLC All Rights Reserved. -* -* Use of this source code is governed by an MIT-style license that can be -* found in the LICENSE file at https://angular.io/license -*/ + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ let activeConsumer = null; let inNotificationPhase = false; let epoch = 1; const SIGNAL = /* @__PURE__ */ Symbol("SIGNAL"); function setActiveConsumer(consumer) { - const prev = activeConsumer; - activeConsumer = consumer; - return prev; + const prev = activeConsumer; + activeConsumer = consumer; + return prev; } function getActiveConsumer() { - return activeConsumer; + return activeConsumer; } function isInNotificationPhase() { - return inNotificationPhase; + return inNotificationPhase; } const REACTIVE_NODE = { - version: 0, - lastCleanEpoch: 0, - dirty: false, - producerNode: void 0, - producerLastReadVersion: void 0, - producerIndexOfThis: void 0, - nextProducerIndex: 0, - liveConsumerNode: void 0, - liveConsumerIndexOfThis: void 0, - consumerAllowSignalWrites: false, - consumerIsAlwaysLive: false, - producerMustRecompute: () => false, - producerRecomputeValue: () => {}, - consumerMarkedDirty: () => {}, - consumerOnSignalRead: () => {} + version: 0, + lastCleanEpoch: 0, + dirty: false, + producerNode: void 0, + producerLastReadVersion: void 0, + producerIndexOfThis: void 0, + nextProducerIndex: 0, + liveConsumerNode: void 0, + liveConsumerIndexOfThis: void 0, + consumerAllowSignalWrites: false, + consumerIsAlwaysLive: false, + producerMustRecompute: () => false, + producerRecomputeValue: () => {}, + consumerMarkedDirty: () => {}, + consumerOnSignalRead: () => {}, }; function producerAccessed(node) { - if (inNotificationPhase) throw new Error(typeof ngDevMode !== "undefined" && ngDevMode ? `Assertion error: signal read during notification phase` : ""); - if (activeConsumer === null) return; - activeConsumer.consumerOnSignalRead(node); - const idx = activeConsumer.nextProducerIndex++; - assertConsumerNode(activeConsumer); - if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) { - if (consumerIsLive(activeConsumer)) { - const staleProducer = activeConsumer.producerNode[idx]; - producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]); - } - } - if (activeConsumer.producerNode[idx] !== node) { - activeConsumer.producerNode[idx] = node; - activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0; - } - activeConsumer.producerLastReadVersion[idx] = node.version; + if (inNotificationPhase) + throw new Error( + typeof ngDevMode !== "undefined" && ngDevMode + ? `Assertion error: signal read during notification phase` + : "", + ); + if (activeConsumer === null) return; + activeConsumer.consumerOnSignalRead(node); + const idx = activeConsumer.nextProducerIndex++; + assertConsumerNode(activeConsumer); + if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) { + if (consumerIsLive(activeConsumer)) { + const staleProducer = activeConsumer.producerNode[idx]; + producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]); + } + } + if (activeConsumer.producerNode[idx] !== node) { + activeConsumer.producerNode[idx] = node; + activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) + ? producerAddLiveConsumer(node, activeConsumer, idx) + : 0; + } + activeConsumer.producerLastReadVersion[idx] = node.version; } function producerIncrementEpoch() { - epoch++; + epoch++; } function producerUpdateValueVersion(node) { - if (!node.dirty && node.lastCleanEpoch === epoch) return; - if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) { - node.dirty = false; - node.lastCleanEpoch = epoch; - return; - } - node.producerRecomputeValue(node); - node.dirty = false; - node.lastCleanEpoch = epoch; + if (!node.dirty && node.lastCleanEpoch === epoch) return; + if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) { + node.dirty = false; + node.lastCleanEpoch = epoch; + return; + } + node.producerRecomputeValue(node); + node.dirty = false; + node.lastCleanEpoch = epoch; } function producerNotifyConsumers(node) { - if (node.liveConsumerNode === void 0) return; - const prev = inNotificationPhase; - inNotificationPhase = true; - try { - for (const consumer of node.liveConsumerNode) if (!consumer.dirty) consumerMarkDirty(consumer); - } finally { - inNotificationPhase = prev; - } + if (node.liveConsumerNode === void 0) return; + const prev = inNotificationPhase; + inNotificationPhase = true; + try { + for (const consumer of node.liveConsumerNode) if (!consumer.dirty) consumerMarkDirty(consumer); + } finally { + inNotificationPhase = prev; + } } function producerUpdatesAllowed() { - return (activeConsumer == null ? void 0 : activeConsumer.consumerAllowSignalWrites) !== false; + return (activeConsumer == null ? void 0 : activeConsumer.consumerAllowSignalWrites) !== false; } function consumerMarkDirty(node) { - var _a; - node.dirty = true; - producerNotifyConsumers(node); - (_a = node.consumerMarkedDirty) == null || _a.call(node.wrapper ?? node); + var _a; + node.dirty = true; + producerNotifyConsumers(node); + (_a = node.consumerMarkedDirty) == null || _a.call(node.wrapper ?? node); } function consumerBeforeComputation(node) { - node && (node.nextProducerIndex = 0); - return setActiveConsumer(node); + node && (node.nextProducerIndex = 0); + return setActiveConsumer(node); } function consumerAfterComputation(node, prevConsumer) { - setActiveConsumer(prevConsumer); - if (!node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0) return; - if (consumerIsLive(node)) for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); - while (node.producerNode.length > node.nextProducerIndex) { - node.producerNode.pop(); - node.producerLastReadVersion.pop(); - node.producerIndexOfThis.pop(); - } + setActiveConsumer(prevConsumer); + if ( + !node || + node.producerNode === void 0 || + node.producerIndexOfThis === void 0 || + node.producerLastReadVersion === void 0 + ) + return; + if (consumerIsLive(node)) + for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) + producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); + while (node.producerNode.length > node.nextProducerIndex) { + node.producerNode.pop(); + node.producerLastReadVersion.pop(); + node.producerIndexOfThis.pop(); + } } function consumerPollProducersForChange(node) { - assertConsumerNode(node); - for (let i = 0; i < node.producerNode.length; i++) { - const producer = node.producerNode[i]; - const seenVersion = node.producerLastReadVersion[i]; - if (seenVersion !== producer.version) return true; - producerUpdateValueVersion(producer); - if (seenVersion !== producer.version) return true; - } - return false; + assertConsumerNode(node); + for (let i = 0; i < node.producerNode.length; i++) { + const producer = node.producerNode[i]; + const seenVersion = node.producerLastReadVersion[i]; + if (seenVersion !== producer.version) return true; + producerUpdateValueVersion(producer); + if (seenVersion !== producer.version) return true; + } + return false; } function producerAddLiveConsumer(node, consumer, indexOfThis) { - var _a; - assertProducerNode(node); - assertConsumerNode(node); - if (node.liveConsumerNode.length === 0) { - (_a = node.watched) == null || _a.call(node.wrapper); - for (let i = 0; i < node.producerNode.length; i++) node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i); - } - node.liveConsumerIndexOfThis.push(indexOfThis); - return node.liveConsumerNode.push(consumer) - 1; + var _a; + assertProducerNode(node); + assertConsumerNode(node); + if (node.liveConsumerNode.length === 0) { + (_a = node.watched) == null || _a.call(node.wrapper); + for (let i = 0; i < node.producerNode.length; i++) + node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i); + } + node.liveConsumerIndexOfThis.push(indexOfThis); + return node.liveConsumerNode.push(consumer) - 1; } function producerRemoveLiveConsumerAtIndex(node, idx) { - var _a; - assertProducerNode(node); - assertConsumerNode(node); - if (typeof ngDevMode !== "undefined" && ngDevMode && idx >= node.liveConsumerNode.length) throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`); - if (node.liveConsumerNode.length === 1) { - (_a = node.unwatched) == null || _a.call(node.wrapper); - for (let i = 0; i < node.producerNode.length; i++) producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); - } - const lastIdx = node.liveConsumerNode.length - 1; - node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx]; - node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx]; - node.liveConsumerNode.length--; - node.liveConsumerIndexOfThis.length--; - if (idx < node.liveConsumerNode.length) { - const idxProducer = node.liveConsumerIndexOfThis[idx]; - const consumer = node.liveConsumerNode[idx]; - assertConsumerNode(consumer); - consumer.producerIndexOfThis[idxProducer] = idx; - } + var _a; + assertProducerNode(node); + assertConsumerNode(node); + if (typeof ngDevMode !== "undefined" && ngDevMode && idx >= node.liveConsumerNode.length) + throw new Error( + `Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`, + ); + if (node.liveConsumerNode.length === 1) { + (_a = node.unwatched) == null || _a.call(node.wrapper); + for (let i = 0; i < node.producerNode.length; i++) + producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); + } + const lastIdx = node.liveConsumerNode.length - 1; + node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx]; + node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx]; + node.liveConsumerNode.length--; + node.liveConsumerIndexOfThis.length--; + if (idx < node.liveConsumerNode.length) { + const idxProducer = node.liveConsumerIndexOfThis[idx]; + const consumer = node.liveConsumerNode[idx]; + assertConsumerNode(consumer); + consumer.producerIndexOfThis[idxProducer] = idx; + } } function consumerIsLive(node) { - var _a; - return node.consumerIsAlwaysLive || (((_a = node == null ? void 0 : node.liveConsumerNode) == null ? void 0 : _a.length) ?? 0) > 0; + var _a; + return ( + node.consumerIsAlwaysLive || + (((_a = node == null ? void 0 : node.liveConsumerNode) == null ? void 0 : _a.length) ?? 0) > 0 + ); } function assertConsumerNode(node) { - node.producerNode ?? (node.producerNode = []); - node.producerIndexOfThis ?? (node.producerIndexOfThis = []); - node.producerLastReadVersion ?? (node.producerLastReadVersion = []); + node.producerNode ?? (node.producerNode = []); + node.producerIndexOfThis ?? (node.producerIndexOfThis = []); + node.producerLastReadVersion ?? (node.producerLastReadVersion = []); } function assertProducerNode(node) { - node.liveConsumerNode ?? (node.liveConsumerNode = []); - node.liveConsumerIndexOfThis ?? (node.liveConsumerIndexOfThis = []); + node.liveConsumerNode ?? (node.liveConsumerNode = []); + node.liveConsumerIndexOfThis ?? (node.liveConsumerIndexOfThis = []); } /** -* @license -* Copyright Google LLC All Rights Reserved. -* -* Use of this source code is governed by an MIT-style license that can be -* found in the LICENSE file at https://angular.io/license -*/ + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ function computedGet(node) { - producerUpdateValueVersion(node); - producerAccessed(node); - if (node.value === ERRORED) throw node.error; - return node.value; + producerUpdateValueVersion(node); + producerAccessed(node); + if (node.value === ERRORED) throw node.error; + return node.value; } function createComputed(computation) { - const node = Object.create(COMPUTED_NODE); - node.computation = computation; - const computed = () => computedGet(node); - computed[SIGNAL] = node; - return computed; + const node = Object.create(COMPUTED_NODE); + node.computation = computation; + const computed = () => computedGet(node); + computed[SIGNAL] = node; + return computed; } const UNSET = /* @__PURE__ */ Symbol("UNSET"); const COMPUTING = /* @__PURE__ */ Symbol("COMPUTING"); const ERRORED = /* @__PURE__ */ Symbol("ERRORED"); const COMPUTED_NODE = { - ...REACTIVE_NODE, - value: UNSET, - dirty: true, - error: null, - equal: defaultEquals, - producerMustRecompute(node) { - return node.value === UNSET || node.value === COMPUTING; - }, - producerRecomputeValue(node) { - if (node.value === COMPUTING) throw new Error("Detected cycle in computations."); - const oldValue = node.value; - node.value = COMPUTING; - const prevConsumer = consumerBeforeComputation(node); - let newValue; - let wasEqual = false; - try { - newValue = node.computation.call(node.wrapper); - wasEqual = oldValue !== UNSET && oldValue !== ERRORED && node.equal.call(node.wrapper, oldValue, newValue); - } catch (err) { - newValue = ERRORED; - node.error = err; - } finally { - consumerAfterComputation(node, prevConsumer); - } - if (wasEqual) { - node.value = oldValue; - return; - } - node.value = newValue; - node.version++; - } + ...REACTIVE_NODE, + value: UNSET, + dirty: true, + error: null, + equal: defaultEquals, + producerMustRecompute(node) { + return node.value === UNSET || node.value === COMPUTING; + }, + producerRecomputeValue(node) { + if (node.value === COMPUTING) throw new Error("Detected cycle in computations."); + const oldValue = node.value; + node.value = COMPUTING; + const prevConsumer = consumerBeforeComputation(node); + let newValue; + let wasEqual = false; + try { + newValue = node.computation.call(node.wrapper); + wasEqual = + oldValue !== UNSET && + oldValue !== ERRORED && + node.equal.call(node.wrapper, oldValue, newValue); + } catch (err) { + newValue = ERRORED; + node.error = err; + } finally { + consumerAfterComputation(node, prevConsumer); + } + if (wasEqual) { + node.value = oldValue; + return; + } + node.value = newValue; + node.version++; + }, }; /** -* @license -* Copyright Google LLC All Rights Reserved. -* -* Use of this source code is governed by an MIT-style license that can be -* found in the LICENSE file at https://angular.io/license -*/ + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ function defaultThrowError() { - throw new Error(); + throw new Error(); } let throwInvalidWriteToSignalErrorFn = defaultThrowError; function throwInvalidWriteToSignalError() { - throwInvalidWriteToSignalErrorFn(); + throwInvalidWriteToSignalErrorFn(); } /** -* @license -* Copyright Google LLC All Rights Reserved. -* -* Use of this source code is governed by an MIT-style license that can be -* found in the LICENSE file at https://angular.io/license -*/ + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ function createSignal(initialValue) { - const node = Object.create(SIGNAL_NODE); - node.value = initialValue; - const getter = () => { - producerAccessed(node); - return node.value; - }; - getter[SIGNAL] = node; - return getter; + const node = Object.create(SIGNAL_NODE); + node.value = initialValue; + const getter = () => { + producerAccessed(node); + return node.value; + }; + getter[SIGNAL] = node; + return getter; } function signalGetFn() { - producerAccessed(this); - return this.value; + producerAccessed(this); + return this.value; } function signalSetFn(node, newValue) { - if (!producerUpdatesAllowed()) throwInvalidWriteToSignalError(); - if (!node.equal.call(node.wrapper, node.value, newValue)) { - node.value = newValue; - signalValueChanged(node); - } + if (!producerUpdatesAllowed()) throwInvalidWriteToSignalError(); + if (!node.equal.call(node.wrapper, node.value, newValue)) { + node.value = newValue; + signalValueChanged(node); + } } const SIGNAL_NODE = { - ...REACTIVE_NODE, - equal: defaultEquals, - value: void 0 + ...REACTIVE_NODE, + equal: defaultEquals, + value: void 0, }; function signalValueChanged(node) { - node.version++; - producerIncrementEpoch(); - producerNotifyConsumers(node); + node.version++; + producerIncrementEpoch(); + producerNotifyConsumers(node); } /** -* @license -* Copyright 2024 Bloomberg Finance L.P. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * @license + * Copyright 2024 Bloomberg Finance L.P. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ const NODE = Symbol("node"); var Signal; ((Signal2) => { - var _a, _brand, _b, _brand2; - class State { - constructor(initialValue, options = {}) { - __privateAdd(this, _brand); - __publicField(this, _a); - const node = createSignal(initialValue)[SIGNAL]; - this[NODE] = node; - node.wrapper = this; - if (options) { - const equals = options.equals; - if (equals) node.equal = equals; - node.watched = options[Signal2.subtle.watched]; - node.unwatched = options[Signal2.subtle.unwatched]; - } - } - get() { - if (!(0, Signal2.isState)(this)) throw new TypeError("Wrong receiver type for Signal.State.prototype.get"); - return signalGetFn.call(this[NODE]); - } - set(newValue) { - if (!(0, Signal2.isState)(this)) throw new TypeError("Wrong receiver type for Signal.State.prototype.set"); - if (isInNotificationPhase()) throw new Error("Writes to signals not permitted during Watcher callback"); - const ref = this[NODE]; - signalSetFn(ref, newValue); - } - } - _a = NODE; - _brand = /* @__PURE__ */ new WeakSet(); - Signal2.isState = (s) => typeof s === "object" && __privateIn(_brand, s); - Signal2.State = State; - class Computed { - constructor(computation, options) { - __privateAdd(this, _brand2); - __publicField(this, _b); - const node = createComputed(computation)[SIGNAL]; - node.consumerAllowSignalWrites = true; - this[NODE] = node; - node.wrapper = this; - if (options) { - const equals = options.equals; - if (equals) node.equal = equals; - node.watched = options[Signal2.subtle.watched]; - node.unwatched = options[Signal2.subtle.unwatched]; - } - } - get() { - if (!(0, Signal2.isComputed)(this)) throw new TypeError("Wrong receiver type for Signal.Computed.prototype.get"); - return computedGet(this[NODE]); - } - } - _b = NODE; - _brand2 = /* @__PURE__ */ new WeakSet(); - Signal2.isComputed = (c) => typeof c === "object" && __privateIn(_brand2, c); - Signal2.Computed = Computed; - ((subtle2) => { - var _a2, _brand3, _assertSignals, assertSignals_fn; - function untrack(cb) { - let output; - let prevActiveConsumer = null; - try { - prevActiveConsumer = setActiveConsumer(null); - output = cb(); - } finally { - setActiveConsumer(prevActiveConsumer); - } - return output; - } - subtle2.untrack = untrack; - function introspectSources(sink) { - var _a3; - if (!(0, Signal2.isComputed)(sink) && !(0, Signal2.isWatcher)(sink)) throw new TypeError("Called introspectSources without a Computed or Watcher argument"); - return ((_a3 = sink[NODE].producerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? []; - } - subtle2.introspectSources = introspectSources; - function introspectSinks(signal) { - var _a3; - if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) throw new TypeError("Called introspectSinks without a Signal argument"); - return ((_a3 = signal[NODE].liveConsumerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? []; - } - subtle2.introspectSinks = introspectSinks; - function hasSinks(signal) { - if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) throw new TypeError("Called hasSinks without a Signal argument"); - const liveConsumerNode = signal[NODE].liveConsumerNode; - if (!liveConsumerNode) return false; - return liveConsumerNode.length > 0; - } - subtle2.hasSinks = hasSinks; - function hasSources(signal) { - if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isWatcher)(signal)) throw new TypeError("Called hasSources without a Computed or Watcher argument"); - const producerNode = signal[NODE].producerNode; - if (!producerNode) return false; - return producerNode.length > 0; - } - subtle2.hasSources = hasSources; - class Watcher { - constructor(notify) { - __privateAdd(this, _brand3); - __privateAdd(this, _assertSignals); - __publicField(this, _a2); - let node = Object.create(REACTIVE_NODE); - node.wrapper = this; - node.consumerMarkedDirty = notify; - node.consumerIsAlwaysLive = true; - node.consumerAllowSignalWrites = false; - node.producerNode = []; - this[NODE] = node; - } - watch(...signals) { - if (!(0, Signal2.isWatcher)(this)) throw new TypeError("Called unwatch without Watcher receiver"); - __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals); - const node = this[NODE]; - node.dirty = false; - const prev = setActiveConsumer(node); - for (const signal of signals) producerAccessed(signal[NODE]); - setActiveConsumer(prev); - } - unwatch(...signals) { - if (!(0, Signal2.isWatcher)(this)) throw new TypeError("Called unwatch without Watcher receiver"); - __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals); - const node = this[NODE]; - assertConsumerNode(node); - for (let i = node.producerNode.length - 1; i >= 0; i--) if (signals.includes(node.producerNode[i].wrapper)) { - producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); - const lastIdx = node.producerNode.length - 1; - node.producerNode[i] = node.producerNode[lastIdx]; - node.producerIndexOfThis[i] = node.producerIndexOfThis[lastIdx]; - node.producerNode.length--; - node.producerIndexOfThis.length--; - node.nextProducerIndex--; - if (i < node.producerNode.length) { - const idxConsumer = node.producerIndexOfThis[i]; - const producer = node.producerNode[i]; - assertProducerNode(producer); - producer.liveConsumerIndexOfThis[idxConsumer] = i; - } - } - } - getPending() { - if (!(0, Signal2.isWatcher)(this)) throw new TypeError("Called getPending without Watcher receiver"); - return this[NODE].producerNode.filter((n) => n.dirty).map((n) => n.wrapper); - } - } - _a2 = NODE; - _brand3 = /* @__PURE__ */ new WeakSet(); - _assertSignals = /* @__PURE__ */ new WeakSet(); - assertSignals_fn = function(signals) { - for (const signal of signals) if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) throw new TypeError("Called watch/unwatch without a Computed or State argument"); - }; - Signal2.isWatcher = (w) => __privateIn(_brand3, w); - subtle2.Watcher = Watcher; - function currentComputed() { - var _a3; - return (_a3 = getActiveConsumer()) == null ? void 0 : _a3.wrapper; - } - subtle2.currentComputed = currentComputed; - subtle2.watched = Symbol("watched"); - subtle2.unwatched = Symbol("unwatched"); - })(Signal2.subtle || (Signal2.subtle = {})); + var _a, _brand, _b, _brand2; + class State { + constructor(initialValue, options = {}) { + __privateAdd(this, _brand); + __publicField(this, _a); + const node = createSignal(initialValue)[SIGNAL]; + this[NODE] = node; + node.wrapper = this; + if (options) { + const equals = options.equals; + if (equals) node.equal = equals; + node.watched = options[Signal2.subtle.watched]; + node.unwatched = options[Signal2.subtle.unwatched]; + } + } + get() { + if (!(0, Signal2.isState)(this)) + throw new TypeError("Wrong receiver type for Signal.State.prototype.get"); + return signalGetFn.call(this[NODE]); + } + set(newValue) { + if (!(0, Signal2.isState)(this)) + throw new TypeError("Wrong receiver type for Signal.State.prototype.set"); + if (isInNotificationPhase()) + throw new Error("Writes to signals not permitted during Watcher callback"); + const ref = this[NODE]; + signalSetFn(ref, newValue); + } + } + _a = NODE; + _brand = /* @__PURE__ */ new WeakSet(); + Signal2.isState = (s) => typeof s === "object" && __privateIn(_brand, s); + Signal2.State = State; + class Computed { + constructor(computation, options) { + __privateAdd(this, _brand2); + __publicField(this, _b); + const node = createComputed(computation)[SIGNAL]; + node.consumerAllowSignalWrites = true; + this[NODE] = node; + node.wrapper = this; + if (options) { + const equals = options.equals; + if (equals) node.equal = equals; + node.watched = options[Signal2.subtle.watched]; + node.unwatched = options[Signal2.subtle.unwatched]; + } + } + get() { + if (!(0, Signal2.isComputed)(this)) + throw new TypeError("Wrong receiver type for Signal.Computed.prototype.get"); + return computedGet(this[NODE]); + } + } + _b = NODE; + _brand2 = /* @__PURE__ */ new WeakSet(); + Signal2.isComputed = (c) => typeof c === "object" && __privateIn(_brand2, c); + Signal2.Computed = Computed; + ((subtle2) => { + var _a2, _brand3, _assertSignals, assertSignals_fn; + function untrack(cb) { + let output; + let prevActiveConsumer = null; + try { + prevActiveConsumer = setActiveConsumer(null); + output = cb(); + } finally { + setActiveConsumer(prevActiveConsumer); + } + return output; + } + subtle2.untrack = untrack; + function introspectSources(sink) { + var _a3; + if (!(0, Signal2.isComputed)(sink) && !(0, Signal2.isWatcher)(sink)) + throw new TypeError("Called introspectSources without a Computed or Watcher argument"); + return ((_a3 = sink[NODE].producerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? []; + } + subtle2.introspectSources = introspectSources; + function introspectSinks(signal) { + var _a3; + if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) + throw new TypeError("Called introspectSinks without a Signal argument"); + return ( + ((_a3 = signal[NODE].liveConsumerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? [] + ); + } + subtle2.introspectSinks = introspectSinks; + function hasSinks(signal) { + if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) + throw new TypeError("Called hasSinks without a Signal argument"); + const liveConsumerNode = signal[NODE].liveConsumerNode; + if (!liveConsumerNode) return false; + return liveConsumerNode.length > 0; + } + subtle2.hasSinks = hasSinks; + function hasSources(signal) { + if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isWatcher)(signal)) + throw new TypeError("Called hasSources without a Computed or Watcher argument"); + const producerNode = signal[NODE].producerNode; + if (!producerNode) return false; + return producerNode.length > 0; + } + subtle2.hasSources = hasSources; + class Watcher { + constructor(notify) { + __privateAdd(this, _brand3); + __privateAdd(this, _assertSignals); + __publicField(this, _a2); + let node = Object.create(REACTIVE_NODE); + node.wrapper = this; + node.consumerMarkedDirty = notify; + node.consumerIsAlwaysLive = true; + node.consumerAllowSignalWrites = false; + node.producerNode = []; + this[NODE] = node; + } + watch(...signals) { + if (!(0, Signal2.isWatcher)(this)) + throw new TypeError("Called unwatch without Watcher receiver"); + __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals); + const node = this[NODE]; + node.dirty = false; + const prev = setActiveConsumer(node); + for (const signal of signals) producerAccessed(signal[NODE]); + setActiveConsumer(prev); + } + unwatch(...signals) { + if (!(0, Signal2.isWatcher)(this)) + throw new TypeError("Called unwatch without Watcher receiver"); + __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals); + const node = this[NODE]; + assertConsumerNode(node); + for (let i = node.producerNode.length - 1; i >= 0; i--) + if (signals.includes(node.producerNode[i].wrapper)) { + producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); + const lastIdx = node.producerNode.length - 1; + node.producerNode[i] = node.producerNode[lastIdx]; + node.producerIndexOfThis[i] = node.producerIndexOfThis[lastIdx]; + node.producerNode.length--; + node.producerIndexOfThis.length--; + node.nextProducerIndex--; + if (i < node.producerNode.length) { + const idxConsumer = node.producerIndexOfThis[i]; + const producer = node.producerNode[i]; + assertProducerNode(producer); + producer.liveConsumerIndexOfThis[idxConsumer] = i; + } + } + } + getPending() { + if (!(0, Signal2.isWatcher)(this)) + throw new TypeError("Called getPending without Watcher receiver"); + return this[NODE].producerNode.filter((n) => n.dirty).map((n) => n.wrapper); + } + } + _a2 = NODE; + _brand3 = /* @__PURE__ */ new WeakSet(); + _assertSignals = /* @__PURE__ */ new WeakSet(); + assertSignals_fn = function (signals) { + for (const signal of signals) + if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) + throw new TypeError("Called watch/unwatch without a Computed or State argument"); + }; + Signal2.isWatcher = (w) => __privateIn(_brand3, w); + subtle2.Watcher = Watcher; + function currentComputed() { + var _a3; + return (_a3 = getActiveConsumer()) == null ? void 0 : _a3.wrapper; + } + subtle2.currentComputed = currentComputed; + subtle2.watched = Symbol("watched"); + subtle2.unwatched = Symbol("unwatched"); + })(Signal2.subtle || (Signal2.subtle = {})); })(Signal || (Signal = {})); /** -* equality check here is always false so that we can dirty the storage -* via setting to _anything_ -* -* -* This is for a pattern where we don't *directly* use signals to back the values used in collections -* so that instanceof checks and getters and other native features "just work" without having -* to do nested proxying. -* -* (though, see deep.ts for nested / deep behavior) -*/ + * equality check here is always false so that we can dirty the storage + * via setting to _anything_ + * + * + * This is for a pattern where we don't *directly* use signals to back the values used in collections + * so that instanceof checks and getters and other native features "just work" without having + * to do nested proxying. + * + * (though, see deep.ts for nested / deep behavior) + */ const createStorage = (initial = null) => new Signal.State(initial, { equals: () => false }); const ARRAY_GETTER_METHODS = new Set([ - Symbol.iterator, - "concat", - "entries", - "every", - "filter", - "find", - "findIndex", - "flat", - "flatMap", - "forEach", - "includes", - "indexOf", - "join", - "keys", - "lastIndexOf", - "map", - "reduce", - "reduceRight", - "slice", - "some", - "values" -]); -const ARRAY_WRITE_THEN_READ_METHODS = new Set([ - "fill", - "push", - "unshift" + Symbol.iterator, + "concat", + "entries", + "every", + "filter", + "find", + "findIndex", + "flat", + "flatMap", + "forEach", + "includes", + "indexOf", + "join", + "keys", + "lastIndexOf", + "map", + "reduce", + "reduceRight", + "slice", + "some", + "values", ]); +const ARRAY_WRITE_THEN_READ_METHODS = new Set(["fill", "push", "unshift"]); function convertToInt(prop) { - if (typeof prop === "symbol") return null; - const num = Number(prop); - if (isNaN(num)) return null; - return num % 1 === 0 ? num : null; + if (typeof prop === "symbol") return null; + const num = Number(prop); + if (isNaN(num)) return null; + return num % 1 === 0 ? num : null; } var SignalArray = class SignalArray { - /** - * Creates an array from an iterable object. - * @param iterable An iterable object to convert to an array. - */ - /** - * Creates an array from an iterable object. - * @param iterable An iterable object to convert to an array. - * @param mapfn A mapping function to call on every element of the array. - * @param thisArg Value of 'this' used to invoke the mapfn. - */ - static from(iterable, mapfn, thisArg) { - return mapfn ? new SignalArray(Array.from(iterable, mapfn, thisArg)) : new SignalArray(Array.from(iterable)); - } - static of(...arr) { - return new SignalArray(arr); - } - constructor(arr = []) { - let clone = arr.slice(); - let self = this; - let boundFns = /* @__PURE__ */ new Map(); - /** + /** + * Creates an array from an iterable object. + * @param iterable An iterable object to convert to an array. + */ + /** + * Creates an array from an iterable object. + * @param iterable An iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + static from(iterable, mapfn, thisArg) { + return mapfn + ? new SignalArray(Array.from(iterable, mapfn, thisArg)) + : new SignalArray(Array.from(iterable)); + } + static of(...arr) { + return new SignalArray(arr); + } + constructor(arr = []) { + let clone = arr.slice(); + let self = this; + let boundFns = /* @__PURE__ */ new Map(); + /** Flag to track whether we have *just* intercepted a call to `.push()` or `.unshift()`, since in those cases (and only those cases!) the `Array` itself checks `.length` to return from the function call. */ - let nativelyAccessingLengthFromPushOrUnshift = false; - return new Proxy(clone, { - get(target, prop) { - let index = convertToInt(prop); - if (index !== null) { - self.#readStorageFor(index); - self.#collection.get(); - return target[index]; - } - if (prop === "length") { - if (nativelyAccessingLengthFromPushOrUnshift) nativelyAccessingLengthFromPushOrUnshift = false; - else self.#collection.get(); - return target[prop]; - } - if (ARRAY_WRITE_THEN_READ_METHODS.has(prop)) nativelyAccessingLengthFromPushOrUnshift = true; - if (ARRAY_GETTER_METHODS.has(prop)) { - let fn = boundFns.get(prop); - if (fn === void 0) { - fn = (...args) => { - self.#collection.get(); - return target[prop](...args); - }; - boundFns.set(prop, fn); - } - return fn; - } - return target[prop]; - }, - set(target, prop, value) { - target[prop] = value; - let index = convertToInt(prop); - if (index !== null) { - self.#dirtyStorageFor(index); - self.#collection.set(null); - } else if (prop === "length") self.#collection.set(null); - return true; - }, - getPrototypeOf() { - return SignalArray.prototype; - } - }); - } - #collection = createStorage(); - #storages = /* @__PURE__ */ new Map(); - #readStorageFor(index) { - let storage = this.#storages.get(index); - if (storage === void 0) { - storage = createStorage(); - this.#storages.set(index, storage); - } - storage.get(); - } - #dirtyStorageFor(index) { - const storage = this.#storages.get(index); - if (storage) storage.set(null); - } + let nativelyAccessingLengthFromPushOrUnshift = false; + return new Proxy(clone, { + get(target, prop) { + let index = convertToInt(prop); + if (index !== null) { + self.#readStorageFor(index); + self.#collection.get(); + return target[index]; + } + if (prop === "length") { + if (nativelyAccessingLengthFromPushOrUnshift) + nativelyAccessingLengthFromPushOrUnshift = false; + else self.#collection.get(); + return target[prop]; + } + if (ARRAY_WRITE_THEN_READ_METHODS.has(prop)) + nativelyAccessingLengthFromPushOrUnshift = true; + if (ARRAY_GETTER_METHODS.has(prop)) { + let fn = boundFns.get(prop); + if (fn === void 0) { + fn = (...args) => { + self.#collection.get(); + return target[prop](...args); + }; + boundFns.set(prop, fn); + } + return fn; + } + return target[prop]; + }, + set(target, prop, value) { + target[prop] = value; + let index = convertToInt(prop); + if (index !== null) { + self.#dirtyStorageFor(index); + self.#collection.set(null); + } else if (prop === "length") self.#collection.set(null); + return true; + }, + getPrototypeOf() { + return SignalArray.prototype; + }, + }); + } + #collection = createStorage(); + #storages = /* @__PURE__ */ new Map(); + #readStorageFor(index) { + let storage = this.#storages.get(index); + if (storage === void 0) { + storage = createStorage(); + this.#storages.set(index, storage); + } + storage.get(); + } + #dirtyStorageFor(index) { + const storage = this.#storages.get(index); + if (storage) storage.set(null); + } }; Object.setPrototypeOf(SignalArray.prototype, Array.prototype); var SignalMap = class { - collection = createStorage(); - storages = /* @__PURE__ */ new Map(); - vals; - readStorageFor(key) { - const { storages } = this; - let storage = storages.get(key); - if (storage === void 0) { - storage = createStorage(); - storages.set(key, storage); - } - storage.get(); - } - dirtyStorageFor(key) { - const storage = this.storages.get(key); - if (storage) storage.set(null); - } - constructor(existing) { - this.vals = existing ? new Map(existing) : /* @__PURE__ */ new Map(); - } - get(key) { - this.readStorageFor(key); - return this.vals.get(key); - } - has(key) { - this.readStorageFor(key); - return this.vals.has(key); - } - entries() { - this.collection.get(); - return this.vals.entries(); - } - keys() { - this.collection.get(); - return this.vals.keys(); - } - values() { - this.collection.get(); - return this.vals.values(); - } - forEach(fn) { - this.collection.get(); - this.vals.forEach(fn); - } - get size() { - this.collection.get(); - return this.vals.size; - } - [Symbol.iterator]() { - this.collection.get(); - return this.vals[Symbol.iterator](); - } - get [Symbol.toStringTag]() { - return this.vals[Symbol.toStringTag]; - } - set(key, value) { - this.dirtyStorageFor(key); - this.collection.set(null); - this.vals.set(key, value); - return this; - } - delete(key) { - this.dirtyStorageFor(key); - this.collection.set(null); - return this.vals.delete(key); - } - clear() { - this.storages.forEach((s) => s.set(null)); - this.collection.set(null); - this.vals.clear(); - } + collection = createStorage(); + storages = /* @__PURE__ */ new Map(); + vals; + readStorageFor(key) { + const { storages } = this; + let storage = storages.get(key); + if (storage === void 0) { + storage = createStorage(); + storages.set(key, storage); + } + storage.get(); + } + dirtyStorageFor(key) { + const storage = this.storages.get(key); + if (storage) storage.set(null); + } + constructor(existing) { + this.vals = existing ? new Map(existing) : /* @__PURE__ */ new Map(); + } + get(key) { + this.readStorageFor(key); + return this.vals.get(key); + } + has(key) { + this.readStorageFor(key); + return this.vals.has(key); + } + entries() { + this.collection.get(); + return this.vals.entries(); + } + keys() { + this.collection.get(); + return this.vals.keys(); + } + values() { + this.collection.get(); + return this.vals.values(); + } + forEach(fn) { + this.collection.get(); + this.vals.forEach(fn); + } + get size() { + this.collection.get(); + return this.vals.size; + } + [Symbol.iterator]() { + this.collection.get(); + return this.vals[Symbol.iterator](); + } + get [Symbol.toStringTag]() { + return this.vals[Symbol.toStringTag]; + } + set(key, value) { + this.dirtyStorageFor(key); + this.collection.set(null); + this.vals.set(key, value); + return this; + } + delete(key) { + this.dirtyStorageFor(key); + this.collection.set(null); + return this.vals.delete(key); + } + clear() { + this.storages.forEach((s) => s.set(null)); + this.collection.set(null); + this.vals.clear(); + } }; Object.setPrototypeOf(SignalMap.prototype, Map.prototype); /** -* Create a reactive Object, backed by Signals, using a Proxy. -* This allows dynamic creation and deletion of signals using the object primitive -* APIs that most folks are familiar with -- the only difference is instantiation. -* ```js -* const obj = new SignalObject({ foo: 123 }); -* -* obj.foo // 123 -* obj.foo = 456 -* obj.foo // 456 -* obj.bar = 2 -* obj.bar // 2 -* ``` -*/ + * Create a reactive Object, backed by Signals, using a Proxy. + * This allows dynamic creation and deletion of signals using the object primitive + * APIs that most folks are familiar with -- the only difference is instantiation. + * ```js + * const obj = new SignalObject({ foo: 123 }); + * + * obj.foo // 123 + * obj.foo = 456 + * obj.foo // 456 + * obj.bar = 2 + * obj.bar // 2 + * ``` + */ const SignalObject = class SignalObjectImpl { - static fromEntries(entries) { - return new SignalObjectImpl(Object.fromEntries(entries)); - } - #storages = /* @__PURE__ */ new Map(); - #collection = createStorage(); - constructor(obj = {}) { - let proto = Object.getPrototypeOf(obj); - let descs = Object.getOwnPropertyDescriptors(obj); - let clone = Object.create(proto); - for (let prop in descs) Object.defineProperty(clone, prop, descs[prop]); - let self = this; - return new Proxy(clone, { - get(target, prop, receiver) { - self.#readStorageFor(prop); - return Reflect.get(target, prop, receiver); - }, - has(target, prop) { - self.#readStorageFor(prop); - return prop in target; - }, - ownKeys(target) { - self.#collection.get(); - return Reflect.ownKeys(target); - }, - set(target, prop, value, receiver) { - let result = Reflect.set(target, prop, value, receiver); - self.#dirtyStorageFor(prop); - self.#dirtyCollection(); - return result; - }, - deleteProperty(target, prop) { - if (prop in target) { - delete target[prop]; - self.#dirtyStorageFor(prop); - self.#dirtyCollection(); - } - return true; - }, - getPrototypeOf() { - return SignalObjectImpl.prototype; - } - }); - } - #readStorageFor(key) { - let storage = this.#storages.get(key); - if (storage === void 0) { - storage = createStorage(); - this.#storages.set(key, storage); - } - storage.get(); - } - #dirtyStorageFor(key) { - const storage = this.#storages.get(key); - if (storage) storage.set(null); - } - #dirtyCollection() { - this.#collection.set(null); - } -}; -var SignalSet = class { - collection = createStorage(); - storages = /* @__PURE__ */ new Map(); - vals; - storageFor(key) { - const storages = this.storages; - let storage = storages.get(key); - if (storage === void 0) { - storage = createStorage(); - storages.set(key, storage); - } - return storage; - } - dirtyStorageFor(key) { - const storage = this.storages.get(key); - if (storage) storage.set(null); - } - constructor(existing) { - this.vals = new Set(existing); - } - has(value) { - this.storageFor(value).get(); - return this.vals.has(value); - } - entries() { - this.collection.get(); - return this.vals.entries(); - } - keys() { - this.collection.get(); - return this.vals.keys(); - } - values() { - this.collection.get(); - return this.vals.values(); - } - forEach(fn) { - this.collection.get(); - this.vals.forEach(fn); - } - get size() { - this.collection.get(); - return this.vals.size; - } - [Symbol.iterator]() { - this.collection.get(); - return this.vals[Symbol.iterator](); - } - get [Symbol.toStringTag]() { - return this.vals[Symbol.toStringTag]; - } - add(value) { - this.dirtyStorageFor(value); - this.collection.set(null); - this.vals.add(value); - return this; - } - delete(value) { - this.dirtyStorageFor(value); - this.collection.set(null); - return this.vals.delete(value); - } - clear() { - this.storages.forEach((s) => s.set(null)); - this.collection.set(null); - this.vals.clear(); - } -}; + static fromEntries(entries) { + return new SignalObjectImpl(Object.fromEntries(entries)); + } + #storages = /* @__PURE__ */ new Map(); + #collection = createStorage(); + constructor(obj = {}) { + let proto = Object.getPrototypeOf(obj); + let descs = Object.getOwnPropertyDescriptors(obj); + let clone = Object.create(proto); + for (let prop in descs) Object.defineProperty(clone, prop, descs[prop]); + let self = this; + return new Proxy(clone, { + get(target, prop, receiver) { + self.#readStorageFor(prop); + return Reflect.get(target, prop, receiver); + }, + has(target, prop) { + self.#readStorageFor(prop); + return prop in target; + }, + ownKeys(target) { + self.#collection.get(); + return Reflect.ownKeys(target); + }, + set(target, prop, value, receiver) { + let result = Reflect.set(target, prop, value, receiver); + self.#dirtyStorageFor(prop); + self.#dirtyCollection(); + return result; + }, + deleteProperty(target, prop) { + if (prop in target) { + delete target[prop]; + self.#dirtyStorageFor(prop); + self.#dirtyCollection(); + } + return true; + }, + getPrototypeOf() { + return SignalObjectImpl.prototype; + }, + }); + } + #readStorageFor(key) { + let storage = this.#storages.get(key); + if (storage === void 0) { + storage = createStorage(); + this.#storages.set(key, storage); + } + storage.get(); + } + #dirtyStorageFor(key) { + const storage = this.#storages.get(key); + if (storage) storage.set(null); + } + #dirtyCollection() { + this.#collection.set(null); + } +}; +var SignalSet = class { + collection = createStorage(); + storages = /* @__PURE__ */ new Map(); + vals; + storageFor(key) { + const storages = this.storages; + let storage = storages.get(key); + if (storage === void 0) { + storage = createStorage(); + storages.set(key, storage); + } + return storage; + } + dirtyStorageFor(key) { + const storage = this.storages.get(key); + if (storage) storage.set(null); + } + constructor(existing) { + this.vals = new Set(existing); + } + has(value) { + this.storageFor(value).get(); + return this.vals.has(value); + } + entries() { + this.collection.get(); + return this.vals.entries(); + } + keys() { + this.collection.get(); + return this.vals.keys(); + } + values() { + this.collection.get(); + return this.vals.values(); + } + forEach(fn) { + this.collection.get(); + this.vals.forEach(fn); + } + get size() { + this.collection.get(); + return this.vals.size; + } + [Symbol.iterator]() { + this.collection.get(); + return this.vals[Symbol.iterator](); + } + get [Symbol.toStringTag]() { + return this.vals[Symbol.toStringTag]; + } + add(value) { + this.dirtyStorageFor(value); + this.collection.set(null); + this.vals.add(value); + return this; + } + delete(value) { + this.dirtyStorageFor(value); + this.collection.set(null); + return this.vals.delete(value); + } + clear() { + this.storages.forEach((s) => s.set(null)); + this.collection.set(null); + this.vals.clear(); + } +}; Object.setPrototypeOf(SignalSet.prototype, Set.prototype); function create() { - return new A2uiMessageProcessor({ - arrayCtor: SignalArray, - mapCtor: SignalMap, - objCtor: SignalObject, - setCtor: SignalSet - }); + return new A2uiMessageProcessor({ + arrayCtor: SignalArray, + mapCtor: SignalMap, + objCtor: SignalObject, + setCtor: SignalSet, + }); } const Data = { - createSignalA2uiMessageProcessor: create, - A2uiMessageProcessor, - Guards: guards_exports + createSignalA2uiMessageProcessor: create, + A2uiMessageProcessor, + Guards: guards_exports, }; /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const t$1 = (t) => (e, o) => { - void 0 !== o ? o.addInitializer(() => { - customElements.define(t, e); - }) : customElements.define(t, e); + void 0 !== o + ? o.addInitializer(() => { + customElements.define(t, e); + }) + : customElements.define(t, e); }; /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ const o$9 = { - attribute: !0, - type: String, - converter: u$3, - reflect: !1, - hasChanged: f$3 -}, r$7 = (t = o$9, e, r) => { - const { kind: n, metadata: i } = r; - let s = globalThis.litPropertyMetadata.get(i); - if (void 0 === s && globalThis.litPropertyMetadata.set(i, s = /* @__PURE__ */ new Map()), "setter" === n && ((t = Object.create(t)).wrapped = !0), s.set(r.name, t), "accessor" === n) { - const { name: o } = r; - return { - set(r) { - const n = e.get.call(this); - e.set.call(this, r), this.requestUpdate(o, n, t, !0, r); - }, - init(e) { - return void 0 !== e && this.C(o, void 0, t, e), e; - } - }; - } - if ("setter" === n) { - const { name: o } = r; - return function(r) { - const n = this[o]; - e.call(this, r), this.requestUpdate(o, n, t, !0, r); - }; - } - throw Error("Unsupported decorator location: " + n); -}; + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const o$9 = { + attribute: !0, + type: String, + converter: u$3, + reflect: !1, + hasChanged: f$3, + }, + r$7 = (t = o$9, e, r) => { + const { kind: n, metadata: i } = r; + let s = globalThis.litPropertyMetadata.get(i); + if ( + (void 0 === s && globalThis.litPropertyMetadata.set(i, (s = /* @__PURE__ */ new Map())), + "setter" === n && ((t = Object.create(t)).wrapped = !0), + s.set(r.name, t), + "accessor" === n) + ) { + const { name: o } = r; + return { + set(r) { + const n = e.get.call(this); + (e.set.call(this, r), this.requestUpdate(o, n, t, !0, r)); + }, + init(e) { + return (void 0 !== e && this.C(o, void 0, t, e), e); + }, + }; + } + if ("setter" === n) { + const { name: o } = r; + return function (r) { + const n = this[o]; + (e.call(this, r), this.requestUpdate(o, n, t, !0, r)); + }; + } + throw Error("Unsupported decorator location: " + n); + }; function n$6(t) { - return (e, o) => "object" == typeof o ? r$7(t, e, o) : ((t, e, o) => { - const r = e.hasOwnProperty(o); - return e.constructor.createProperty(o, t), r ? Object.getOwnPropertyDescriptor(e, o) : void 0; - })(t, e, o); + return (e, o) => + "object" == typeof o + ? r$7(t, e, o) + : ((t, e, o) => { + const r = e.hasOwnProperty(o); + return ( + e.constructor.createProperty(o, t), r ? Object.getOwnPropertyDescriptor(e, o) : void 0 + ); + })(t, e, o); } /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ function r$6(r) { - return n$6({ - ...r, - state: !0, - attribute: !1 - }); + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ function r$6(r) { + return n$6({ + ...r, + state: !0, + attribute: !1, + }); } /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ -const e$6 = (e, t, c) => (c.configurable = !0, c.enumerable = !0, Reflect.decorate && "object" != typeof t && Object.defineProperty(e, t, c), c); + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ +const e$6 = (e, t, c) => ( + (c.configurable = !0), + (c.enumerable = !0), + Reflect.decorate && "object" != typeof t && Object.defineProperty(e, t, c), + c +); /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ function e$5(e, r) { - return (n, s, i) => { - const o = (t) => t.renderRoot?.querySelector(e) ?? null; - if (r) { - const { get: e, set: r } = "object" == typeof s ? n : i ?? (() => { - const t = Symbol(); - return { - get() { - return this[t]; - }, - set(e) { - this[t] = e; - } - }; - })(); - return e$6(n, s, { get() { - let t = e.call(this); - return void 0 === t && (t = o(this), (null !== t || this.hasUpdated) && r.call(this, t)), t; - } }); - } - return e$6(n, s, { get() { - return o(this); - } }); - }; + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ function e$5(e, r) { + return (n, s, i) => { + const o = (t) => t.renderRoot?.querySelector(e) ?? null; + if (r) { + const { get: e, set: r } = + "object" == typeof s + ? n + : (i ?? + (() => { + const t = Symbol(); + return { + get() { + return this[t]; + }, + set(e) { + this[t] = e; + }, + }; + })()); + return e$6(n, s, { + get() { + let t = e.call(this); + return ( + void 0 === t && ((t = o(this)), (null !== t || this.hasUpdated) && r.call(this, t)), t + ); + }, + }); + } + return e$6(n, s, { + get() { + return o(this); + }, + }); + }; } /** -* @license -* Copyright 2023 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ let i$2 = !1; + * @license + * Copyright 2023 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ let i$2 = !1; const s$1 = new Signal.subtle.Watcher(() => { - i$2 || (i$2 = !0, queueMicrotask(() => { - i$2 = !1; - for (const t of s$1.getPending()) t.get(); - s$1.watch(); - })); -}), h$3 = Symbol("SignalWatcherBrand"), e$3 = new FinalizationRegistry((i) => { - i.unwatch(...Signal.subtle.introspectSources(i)); -}), n$4 = /* @__PURE__ */ new WeakMap(); + i$2 || + ((i$2 = !0), + queueMicrotask(() => { + i$2 = !1; + for (const t of s$1.getPending()) t.get(); + s$1.watch(); + })); + }), + h$3 = Symbol("SignalWatcherBrand"), + e$3 = new FinalizationRegistry((i) => { + i.unwatch(...Signal.subtle.introspectSources(i)); + }), + n$4 = /* @__PURE__ */ new WeakMap(); function o$7(i) { - return !0 === i[h$3] ? (console.warn("SignalWatcher should not be applied to the same class more than once."), i) : class extends i { - constructor() { - super(...arguments), this._$St = /* @__PURE__ */ new Map(), this._$So = new Signal.State(0), this._$Si = !1; - } - _$Sl() { - var t, i; - const s = [], h = []; - this._$St.forEach((t, i) => { - ((null == t ? void 0 : t.beforeUpdate) ? s : h).push(i); - }); - const e = null === (t = this.h) || void 0 === t ? void 0 : t.getPending().filter((t) => t !== this._$Su && !this._$St.has(t)); - s.forEach((t) => t.get()), null === (i = this._$Su) || void 0 === i || i.get(), e.forEach((t) => t.get()), h.forEach((t) => t.get()); - } - _$Sv() { - this.isUpdatePending || queueMicrotask(() => { - this.isUpdatePending || this._$Sl(); - }); - } - _$S_() { - if (void 0 !== this.h) return; - this._$Su = new Signal.Computed(() => { - this._$So.get(), super.performUpdate(); - }); - const i = this.h = new Signal.subtle.Watcher(function() { - const t = n$4.get(this); - void 0 !== t && (!1 === t._$Si && (new Set(this.getPending()).has(t._$Su) ? t.requestUpdate() : t._$Sv()), this.watch()); - }); - n$4.set(i, this), e$3.register(this, i), i.watch(this._$Su), i.watch(...Array.from(this._$St).map(([t]) => t)); - } - _$Sp() { - if (void 0 === this.h) return; - let i = !1; - this.h.unwatch(...Signal.subtle.introspectSources(this.h).filter((t) => { - var s; - const h = !0 !== (null === (s = this._$St.get(t)) || void 0 === s ? void 0 : s.manualDispose); - return h && this._$St.delete(t), i || (i = !h), h; - })), i || (this._$Su = void 0, this.h = void 0, this._$St.clear()); - } - updateEffect(i, s) { - var h; - this._$S_(); - const e = new Signal.Computed(() => { - i(); - }); - return this.h.watch(e), this._$St.set(e, s), null !== (h = null == s ? void 0 : s.beforeUpdate) && void 0 !== h && h ? Signal.subtle.untrack(() => e.get()) : this.updateComplete.then(() => Signal.subtle.untrack(() => e.get())), () => { - this._$St.delete(e), this.h.unwatch(e), !1 === this.isConnected && this._$Sp(); - }; - } - performUpdate() { - this.isUpdatePending && (this._$S_(), this._$Si = !0, this._$So.set(this._$So.get() + 1), this._$Si = !1, this._$Sl()); - } - connectedCallback() { - super.connectedCallback(), this.requestUpdate(); - } - disconnectedCallback() { - super.disconnectedCallback(), queueMicrotask(() => { - !1 === this.isConnected && this._$Sp(); - }); - } - }; + return !0 === i[h$3] + ? (console.warn("SignalWatcher should not be applied to the same class more than once."), i) + : class extends i { + constructor() { + (super(...arguments), + (this._$St = /* @__PURE__ */ new Map()), + (this._$So = new Signal.State(0)), + (this._$Si = !1)); + } + _$Sl() { + var t, i; + const s = [], + h = []; + this._$St.forEach((t, i) => { + ((null == t ? void 0 : t.beforeUpdate) ? s : h).push(i); + }); + const e = + null === (t = this.h) || void 0 === t + ? void 0 + : t.getPending().filter((t) => t !== this._$Su && !this._$St.has(t)); + (s.forEach((t) => t.get()), + null === (i = this._$Su) || void 0 === i || i.get(), + e.forEach((t) => t.get()), + h.forEach((t) => t.get())); + } + _$Sv() { + this.isUpdatePending || + queueMicrotask(() => { + this.isUpdatePending || this._$Sl(); + }); + } + _$S_() { + if (void 0 !== this.h) return; + this._$Su = new Signal.Computed(() => { + (this._$So.get(), super.performUpdate()); + }); + const i = (this.h = new Signal.subtle.Watcher(function () { + const t = n$4.get(this); + void 0 !== t && + (!1 === t._$Si && + (new Set(this.getPending()).has(t._$Su) ? t.requestUpdate() : t._$Sv()), + this.watch()); + })); + (n$4.set(i, this), + e$3.register(this, i), + i.watch(this._$Su), + i.watch(...Array.from(this._$St).map(([t]) => t))); + } + _$Sp() { + if (void 0 === this.h) return; + let i = !1; + (this.h.unwatch( + ...Signal.subtle.introspectSources(this.h).filter((t) => { + var s; + const h = + !0 !== (null === (s = this._$St.get(t)) || void 0 === s ? void 0 : s.manualDispose); + return (h && this._$St.delete(t), i || (i = !h), h); + }), + ), + i || ((this._$Su = void 0), (this.h = void 0), this._$St.clear())); + } + updateEffect(i, s) { + var h; + this._$S_(); + const e = new Signal.Computed(() => { + i(); + }); + return ( + this.h.watch(e), + this._$St.set(e, s), + null !== (h = null == s ? void 0 : s.beforeUpdate) && void 0 !== h && h + ? Signal.subtle.untrack(() => e.get()) + : this.updateComplete.then(() => Signal.subtle.untrack(() => e.get())), + () => { + (this._$St.delete(e), this.h.unwatch(e), !1 === this.isConnected && this._$Sp()); + } + ); + } + performUpdate() { + this.isUpdatePending && + (this._$S_(), + (this._$Si = !0), + this._$So.set(this._$So.get() + 1), + (this._$Si = !1), + this._$Sl()); + } + connectedCallback() { + (super.connectedCallback(), this.requestUpdate()); + } + disconnectedCallback() { + (super.disconnectedCallback(), + queueMicrotask(() => { + !1 === this.isConnected && this._$Sp(); + })); + } + }; } /** -* @license -* Copyright 2017 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ const s = (i, t) => { - const e = i._$AN; - if (void 0 === e) return !1; - for (const i of e) i._$AO?.(t, !1), s(i, t); - return !0; -}, o$6 = (i) => { - let t, e; - do { - if (void 0 === (t = i._$AM)) break; - e = t._$AN, e.delete(i), i = t; - } while (0 === e?.size); -}, r$3 = (i) => { - for (let t; t = i._$AM; i = t) { - let e = t._$AN; - if (void 0 === e) t._$AN = e = /* @__PURE__ */ new Set(); - else if (e.has(i)) break; - e.add(i), c(t); - } -}; + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const s = (i, t) => { + const e = i._$AN; + if (void 0 === e) return !1; + for (const i of e) (i._$AO?.(t, !1), s(i, t)); + return !0; + }, + o$6 = (i) => { + let t, e; + do { + if (void 0 === (t = i._$AM)) break; + ((e = t._$AN), e.delete(i), (i = t)); + } while (0 === e?.size); + }, + r$3 = (i) => { + for (let t; (t = i._$AM); i = t) { + let e = t._$AN; + if (void 0 === e) t._$AN = e = /* @__PURE__ */ new Set(); + else if (e.has(i)) break; + (e.add(i), c(t)); + } + }; function h$2(i) { - void 0 !== this._$AN ? (o$6(this), this._$AM = i, r$3(this)) : this._$AM = i; + void 0 !== this._$AN ? (o$6(this), (this._$AM = i), r$3(this)) : (this._$AM = i); } function n$3(i, t = !1, e = 0) { - const r = this._$AH, h = this._$AN; - if (void 0 !== h && 0 !== h.size) if (t) if (Array.isArray(r)) for (let i = e; i < r.length; i++) s(r[i], !1), o$6(r[i]); - else null != r && (s(r, !1), o$6(r)); - else s(this, i); + const r = this._$AH, + h = this._$AN; + if (void 0 !== h && 0 !== h.size) + if (t) + if (Array.isArray(r)) for (let i = e; i < r.length; i++) (s(r[i], !1), o$6(r[i])); + else null != r && (s(r, !1), o$6(r)); + else s(this, i); } const c = (i) => { - i.type == t$4.CHILD && (i._$AP ??= n$3, i._$AQ ??= h$2); + i.type == t$4.CHILD && ((i._$AP ??= n$3), (i._$AQ ??= h$2)); }; var f = class extends i$5 { - constructor() { - super(...arguments), this._$AN = void 0; - } - _$AT(i, t, e) { - super._$AT(i, t, e), r$3(this), this.isConnected = i._$AU; - } - _$AO(i, t = !0) { - i !== this.isConnected && (this.isConnected = i, i ? this.reconnected?.() : this.disconnected?.()), t && (s(this, i), o$6(this)); - } - setValue(t) { - if (r$8(this._$Ct)) this._$Ct._$AI(t, this); - else { - const i = [...this._$Ct._$AH]; - i[this._$Ci] = t, this._$Ct._$AI(i, this, 0); - } - } - disconnected() {} - reconnected() {} + constructor() { + (super(...arguments), (this._$AN = void 0)); + } + _$AT(i, t, e) { + (super._$AT(i, t, e), r$3(this), (this.isConnected = i._$AU)); + } + _$AO(i, t = !0) { + (i !== this.isConnected && + ((this.isConnected = i), i ? this.reconnected?.() : this.disconnected?.()), + t && (s(this, i), o$6(this))); + } + setValue(t) { + if (r$8(this._$Ct)) this._$Ct._$AI(t, this); + else { + const i = [...this._$Ct._$AH]; + ((i[this._$Ci] = t), this._$Ct._$AI(i, this, 0)); + } + } + disconnected() {} + reconnected() {} }; /** -* @license -* Copyright 2023 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2023 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ let o$5 = !1; const n$2 = new Signal.subtle.Watcher(async () => { - o$5 || (o$5 = !0, queueMicrotask(() => { - o$5 = !1; - for (const i of n$2.getPending()) i.get(); - n$2.watch(); - })); + o$5 || + ((o$5 = !0), + queueMicrotask(() => { + o$5 = !1; + for (const i of n$2.getPending()) i.get(); + n$2.watch(); + })); }); var r$2 = class extends f { - _$S_() { - var i, t; - void 0 === this._$Sm && (this._$Sj = new Signal.Computed(() => { - var i; - const t = null === (i = this._$SW) || void 0 === i ? void 0 : i.get(); - return this.setValue(t), t; - }), this._$Sm = null !== (t = null === (i = this._$Sk) || void 0 === i ? void 0 : i.h) && void 0 !== t ? t : n$2, this._$Sm.watch(this._$Sj), Signal.subtle.untrack(() => { - var i; - return null === (i = this._$Sj) || void 0 === i ? void 0 : i.get(); - })); - } - _$Sp() { - void 0 !== this._$Sm && (this._$Sm.unwatch(this._$SW), this._$Sm = void 0); - } - render(i) { - return Signal.subtle.untrack(() => i.get()); - } - update(i, [t]) { - var o, n; - return null !== (o = this._$Sk) && void 0 !== o || (this._$Sk = null === (n = i.options) || void 0 === n ? void 0 : n.host), t !== this._$SW && void 0 !== this._$SW && this._$Sp(), this._$SW = t, this._$S_(), Signal.subtle.untrack(() => this._$SW.get()); - } - disconnected() { - this._$Sp(); - } - reconnected() { - this._$S_(); - } -}; -const h$1 = e$10(r$2), m = (o) => (t, ...m) => o(t, ...m.map((o) => o instanceof Signal.State || o instanceof Signal.Computed ? h$1(o) : o)); + _$S_() { + var i, t; + void 0 === this._$Sm && + ((this._$Sj = new Signal.Computed(() => { + var i; + const t = null === (i = this._$SW) || void 0 === i ? void 0 : i.get(); + return (this.setValue(t), t); + })), + (this._$Sm = + null !== (t = null === (i = this._$Sk) || void 0 === i ? void 0 : i.h) && void 0 !== t + ? t + : n$2), + this._$Sm.watch(this._$Sj), + Signal.subtle.untrack(() => { + var i; + return null === (i = this._$Sj) || void 0 === i ? void 0 : i.get(); + })); + } + _$Sp() { + void 0 !== this._$Sm && (this._$Sm.unwatch(this._$SW), (this._$Sm = void 0)); + } + render(i) { + return Signal.subtle.untrack(() => i.get()); + } + update(i, [t]) { + var o, n; + return ( + (null !== (o = this._$Sk) && void 0 !== o) || + (this._$Sk = null === (n = i.options) || void 0 === n ? void 0 : n.host), + t !== this._$SW && void 0 !== this._$SW && this._$Sp(), + (this._$SW = t), + this._$S_(), + Signal.subtle.untrack(() => this._$SW.get()) + ); + } + disconnected() { + this._$Sp(); + } + reconnected() { + this._$S_(); + } +}; +const h$1 = e$10(r$2), + m = + (o) => + (t, ...m) => + o( + t, + ...m.map((o) => (o instanceof Signal.State || o instanceof Signal.Computed ? h$1(o) : o)), + ); m(b); m(w); Signal.State; Signal.Computed; /** -* @license -* Copyright 2021 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ function* o$3(o, f) { - if (void 0 !== o) { - let i = 0; - for (const t of o) yield f(t, i++); - } + if (void 0 !== o) { + let i = 0; + for (const t of o) yield f(t, i++); + } } let pending = false; let watcher = new Signal.subtle.Watcher(() => { - if (!pending) { - pending = true; - queueMicrotask(() => { - pending = false; - flushPending(); - }); - } + if (!pending) { + pending = true; + queueMicrotask(() => { + pending = false; + flushPending(); + }); + } }); function flushPending() { - for (const signal of watcher.getPending()) signal.get(); - watcher.watch(); + for (const signal of watcher.getPending()) signal.get(); + watcher.watch(); } /** -* ⚠️ WARNING: Nothing unwatches ⚠️ -* This will produce a memory leak. -*/ + * ⚠️ WARNING: Nothing unwatches ⚠️ + * This will produce a memory leak. + */ function effect(cb) { - let c = new Signal.Computed(() => cb()); - watcher.watch(c); - c.get(); - return () => { - watcher.unwatch(c); - }; + let c = new Signal.Computed(() => cb()); + watcher.watch(c); + c.get(); + return () => { + watcher.unwatch(c); + }; } const themeContext = n$7("A2UITheme"); const structuralStyles = r$11(structuralStyles$1); var ComponentRegistry = class { - constructor() { - this.registry = /* @__PURE__ */ new Map(); - } - register(typeName, constructor, tagName) { - if (!/^[a-zA-Z0-9]+$/.test(typeName)) throw new Error(`[Registry] Invalid typeName '${typeName}'. Must be alphanumeric.`); - this.registry.set(typeName, constructor); - const actualTagName = tagName || `a2ui-custom-${typeName.toLowerCase()}`; - const existingName = customElements.getName(constructor); - if (existingName) { - if (existingName !== actualTagName) throw new Error(`Component ${typeName} is already registered as ${existingName}, but requested as ${actualTagName}.`); - return; - } - if (!customElements.get(actualTagName)) customElements.define(actualTagName, constructor); - } - get(typeName) { - return this.registry.get(typeName); - } + constructor() { + this.registry = /* @__PURE__ */ new Map(); + } + register(typeName, constructor, tagName) { + if (!/^[a-zA-Z0-9]+$/.test(typeName)) + throw new Error(`[Registry] Invalid typeName '${typeName}'. Must be alphanumeric.`); + this.registry.set(typeName, constructor); + const actualTagName = tagName || `a2ui-custom-${typeName.toLowerCase()}`; + const existingName = customElements.getName(constructor); + if (existingName) { + if (existingName !== actualTagName) + throw new Error( + `Component ${typeName} is already registered as ${existingName}, but requested as ${actualTagName}.`, + ); + return; + } + if (!customElements.get(actualTagName)) customElements.define(actualTagName, constructor); + } + get(typeName) { + return this.registry.get(typeName); + } }; const componentRegistry = new ComponentRegistry(); -var __runInitializers$19 = function(thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0; i < initializers.length; i++) value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - return useValue ? value : void 0; -}; -var __esDecorate$19 = function(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { - if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); - return f; - } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1; i >= 0; i--) { - var context = {}; - for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) context.access[p] = contextIn.access[p]; - context.addInitializer = function(f) { - if (done) throw new TypeError("Cannot add initializers after decoration has completed"); - extraInitializers.push(accept(f || null)); - }; - var result = (0, decorators[i])(kind === "accessor" ? { - get: descriptor.get, - set: descriptor.set - } : descriptor[key], context); - if (kind === "accessor") { - if (result === void 0) continue; - if (result === null || typeof result !== "object") throw new TypeError("Object expected"); - if (_ = accept(result.get)) descriptor.get = _; - if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.unshift(_); - } else if (_ = accept(result)) if (kind === "field") initializers.unshift(_); - else descriptor[key] = _; - } - if (target) Object.defineProperty(target, contextIn.name, descriptor); - done = true; +var __runInitializers$19 = function (thisArg, initializers, value) { + var useValue = arguments.length > 2; + for (var i = 0; i < initializers.length; i++) + value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); + return useValue ? value : void 0; +}; +var __esDecorate$19 = function ( + ctor, + descriptorIn, + decorators, + contextIn, + initializers, + extraInitializers, +) { + function accept(f) { + if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); + return f; + } + var kind = contextIn.kind, + key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; + var target = !descriptorIn && ctor ? (contextIn["static"] ? ctor : ctor.prototype) : null; + var descriptor = + descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); + var _, + done = false; + for (var i = decorators.length - 1; i >= 0; i--) { + var context = {}; + for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; + for (var p in contextIn.access) context.access[p] = contextIn.access[p]; + context.addInitializer = function (f) { + if (done) throw new TypeError("Cannot add initializers after decoration has completed"); + extraInitializers.push(accept(f || null)); + }; + var result = (0, decorators[i])( + kind === "accessor" + ? { + get: descriptor.get, + set: descriptor.set, + } + : descriptor[key], + context, + ); + if (kind === "accessor") { + if (result === void 0) continue; + if (result === null || typeof result !== "object") throw new TypeError("Object expected"); + if ((_ = accept(result.get))) descriptor.get = _; + if ((_ = accept(result.set))) descriptor.set = _; + if ((_ = accept(result.init))) initializers.unshift(_); + } else if ((_ = accept(result))) + if (kind === "field") initializers.unshift(_); + else descriptor[key] = _; + } + if (target) Object.defineProperty(target, contextIn.name, descriptor); + done = true; }; let Root = (() => { - let _classDecorators = [t$1("a2ui-root")]; - let _classDescriptor; - let _classExtraInitializers = []; - let _classThis; - let _classSuper = o$7(i$6); - let _instanceExtraInitializers = []; - let _surfaceId_decorators; - let _surfaceId_initializers = []; - let _surfaceId_extraInitializers = []; - let _component_decorators; - let _component_initializers = []; - let _component_extraInitializers = []; - let _theme_decorators; - let _theme_initializers = []; - let _theme_extraInitializers = []; - let _childComponents_decorators; - let _childComponents_initializers = []; - let _childComponents_extraInitializers = []; - let _processor_decorators; - let _processor_initializers = []; - let _processor_extraInitializers = []; - let _dataContextPath_decorators; - let _dataContextPath_initializers = []; - let _dataContextPath_extraInitializers = []; - let _enableCustomElements_decorators; - let _enableCustomElements_initializers = []; - let _enableCustomElements_extraInitializers = []; - let _set_weight_decorators; - var Root = class extends _classSuper { - static { - _classThis = this; - } - static { - const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; - _surfaceId_decorators = [n$6()]; - _component_decorators = [n$6()]; - _theme_decorators = [c$1({ context: themeContext })]; - _childComponents_decorators = [n$6({ attribute: false })]; - _processor_decorators = [n$6({ attribute: false })]; - _dataContextPath_decorators = [n$6()]; - _enableCustomElements_decorators = [n$6()]; - _set_weight_decorators = [n$6()]; - __esDecorate$19(this, null, _surfaceId_decorators, { - kind: "accessor", - name: "surfaceId", - static: false, - private: false, - access: { - has: (obj) => "surfaceId" in obj, - get: (obj) => obj.surfaceId, - set: (obj, value) => { - obj.surfaceId = value; - } - }, - metadata: _metadata - }, _surfaceId_initializers, _surfaceId_extraInitializers); - __esDecorate$19(this, null, _component_decorators, { - kind: "accessor", - name: "component", - static: false, - private: false, - access: { - has: (obj) => "component" in obj, - get: (obj) => obj.component, - set: (obj, value) => { - obj.component = value; - } - }, - metadata: _metadata - }, _component_initializers, _component_extraInitializers); - __esDecorate$19(this, null, _theme_decorators, { - kind: "accessor", - name: "theme", - static: false, - private: false, - access: { - has: (obj) => "theme" in obj, - get: (obj) => obj.theme, - set: (obj, value) => { - obj.theme = value; - } - }, - metadata: _metadata - }, _theme_initializers, _theme_extraInitializers); - __esDecorate$19(this, null, _childComponents_decorators, { - kind: "accessor", - name: "childComponents", - static: false, - private: false, - access: { - has: (obj) => "childComponents" in obj, - get: (obj) => obj.childComponents, - set: (obj, value) => { - obj.childComponents = value; - } - }, - metadata: _metadata - }, _childComponents_initializers, _childComponents_extraInitializers); - __esDecorate$19(this, null, _processor_decorators, { - kind: "accessor", - name: "processor", - static: false, - private: false, - access: { - has: (obj) => "processor" in obj, - get: (obj) => obj.processor, - set: (obj, value) => { - obj.processor = value; - } - }, - metadata: _metadata - }, _processor_initializers, _processor_extraInitializers); - __esDecorate$19(this, null, _dataContextPath_decorators, { - kind: "accessor", - name: "dataContextPath", - static: false, - private: false, - access: { - has: (obj) => "dataContextPath" in obj, - get: (obj) => obj.dataContextPath, - set: (obj, value) => { - obj.dataContextPath = value; - } - }, - metadata: _metadata - }, _dataContextPath_initializers, _dataContextPath_extraInitializers); - __esDecorate$19(this, null, _enableCustomElements_decorators, { - kind: "accessor", - name: "enableCustomElements", - static: false, - private: false, - access: { - has: (obj) => "enableCustomElements" in obj, - get: (obj) => obj.enableCustomElements, - set: (obj, value) => { - obj.enableCustomElements = value; - } - }, - metadata: _metadata - }, _enableCustomElements_initializers, _enableCustomElements_extraInitializers); - __esDecorate$19(this, null, _set_weight_decorators, { - kind: "setter", - name: "weight", - static: false, - private: false, - access: { - has: (obj) => "weight" in obj, - set: (obj, value) => { - obj.weight = value; - } - }, - metadata: _metadata - }, null, _instanceExtraInitializers); - __esDecorate$19(null, _classDescriptor = { value: _classThis }, _classDecorators, { - kind: "class", - name: _classThis.name, - metadata: _metadata - }, null, _classExtraInitializers); - Root = _classThis = _classDescriptor.value; - if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { - enumerable: true, - configurable: true, - writable: true, - value: _metadata - }); - } - #surfaceId_accessor_storage = (__runInitializers$19(this, _instanceExtraInitializers), __runInitializers$19(this, _surfaceId_initializers, null)); - get surfaceId() { - return this.#surfaceId_accessor_storage; - } - set surfaceId(value) { - this.#surfaceId_accessor_storage = value; - } - #component_accessor_storage = (__runInitializers$19(this, _surfaceId_extraInitializers), __runInitializers$19(this, _component_initializers, null)); - get component() { - return this.#component_accessor_storage; - } - set component(value) { - this.#component_accessor_storage = value; - } - #theme_accessor_storage = (__runInitializers$19(this, _component_extraInitializers), __runInitializers$19(this, _theme_initializers, void 0)); - get theme() { - return this.#theme_accessor_storage; - } - set theme(value) { - this.#theme_accessor_storage = value; - } - #childComponents_accessor_storage = (__runInitializers$19(this, _theme_extraInitializers), __runInitializers$19(this, _childComponents_initializers, null)); - get childComponents() { - return this.#childComponents_accessor_storage; - } - set childComponents(value) { - this.#childComponents_accessor_storage = value; - } - #processor_accessor_storage = (__runInitializers$19(this, _childComponents_extraInitializers), __runInitializers$19(this, _processor_initializers, null)); - get processor() { - return this.#processor_accessor_storage; - } - set processor(value) { - this.#processor_accessor_storage = value; - } - #dataContextPath_accessor_storage = (__runInitializers$19(this, _processor_extraInitializers), __runInitializers$19(this, _dataContextPath_initializers, "")); - get dataContextPath() { - return this.#dataContextPath_accessor_storage; - } - set dataContextPath(value) { - this.#dataContextPath_accessor_storage = value; - } - #enableCustomElements_accessor_storage = (__runInitializers$19(this, _dataContextPath_extraInitializers), __runInitializers$19(this, _enableCustomElements_initializers, false)); - get enableCustomElements() { - return this.#enableCustomElements_accessor_storage; - } - set enableCustomElements(value) { - this.#enableCustomElements_accessor_storage = value; - } - set weight(weight) { - this.#weight = weight; - this.style.setProperty("--weight", `${weight}`); - } - get weight() { - return this.#weight; - } - #weight = (__runInitializers$19(this, _enableCustomElements_extraInitializers), 1); - static { - this.styles = [structuralStyles, i$9` + let _classDecorators = [t$1("a2ui-root")]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + let _classSuper = o$7(i$6); + let _instanceExtraInitializers = []; + let _surfaceId_decorators; + let _surfaceId_initializers = []; + let _surfaceId_extraInitializers = []; + let _component_decorators; + let _component_initializers = []; + let _component_extraInitializers = []; + let _theme_decorators; + let _theme_initializers = []; + let _theme_extraInitializers = []; + let _childComponents_decorators; + let _childComponents_initializers = []; + let _childComponents_extraInitializers = []; + let _processor_decorators; + let _processor_initializers = []; + let _processor_extraInitializers = []; + let _dataContextPath_decorators; + let _dataContextPath_initializers = []; + let _dataContextPath_extraInitializers = []; + let _enableCustomElements_decorators; + let _enableCustomElements_initializers = []; + let _enableCustomElements_extraInitializers = []; + let _set_weight_decorators; + var Root = class extends _classSuper { + static { + _classThis = this; + } + static { + const _metadata = + typeof Symbol === "function" && Symbol.metadata + ? Object.create(_classSuper[Symbol.metadata] ?? null) + : void 0; + _surfaceId_decorators = [n$6()]; + _component_decorators = [n$6()]; + _theme_decorators = [c$1({ context: themeContext })]; + _childComponents_decorators = [n$6({ attribute: false })]; + _processor_decorators = [n$6({ attribute: false })]; + _dataContextPath_decorators = [n$6()]; + _enableCustomElements_decorators = [n$6()]; + _set_weight_decorators = [n$6()]; + __esDecorate$19( + this, + null, + _surfaceId_decorators, + { + kind: "accessor", + name: "surfaceId", + static: false, + private: false, + access: { + has: (obj) => "surfaceId" in obj, + get: (obj) => obj.surfaceId, + set: (obj, value) => { + obj.surfaceId = value; + }, + }, + metadata: _metadata, + }, + _surfaceId_initializers, + _surfaceId_extraInitializers, + ); + __esDecorate$19( + this, + null, + _component_decorators, + { + kind: "accessor", + name: "component", + static: false, + private: false, + access: { + has: (obj) => "component" in obj, + get: (obj) => obj.component, + set: (obj, value) => { + obj.component = value; + }, + }, + metadata: _metadata, + }, + _component_initializers, + _component_extraInitializers, + ); + __esDecorate$19( + this, + null, + _theme_decorators, + { + kind: "accessor", + name: "theme", + static: false, + private: false, + access: { + has: (obj) => "theme" in obj, + get: (obj) => obj.theme, + set: (obj, value) => { + obj.theme = value; + }, + }, + metadata: _metadata, + }, + _theme_initializers, + _theme_extraInitializers, + ); + __esDecorate$19( + this, + null, + _childComponents_decorators, + { + kind: "accessor", + name: "childComponents", + static: false, + private: false, + access: { + has: (obj) => "childComponents" in obj, + get: (obj) => obj.childComponents, + set: (obj, value) => { + obj.childComponents = value; + }, + }, + metadata: _metadata, + }, + _childComponents_initializers, + _childComponents_extraInitializers, + ); + __esDecorate$19( + this, + null, + _processor_decorators, + { + kind: "accessor", + name: "processor", + static: false, + private: false, + access: { + has: (obj) => "processor" in obj, + get: (obj) => obj.processor, + set: (obj, value) => { + obj.processor = value; + }, + }, + metadata: _metadata, + }, + _processor_initializers, + _processor_extraInitializers, + ); + __esDecorate$19( + this, + null, + _dataContextPath_decorators, + { + kind: "accessor", + name: "dataContextPath", + static: false, + private: false, + access: { + has: (obj) => "dataContextPath" in obj, + get: (obj) => obj.dataContextPath, + set: (obj, value) => { + obj.dataContextPath = value; + }, + }, + metadata: _metadata, + }, + _dataContextPath_initializers, + _dataContextPath_extraInitializers, + ); + __esDecorate$19( + this, + null, + _enableCustomElements_decorators, + { + kind: "accessor", + name: "enableCustomElements", + static: false, + private: false, + access: { + has: (obj) => "enableCustomElements" in obj, + get: (obj) => obj.enableCustomElements, + set: (obj, value) => { + obj.enableCustomElements = value; + }, + }, + metadata: _metadata, + }, + _enableCustomElements_initializers, + _enableCustomElements_extraInitializers, + ); + __esDecorate$19( + this, + null, + _set_weight_decorators, + { + kind: "setter", + name: "weight", + static: false, + private: false, + access: { + has: (obj) => "weight" in obj, + set: (obj, value) => { + obj.weight = value; + }, + }, + metadata: _metadata, + }, + null, + _instanceExtraInitializers, + ); + __esDecorate$19( + null, + (_classDescriptor = { value: _classThis }), + _classDecorators, + { + kind: "class", + name: _classThis.name, + metadata: _metadata, + }, + null, + _classExtraInitializers, + ); + Root = _classThis = _classDescriptor.value; + if (_metadata) + Object.defineProperty(_classThis, Symbol.metadata, { + enumerable: true, + configurable: true, + writable: true, + value: _metadata, + }); + } + #surfaceId_accessor_storage = + (__runInitializers$19(this, _instanceExtraInitializers), + __runInitializers$19(this, _surfaceId_initializers, null)); + get surfaceId() { + return this.#surfaceId_accessor_storage; + } + set surfaceId(value) { + this.#surfaceId_accessor_storage = value; + } + #component_accessor_storage = + (__runInitializers$19(this, _surfaceId_extraInitializers), + __runInitializers$19(this, _component_initializers, null)); + get component() { + return this.#component_accessor_storage; + } + set component(value) { + this.#component_accessor_storage = value; + } + #theme_accessor_storage = + (__runInitializers$19(this, _component_extraInitializers), + __runInitializers$19(this, _theme_initializers, void 0)); + get theme() { + return this.#theme_accessor_storage; + } + set theme(value) { + this.#theme_accessor_storage = value; + } + #childComponents_accessor_storage = + (__runInitializers$19(this, _theme_extraInitializers), + __runInitializers$19(this, _childComponents_initializers, null)); + get childComponents() { + return this.#childComponents_accessor_storage; + } + set childComponents(value) { + this.#childComponents_accessor_storage = value; + } + #processor_accessor_storage = + (__runInitializers$19(this, _childComponents_extraInitializers), + __runInitializers$19(this, _processor_initializers, null)); + get processor() { + return this.#processor_accessor_storage; + } + set processor(value) { + this.#processor_accessor_storage = value; + } + #dataContextPath_accessor_storage = + (__runInitializers$19(this, _processor_extraInitializers), + __runInitializers$19(this, _dataContextPath_initializers, "")); + get dataContextPath() { + return this.#dataContextPath_accessor_storage; + } + set dataContextPath(value) { + this.#dataContextPath_accessor_storage = value; + } + #enableCustomElements_accessor_storage = + (__runInitializers$19(this, _dataContextPath_extraInitializers), + __runInitializers$19(this, _enableCustomElements_initializers, false)); + get enableCustomElements() { + return this.#enableCustomElements_accessor_storage; + } + set enableCustomElements(value) { + this.#enableCustomElements_accessor_storage = value; + } + set weight(weight) { + this.#weight = weight; + this.style.setProperty("--weight", `${weight}`); + } + get weight() { + return this.#weight; + } + #weight = (__runInitializers$19(this, _enableCustomElements_extraInitializers), 1); + static { + this.styles = [ + structuralStyles, + i$9` :host { display: flex; flex-direction: column; gap: 8px; max-height: 80%; } - `]; - } - /** - * Holds the cleanup function for our effect. - * We need this to stop the effect when the component is disconnected. - */ - #lightDomEffectDisposer = null; - willUpdate(changedProperties) { - if (changedProperties.has("childComponents")) { - if (this.#lightDomEffectDisposer) this.#lightDomEffectDisposer(); - this.#lightDomEffectDisposer = effect(() => { - const allChildren = this.childComponents ?? null; - D(this.renderComponentTree(allChildren), this, { host: this }); - }); - } - } - /** - * Clean up the effect when the component is removed from the DOM. - */ - disconnectedCallback() { - super.disconnectedCallback(); - if (this.#lightDomEffectDisposer) this.#lightDomEffectDisposer(); - } - /** - * Turns the SignalMap into a renderable TemplateResult for Lit. - */ - renderComponentTree(components) { - if (!components) return A; - if (!Array.isArray(components)) return A; - return b` ${o$3(components, (component) => { - if (this.enableCustomElements) { - const elCtor = componentRegistry.get(component.type) || customElements.get(component.type); - if (elCtor) { - const node = component; - const el = new elCtor(); - el.id = node.id; - if (node.slotName) el.slot = node.slotName; - el.component = node; - el.weight = node.weight ?? "initial"; - el.processor = this.processor; - el.surfaceId = this.surfaceId; - el.dataContextPath = node.dataContextPath ?? "/"; - for (const [prop, val] of Object.entries(component.properties)) el[prop] = val; - return b`${el}`; - } - } - switch (component.type) { - case "List": { - const node = component; - const childComponents = node.properties.children; - return b` { + const allChildren = this.childComponents ?? null; + D(this.renderComponentTree(allChildren), this, { host: this }); + }); + } + } + /** + * Clean up the effect when the component is removed from the DOM. + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.#lightDomEffectDisposer) this.#lightDomEffectDisposer(); + } + /** + * Turns the SignalMap into a renderable TemplateResult for Lit. + */ + renderComponentTree(components) { + if (!components) return A; + if (!Array.isArray(components)) return A; + return b` ${o$3(components, (component) => { + if (this.enableCustomElements) { + const elCtor = + componentRegistry.get(component.type) || customElements.get(component.type); + if (elCtor) { + const node = component; + const el = new elCtor(); + el.id = node.id; + if (node.slotName) el.slot = node.slotName; + el.component = node; + el.weight = node.weight ?? "initial"; + el.processor = this.processor; + el.surfaceId = this.surfaceId; + el.dataContextPath = node.dataContextPath ?? "/"; + for (const [prop, val] of Object.entries(component.properties)) el[prop] = val; + return b`${el}`; + } + } + switch (component.type) { + case "List": { + const node = component; + const childComponents = node.properties.children; + return b` { .childComponents=${childComponents} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Card": { - const node = component; - let childComponents = node.properties.children; - if (!childComponents && node.properties.child) childComponents = [node.properties.child]; - return b` { .dataContextPath=${node.dataContextPath ?? ""} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Column": { - const node = component; - return b` { .distribution=${node.properties.distribution ?? "start"} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Row": { - const node = component; - return b` { .distribution=${node.properties.distribution ?? "start"} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Image": { - const node = component; - return b` { .fit=${node.properties.fit} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Icon": { - const node = component; - return b` { .dataContextPath=${node.dataContextPath ?? ""} .enableCustomElements=${this.enableCustomElements} >`; - } - case "AudioPlayer": { - const node = component; - return b` { .dataContextPath=${node.dataContextPath ?? ""} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Button": { - const node = component; - return b` { .childComponents=${[node.properties.child]} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Text": { - const node = component; - return b` { .usageHint=${node.properties.usageHint} .enableCustomElements=${this.enableCustomElements} >`; - } - case "CheckBox": { - const node = component; - return b` { .value=${node.properties.value} .enableCustomElements=${this.enableCustomElements} >`; - } - case "DateTimeInput": { - const node = component; - return b` { .value=${node.properties.value} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Divider": { - const node = component; - return b` { .color=${node.properties.color} .enableCustomElements=${this.enableCustomElements} >`; - } - case "MultipleChoice": { - const node = component; - return b` { .selections=${node.properties.selections} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Slider": { - const node = component; - return b` { .maxValue=${node.properties.maxValue} .enableCustomElements=${this.enableCustomElements} >`; - } - case "TextField": { - const node = component; - return b` { .validationRegexp=${node.properties.validationRegexp} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Video": { - const node = component; - return b` { .url=${node.properties.url} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Tabs": { - const node = component; - const titles = []; - const childComponents = []; - if (node.properties.tabItems) for (const item of node.properties.tabItems) { - titles.push(item.title); - childComponents.push(item.child); - } - return b` { .childComponents=${childComponents} .enableCustomElements=${this.enableCustomElements} >`; - } - case "Modal": { - const node = component; - const childComponents = [node.properties.entryPointChild, node.properties.contentChild]; - node.properties.entryPointChild.slotName = "entry"; - return b` { .childComponents=${childComponents} .enableCustomElements=${this.enableCustomElements} >`; - } - default: return this.renderCustomComponent(component); - } - })}`; - } - renderCustomComponent(component) { - if (!this.enableCustomElements) return; - const node = component; - const elCtor = componentRegistry.get(component.type) || customElements.get(component.type); - if (!elCtor) return b`Unknown element ${component.type}`; - const el = new elCtor(); - el.id = node.id; - if (node.slotName) el.slot = node.slotName; - el.component = node; - el.weight = node.weight ?? "initial"; - el.processor = this.processor; - el.surfaceId = this.surfaceId; - el.dataContextPath = node.dataContextPath ?? "/"; - for (const [prop, val] of Object.entries(component.properties)) el[prop] = val; - return b`${el}`; - } - render() { - return b``; - } - static { - __runInitializers$19(_classThis, _classExtraInitializers); - } - }; - return _classThis; + } + default: + return this.renderCustomComponent(component); + } + })}`; + } + renderCustomComponent(component) { + if (!this.enableCustomElements) return; + const node = component; + const elCtor = componentRegistry.get(component.type) || customElements.get(component.type); + if (!elCtor) return b`Unknown element ${component.type}`; + const el = new elCtor(); + el.id = node.id; + if (node.slotName) el.slot = node.slotName; + el.component = node; + el.weight = node.weight ?? "initial"; + el.processor = this.processor; + el.surfaceId = this.surfaceId; + el.dataContextPath = node.dataContextPath ?? "/"; + for (const [prop, val] of Object.entries(component.properties)) el[prop] = val; + return b`${el}`; + } + render() { + return b``; + } + static { + __runInitializers$19(_classThis, _classExtraInitializers); + } + }; + return _classThis; })(); /** -* @license -* Copyright 2018 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ const e$2 = e$10(class extends i$5 { - constructor(t) { - if (super(t), t.type !== t$4.ATTRIBUTE || "class" !== t.name || t.strings?.length > 2) throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute."); - } - render(t) { - return " " + Object.keys(t).filter((s) => t[s]).join(" ") + " "; - } - update(s, [i]) { - if (void 0 === this.st) { - this.st = /* @__PURE__ */ new Set(), void 0 !== s.strings && (this.nt = new Set(s.strings.join(" ").split(/\s/).filter((t) => "" !== t))); - for (const t in i) i[t] && !this.nt?.has(t) && this.st.add(t); - return this.render(i); - } - const r = s.element.classList; - for (const t of this.st) t in i || (r.remove(t), this.st.delete(t)); - for (const t in i) { - const s = !!i[t]; - s === this.st.has(t) || this.nt?.has(t) || (s ? (r.add(t), this.st.add(t)) : (r.remove(t), this.st.delete(t))); - } - return E; - } -}); + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const e$2 = e$10( + class extends i$5 { + constructor(t) { + if ((super(t), t.type !== t$4.ATTRIBUTE || "class" !== t.name || t.strings?.length > 2)) + throw Error( + "`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.", + ); + } + render(t) { + return ( + " " + + Object.keys(t) + .filter((s) => t[s]) + .join(" ") + + " " + ); + } + update(s, [i]) { + if (void 0 === this.st) { + ((this.st = /* @__PURE__ */ new Set()), + void 0 !== s.strings && + (this.nt = new Set( + s.strings + .join(" ") + .split(/\s/) + .filter((t) => "" !== t), + ))); + for (const t in i) i[t] && !this.nt?.has(t) && this.st.add(t); + return this.render(i); + } + const r = s.element.classList; + for (const t of this.st) t in i || (r.remove(t), this.st.delete(t)); + for (const t in i) { + const s = !!i[t]; + s === this.st.has(t) || + this.nt?.has(t) || + (s ? (r.add(t), this.st.add(t)) : (r.remove(t), this.st.delete(t))); + } + return E; + } + }, +); /** -* @license -* Copyright 2018 Google LLC -* SPDX-License-Identifier: BSD-3-Clause -*/ const n$1 = "important", i = " !" + n$1, o$2 = e$10(class extends i$5 { - constructor(t) { - if (super(t), t.type !== t$4.ATTRIBUTE || "style" !== t.name || t.strings?.length > 2) throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute."); - } - render(t) { - return Object.keys(t).reduce((e, r) => { - const s = t[r]; - return null == s ? e : e + `${r = r.includes("-") ? r : r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g, "-$&").toLowerCase()}:${s};`; - }, ""); - } - update(e, [r]) { - const { style: s } = e.element; - if (void 0 === this.ft) return this.ft = new Set(Object.keys(r)), this.render(r); - for (const t of this.ft) null == r[t] && (this.ft.delete(t), t.includes("-") ? s.removeProperty(t) : s[t] = null); - for (const t in r) { - const e = r[t]; - if (null != e) { - this.ft.add(t); - const r = "string" == typeof e && e.endsWith(i); - t.includes("-") || r ? s.setProperty(t, r ? e.slice(0, -11) : e, r ? n$1 : "") : s[t] = e; - } - } - return E; - } -}); -var __esDecorate$18 = function(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { - if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); - return f; - } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1; i >= 0; i--) { - var context = {}; - for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) context.access[p] = contextIn.access[p]; - context.addInitializer = function(f) { - if (done) throw new TypeError("Cannot add initializers after decoration has completed"); - extraInitializers.push(accept(f || null)); - }; - var result = (0, decorators[i])(kind === "accessor" ? { - get: descriptor.get, - set: descriptor.set - } : descriptor[key], context); - if (kind === "accessor") { - if (result === void 0) continue; - if (result === null || typeof result !== "object") throw new TypeError("Object expected"); - if (_ = accept(result.get)) descriptor.get = _; - if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.unshift(_); - } else if (_ = accept(result)) if (kind === "field") initializers.unshift(_); - else descriptor[key] = _; - } - if (target) Object.defineProperty(target, contextIn.name, descriptor); - done = true; -}; -var __runInitializers$18 = function(thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0; i < initializers.length; i++) value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - return useValue ? value : void 0; + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ const n$1 = "important", + i = " !" + n$1, + o$2 = e$10( + class extends i$5 { + constructor(t) { + if ((super(t), t.type !== t$4.ATTRIBUTE || "style" !== t.name || t.strings?.length > 2)) + throw Error( + "The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.", + ); + } + render(t) { + return Object.keys(t).reduce((e, r) => { + const s = t[r]; + return null == s + ? e + : e + + `${(r = r.includes("-") ? r : r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g, "-$&").toLowerCase())}:${s};`; + }, ""); + } + update(e, [r]) { + const { style: s } = e.element; + if (void 0 === this.ft) return ((this.ft = new Set(Object.keys(r))), this.render(r)); + for (const t of this.ft) + null == r[t] && + (this.ft.delete(t), t.includes("-") ? s.removeProperty(t) : (s[t] = null)); + for (const t in r) { + const e = r[t]; + if (null != e) { + this.ft.add(t); + const r = "string" == typeof e && e.endsWith(i); + t.includes("-") || r + ? s.setProperty(t, r ? e.slice(0, -11) : e, r ? n$1 : "") + : (s[t] = e); + } + } + return E; + } + }, + ); +var __esDecorate$18 = function ( + ctor, + descriptorIn, + decorators, + contextIn, + initializers, + extraInitializers, +) { + function accept(f) { + if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); + return f; + } + var kind = contextIn.kind, + key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; + var target = !descriptorIn && ctor ? (contextIn["static"] ? ctor : ctor.prototype) : null; + var descriptor = + descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); + var _, + done = false; + for (var i = decorators.length - 1; i >= 0; i--) { + var context = {}; + for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; + for (var p in contextIn.access) context.access[p] = contextIn.access[p]; + context.addInitializer = function (f) { + if (done) throw new TypeError("Cannot add initializers after decoration has completed"); + extraInitializers.push(accept(f || null)); + }; + var result = (0, decorators[i])( + kind === "accessor" + ? { + get: descriptor.get, + set: descriptor.set, + } + : descriptor[key], + context, + ); + if (kind === "accessor") { + if (result === void 0) continue; + if (result === null || typeof result !== "object") throw new TypeError("Object expected"); + if ((_ = accept(result.get))) descriptor.get = _; + if ((_ = accept(result.set))) descriptor.set = _; + if ((_ = accept(result.init))) initializers.unshift(_); + } else if ((_ = accept(result))) + if (kind === "field") initializers.unshift(_); + else descriptor[key] = _; + } + if (target) Object.defineProperty(target, contextIn.name, descriptor); + done = true; +}; +var __runInitializers$18 = function (thisArg, initializers, value) { + var useValue = arguments.length > 2; + for (var i = 0; i < initializers.length; i++) + value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); + return useValue ? value : void 0; }; (() => { - let _classDecorators = [t$1("a2ui-audioplayer")]; - let _classDescriptor; - let _classExtraInitializers = []; - let _classThis; - let _classSuper = Root; - let _url_decorators; - let _url_initializers = []; - let _url_extraInitializers = []; - var Audio = class extends _classSuper { - static { - _classThis = this; - } - static { - const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; - _url_decorators = [n$6()]; - __esDecorate$18(this, null, _url_decorators, { - kind: "accessor", - name: "url", - static: false, - private: false, - access: { - has: (obj) => "url" in obj, - get: (obj) => obj.url, - set: (obj, value) => { - obj.url = value; - } - }, - metadata: _metadata - }, _url_initializers, _url_extraInitializers); - __esDecorate$18(null, _classDescriptor = { value: _classThis }, _classDecorators, { - kind: "class", - name: _classThis.name, - metadata: _metadata - }, null, _classExtraInitializers); - Audio = _classThis = _classDescriptor.value; - if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { - enumerable: true, - configurable: true, - writable: true, - value: _metadata - }); - } - #url_accessor_storage = __runInitializers$18(this, _url_initializers, null); - get url() { - return this.#url_accessor_storage; - } - set url(value) { - this.#url_accessor_storage = value; - } - static { - this.styles = [structuralStyles, i$9` + let _classDecorators = [t$1("a2ui-audioplayer")]; + let _classDescriptor; + let _classExtraInitializers = []; + let _classThis; + let _classSuper = Root; + let _url_decorators; + let _url_initializers = []; + let _url_extraInitializers = []; + var Audio = class extends _classSuper { + static { + _classThis = this; + } + static { + const _metadata = + typeof Symbol === "function" && Symbol.metadata + ? Object.create(_classSuper[Symbol.metadata] ?? null) + : void 0; + _url_decorators = [n$6()]; + __esDecorate$18( + this, + null, + _url_decorators, + { + kind: "accessor", + name: "url", + static: false, + private: false, + access: { + has: (obj) => "url" in obj, + get: (obj) => obj.url, + set: (obj, value) => { + obj.url = value; + }, + }, + metadata: _metadata, + }, + _url_initializers, + _url_extraInitializers, + ); + __esDecorate$18( + null, + (_classDescriptor = { value: _classThis }), + _classDecorators, + { + kind: "class", + name: _classThis.name, + metadata: _metadata, + }, + null, + _classExtraInitializers, + ); + Audio = _classThis = _classDescriptor.value; + if (_metadata) + Object.defineProperty(_classThis, Symbol.metadata, { + enumerable: true, + configurable: true, + writable: true, + value: _metadata, + }); + } + #url_accessor_storage = __runInitializers$18(this, _url_initializers, null); + get url() { + return this.#url_accessor_storage; + } + set url(value) { + this.#url_accessor_storage = value; + } + static { + this.styles = [ + structuralStyles, + i$9` * { box-sizing: border-box; } @@ -3855,232 +4731,305 @@ var __runInitializers$18 = function(thisArg, initializers, value) { display: block; width: 100%; } - `]; - } - #renderAudio() { - if (!this.url) return A; - if (this.url && typeof this.url === "object") { - if ("literalString" in this.url) return b`