fips-agents-cli 0.6.2__tar.gz → 0.7.0__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.
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/PKG-INFO +63 -2
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/README.md +62 -1
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/pyproject.toml +1 -1
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/cli.py +2 -0
- fips_agents_cli-0.7.0/src/fips_agents_cli/commands/add.py +211 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/commands/generate.py +1 -1
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/version.py +1 -1
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/.claude/commands/create-release.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/.claude/docs-state.json +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/.github/agents/README.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/.github/agents/create-release.agent.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/.github/workflows/test.yml +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/.github/workflows/workflow.yaml +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/.gitignore +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/CLAUDE.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/LICENSE +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/RELEASE_CHECKLIST.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/docs/PUBLISHING.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/docs/QUICK_START_PUBLISHING.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/docs/README.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/llms.txt +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/AGENT_FRAMEWORK_PLAN.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/GENERATOR_IMPLEMENTATION_PLAN.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/IMPLEMENTATION_SUMMARY.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/MVP-PLAN.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/PLAN.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/PROMPT_ISSUE.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/agent-registry-roadmap.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/agent-template-gaps.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/planning/composable-agent-capabilities.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/research/BAML_RESEARCH_REPORT.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/research/Ignite-CLI-Architecture-Analysis.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/retrospectives/2026-04-06_issue-triage-v0.3.0/RETRO.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/retrospectives/2026-04-10_full-stack-integration/RETRO.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/scripts/README.md +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/scripts/release.sh +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/__init__.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/__main__.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/commands/__init__.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/commands/create.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/commands/model_car.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/commands/patch.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/__init__.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/filesystem.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/generators.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/git.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/github.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/patching.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/project.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/src/fips_agents_cli/tools/validation.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/__init__.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/conftest.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_create.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_filesystem.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_generate.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_generators.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_github.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_model_car.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_project.py +0 -0
- {fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/tests/test_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fips-agents-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
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,6 +141,7 @@ 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
|
|
@@ -338,7 +339,7 @@ fips-agents create model-car https://huggingface.co/ibm-granite/granite-3.1-2b-i
|
|
|
338
339
|
|
|
339
340
|
### Generate Commands
|
|
340
341
|
|
|
341
|
-
The `generate` command group
|
|
342
|
+
The `generate` command group creates individual components (tools, resources, prompts, middleware) in existing projects.
|
|
342
343
|
|
|
343
344
|
**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
345
|
|
|
@@ -600,6 +601,40 @@ Update all patchable file categories at once. Prompts for confirmation before st
|
|
|
600
601
|
|
|
601
602
|
All patch subcommands (except `check`) accept `--dry-run` to preview changes without modifying files.
|
|
602
603
|
|
|
604
|
+
---
|
|
605
|
+
|
|
606
|
+
### Add Commands
|
|
607
|
+
|
|
608
|
+
The `add` command group wires optional capabilities into existing agent projects created with `fips-agents create agent`.
|
|
609
|
+
|
|
610
|
+
**Run these commands from within your agent project directory.** The CLI locates the project root by looking for `agent.yaml`.
|
|
611
|
+
|
|
612
|
+
#### `add code-executor`
|
|
613
|
+
|
|
614
|
+
```bash
|
|
615
|
+
fips-agents add code-executor
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
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.
|
|
619
|
+
|
|
620
|
+
**What it does:**
|
|
621
|
+
|
|
622
|
+
1. Writes `tools/code_executor.py` with the sandbox client tool
|
|
623
|
+
2. Sets `sandbox.enabled: true` in `chart/values.yaml` (if the section exists)
|
|
624
|
+
3. Prints deployment guidance for sidecar and remote service modes
|
|
625
|
+
|
|
626
|
+
**Deployment modes:**
|
|
627
|
+
|
|
628
|
+
- **Sidecar** (default): The sandbox runs as a container in the same pod. The tool connects to `http://localhost:8000`.
|
|
629
|
+
- **Remote service**: The sandbox runs as a separate deployment. Set `SANDBOX_URL` to point to it.
|
|
630
|
+
|
|
631
|
+
**Example:**
|
|
632
|
+
|
|
633
|
+
```bash
|
|
634
|
+
cd my-research-agent
|
|
635
|
+
fips-agents add code-executor
|
|
636
|
+
```
|
|
637
|
+
|
|
603
638
|
## Project Name Requirements
|
|
604
639
|
|
|
605
640
|
Project names must follow these rules:
|
|
@@ -739,6 +774,7 @@ fips-agents-cli/
|
|
|
739
774
|
│ ├── cli.py # Main CLI application
|
|
740
775
|
│ ├── version.py # Version information
|
|
741
776
|
│ ├── commands/ # CLI command implementations
|
|
777
|
+
│ │ ├── add.py # add code-executor (wire capabilities)
|
|
742
778
|
│ │ ├── create.py # create mcp-server, agent, gateway, ui
|
|
743
779
|
│ │ ├── generate.py # generate tool/resource/prompt/middleware
|
|
744
780
|
│ │ ├── model_car.py # create model-car
|
|
@@ -861,6 +897,31 @@ MIT License - see LICENSE file for details
|
|
|
861
897
|
|
|
862
898
|
## Changelog
|
|
863
899
|
|
|
900
|
+
### Version 0.7.0
|
|
901
|
+
|
|
902
|
+
- Feature: New `add` command group for composable agent capabilities
|
|
903
|
+
- Feature: `fips-agents add code-executor` wires sandbox code execution into existing agent projects (tool + Helm chart sidecar config)
|
|
904
|
+
- Improvement: Updated `generate` group description to reflect broader scope beyond MCP
|
|
905
|
+
|
|
906
|
+
### Version 0.6.2
|
|
907
|
+
|
|
908
|
+
- Fix: Go project scaffolding now updates import paths in all `.go` source files
|
|
909
|
+
- Fix: Go project scaffolding now updates Helm template references (`chart/templates/*.yaml`)
|
|
910
|
+
|
|
911
|
+
### Version 0.6.1
|
|
912
|
+
|
|
913
|
+
- Chore: Updated all project URLs from `rdwj/` to `fips-agents/` org
|
|
914
|
+
- Chore: Post-transfer PyPI publishing verification release
|
|
915
|
+
|
|
916
|
+
### Version 0.6.0
|
|
917
|
+
|
|
918
|
+
- Feature: Added `create sandbox` command for scaffolding code execution sandbox projects from fips-agents/code-sandbox template
|
|
919
|
+
- Feature: All template URLs consolidated under `github.com/fips-agents/` organization
|
|
920
|
+
|
|
921
|
+
### Version 0.5.1
|
|
922
|
+
|
|
923
|
+
- Fix: SSE streaming tool call ID tracking by `call_id` not array index
|
|
924
|
+
|
|
864
925
|
### Version 0.5.0
|
|
865
926
|
|
|
866
927
|
- Feature: Added `create gateway` command for scaffolding Go HTTP gateway projects from the gateway-template
|
|
@@ -108,6 +108,7 @@ 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
|
|
@@ -305,7 +306,7 @@ fips-agents create model-car https://huggingface.co/ibm-granite/granite-3.1-2b-i
|
|
|
305
306
|
|
|
306
307
|
### Generate Commands
|
|
307
308
|
|
|
308
|
-
The `generate` command group
|
|
309
|
+
The `generate` command group creates individual components (tools, resources, prompts, middleware) in existing projects.
|
|
309
310
|
|
|
310
311
|
**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
312
|
|
|
@@ -567,6 +568,40 @@ Update all patchable file categories at once. Prompts for confirmation before st
|
|
|
567
568
|
|
|
568
569
|
All patch subcommands (except `check`) accept `--dry-run` to preview changes without modifying files.
|
|
569
570
|
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
### Add Commands
|
|
574
|
+
|
|
575
|
+
The `add` command group wires optional capabilities into existing agent projects created with `fips-agents create agent`.
|
|
576
|
+
|
|
577
|
+
**Run these commands from within your agent project directory.** The CLI locates the project root by looking for `agent.yaml`.
|
|
578
|
+
|
|
579
|
+
#### `add code-executor`
|
|
580
|
+
|
|
581
|
+
```bash
|
|
582
|
+
fips-agents add code-executor
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
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.
|
|
586
|
+
|
|
587
|
+
**What it does:**
|
|
588
|
+
|
|
589
|
+
1. Writes `tools/code_executor.py` with the sandbox client tool
|
|
590
|
+
2. Sets `sandbox.enabled: true` in `chart/values.yaml` (if the section exists)
|
|
591
|
+
3. Prints deployment guidance for sidecar and remote service modes
|
|
592
|
+
|
|
593
|
+
**Deployment modes:**
|
|
594
|
+
|
|
595
|
+
- **Sidecar** (default): The sandbox runs as a container in the same pod. The tool connects to `http://localhost:8000`.
|
|
596
|
+
- **Remote service**: The sandbox runs as a separate deployment. Set `SANDBOX_URL` to point to it.
|
|
597
|
+
|
|
598
|
+
**Example:**
|
|
599
|
+
|
|
600
|
+
```bash
|
|
601
|
+
cd my-research-agent
|
|
602
|
+
fips-agents add code-executor
|
|
603
|
+
```
|
|
604
|
+
|
|
570
605
|
## Project Name Requirements
|
|
571
606
|
|
|
572
607
|
Project names must follow these rules:
|
|
@@ -706,6 +741,7 @@ fips-agents-cli/
|
|
|
706
741
|
│ ├── cli.py # Main CLI application
|
|
707
742
|
│ ├── version.py # Version information
|
|
708
743
|
│ ├── commands/ # CLI command implementations
|
|
744
|
+
│ │ ├── add.py # add code-executor (wire capabilities)
|
|
709
745
|
│ │ ├── create.py # create mcp-server, agent, gateway, ui
|
|
710
746
|
│ │ ├── generate.py # generate tool/resource/prompt/middleware
|
|
711
747
|
│ │ ├── model_car.py # create model-car
|
|
@@ -828,6 +864,31 @@ MIT License - see LICENSE file for details
|
|
|
828
864
|
|
|
829
865
|
## Changelog
|
|
830
866
|
|
|
867
|
+
### Version 0.7.0
|
|
868
|
+
|
|
869
|
+
- Feature: New `add` command group for composable agent capabilities
|
|
870
|
+
- Feature: `fips-agents add code-executor` wires sandbox code execution into existing agent projects (tool + Helm chart sidecar config)
|
|
871
|
+
- Improvement: Updated `generate` group description to reflect broader scope beyond MCP
|
|
872
|
+
|
|
873
|
+
### Version 0.6.2
|
|
874
|
+
|
|
875
|
+
- Fix: Go project scaffolding now updates import paths in all `.go` source files
|
|
876
|
+
- Fix: Go project scaffolding now updates Helm template references (`chart/templates/*.yaml`)
|
|
877
|
+
|
|
878
|
+
### Version 0.6.1
|
|
879
|
+
|
|
880
|
+
- Chore: Updated all project URLs from `rdwj/` to `fips-agents/` org
|
|
881
|
+
- Chore: Post-transfer PyPI publishing verification release
|
|
882
|
+
|
|
883
|
+
### Version 0.6.0
|
|
884
|
+
|
|
885
|
+
- Feature: Added `create sandbox` command for scaffolding code execution sandbox projects from fips-agents/code-sandbox template
|
|
886
|
+
- Feature: All template URLs consolidated under `github.com/fips-agents/` organization
|
|
887
|
+
|
|
888
|
+
### Version 0.5.1
|
|
889
|
+
|
|
890
|
+
- Fix: SSE streaming tool call ID tracking by `call_id` not array index
|
|
891
|
+
|
|
831
892
|
### Version 0.5.0
|
|
832
893
|
|
|
833
894
|
- Feature: Added `create gateway` command for scaffolding Go HTTP gateway projects from the gateway-template
|
|
@@ -3,6 +3,7 @@
|
|
|
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
|
|
@@ -24,6 +25,7 @@ def cli(ctx):
|
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
# Register commands
|
|
28
|
+
cli.add_command(add)
|
|
27
29
|
cli.add_command(create)
|
|
28
30
|
cli.add_command(generate)
|
|
29
31
|
cli.add_command(patch)
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"""Add command group for wiring capabilities into existing agent projects."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
import click
|
|
7
|
+
from rich.console import Console
|
|
8
|
+
from rich.panel import Panel
|
|
9
|
+
|
|
10
|
+
console = Console()
|
|
11
|
+
|
|
12
|
+
# The code_executor tool source, embedded directly to avoid network dependencies.
|
|
13
|
+
# Source: agent-template/examples/code-sandbox-agent/tools/code_executor.py
|
|
14
|
+
CODE_EXECUTOR_TOOL_SOURCE = '''\
|
|
15
|
+
"""Code execution tool — sends Python code to the sandbox sidecar."""
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
|
|
19
|
+
import httpx
|
|
20
|
+
|
|
21
|
+
from fipsagents.baseagent.tools import tool
|
|
22
|
+
|
|
23
|
+
SANDBOX_URL = os.environ.get("SANDBOX_URL", "http://localhost:8000")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@tool(
|
|
27
|
+
description="Execute Python code in an isolated sandbox and return the output. "
|
|
28
|
+
"Use this for any computation, math, data processing, or logic that "
|
|
29
|
+
"benefits from exact results. The code runs in a restricted environment "
|
|
30
|
+
"with access to: math, statistics, itertools, functools, re, datetime, "
|
|
31
|
+
"collections, json, csv, string, textwrap, decimal, fractions, random, "
|
|
32
|
+
"operator, typing. Use print() to produce output.",
|
|
33
|
+
visibility="llm_only",
|
|
34
|
+
)
|
|
35
|
+
async def code_executor(code: str, timeout: float = 10.0) -> str:
|
|
36
|
+
"""Execute Python code in the sandbox sidecar.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
code: Python source code to execute. Must use print() for output.
|
|
40
|
+
timeout: Maximum execution time in seconds (1-30).
|
|
41
|
+
"""
|
|
42
|
+
timeout = max(1.0, min(timeout, 30.0))
|
|
43
|
+
|
|
44
|
+
async with httpx.AsyncClient(timeout=timeout + 5) as client:
|
|
45
|
+
try:
|
|
46
|
+
resp = await client.post(
|
|
47
|
+
f"{SANDBOX_URL}/execute",
|
|
48
|
+
json={"code": code, "timeout": timeout},
|
|
49
|
+
)
|
|
50
|
+
except httpx.ConnectError:
|
|
51
|
+
return (
|
|
52
|
+
"ERROR: Cannot connect to sandbox sidecar at "
|
|
53
|
+
f"{SANDBOX_URL}. Is it running?"
|
|
54
|
+
)
|
|
55
|
+
except httpx.TimeoutException:
|
|
56
|
+
return "ERROR: Request to sandbox timed out."
|
|
57
|
+
|
|
58
|
+
data = resp.json()
|
|
59
|
+
|
|
60
|
+
if resp.status_code == 400:
|
|
61
|
+
if "violations" in data:
|
|
62
|
+
violations = "\\n".join(f" - {v}" for v in data["violations"])
|
|
63
|
+
return f"CODE BLOCKED by sandbox guardrails:\\n{violations}"
|
|
64
|
+
return f"ERROR: {data.get(\'error\', \'Unknown error\')}"
|
|
65
|
+
|
|
66
|
+
stdout = data.get("stdout", "").strip()
|
|
67
|
+
stderr = data.get("stderr", "").strip()
|
|
68
|
+
exit_code = data.get("exit_code", -1)
|
|
69
|
+
timed_out = data.get("timed_out", False)
|
|
70
|
+
|
|
71
|
+
if timed_out:
|
|
72
|
+
return f"TIMEOUT: Code exceeded {timeout}s limit.\\nPartial output:\\n{stdout}"
|
|
73
|
+
|
|
74
|
+
parts = []
|
|
75
|
+
if stdout:
|
|
76
|
+
parts.append(stdout)
|
|
77
|
+
if stderr:
|
|
78
|
+
parts.append(f"STDERR:\\n{stderr}")
|
|
79
|
+
if exit_code != 0:
|
|
80
|
+
parts.append(f"(exit code {exit_code})")
|
|
81
|
+
|
|
82
|
+
return "\\n".join(parts) if parts else "(no output — did you forget print()?)"
|
|
83
|
+
'''
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _find_agent_project_root() -> Path | None:
|
|
87
|
+
"""Find the agent project root by looking for agent.yaml."""
|
|
88
|
+
current = Path.cwd()
|
|
89
|
+
for parent in [current] + list(current.parents):
|
|
90
|
+
if (parent / "agent.yaml").exists():
|
|
91
|
+
return parent
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
@click.group()
|
|
96
|
+
def add():
|
|
97
|
+
"""Add capabilities to an existing agent project."""
|
|
98
|
+
pass
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@add.command("code-executor")
|
|
102
|
+
def code_executor_cmd():
|
|
103
|
+
"""Wire sandbox code execution into the current agent project.
|
|
104
|
+
|
|
105
|
+
Adds the code_executor tool to tools/ and enables the sandbox sidecar
|
|
106
|
+
in chart/values.yaml. Run from your agent project root directory.
|
|
107
|
+
|
|
108
|
+
Example:
|
|
109
|
+
|
|
110
|
+
cd my-research-agent
|
|
111
|
+
|
|
112
|
+
fips-agents add code-executor
|
|
113
|
+
"""
|
|
114
|
+
try:
|
|
115
|
+
# Step 1: Detect project root
|
|
116
|
+
project_root = _find_agent_project_root()
|
|
117
|
+
if project_root is None:
|
|
118
|
+
console.print(
|
|
119
|
+
"[red]Error:[/red] Not in an agent project directory.\n"
|
|
120
|
+
"Could not find agent.yaml in this directory or any parent.\n\n"
|
|
121
|
+
"[yellow]Hint:[/yellow] Run this command from an agent project "
|
|
122
|
+
"created with [dim]fips-agents create agent[/dim]."
|
|
123
|
+
)
|
|
124
|
+
sys.exit(1)
|
|
125
|
+
|
|
126
|
+
console.print(f"[green]Found project root:[/green] {project_root}")
|
|
127
|
+
|
|
128
|
+
# Step 2: Check tools/ directory exists
|
|
129
|
+
tools_dir = project_root / "tools"
|
|
130
|
+
if not tools_dir.exists():
|
|
131
|
+
console.print(
|
|
132
|
+
"[red]Error:[/red] No tools/ directory found in project root.\n\n"
|
|
133
|
+
"[yellow]Hint:[/yellow] Create it with: [dim]mkdir tools[/dim]"
|
|
134
|
+
)
|
|
135
|
+
sys.exit(1)
|
|
136
|
+
|
|
137
|
+
# Step 3: Write the tool file
|
|
138
|
+
tool_file = tools_dir / "code_executor.py"
|
|
139
|
+
if tool_file.exists():
|
|
140
|
+
console.print(
|
|
141
|
+
"[yellow]Warning:[/yellow] tools/code_executor.py already exists. Skipping."
|
|
142
|
+
)
|
|
143
|
+
else:
|
|
144
|
+
tool_file.write_text(CODE_EXECUTOR_TOOL_SOURCE)
|
|
145
|
+
console.print("[green]+[/green] Created tools/code_executor.py")
|
|
146
|
+
|
|
147
|
+
# Step 4: Update chart/values.yaml if present
|
|
148
|
+
values_file = project_root / "chart" / "values.yaml"
|
|
149
|
+
if values_file.exists():
|
|
150
|
+
values_content = values_file.read_text()
|
|
151
|
+
if "sandbox:" in values_content:
|
|
152
|
+
if "enabled: false" in values_content:
|
|
153
|
+
values_content = values_content.replace("enabled: false", "enabled: true", 1)
|
|
154
|
+
values_file.write_text(values_content)
|
|
155
|
+
console.print("[green]+[/green] Set sandbox.enabled: true in chart/values.yaml")
|
|
156
|
+
elif "enabled: true" in values_content:
|
|
157
|
+
console.print("[dim]sandbox.enabled already true in chart/values.yaml[/dim]")
|
|
158
|
+
else:
|
|
159
|
+
console.print(
|
|
160
|
+
"[yellow]Warning:[/yellow] Found sandbox: section in "
|
|
161
|
+
"chart/values.yaml but could not locate enabled field. "
|
|
162
|
+
"Please set sandbox.enabled: true manually."
|
|
163
|
+
)
|
|
164
|
+
else:
|
|
165
|
+
console.print(
|
|
166
|
+
"[yellow]Warning:[/yellow] No sandbox: section in chart/values.yaml.\n"
|
|
167
|
+
" Add the following to your values.yaml:\n"
|
|
168
|
+
" [dim]sandbox:\n"
|
|
169
|
+
" enabled: true\n"
|
|
170
|
+
" image: <your-sandbox-image>[/dim]"
|
|
171
|
+
)
|
|
172
|
+
else:
|
|
173
|
+
console.print("[dim]No chart/values.yaml found (not using Helm chart). Skipping.[/dim]")
|
|
174
|
+
|
|
175
|
+
# Step 5: Success panel
|
|
176
|
+
next_steps = """
|
|
177
|
+
[bold cyan]Next Steps:[/bold cyan]
|
|
178
|
+
|
|
179
|
+
1. Build or deploy the sandbox sidecar:
|
|
180
|
+
[dim]fips-agents create sandbox my-sandbox[/dim]
|
|
181
|
+
or use the pre-built image from fips-agents/code-sandbox
|
|
182
|
+
|
|
183
|
+
2. Configure the sandbox URL for your agent:
|
|
184
|
+
|
|
185
|
+
[bold]Sidecar mode[/bold] (same pod, default):
|
|
186
|
+
The tool defaults to http://localhost:8000
|
|
187
|
+
No extra config needed if sandbox runs as a sidecar container.
|
|
188
|
+
|
|
189
|
+
[bold]Remote service mode[/bold] (separate deployment):
|
|
190
|
+
Set the SANDBOX_URL environment variable:
|
|
191
|
+
[dim]export SANDBOX_URL=http://sandbox-service:8000[/dim]
|
|
192
|
+
|
|
193
|
+
3. The agent will auto-discover tools/code_executor.py.
|
|
194
|
+
Use it in your agent's step() by calling:
|
|
195
|
+
[dim]await self.use_tool("code_executor", code="print(1+1)")[/dim]
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
console.print(
|
|
199
|
+
Panel(
|
|
200
|
+
f"[bold green]Code executor tool added.[/bold green]\n{next_steps}",
|
|
201
|
+
border_style="green",
|
|
202
|
+
padding=(1, 2),
|
|
203
|
+
)
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
except KeyboardInterrupt:
|
|
207
|
+
console.print("\n[yellow]Operation cancelled.[/yellow]")
|
|
208
|
+
sys.exit(130)
|
|
209
|
+
except Exception as e:
|
|
210
|
+
console.print(f"\n[red]Error:[/red] {e}")
|
|
211
|
+
sys.exit(1)
|
|
@@ -301,7 +301,7 @@ def generate_component_workflow(
|
|
|
301
301
|
|
|
302
302
|
@click.group()
|
|
303
303
|
def generate():
|
|
304
|
-
"""Generate
|
|
304
|
+
"""Generate individual components (tools, prompts, resources, middleware) in existing projects."""
|
|
305
305
|
pass
|
|
306
306
|
|
|
307
307
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fips_agents_cli-0.6.2 → fips_agents_cli-0.7.0}/research/Ignite-CLI-Architecture-Analysis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|