1use serde_json::{json, Value};
2
3pub fn env_schema_json() -> Value {
4 json!({
5 "precedence": ["CLI flags", "environment variables", "defaults"],
6 "dotenv": {
7 "enabled": true,
8 "behavior": "Loads nearest .env walking up from cwd; values override existing shell exports"
9 },
10 "variables": [
11 {
12 "name": "SCHWAB_APP_KEY",
13 "aliases": ["SCHWAB_CLIENT_ID"],
14 "required": true,
15 "secret": true,
16 "description": "Schwab Developer Portal app key (OAuth client id)"
17 },
18 {
19 "name": "SCHWAB_APP_SECRET",
20 "aliases": ["SCHWAB_CLIENT_SECRET"],
21 "required": true,
22 "secret": true,
23 "description": "Schwab Developer Portal app secret"
24 },
25 {
26 "name": "SCHWAB_REDIRECT_URI",
27 "aliases": [],
28 "required": false,
29 "default": "https://127.0.0.1:8182",
30 "description": "OAuth redirect URI registered with your Schwab app"
31 },
32 {
33 "name": "SCHWAB_TOKEN_DIR",
34 "aliases": [],
35 "required": false,
36 "description": "Override directory for tokens.json"
37 },
38 {
39 "name": "SCHWAB_SAFETY_CONFIG",
40 "aliases": [],
41 "required": false,
42 "description": "Override path to safety.json trading limits (default: platform config dir)"
43 },
44 {
45 "name": "SCHWAB_CONFIG_DIR",
46 "aliases": [],
47 "required": false,
48 "description": "Override schwabinvestbot config directory (disclaimer markers, etc.)"
49 },
50 {
51 "name": "SCHWAB_DISCLAIMER_ACCEPTED",
52 "aliases": [],
53 "required": false,
54 "description": "Set to any non-empty value to skip disclaimer acceptance file check (automation you control)"
55 },
56 {
57 "name": "SCHWAB_MODE",
58 "aliases": [],
59 "required": false,
60 "default": "agent",
61 "enum": ["agent", "human"],
62 "description": "CLI operating mode"
63 },
64 {
65 "name": "SCHWAB_OUTPUT",
66 "aliases": [],
67 "required": false,
68 "default": "pretty",
69 "enum": ["pretty", "json", "md"],
70 "description": "Default output format"
71 },
72 {
73 "name": "NO_COLOR",
74 "aliases": [],
75 "required": false,
76 "description": "Disable ANSI colors in pretty output"
77 },
78 {
79 "name": "OPENROUTER_API_KEY",
80 "aliases": [],
81 "required": false,
82 "secret": true,
83 "description": "OpenRouter API key for LLM-powered agent reviews (when llm.enabled in rules.yaml)"
84 },
85 {
86 "name": "TELEGRAM_BOT_TOKEN",
87 "aliases": [],
88 "required": false,
89 "secret": true,
90 "description": "Telegram bot token from @BotFather (when notify.telegram.enabled in rules.yaml)"
91 },
92 {
93 "name": "TELEGRAM_CHAT_ID",
94 "aliases": [],
95 "required": false,
96 "secret": true,
97 "description": "Telegram chat ID for agent notifications"
98 }
99 ]
100 })
101}