Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
3ea91b4
feat(forge_config): add forge configuration crate and loader
tusharmath Mar 24, 2026
c6edcea
refactor(forge_config): switch config serde to snake_case
tusharmath Mar 24, 2026
3da5754
refactor(forge_config): load global config with oncecell panic-on-fail
tusharmath Mar 24, 2026
c1b73e6
feat(forge_config): load user config from home directory
tusharmath Mar 24, 2026
a15ffe0
refactor(forge_config): rename retry and parallel read config fields
tusharmath Mar 24, 2026
db68f4c
refactor(forge_config): add provider and model selection fields
tusharmath Mar 24, 2026
ad171e2
feat(forge_config): add FORGE env var overrides for config
tusharmath Mar 24, 2026
a5f8b28
refactor(forge_config): switch config loading from json to toml
tusharmath Mar 24, 2026
26cd9c9
chore(forge_config): add default toml config for tool limits
tusharmath Mar 24, 2026
23819a9
refactor(forge_config): rename forge_config module to config
tusharmath Mar 24, 2026
d6cd99e
refactor(forge_config): switch to async config reader/writer
tusharmath Mar 24, 2026
c8404a8
feat(forge_config): add merge strategies to config structs
tusharmath Mar 24, 2026
2b0377d
feat(forge_config): implement multi-source config loading order
tusharmath Mar 24, 2026
7e5a7a9
refactor(forge_config): remove merge derive and use toml_edit seriali…
tusharmath Mar 24, 2026
a0acd57
refactor(forge_config): load config from resolved path
tusharmath Mar 24, 2026
2d5c69f
feat(forge_config): add temperature, sampling, update, compact types
tusharmath Mar 24, 2026
859812f
feat(forge_config): add tool limits and compact/update config
tusharmath Mar 24, 2026
83c777f
refactor(forge_config): make config path optional in reader
tusharmath Mar 24, 2026
b8e81d1
refactor(forge_repo): decouple disk appconfig from domain type
tusharmath Mar 24, 2026
8b46e61
refactor(domain): rename AppConfig to ForgeConfig everywhere
tusharmath Mar 24, 2026
e1e509d
refactor(forge_config): simplify provider/model config types
tusharmath Mar 24, 2026
d05e599
refactor(forge_config): rename ForgeConfig to AppConfig type
tusharmath Mar 24, 2026
7943361
refactor(domain): rename ForgeConfig to AppConfig type
tusharmath Mar 24, 2026
f12fe62
refactor(forge_config): use shared ConfigReader/ConfigWriter imports
tusharmath Mar 24, 2026
f2e52ce
refactor(forge_config): simplify config reader path existence check
tusharmath Mar 24, 2026
e04e134
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 24, 2026
711698d
refactor(forge_config): rename AppConfig to ForgeConfig type
tusharmath Mar 24, 2026
427a69e
refactor(forge_repo): decouple disk appconfig from domain type
tusharmath Mar 24, 2026
5522893
feat(forge_config): add read_str and ConfigWriter to_string
tusharmath Mar 25, 2026
8997451
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 25, 2026
40ca84f
Merge branch 'main' into config-refactor-mar-24
tusharmath Mar 25, 2026
510374a
feat(forge_config): add default provider option to config
tusharmath Mar 25, 2026
466408b
chore(forge_tracker): remove success debug log from tracing init
tusharmath Mar 25, 2026
1808aea
refactor(forge_config): rename model to default config option
tusharmath Mar 25, 2026
5dd0eab
refactor(forge_config): remove default provider option field
tusharmath Mar 25, 2026
49d4280
refactor(app_config): remove model/provider CLI overrides
tusharmath Mar 25, 2026
38e4c5e
refactor(forge_config): adjust default field comment wrap
tusharmath Mar 25, 2026
1a470a9
refactor(forge_config): rename default model to session
tusharmath Mar 25, 2026
a4978b1
refactor(app_config): improve .forge.toml read/write tracing
tusharmath Mar 25, 2026
2c46da4
feat(forge_config): parse env list keys with custom separators
tusharmath Mar 25, 2026
6ea1fa8
test(forge_config): serialize env var mutations in reader tests
tusharmath Mar 25, 2026
17aa7ea
refactor(forge_repo): rename AppConfigRepository to ForgeConfigReposi…
tusharmath Mar 25, 2026
7980b58
refactor(forge_config): make config fields optional and default derive
tusharmath Mar 25, 2026
a09d380
refactor(forge_repo): return ForgeConfig from app config write
tusharmath Mar 25, 2026
b216e95
refactor(forge_config): make ModelConfig fields optional with setters
tusharmath Mar 25, 2026
d029dc9
refactor(forge_repo): use ModelConfig default with setters
tusharmath Mar 25, 2026
fd94121
test(forge_config): update reader test to use optional ModelConfig fi…
tusharmath Mar 25, 2026
a53e008
feat(forge_config): add legacy json config migration support
tusharmath Mar 25, 2026
3b7e1ec
refactor(shell-plugin): use env vars for session model/provider
tusharmath Mar 25, 2026
ef28bfa
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 25, 2026
6effa05
feat(shell-plugin): add config-edit action to open forge toml
tusharmath Mar 25, 2026
0c94f95
fix(app_config): correct forge config directory path in test helper
tusharmath Mar 25, 2026
79b2515
refactor(forge_config): derive default for config reader
tusharmath Mar 25, 2026
05e4a0e
feat(app_config): add app config operations update API
tusharmath Mar 25, 2026
7b8da80
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 25, 2026
8c23d3b
feat(forge_config): add read_global and read_path helpers
tusharmath Mar 25, 2026
848c09a
refactor(forge_repo): apply app config ops directly
tusharmath Mar 25, 2026
72d8e15
refactor(forge_repo): load global config and reset cache on update
tusharmath Mar 25, 2026
3530171
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 25, 2026
87b7a32
refactor(forge_config): expose config read helpers on forgeconfig
tusharmath Mar 25, 2026
2669f19
refactor(forge_config): streamline config reader builder
tusharmath Mar 25, 2026
0ae178d
feat(forge_config): add legacy json config migration support
tusharmath Mar 25, 2026
ebc632c
refactor(forge_config): move legacy config parser to module
tusharmath Mar 25, 2026
63f03c2
refactor(forge_config): simplify config docs and reader comments
tusharmath Mar 25, 2026
24aa1c9
refactor(forge_config): load env files and make config write sync
tusharmath Mar 25, 2026
cd337b3
test(app_config): add coverage for configuration mapping and operations
tusharmath Mar 25, 2026
45d333e
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 25, 2026
20529e9
refactor(shell-plugin): execute model configuration set directly
tusharmath Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 168 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ tempfile = "3.27.0"
termimad = "0.34.1"
syntect = { version = "5", default-features = false, features = ["default-syntaxes", "default-themes", "regex-onig"] }
thiserror = "2.0.18"
toml_edit = { version = "0.22", features = ["serde"] }
tokio = { version = "1.50.0", features = [
"macros",
"rt-multi-thread",
Expand Down Expand Up @@ -157,3 +158,4 @@ forge_select = { path = "crates/forge_select" }
forge_test_kit = { path = "crates/forge_test_kit" }

forge_markdown_stream = { path = "crates/forge_markdown_stream" }
forge_config = { path = "crates/forge_config" }
13 changes: 2 additions & 11 deletions crates/forge_api/src/forge_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,9 @@ impl<A, F> ForgeAPI<A, F> {
}

impl ForgeAPI<ForgeServices<ForgeRepo<ForgeInfra>>, ForgeRepo<ForgeInfra>> {
pub fn init(
restricted: bool,
cwd: PathBuf,
override_model: Option<forge_domain::ModelId>,
override_provider: Option<forge_domain::ProviderId>,
) -> Self {
pub fn init(restricted: bool, cwd: PathBuf) -> Self {
let infra = Arc::new(ForgeInfra::new(restricted, cwd));
let repo = Arc::new(ForgeRepo::new(
infra.clone(),
override_model,
override_provider,
));
let repo = Arc::new(ForgeRepo::new(infra.clone()));
let app = Arc::new(ForgeServices::new(repo.clone()));
ForgeAPI::new(app, repo)
}
Expand Down
59 changes: 59 additions & 0 deletions crates/forge_config/.forge.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
max_search_lines = 1000
max_search_result_bytes = 10240
max_fetch_chars = 50000
max_stdout_prefix_lines = 100
max_stdout_suffix_lines = 100
max_stdout_line_chars = 500
max_line_chars = 2000
max_read_lines = 2000
max_file_read_batch_size = 50
max_file_size_bytes = 104857600
max_image_size_bytes = 262144
tool_timeout_secs = 300
auto_open_dump = false
max_conversations = 100
max_sem_search_results = 100
sem_search_top_k = 10
workspace_server_url = "https://api.forgecode.dev/"
max_extensions = 15
max_parallel_file_reads = 64
model_cache_ttl_secs = 604800
max_requests_per_turn = 100
max_tool_failure_per_turn = 3
top_p = 0.8
top_k = 30
max_tokens = 20480

[retry]
initial_backoff_ms = 200
min_delay_ms = 1000
backoff_factor = 2
max_attempts = 8
status_codes = [429, 500, 502, 503, 504, 408, 522, 520, 529]
suppress_errors = false

[http]
connect_timeout_secs = 30
read_timeout_secs = 900
pool_idle_timeout_secs = 90
pool_max_idle_per_host = 5
max_redirects = 10
hickory = false
tls_backend = "default"
adaptive_window = true
keep_alive_interval_secs = 60
keep_alive_timeout_secs = 10
keep_alive_while_idle = true
accept_invalid_certs = false

[compact]
max_tokens = 2000
token_threshold = 100000
retention_window = 6
message_threshold = 200
eviction_window = 0.2
on_turn_end = false

[updates]
frequency = "daily"
auto_update = true
23 changes: 23 additions & 0 deletions crates/forge_config/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[package]
name = "forge_config"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true

[dependencies]
thiserror.workspace = true
config = { version = "0.15", features = ["toml"] }
derive_setters.workspace = true
dirs.workspace = true
dotenvy.workspace = true
serde.workspace = true
serde_json.workspace = true
toml_edit = { workspace = true }
url.workspace = true
fake = { version = "5.1.0", features = ["derive"] }
schemars.workspace = true
merge.workspace = true
tracing.workspace = true

[dev-dependencies]
pretty_assertions.workspace = true
Loading
Loading