1 line
6.4 KiB
JSON
1 line
6.4 KiB
JSON
{"repo": "charlunn/knowlib", "files": {"apps/api/internal/config/config.go": {"eda7dff4d715846dba9a26c9c9098e12d6b2209a": {"t": 1785746099.9165335, "n": 2827, "h": "0937f727c3a1aef9", "c": "// Package config wires the env vars from docker-compose.yml + .env into a\n// single Go struct. Defaults match `.env.example` so local-dev `go run ./cmd/api`\n// works without docker.\npackage config\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype Config struct {\n\tDomain string\n\tListen string // host:port the server binds to\n\tJWTSecret string\n\tTOTPSecret string // base32\n\tTOTPIssuer string\n\tTOTPAcct string\n\n\tVaultPath string\n\tInboxDir string\n\tNotesDir string\n\tAtlasDir string\n\tKnowlibDir string\n\n\tOpenAIBaseURL string\n\tOpenAIAPIKey string\n\tOpenAIModel string\n\n\tEmbedBaseURL string\n\tEmbedModel string\n\n\tQdrantURL string\n\tQdrantCollection string\n\n\tTidyServiceURL string\n\tTidyTopK int\n\tTidyMaxTokens int\n\n\tStatePath string // bbolt db location\n\tSkillBundleDir string // packages/skill-bundle (read-only template)\n\tLoginRatePerMinute int\n}\n\nfunc envOr(key, def string) string {\n\tif v := strings.TrimSpace(os.Getenv(key)); v != \"\" {\n\t\treturn v\n\t}\n\treturn def\n}\n\nfunc envInt(key string, def int) int {\n\tif v := strings.TrimSpace(os.Getenv(key)); v != \"\" {\n\t\tif n, err := strconv.Atoi(v); err == nil {\n\t\t\treturn n\n\t\t}\n\t}\n\treturn def\n}\n\nfunc Load() (*Config, error) {\n\tc := &Config{\n\t\tDomain: envOr(\"DOMAIN\", \"localhost\"),\n\t\tListen: envOr(\"LISTEN_ADDR\", \":8080\"),\n\t\tJWTSecret: envOr(\"JWT_SECRET\", \"\"),\n\t\tTOTPSecret: envOr(\"TOTP_SECRET\", \"\"),\n\t\tTOTPIssuer: envOr(\"TOTP_ISSUER\", \"knowLib\"),\n\t\tTOTPAcct: envOr(\"TOTP_ACCOUNT\", \"me\"),\n\t\tVaultPath: envOr(\"VAULT_PATH\", \"/data/vault\"),\n\t\tInboxDir: envOr(\"INBOX_DIR\", \"inbox\"),\n\t\tNotesDir: envOr(\"NOTES_DIR\", \"notes\"),\n\t\tAtlasDir: envOr(\"ATLAS_DIR\", \"atlas\"),\n\t\tKnowlibDir: envOr(\"KNOWLIB_DIR\", \".knowlib\"),\n\t\tOpenAIBaseURL: envOr(\"OPENAI_BASE_URL\", \"https://api.deepseek.com/v1\"),\n\t\tOpenAIAPIKey: envOr(\"OPENAI_API_KEY\", \"\"),\n\t\tOpenAIModel: envOr(\"OPENAI_MODEL\", \"deepseek-chat\"),\n\t\tEmbedBaseURL: envOr(\"EMBED_BASE_URL\", \"http://embedder:8000/v1\"),\n\t\tEmbedModel: envOr(\"EMBED_MODEL\", \"bge-m3\"),\n\t\tQdrantURL: envOr(\"QDRANT_URL\", \"http://qdrant:6333\"),\n\t\tQdrantCollection: envOr(\"QDRANT_COLLECTION\", \"knowlib_notes\"),\n\t\tTidyServiceURL: envOr(\"TIDY_SERVICE_URL\", \"http://tidy:8081\"),\n\t\tTidyTopK: envInt(\"TIDY_TOP_K\", 8),\n\t\tTidyMaxTokens: envInt(\"TIDY_MAX_TOKENS\", 4096),\n\t\tStatePath: envOr(\"API_STATE_PATH\", \"/state/api.db\"),\n\t\tSkillBundleDir: envOr(\"SKILL_BUNDLE_DIR\", \"/skill-bundle\"),\n\t\tLoginRatePerMinute: envInt(\"LOGIN_RATE_PER_MINUTE\", 5),\n\t}\n\tif c.JWTSecret == \"\" {\n\t\treturn nil, fmt.Errorf(\"JWT_SECRET is required\")\n\t}\n\tif c.TOTPSecret == \"\" {\n\t\treturn nil, fmt.Errorf(\"TOTP_SECRET is required (run scripts/bootstrap.sh first)\")\n\t}\n\treturn c, nil\n}\n"}, "5e0d150d0e2e3f12af1c71f825b1f9d9b83cba8a": {"t": 1785759866.8101778, "n": 2827, "h": "0937f727c3a1aef9", "c": "// Package config wires the env vars from docker-compose.yml + .env into a\n// single Go struct. Defaults match `.env.example` so local-dev `go run ./cmd/api`\n// works without docker.\npackage config\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype Config struct {\n\tDomain string\n\tListen string // host:port the server binds to\n\tJWTSecret string\n\tTOTPSecret string // base32\n\tTOTPIssuer string\n\tTOTPAcct string\n\n\tVaultPath string\n\tInboxDir string\n\tNotesDir string\n\tAtlasDir string\n\tKnowlibDir string\n\n\tOpenAIBaseURL string\n\tOpenAIAPIKey string\n\tOpenAIModel string\n\n\tEmbedBaseURL string\n\tEmbedModel string\n\n\tQdrantURL string\n\tQdrantCollection string\n\n\tTidyServiceURL string\n\tTidyTopK int\n\tTidyMaxTokens int\n\n\tStatePath string // bbolt db location\n\tSkillBundleDir string // packages/skill-bundle (read-only template)\n\tLoginRatePerMinute int\n}\n\nfunc envOr(key, def string) string {\n\tif v := strings.TrimSpace(os.Getenv(key)); v != \"\" {\n\t\treturn v\n\t}\n\treturn def\n}\n\nfunc envInt(key string, def int) int {\n\tif v := strings.TrimSpace(os.Getenv(key)); v != \"\" {\n\t\tif n, err := strconv.Atoi(v); err == nil {\n\t\t\treturn n\n\t\t}\n\t}\n\treturn def\n}\n\nfunc Load() (*Config, error) {\n\tc := &Config{\n\t\tDomain: envOr(\"DOMAIN\", \"localhost\"),\n\t\tListen: envOr(\"LISTEN_ADDR\", \":8080\"),\n\t\tJWTSecret: envOr(\"JWT_SECRET\", \"\"),\n\t\tTOTPSecret: envOr(\"TOTP_SECRET\", \"\"),\n\t\tTOTPIssuer: envOr(\"TOTP_ISSUER\", \"knowLib\"),\n\t\tTOTPAcct: envOr(\"TOTP_ACCOUNT\", \"me\"),\n\t\tVaultPath: envOr(\"VAULT_PATH\", \"/data/vault\"),\n\t\tInboxDir: envOr(\"INBOX_DIR\", \"inbox\"),\n\t\tNotesDir: envOr(\"NOTES_DIR\", \"notes\"),\n\t\tAtlasDir: envOr(\"ATLAS_DIR\", \"atlas\"),\n\t\tKnowlibDir: envOr(\"KNOWLIB_DIR\", \".knowlib\"),\n\t\tOpenAIBaseURL: envOr(\"OPENAI_BASE_URL\", \"https://api.deepseek.com/v1\"),\n\t\tOpenAIAPIKey: envOr(\"OPENAI_API_KEY\", \"\"),\n\t\tOpenAIModel: envOr(\"OPENAI_MODEL\", \"deepseek-chat\"),\n\t\tEmbedBaseURL: envOr(\"EMBED_BASE_URL\", \"http://embedder:8000/v1\"),\n\t\tEmbedModel: envOr(\"EMBED_MODEL\", \"bge-m3\"),\n\t\tQdrantURL: envOr(\"QDRANT_URL\", \"http://qdrant:6333\"),\n\t\tQdrantCollection: envOr(\"QDRANT_COLLECTION\", \"knowlib_notes\"),\n\t\tTidyServiceURL: envOr(\"TIDY_SERVICE_URL\", \"http://tidy:8081\"),\n\t\tTidyTopK: envInt(\"TIDY_TOP_K\", 8),\n\t\tTidyMaxTokens: envInt(\"TIDY_MAX_TOKENS\", 4096),\n\t\tStatePath: envOr(\"API_STATE_PATH\", \"/state/api.db\"),\n\t\tSkillBundleDir: envOr(\"SKILL_BUNDLE_DIR\", \"/skill-bundle\"),\n\t\tLoginRatePerMinute: envInt(\"LOGIN_RATE_PER_MINUTE\", 5),\n\t}\n\tif c.JWTSecret == \"\" {\n\t\treturn nil, fmt.Errorf(\"JWT_SECRET is required\")\n\t}\n\tif c.TOTPSecret == \"\" {\n\t\treturn nil, fmt.Errorf(\"TOTP_SECRET is required (run scripts/bootstrap.sh first)\")\n\t}\n\treturn c, nil\n}\n"}}}} |