139 lines
4.7 KiB
TOML
139 lines
4.7 KiB
TOML
# AVWatch configuration
|
|||
|
|
# Copy to config.toml and edit. Secrets go in environment variables, never
|
||
|
|
# here, so this file is safe to keep on a shared drive or in git.
|
||
|
|
#
|
||
|
|
# AVWATCH_SMTP_PASSWORD mail app password
|
||
|
|
# ANTHROPIC_API_KEY enables the Claude verdict + version lookup
|
||
|
|
# AVWATCH_GITHUB_TOKEN lifts GitHub's 60/hour limit to 5000/hour
|
||
|
|
# AVWATCH_REDDIT_CLIENT_ID free "script" app at reddit.com/prefs/apps
|
||
|
|
# AVWATCH_REDDIT_CLIENT_SECRET
|
||
|
|
|
||
|
|
[general]
|
||
|
|
cache_ttl = 3600 # seconds to reuse an HTTP response
|
||
|
|
http_timeout = 30
|
||
|
|
log_level = "INFO" # DEBUG when something is misbehaving
|
||
|
|
|
||
|
|
[paths]
|
||
|
|
# All relative to the project folder unless you give absolute paths.
|
||
|
|
# data_dir = "data"
|
||
|
|
# report_dir = "reports"
|
||
|
|
# inventory = "inventory.yaml"
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Email digest
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
[email]
|
||
|
|
enabled = true
|
||
|
|
|
||
|
|
# --- Microsoft 365 -----------------------------------------------------
|
||
|
|
# smtp_host = "smtp.office365.com"
|
||
|
|
# smtp_port = 587
|
||
|
|
# use_starttls = true
|
||
|
|
# username = "avwatch@yourchurch.org"
|
||
|
|
# With MFA on the account you must create an app password, and the mailbox
|
||
|
|
# needs SMTP AUTH enabled (it is off by default on new M365 tenants):
|
||
|
|
# Exchange admin centre -> Mailboxes -> the mailbox -> Manage email apps
|
||
|
|
# -> tick "Authenticated SMTP".
|
||
|
|
#
|
||
|
|
# --- Google Workspace --------------------------------------------------
|
||
|
|
smtp_host = "smtp.gmail.com"
|
||
|
|
smtp_port = 587
|
||
|
|
use_starttls = true
|
||
|
|
use_ssl = false
|
||
|
|
username = "your.address@waterschurch.org"
|
||
|
|
# Requires an App Password (myaccount.google.com -> Security -> 2-Step
|
||
|
|
# Verification -> App passwords). Your normal password will be rejected.
|
||
|
|
|
||
|
|
from_addr = "your.address@waterschurch.org"
|
||
|
|
from_name = "AVWatch"
|
||
|
|
|
||
|
|
# Who gets the Monday briefing.
|
||
|
|
to = [
|
||
|
|
"chris.meireles@waterschurch.org",
|
||
|
|
]
|
||
|
|
cc = []
|
||
|
|
|
||
|
|
subject_prefix = "[AVWatch]"
|
||
|
|
attach_html = true # attach the full dashboard to the email
|
||
|
|
send_when_nothing_new = true # false = stay silent on quiet weeks
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Community risk scanning
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
[risk]
|
||
|
|
enabled = true
|
||
|
|
|
||
|
|
# Only scan the forums for items we are actually behind on. Turning this off
|
||
|
|
# scans everything and takes a great deal longer.
|
||
|
|
only_when_behind = true
|
||
|
|
|
||
|
|
max_queries_per_item = 2
|
||
|
|
max_evidence_per_item = 8
|
||
|
|
lookback_days = 400
|
||
|
|
|
||
|
|
use_duckduckgo = true # works with no key, but rate-limits hard
|
||
|
|
use_reddit = true # needs the two AVWATCH_REDDIT_* env vars
|
||
|
|
use_github_issues = true # best signal for OBS / Companion / RustDesk
|
||
|
|
use_hackernews = false # low yield for AV gear
|
||
|
|
|
||
|
|
# Searched via the Reddit API when credentials are present.
|
||
|
|
subreddits = [
|
||
|
|
"livesound",
|
||
|
|
"VIDEOENGINEERING",
|
||
|
|
"churchtech",
|
||
|
|
"ProPresenter",
|
||
|
|
"blackmagicdesign",
|
||
|
|
"audioengineering",
|
||
|
|
"shure",
|
||
|
|
"sounddesign",
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Verdict engine
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
[llm]
|
||
|
|
enabled = true
|
||
|
|
model = "claude-opus-5"
|
||
|
|
# Cheaper alternative if the Opus verdicts read as more than you need:
|
||
|
|
# model = "claude-sonnet-5"
|
||
|
|
escalate_model = "claude-opus-5"
|
||
|
|
escalate_for_criticality = ["showstopper"]
|
||
|
|
max_output_tokens = 1400
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Version lookup for vendors with no machine-readable feed
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Most AV vendor support sites are JavaScript-rendered and cannot be scraped.
|
||
|
|
# For those, Claude looks the version up with web search and cites a source.
|
||
|
|
# This is factual retrieval rather than judgement, so it runs on the cheaper
|
||
|
|
# model. Answers are cached for ttl_days, so the Monday digest pays for the
|
||
|
|
# lookups and mid-week scans reuse them.
|
||
|
|
[lookup]
|
||
|
|
enabled = true
|
||
|
|
model = "claude-sonnet-5"
|
||
|
|
ttl_days = 6.0
|
||
|
|
max_items_per_run = 120 # hard ceiling on cost per run
|
||
|
|
max_searches_per_item = 4
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Local policy -- your rules, independent of what the internet says
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
[policy]
|
||
|
|
# How long a release must have been out before it is recommended, by how much
|
||
|
|
# the gear matters. These are the main dials worth tuning.
|
||
|
|
soak_days_showstopper = 30
|
||
|
|
soak_days_high = 21
|
||
|
|
soak_days_normal = 10
|
||
|
|
|
||
|
|
# ISO weekdays where an install should never be scheduled (1 = Monday).
|
||
|
|
# Saturday and Sunday by default.
|
||
|
|
blackout_weekdays = [6, 7]
|
||
|
|
|
||
|
|
# Require a human decision for a major version jump on show-critical gear.
|
||
|
|
major_bump_needs_human = true
|