From 4680f4b6293051b6d139d36280fe241ae6b825c6 Mon Sep 17 00:00:00 2001 From: rob Date: Sat, 1 Nov 2025 14:44:25 -0300 Subject: [PATCH] build: bundle shared ai config into installer --- automation/README.md | 5 ++++- docs/AUTOMATION.md | 10 ++++++++-- src/cascadingdev/setup_project.py | 7 ++++++- tools/build_installer.py | 6 ++++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/automation/README.md b/automation/README.md index 6ab8d86..6571517 100644 --- a/automation/README.md +++ b/automation/README.md @@ -161,7 +161,10 @@ claude -p "Return JSON: {\"test\": true}" # Check git config git config --list | grep cascadingdev -# Try environment variable +# Inspect shared config (repo-wide defaults) +cat config/ai.yml + +# Try environment variable override CDEV_AI_COMMAND="claude -p '{prompt}'" git commit -m "test" ``` diff --git a/docs/AUTOMATION.md b/docs/AUTOMATION.md index 1bcd13a..f454834 100644 --- a/docs/AUTOMATION.md +++ b/docs/AUTOMATION.md @@ -71,7 +71,12 @@ READY: 0 • CHANGES: 2 • REJECT: 0 ### Requirements -Phase 2 supports multiple AI providers via CLI commands or direct API: +Phase 2 supports multiple AI providers via CLI commands or direct API. The +preferred way to set defaults is editing `config/ai.yml` (copied into every +generated project). The `runner.command_chain` list is evaluated left → right +until a provider succeeds, and the `ramble` section controls the GUI defaults. +Environment variables or CLI flags still override the shared config for ad-hoc +runs: **Option 1: CLI-based (Recommended)** ```bash @@ -82,7 +87,8 @@ Phase 2 supports multiple AI providers via CLI commands or direct API: git config cascadingdev.aiprovider "claude-cli" git config cascadingdev.aicommand "claude -p '{prompt}'" -# Or via environment variables (session) +# Or via environment variables (session). These temporarily override +# `config/ai.yml` for the current shell. export CDEV_AI_PROVIDER="claude-cli" export CDEV_AI_COMMAND="claude -p '{prompt}'" ``` diff --git a/src/cascadingdev/setup_project.py b/src/cascadingdev/setup_project.py index 176f58d..8a5149e 100644 --- a/src/cascadingdev/setup_project.py +++ b/src/cascadingdev/setup_project.py @@ -322,6 +322,11 @@ def copy_install_assets_to_target(target: Path): copy_if_exists(INSTALL_ROOT / "assets" / "templates" / "USER_GUIDE.md", target / "USER_GUIDE.md") + # Shared AI configuration + ai_cfg_src = INSTALL_ROOT / "config" / "ai.yml" + if ai_cfg_src.exists(): + copy_if_missing(ai_cfg_src, target / "config" / "ai.yml") + # Copy shipped templates (preferred source of truth) tmpl_src = INSTALL_ROOT / "assets" / "templates" if tmpl_src.exists(): @@ -418,4 +423,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/tools/build_installer.py b/tools/build_installer.py index 748ae10..2321277 100644 --- a/tools/build_installer.py +++ b/tools/build_installer.py @@ -27,6 +27,7 @@ def main(): "feature_request.md", "feature.discussion.md", "feature.discussion.sum.md", + "design.discussion.md", "design_doc.md", "USER_GUIDE.md", "root_gitignore", @@ -41,6 +42,11 @@ def main(): copy_tree(ROOT / "assets" / "templates" / "process", BUNDLE / "assets" / "templates" / "process") copy_tree(ROOT / "assets" / "templates" / "rules", BUNDLE / "assets" / "templates" / "rules") + # copy shared AI configuration + config_src = ROOT / "config" + if config_src.exists(): + copy_tree(config_src, BUNDLE / "config") + # copy automation directory (workflow.py and future orchestration scripts) automation_src = ROOT / "automation" if automation_src.exists():