-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
186 lines (151 loc) · 6.96 KB
/
Copy path.env.example
File metadata and controls
186 lines (151 loc) · 6.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# .env.example - Environment variable template
# Copy this to .env and fill in your values
# NEVER commit .env or .env.local to version control
# Platform tokens
DISCORD_TOKEN=your-discord-bot-token
MISSKEY_TOKEN=your-misskey-access-token
MISSKEY_HOST=misskey.example.com
# Platform enable flags (true/false). These can override the corresponding
DISCORD_ENABLED=true
MISSKEY_ENABLED=false
# Agent configuration
AGENT_MODEL=openrouter/deepseek/deepseek-v4-pro
# Global reasoning effort (ACP thought_level): none|low|medium|high|default
# "default" = do not configure (agent/model decides). Per-rule and per-section
# values are set in config / MODEL_ROUTING_RULES, not via env.
AGENT_REASONING_EFFORT=default
# Default ACP agent type (opencode)
AGENT_DEFAULT_TYPE=opencode
# Bootstrap OpenCode version-check minimum (observability only, never blocks startup).
# The system WARNs (marker BELOW_MINIMUM/UNKNOWN) when the installed opencode CLI
# version is below this value. Default 1.17.13 (first release with the enriched ACP
# permission request shape). Only affects the warning, not a functional gate.
# AGENT_OPENCODE_MIN_VERSION=1.17.13
# Skills directory path (for container deployment, use /home/deno/.agents/skills)
# AGENT_SKILLS_DIR=skills
# External skills to install at startup (JSON array)
# AGENT_EXTERNAL_SKILLS=[{"repo":"jim60105/copilot-prompt","skill":"create-blog-post"}]
# Skill Auto-Approve List (comma-separated skill names for restricted/non-YOLO mode)
# When empty or not set, falls back to scanning the built-in skills directory.
# AGENT_AUTO_APPROVE_SKILLS=memory-save,memory-search,memory-patch,memory-stats,memory-export,fetch-context,send-reply,edit-reply,send-file,react-message,set-reminder,list-reminders,cancel-reminder,self-research,agent-browser
# Model routing - per-user/per-context model selection
MODEL_ROUTING_ENABLED=false
# Rules as JSON string array. Match conditions are AND-combined; contentKeywords are OR-combined.
# Example:
# Each rule MAY include "reasoningEffort" (none|low|medium|high|default) to control thinking effort per context.
# Example:
# [{"match":{"channel":"discord/account/12345678901234567","contentKeywords":["研究","research"]},"model":"openrouter/google/gemini-2.5-pro","reasoningEffort":"high"},{"match":{"sessionType":"spontaneous"},"reasoningEffort":"low"}]
MODEL_ROUTING_RULES='[]'
# External MCP Servers as JSON string array. Example:
# [{"name":"github","command":"npx","args":["-y","@modelcontextprotocol/server-github"],"env":{"GITHUB_TOKEN":"your-token"}}]
AGENT_MCP_SERVERS='[]'
# Dry Run / Debug Mode
# DRY_RUN_ENABLED=false
# DRY_RUN_OUTPUT_PATH=./data/dry-run/
# DRY_RUN_MOCK_REPLY=(Dry run 模式 — 此為測試回覆)
# Logging
LOG_LEVEL=INFO
# Environment
DENO_ENV=development
# Agent provider API keys
# OpenCode API Key (optional)
OPENCODE_API_KEY=your-opencode-api-key
# OpenRouter API Key (optional - for OpenRouter provider)
OPENROUTER_API_KEY=your-openrouter-api-key
# Gemini API Key for the OpenCode Gemini provider (optional)
GEMINI_API_KEY=your-gemini-api-key
# GitHub Token (used by the git backup / git credential store; optional)
GITHUB_TOKEN=github_pat_your-token-here
# Reply Policy & Channel Settings (all|public|channels)
REPLY_POLICY=channels
CHANNELS='[{"id":"discord/account/560842157351763989","enabled":true,"spontaneousPost":false,"rateLimitBypass":true},{"id":"discord/channel/873618490202931231","enabled":true,"spontaneousPost":true,"channelLurk":true},{"id":"misskey/account/agy61oh08uzl000g","enabled":true}]'
# Spontaneous post settings - Discord
DISCORD_SPONTANEOUS_ENABLED=false
DISCORD_SPONTANEOUS_MIN_INTERVAL_MS=10800000
DISCORD_SPONTANEOUS_MAX_INTERVAL_MS=43200000
DISCORD_SPONTANEOUS_CONTEXT_FETCH_PROBABILITY=0.5
# Discord typing indicator (shows "typing..." while processing)
DISCORD_TYPING_INDICATOR_ENABLED=false
# Channel Lurk Reply (Discord only)
# DISCORD_CHANNEL_LURK_ENABLED=false
# DISCORD_CHANNEL_LURK_INTERVAL_MS=1800000
# Spontaneous post settings - Misskey
MISSKEY_SPONTANEOUS_ENABLED=false
MISSKEY_SPONTANEOUS_MIN_INTERVAL_MS=10800000
MISSKEY_SPONTANEOUS_MAX_INTERVAL_MS=43200000
MISSKEY_SPONTANEOUS_CONTEXT_FETCH_PROBABILITY=0.5
# GELF Logging configuration
GELF_ENABLED=false
GELF_ENDPOINT=http://your-gelf-endpoint:12201
GELF_HOSTNAME=air-friends
GELF_PROTOCOL=http
GELF_COMPRESS=true
# RSS Feed Research Settings
SELF_RESEARCH_ENABLED=false
SELF_RESEARCH_MODEL=openrouter/anthropic/claude-opus-4.8
# RSS feeds as a JSON string array. Example:
# [{"url":"https://example.com/feed.xml","name":"Tech News"}]
# Keep the value quoted to preserve JSON formatting in shells.
SELF_RESEARCH_RSS_FEEDS='[{"url":"https://example.com/feed.xml","name":"Tech News"}]'
SELF_RESEARCH_MIN_INTERVAL_MS=43200000
SELF_RESEARCH_MAX_INTERVAL_MS=86400000
# Rate Limiting
RATE_LIMIT_ENABLED=false
RATE_LIMIT_MAX_REQUESTS_PER_WINDOW=10
RATE_LIMIT_WINDOW_MS=600000
RATE_LIMIT_COOLDOWN_MS=600000
# Prometheus Metrics
METRICS_ENABLED=false
METRICS_PATH=/metrics
# Git Backup - backs up data/ directory to a remote Git repository
GIT_BACKUP_ENABLED=false
GIT_BACKUP_REMOTE_URL=https://github.com/your-username/your-backup-repo.git
GIT_BACKUP_INTERVAL_MS=3600000
GIT_BACKUP_AUTHOR_NAME=AIr-Friends Backup
GIT_BACKUP_AUTHOR_EMAIL=airfriends-backup@noreply.github.com
GIT_BACKUP_AUTH_USER=
GIT_BACKUP_AUTH_PASSWORD=
# Scheduled Reminders (DM-only, one-time reminders)
# REMINDERS_ENABLED=false
# REMINDERS_MAX_PER_USER=20
# REMINDERS_MIN_INTERVAL_MS=60000
# REMINDERS_PERSIST_PATH=reminders.jsonl
# REMINDERS_CHECK_INTERVAL_MS=30000
# Send File Skill (disabled by default for security)
# SKILL_SEND_FILE_ENABLED=false
# SKILL_SEND_FILE_MAX_SIZE_MB=25
# SKILL_SEND_FILE_ALLOWED_EXTENSIONS=
# SKILL_SEND_FILE_MAX_FILES_PER_INVOCATION=10
# SKILL_SEND_FILE_MAX_TOTAL_SIZE_MB=50
# Agent Sandbox - subprocess isolation settings
# AGENT_SANDBOX_FILTER_ENV=true
# AGENT_SANDBOX_NETWORK_ISOLATION=false
# AGENT_SANDBOX_ALLOWED_ENV_VARS=
# AGENT_SANDBOX_ALLOWED_WRITE_EXTENSIONS=.md,.txt
# Agent Idle Timeout - detect silently disconnected ACP connections
# AGENT_IDLE_TIMEOUT_ENABLED=true
# AGENT_IDLE_TIMEOUT_MS=300000
# AGENT_IDLE_TIMEOUT_CHECK_INTERVAL_MS=30000
# Git Credential Store - agent subprocess git auth in YOLO mode
# Uses gitBackup.authUser/authPassword (or GITHUB_TOKEN) as credential source.
# AGENT_GIT_CREDENTIAL_ENABLED=false
# AGENT_GIT_CREDENTIAL_HOST=github.com
# Memory Tiered Architecture
# MEMORY_WORKING_TIER_LIMIT=20
# Conversation Summary (auto-generated after each session)
CONVERSATION_SUMMARY_ENABLED=true
CONVERSATION_SUMMARY_MODEL=
# Session Audit Log
# AUDIT_ENABLED=false
# AUDIT_RETENTION_DAYS=7
# AUDIT_HASH_CONTENT=true
# AUDIT_INCLUDED_PHASES=skill_call,reply_sent,session_end
# Web Dashboard
# DASHBOARD_ENABLED=false
# DASHBOARD_PORT=8090
# DASHBOARD_HOST=127.0.0.1
# DASHBOARD_PASSPHRASE=
# Set true only when served behind an HTTPS-terminating reverse proxy (enables Secure cookie)
# DASHBOARD_BEHIND_HTTPS_PROXY=false
# Comma-separated real connection addresses whose X-Forwarded-For is trusted for rate-limit keying
# DASHBOARD_TRUSTED_PROXIES=