fips-agents-cli 0.6.2__tar.gz → 0.8.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. fips_agents_cli-0.8.2/.github/CODEOWNERS +2 -0
  2. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/.gitignore +4 -0
  3. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/CLAUDE.md +16 -5
  4. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/PKG-INFO +140 -7
  5. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/README.md +139 -6
  6. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/pyproject.toml +1 -1
  7. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/scripts/release.sh +27 -6
  8. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/cli.py +4 -0
  9. fips_agents_cli-0.8.2/src/fips_agents_cli/commands/add.py +211 -0
  10. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/commands/create.py +25 -1
  11. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/commands/generate.py +1 -1
  12. fips_agents_cli-0.8.2/src/fips_agents_cli/commands/vendor.py +154 -0
  13. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/git.py +10 -1
  14. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/project.py +130 -1
  15. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/version.py +1 -1
  16. fips_agents_cli-0.8.2/tests/fixtures/middleware_template/component.py.j2 +39 -0
  17. fips_agents_cli-0.8.2/tests/fixtures/middleware_template/test.py.j2 +40 -0
  18. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_create.py +4 -4
  19. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_generate.py +117 -0
  20. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/.claude/commands/create-release.md +0 -0
  21. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/.claude/docs-state.json +0 -0
  22. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/.github/agents/README.md +0 -0
  23. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/.github/agents/create-release.agent.md +0 -0
  24. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/.github/workflows/test.yml +0 -0
  25. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/.github/workflows/workflow.yaml +0 -0
  26. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/LICENSE +0 -0
  27. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/RELEASE_CHECKLIST.md +0 -0
  28. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/docs/PUBLISHING.md +0 -0
  29. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/docs/QUICK_START_PUBLISHING.md +0 -0
  30. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/docs/README.md +0 -0
  31. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/llms.txt +0 -0
  32. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/AGENT_FRAMEWORK_PLAN.md +0 -0
  33. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/GENERATOR_IMPLEMENTATION_PLAN.md +0 -0
  34. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/IMPLEMENTATION_SUMMARY.md +0 -0
  35. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/MVP-PLAN.md +0 -0
  36. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/PLAN.md +0 -0
  37. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/PROMPT_ISSUE.md +0 -0
  38. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/agent-registry-roadmap.md +0 -0
  39. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/agent-template-gaps.md +0 -0
  40. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/planning/composable-agent-capabilities.md +0 -0
  41. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/research/BAML_RESEARCH_REPORT.md +0 -0
  42. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/research/Ignite-CLI-Architecture-Analysis.md +0 -0
  43. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/retrospectives/2026-04-06_issue-triage-v0.3.0/RETRO.md +0 -0
  44. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/retrospectives/2026-04-10_full-stack-integration/RETRO.md +0 -0
  45. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/scripts/README.md +0 -0
  46. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/__init__.py +0 -0
  47. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/__main__.py +0 -0
  48. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/commands/__init__.py +0 -0
  49. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/commands/model_car.py +0 -0
  50. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/commands/patch.py +0 -0
  51. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/__init__.py +0 -0
  52. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/filesystem.py +0 -0
  53. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/generators.py +0 -0
  54. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/github.py +0 -0
  55. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/patching.py +0 -0
  56. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/src/fips_agents_cli/tools/validation.py +0 -0
  57. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/__init__.py +0 -0
  58. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/conftest.py +0 -0
  59. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_filesystem.py +0 -0
  60. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_generators.py +0 -0
  61. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_github.py +0 -0
  62. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_model_car.py +0 -0
  63. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_project.py +0 -0
  64. {fips_agents_cli-0.6.2 → fips_agents_cli-0.8.2}/tests/test_validation.py +0 -0
@@ -0,0 +1,2 @@
1
+ # Code Owners - all PRs require approval from @rdwj
2
+ * @rdwj
@@ -25,6 +25,7 @@ MANIFEST
25
25
 
26
26
  # Virtual environments
27
27
  venv/
28
+ .venv/
28
29
  env/
29
30
  ENV/
30
31
  env.bak/
@@ -88,3 +89,6 @@ tokens.txt
88
89
 
89
90
  # Project specific
90
91
  setup_structure.sh
92
+
93
+ # Session handoff notes (local-only — content lives in MEMORY.md)
94
+ NEXT_SESSION.md
@@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
6
6
 
7
7
  **fips-agents-cli** is a Python-based CLI tool for scaffolding FIPS-compliant AI agent projects. It scaffolds MCP (Model Context Protocol) servers and AI agent projects from production-ready templates, customizes them for new projects, and prepares them for immediate development use.
8
8
 
9
- **Current Status:** `create mcp-server` and `create agent` commands implemented.
9
+ **Current Status:** Scaffolding commands implemented: `create mcp-server`, `create agent`, `create gateway`, `create ui`, `create sandbox`, `create model-car`. Post-scaffolding commands: `generate` (tool, resource, prompt, middleware), `patch` (check, generators, core, docs, build, all), `add` (code-executor), `vendor`. Note: `create workflow` exists in code but is not yet working.
10
10
 
11
11
  ## Development Commands
12
12
 
@@ -91,18 +91,25 @@ This command will:
91
91
 
92
92
  ```bash
93
93
  # 1. Update version in both files manually or use the script:
94
- ./scripts/release.sh <version> "<commit-message>"
94
+ ./scripts/release.sh <version> [<summary>]
95
95
 
96
- # Example:
96
+ # Examples:
97
+ ./scripts/release.sh 0.1.2
97
98
  ./scripts/release.sh 0.1.2 "Add new generator features"
98
99
 
99
100
  # The script handles:
100
101
  # - Updating version.py and pyproject.toml
102
+ # - Constructing the release commit message from the project convention
101
103
  # - Committing changes (including README.md changelog)
102
104
  # - Creating and pushing tag
103
105
  # - Triggering GitHub Actions
104
106
  ```
105
107
 
108
+ **Release commit message convention**: `chore: Release fips-agents-cli vX.Y.Z`,
109
+ optionally followed by ` — <summary>`. The script always constructs the message
110
+ from the version argument; callers only supply the summary, never the full
111
+ message. This keeps `git log --grep "Release fips-agents-cli"` reliable.
112
+
106
113
  **Note**: Always update the changelog in README.md before running the script.
107
114
 
108
115
  See `RELEASE_CHECKLIST.md` for detailed release procedures and troubleshooting.
@@ -141,7 +148,7 @@ Two cloning strategies exist:
141
148
  1. Clone monorepo, extract `templates/agent-loop/` subdirectory
142
149
  2. Update `pyproject.toml` name field via tomlkit
143
150
  3. String-replace `agent-template` → new name in Chart.yaml, values.yaml, AGENTS.md, Containerfile, Makefile
144
- 4. Source directories are NOT renamed — `base_agent` is a framework component
151
+ 4. Source directories are NOT renamed — the agent-loop template ships with `src/agent.py` directly, not a project-named module
145
152
  5. Initialize fresh git repository with initial commit
146
153
 
147
154
  **Rich Console Output**: All user-facing output uses Rich library for:
@@ -272,7 +279,7 @@ def test_something(temp_dir):
272
279
 
273
280
  **Agent Template** (`fips-agents/agent-template` — monorepo, `templates/agent-loop/`):
274
281
  - `pyproject.toml` with project name (no entry point scripts)
275
- - `src/base_agent/` framework (NOT renamed during customization)
282
+ - `src/agent.py` user agent subclass (lives at this path directly — no project-named module wrapper)
276
283
  - `chart/` Helm chart for OpenShift deployment
277
284
  - `agent.yaml` configuration (customized via `/plan-agent`, not during scaffolding)
278
285
  - `.claude/commands/` with agent development slash commands
@@ -325,6 +332,10 @@ Common causes:
325
332
  2. Dependencies not installed: `pip install -e .[dev]`
326
333
  3. Git not configured globally: `git config --global user.email "test@example.com"`
327
334
 
335
+ ## Release Process Notes
336
+
337
+ When creating a new release, always update the changelog in README.md *before* running the release script. The changelog lives in the README under the `## Changelog` heading. Each version should have its own section with the version number and date, listing new features, fixes, and breaking changes. Forgetting the changelog entry leads to patch releases (like v0.8.1) that exist solely to backfill documentation — avoid that by treating the changelog update as a required step in every release.
338
+
328
339
  ## Repository-Specific Notes
329
340
 
330
341
  - The main branch is `main` (not `master`)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fips-agents-cli
3
- Version: 0.6.2
3
+ Version: 0.8.2
4
4
  Summary: CLI tool for creating and managing FIPS-compliant AI agent projects
5
5
  Project-URL: Homepage, https://github.com/fips-agents/fips-agents-cli
6
6
  Project-URL: Repository, https://github.com/fips-agents/fips-agents-cli
@@ -141,9 +141,11 @@ fips-agents patch all --dry-run
141
141
  ```bash
142
142
  fips-agents --version
143
143
  fips-agents --help
144
+ fips-agents add --help
144
145
  fips-agents create --help
145
146
  fips-agents generate --help
146
147
  fips-agents patch --help
148
+ fips-agents vendor --help
147
149
  ```
148
150
 
149
151
  ---
@@ -215,6 +217,12 @@ Creates an AI agent project from the [agent-template](https://github.com/fips-ag
215
217
 
216
218
  **Options:** Same as `create mcp-server` (see shared options table above).
217
219
 
220
+ **Additional option:**
221
+
222
+ | Option | Description |
223
+ |--------|-------------|
224
+ | `--vendored` | Copy fipsagents source into the project instead of using PyPI dependency |
225
+
218
226
  **Examples:**
219
227
 
220
228
  ```bash
@@ -226,6 +234,9 @@ fips-agents create agent my-agent --github --org fips-agents
226
234
 
227
235
  # Non-interactive mode
228
236
  fips-agents create agent my-agent --yes --local
237
+
238
+ # Create with vendored fipsagents source
239
+ fips-agents create agent my-agent --vendored --local
229
240
  ```
230
241
 
231
242
  #### `create gateway`
@@ -338,7 +349,7 @@ fips-agents create model-car https://huggingface.co/ibm-granite/granite-3.1-2b-i
338
349
 
339
350
  ### Generate Commands
340
351
 
341
- The `generate` command group scaffolds MCP components (tools, resources, prompts, middleware) in existing MCP server projects created with `fips-agents create mcp-server`.
352
+ The `generate` command group creates individual components (tools, resources, prompts, middleware) in existing projects.
342
353
 
343
354
  **Run these commands from within your MCP server project directory.** The CLI locates the project root by looking for `pyproject.toml` with a `fastmcp` dependency.
344
355
 
@@ -600,6 +611,79 @@ Update all patchable file categories at once. Prompts for confirmation before st
600
611
 
601
612
  All patch subcommands (except `check`) accept `--dry-run` to preview changes without modifying files.
602
613
 
614
+ ---
615
+
616
+ ### Add Commands
617
+
618
+ The `add` command group wires optional capabilities into existing agent projects created with `fips-agents create agent`.
619
+
620
+ **Run these commands from within your agent project directory.** The CLI locates the project root by looking for `agent.yaml`.
621
+
622
+ #### `add code-executor`
623
+
624
+ ```bash
625
+ fips-agents add code-executor
626
+ ```
627
+
628
+ Adds the `code_executor` tool to your agent's `tools/` directory and enables the sandbox sidecar in `chart/values.yaml`. The tool sends Python code to a sandbox container for isolated execution.
629
+
630
+ **What it does:**
631
+
632
+ 1. Writes `tools/code_executor.py` with the sandbox client tool
633
+ 2. Sets `sandbox.enabled: true` in `chart/values.yaml` (if the section exists)
634
+ 3. Prints deployment guidance for sidecar and remote service modes
635
+
636
+ **Deployment modes:**
637
+
638
+ - **Sidecar** (default): The sandbox runs as a container in the same pod. The tool connects to `http://localhost:8000`.
639
+ - **Remote service**: The sandbox runs as a separate deployment. Set `SANDBOX_URL` to point to it.
640
+
641
+ **Example:**
642
+
643
+ ```bash
644
+ cd my-research-agent
645
+ fips-agents add code-executor
646
+ ```
647
+
648
+ ---
649
+
650
+ ### Vendor Commands
651
+
652
+ The `vendor` command copies the fipsagents source into your agent project, replacing the PyPI dependency. This gives you full control over the fipsagents code.
653
+
654
+ #### `vendor`
655
+
656
+ ```bash
657
+ fips-agents vendor [OPTIONS]
658
+ ```
659
+
660
+ Copies fipsagents source into `src/fipsagents/` and rewrites `pyproject.toml` to use individual dependencies instead of the fipsagents package.
661
+
662
+ **Options:**
663
+
664
+ | Option | Description |
665
+ |--------|-------------|
666
+ | `--update` | Update an already-vendored project with the latest upstream source |
667
+ | `--version TEXT` | Vendor a specific version tag (e.g., `fipsagents-v0.7.0`). Default: latest main |
668
+
669
+ **Examples:**
670
+
671
+ ```bash
672
+ # Vendor into current project
673
+ fips-agents vendor
674
+
675
+ # Vendor a specific version
676
+ fips-agents vendor --version fipsagents-v0.7.0
677
+
678
+ # Update vendored source from upstream
679
+ fips-agents vendor --update
680
+ ```
681
+
682
+ **When to use vendored vs. PyPI:**
683
+
684
+ - **PyPI dependency** (default): Best for teams running multiple agents that share the same fipsagents version. Centralized updates.
685
+ - **Vendored source**: Best for agents that need custom BaseAgent modifications, environments with no PyPI access, or when you want to read and debug the fipsagents source locally.
686
+
603
687
  ## Project Name Requirements
604
688
 
605
689
  Project names must follow these rules:
@@ -628,10 +712,9 @@ pytest
628
712
 
629
713
  ```bash
630
714
  cd my-research-agent
631
- python -m venv venv
632
- source venv/bin/activate
633
- pip install -e .[dev]
634
- pytest
715
+ make install # Create venv, install dependencies
716
+ make run-local # Start HTTP server on port 8080
717
+ make test # Run tests
635
718
  # See AGENTS.md for the /plan-agent slash command workflow
636
719
  ```
637
720
 
@@ -739,10 +822,12 @@ fips-agents-cli/
739
822
  │ ├── cli.py # Main CLI application
740
823
  │ ├── version.py # Version information
741
824
  │ ├── commands/ # CLI command implementations
825
+ │ │ ├── add.py # add code-executor (wire capabilities)
742
826
  │ │ ├── create.py # create mcp-server, agent, gateway, ui
743
827
  │ │ ├── generate.py # generate tool/resource/prompt/middleware
744
828
  │ │ ├── model_car.py # create model-car
745
- │ │ └── patch.py # patch command
829
+ │ │ ├── patch.py # patch command
830
+ │ │ └── vendor.py # vendor fipsagents source
746
831
  │ └── tools/ # Utility modules
747
832
  │ ├── filesystem.py
748
833
  │ ├── git.py
@@ -861,6 +946,54 @@ MIT License - see LICENSE file for details
861
946
 
862
947
  ## Changelog
863
948
 
949
+ ### Version 0.8.2
950
+
951
+ - Test: New `TestGenerateMiddlewareRealTemplate` integration test renders the real v3.x middleware Jinja2 template against each `--hook-type` and the no-flag case, with templates committed under `tests/fixtures/middleware_template/` so the suite runs offline (#3)
952
+ - Chore: `scripts/release.sh` now constructs the release commit message from the version argument using the project convention (`chore: Release fips-agents-cli vX.Y.Z` with optional ` — <summary>`); convention documented in CLAUDE.md (#4)
953
+ - Docs: Drop broken `See Also` links from `.fips-agents-cli/README.md` in scaffolded MCP projects (#5, fixed in `fips-agents/mcp-server-template`)
954
+ - Docs: Updated CLAUDE.md release section to reflect the new release-script signature
955
+
956
+ ### Version 0.8.1
957
+
958
+ - Docs: Updated CLAUDE.md current-status line and added release-process notes
959
+ - Chore: Repository hardening — added CODEOWNERS and enabled main branch protection
960
+ - Chore: Black formatting drift cleanup; removed remaining "framework" language from docs in favor of "toolkit"
961
+ - Chore: `.venv/` and `NEXT_SESSION.md` gitignored
962
+
963
+ ### Version 0.8.0
964
+
965
+ - Feature: New `--vendored` flag on `create agent` copies fipsagents source instead of PyPI dependency
966
+ - Feature: New `fips-agents vendor` command for post-scaffold vendoring of existing projects
967
+ - Feature: `fips-agents vendor --update` refreshes vendored source from upstream
968
+ - Feature: `fips-agents vendor --version` pins to a specific fipsagents release tag
969
+ - Fix: `customize_agent_project` now removes monorepo Makefile install line (matching workflow template behavior)
970
+ - Fix: Added `redeploy.sh` to agent project customization file list
971
+
972
+ ### Version 0.7.0
973
+
974
+ - Feature: New `add` command group for composable agent capabilities
975
+ - Feature: `fips-agents add code-executor` wires sandbox code execution into existing agent projects (tool + Helm chart sidecar config)
976
+ - Improvement: Updated `generate` group description to reflect broader scope beyond MCP
977
+
978
+ ### Version 0.6.2
979
+
980
+ - Fix: Go project scaffolding now updates import paths in all `.go` source files
981
+ - Fix: Go project scaffolding now updates Helm template references (`chart/templates/*.yaml`)
982
+
983
+ ### Version 0.6.1
984
+
985
+ - Chore: Updated all project URLs from `rdwj/` to `fips-agents/` org
986
+ - Chore: Post-transfer PyPI publishing verification release
987
+
988
+ ### Version 0.6.0
989
+
990
+ - Feature: Added `create sandbox` command for scaffolding code execution sandbox projects from fips-agents/code-sandbox template
991
+ - Feature: All template URLs consolidated under `github.com/fips-agents/` organization
992
+
993
+ ### Version 0.5.1
994
+
995
+ - Fix: SSE streaming tool call ID tracking by `call_id` not array index
996
+
864
997
  ### Version 0.5.0
865
998
 
866
999
  - Feature: Added `create gateway` command for scaffolding Go HTTP gateway projects from the gateway-template
@@ -108,9 +108,11 @@ fips-agents patch all --dry-run
108
108
  ```bash
109
109
  fips-agents --version
110
110
  fips-agents --help
111
+ fips-agents add --help
111
112
  fips-agents create --help
112
113
  fips-agents generate --help
113
114
  fips-agents patch --help
115
+ fips-agents vendor --help
114
116
  ```
115
117
 
116
118
  ---
@@ -182,6 +184,12 @@ Creates an AI agent project from the [agent-template](https://github.com/fips-ag
182
184
 
183
185
  **Options:** Same as `create mcp-server` (see shared options table above).
184
186
 
187
+ **Additional option:**
188
+
189
+ | Option | Description |
190
+ |--------|-------------|
191
+ | `--vendored` | Copy fipsagents source into the project instead of using PyPI dependency |
192
+
185
193
  **Examples:**
186
194
 
187
195
  ```bash
@@ -193,6 +201,9 @@ fips-agents create agent my-agent --github --org fips-agents
193
201
 
194
202
  # Non-interactive mode
195
203
  fips-agents create agent my-agent --yes --local
204
+
205
+ # Create with vendored fipsagents source
206
+ fips-agents create agent my-agent --vendored --local
196
207
  ```
197
208
 
198
209
  #### `create gateway`
@@ -305,7 +316,7 @@ fips-agents create model-car https://huggingface.co/ibm-granite/granite-3.1-2b-i
305
316
 
306
317
  ### Generate Commands
307
318
 
308
- The `generate` command group scaffolds MCP components (tools, resources, prompts, middleware) in existing MCP server projects created with `fips-agents create mcp-server`.
319
+ The `generate` command group creates individual components (tools, resources, prompts, middleware) in existing projects.
309
320
 
310
321
  **Run these commands from within your MCP server project directory.** The CLI locates the project root by looking for `pyproject.toml` with a `fastmcp` dependency.
311
322
 
@@ -567,6 +578,79 @@ Update all patchable file categories at once. Prompts for confirmation before st
567
578
 
568
579
  All patch subcommands (except `check`) accept `--dry-run` to preview changes without modifying files.
569
580
 
581
+ ---
582
+
583
+ ### Add Commands
584
+
585
+ The `add` command group wires optional capabilities into existing agent projects created with `fips-agents create agent`.
586
+
587
+ **Run these commands from within your agent project directory.** The CLI locates the project root by looking for `agent.yaml`.
588
+
589
+ #### `add code-executor`
590
+
591
+ ```bash
592
+ fips-agents add code-executor
593
+ ```
594
+
595
+ Adds the `code_executor` tool to your agent's `tools/` directory and enables the sandbox sidecar in `chart/values.yaml`. The tool sends Python code to a sandbox container for isolated execution.
596
+
597
+ **What it does:**
598
+
599
+ 1. Writes `tools/code_executor.py` with the sandbox client tool
600
+ 2. Sets `sandbox.enabled: true` in `chart/values.yaml` (if the section exists)
601
+ 3. Prints deployment guidance for sidecar and remote service modes
602
+
603
+ **Deployment modes:**
604
+
605
+ - **Sidecar** (default): The sandbox runs as a container in the same pod. The tool connects to `http://localhost:8000`.
606
+ - **Remote service**: The sandbox runs as a separate deployment. Set `SANDBOX_URL` to point to it.
607
+
608
+ **Example:**
609
+
610
+ ```bash
611
+ cd my-research-agent
612
+ fips-agents add code-executor
613
+ ```
614
+
615
+ ---
616
+
617
+ ### Vendor Commands
618
+
619
+ The `vendor` command copies the fipsagents source into your agent project, replacing the PyPI dependency. This gives you full control over the fipsagents code.
620
+
621
+ #### `vendor`
622
+
623
+ ```bash
624
+ fips-agents vendor [OPTIONS]
625
+ ```
626
+
627
+ Copies fipsagents source into `src/fipsagents/` and rewrites `pyproject.toml` to use individual dependencies instead of the fipsagents package.
628
+
629
+ **Options:**
630
+
631
+ | Option | Description |
632
+ |--------|-------------|
633
+ | `--update` | Update an already-vendored project with the latest upstream source |
634
+ | `--version TEXT` | Vendor a specific version tag (e.g., `fipsagents-v0.7.0`). Default: latest main |
635
+
636
+ **Examples:**
637
+
638
+ ```bash
639
+ # Vendor into current project
640
+ fips-agents vendor
641
+
642
+ # Vendor a specific version
643
+ fips-agents vendor --version fipsagents-v0.7.0
644
+
645
+ # Update vendored source from upstream
646
+ fips-agents vendor --update
647
+ ```
648
+
649
+ **When to use vendored vs. PyPI:**
650
+
651
+ - **PyPI dependency** (default): Best for teams running multiple agents that share the same fipsagents version. Centralized updates.
652
+ - **Vendored source**: Best for agents that need custom BaseAgent modifications, environments with no PyPI access, or when you want to read and debug the fipsagents source locally.
653
+
570
654
  ## Project Name Requirements
571
655
 
572
656
  Project names must follow these rules:
@@ -595,10 +679,9 @@ pytest
595
679
 
596
680
  ```bash
597
681
  cd my-research-agent
598
- python -m venv venv
599
- source venv/bin/activate
600
- pip install -e .[dev]
601
- pytest
682
+ make install # Create venv, install dependencies
683
+ make run-local # Start HTTP server on port 8080
684
+ make test # Run tests
602
685
  # See AGENTS.md for the /plan-agent slash command workflow
603
686
  ```
604
687
 
@@ -706,10 +789,12 @@ fips-agents-cli/
706
789
  │ ├── cli.py # Main CLI application
707
790
  │ ├── version.py # Version information
708
791
  │ ├── commands/ # CLI command implementations
792
+ │ │ ├── add.py # add code-executor (wire capabilities)
709
793
  │ │ ├── create.py # create mcp-server, agent, gateway, ui
710
794
  │ │ ├── generate.py # generate tool/resource/prompt/middleware
711
795
  │ │ ├── model_car.py # create model-car
712
- │ │ └── patch.py # patch command
796
+ │ │ ├── patch.py # patch command
797
+ │ │ └── vendor.py # vendor fipsagents source
713
798
  │ └── tools/ # Utility modules
714
799
  │ ├── filesystem.py
715
800
  │ ├── git.py
@@ -828,6 +913,54 @@ MIT License - see LICENSE file for details
828
913
 
829
914
  ## Changelog
830
915
 
916
+ ### Version 0.8.2
917
+
918
+ - Test: New `TestGenerateMiddlewareRealTemplate` integration test renders the real v3.x middleware Jinja2 template against each `--hook-type` and the no-flag case, with templates committed under `tests/fixtures/middleware_template/` so the suite runs offline (#3)
919
+ - Chore: `scripts/release.sh` now constructs the release commit message from the version argument using the project convention (`chore: Release fips-agents-cli vX.Y.Z` with optional ` — <summary>`); convention documented in CLAUDE.md (#4)
920
+ - Docs: Drop broken `See Also` links from `.fips-agents-cli/README.md` in scaffolded MCP projects (#5, fixed in `fips-agents/mcp-server-template`)
921
+ - Docs: Updated CLAUDE.md release section to reflect the new release-script signature
922
+
923
+ ### Version 0.8.1
924
+
925
+ - Docs: Updated CLAUDE.md current-status line and added release-process notes
926
+ - Chore: Repository hardening — added CODEOWNERS and enabled main branch protection
927
+ - Chore: Black formatting drift cleanup; removed remaining "framework" language from docs in favor of "toolkit"
928
+ - Chore: `.venv/` and `NEXT_SESSION.md` gitignored
929
+
930
+ ### Version 0.8.0
931
+
932
+ - Feature: New `--vendored` flag on `create agent` copies fipsagents source instead of PyPI dependency
933
+ - Feature: New `fips-agents vendor` command for post-scaffold vendoring of existing projects
934
+ - Feature: `fips-agents vendor --update` refreshes vendored source from upstream
935
+ - Feature: `fips-agents vendor --version` pins to a specific fipsagents release tag
936
+ - Fix: `customize_agent_project` now removes monorepo Makefile install line (matching workflow template behavior)
937
+ - Fix: Added `redeploy.sh` to agent project customization file list
938
+
939
+ ### Version 0.7.0
940
+
941
+ - Feature: New `add` command group for composable agent capabilities
942
+ - Feature: `fips-agents add code-executor` wires sandbox code execution into existing agent projects (tool + Helm chart sidecar config)
943
+ - Improvement: Updated `generate` group description to reflect broader scope beyond MCP
944
+
945
+ ### Version 0.6.2
946
+
947
+ - Fix: Go project scaffolding now updates import paths in all `.go` source files
948
+ - Fix: Go project scaffolding now updates Helm template references (`chart/templates/*.yaml`)
949
+
950
+ ### Version 0.6.1
951
+
952
+ - Chore: Updated all project URLs from `rdwj/` to `fips-agents/` org
953
+ - Chore: Post-transfer PyPI publishing verification release
954
+
955
+ ### Version 0.6.0
956
+
957
+ - Feature: Added `create sandbox` command for scaffolding code execution sandbox projects from fips-agents/code-sandbox template
958
+ - Feature: All template URLs consolidated under `github.com/fips-agents/` organization
959
+
960
+ ### Version 0.5.1
961
+
962
+ - Fix: SSE streaming tool call ID tracking by `call_id` not array index
963
+
831
964
  ### Version 0.5.0
832
965
 
833
966
  - Feature: Added `create gateway` command for scaffolding Go HTTP gateway projects from the gateway-template
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "fips-agents-cli"
7
- version = "0.6.2"
7
+ version = "0.8.2"
8
8
  description = "CLI tool for creating and managing FIPS-compliant AI agent projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -2,9 +2,20 @@
2
2
  #
3
3
  # release.sh - Automated release script for fips-agents-cli
4
4
  #
5
- # Usage: ./scripts/release.sh <version> <commit-message>
5
+ # Usage: ./scripts/release.sh <version> [<summary>]
6
6
  #
7
- # Example: ./scripts/release.sh 0.1.2 "Add new feature for X"
7
+ # The release commit message is always constructed from the version using
8
+ # the project convention:
9
+ #
10
+ # chore: Release fips-agents-cli vX.Y.Z
11
+ #
12
+ # If a summary is provided, it is appended after an em-dash:
13
+ #
14
+ # chore: Release fips-agents-cli vX.Y.Z — <summary>
15
+ #
16
+ # Examples:
17
+ # ./scripts/release.sh 0.1.2
18
+ # ./scripts/release.sh 0.1.2 "Add new generator features"
8
19
  #
9
20
 
10
21
  set -e # Exit on error
@@ -29,14 +40,16 @@ print_info() {
29
40
  }
30
41
 
31
42
  # Check arguments
32
- if [ $# -ne 2 ]; then
33
- print_error "Usage: $0 <version> <commit-message>"
34
- echo "Example: $0 0.1.2 \"Add new feature for X\""
43
+ if [ $# -lt 1 ] || [ $# -gt 2 ]; then
44
+ print_error "Usage: $0 <version> [<summary>]"
45
+ echo "Examples:"
46
+ echo " $0 0.1.2"
47
+ echo " $0 0.1.2 \"Add new generator features\""
35
48
  exit 1
36
49
  fi
37
50
 
38
51
  VERSION=$1
39
- COMMIT_MSG=$2
52
+ SUMMARY=${2:-}
40
53
 
41
54
  # Validate version format (x.y.z)
42
55
  if ! [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
@@ -45,6 +58,14 @@ if ! [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
45
58
  exit 1
46
59
  fi
47
60
 
61
+ # Construct the conventional release commit message.
62
+ # Convention: "chore: Release fips-agents-cli vX.Y.Z" with optional " — <summary>".
63
+ if [ -n "$SUMMARY" ]; then
64
+ COMMIT_MSG="chore: Release fips-agents-cli v${VERSION} — ${SUMMARY}"
65
+ else
66
+ COMMIT_MSG="chore: Release fips-agents-cli v${VERSION}"
67
+ fi
68
+
48
69
  print_info "Preparing release v$VERSION"
49
70
  echo
50
71
 
@@ -3,9 +3,11 @@
3
3
  import click
4
4
  from rich.console import Console
5
5
 
6
+ from fips_agents_cli.commands.add import add
6
7
  from fips_agents_cli.commands.create import create
7
8
  from fips_agents_cli.commands.generate import generate
8
9
  from fips_agents_cli.commands.patch import patch
10
+ from fips_agents_cli.commands.vendor import vendor
9
11
  from fips_agents_cli.version import __version__
10
12
 
11
13
  console = Console()
@@ -24,9 +26,11 @@ def cli(ctx):
24
26
 
25
27
 
26
28
  # Register commands
29
+ cli.add_command(add)
27
30
  cli.add_command(create)
28
31
  cli.add_command(generate)
29
32
  cli.add_command(patch)
33
+ cli.add_command(vendor)
30
34
 
31
35
 
32
36
  def main():