k-cli-for-devs 1.0.1__tar.gz → 1.0.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.
- {k_cli_for_devs-1.0.1/k_cli_for_devs.egg-info → k_cli_for_devs-1.0.2}/PKG-INFO +3 -3
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/README.md +2 -2
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/autonomous_agent.py +37 -1
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/web/server.py +4 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2/k_cli_for_devs.egg-info}/PKG-INFO +3 -3
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/pyproject.toml +1 -1
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_autonomous_agent.py +18 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/LICENSE +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/MANIFEST.in +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/adversarial_swarm.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/agent_core.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/background_daemon.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/orchestrator.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/persona.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/scaffold_engine.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/strands_agent.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/agents/subagents.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/cli.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/airgap.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/credentials.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/intent_sensor.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/llm_driver.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/model_manager.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/models_hub.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/prompting.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/sdk.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/session.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/smart_router.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/storage_manager.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/core/viewport_engine.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/demo/demo_runner.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/ai_bisect.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/conflict_resolver.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/git_guard.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/patcher.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/repo_map.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/smart_git.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/git/verifier.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/github/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/github/dedup_engine.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/github/github_client.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/github/github_engine.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/github/local_hub.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/github/pr_watcher.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/github/trending.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/audit.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/chaos_immunity.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/codebase_qa.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/command_runner.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/diagram_generator.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/doc_retriever.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/feature.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/ghost_daemon.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/incident_triage.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/mcp_client.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/repo_gardener.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/rules.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/security.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/security_healer.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tools/synapse_graph.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tui/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tui/diff_viewer.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tui/tui.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tui/tui_animations.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/tui/tui_app.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/ui/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/ui/simple_repl.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/web/__init__.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/web/static/app.js +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/web/static/index.html +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/web/static/monitor.html +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli/web/static/style.css +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli_for_devs.egg-info/SOURCES.txt +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli_for_devs.egg-info/dependency_links.txt +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli_for_devs.egg-info/entry_points.txt +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli_for_devs.egg-info/requires.txt +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/k_cli_for_devs.egg-info/top_level.txt +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/setup.cfg +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_adaptive_smart_router.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_adversarial_knowledge.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_adversarial_m6_patcher_git_session.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_challenger_m1_driver_and_mock.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_challenger_m1_streaming.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_chaos_immunity.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_cli.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_cli_fuzzer_traversal.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_cli_github_conflict_mcp.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_codex_hub.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_command_runner.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_conflict_resolver.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_credentials.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_dedup_engine.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_devdocs_expansion.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_diagram_generator.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_doc_retriever.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_dynamic_discovery_and_audit.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_e2e_suite.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_git_guard.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_github_client.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_github_engine.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_hackathon_bedrock_and_daemon.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_incident_triage.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_intent_sensor.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_k_cli_full_e2e.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_killer_features.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_llm_driver.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_local_hub.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_mcp_client.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_model_manager.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_models_hub.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_multi_provider_llm_driver.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_orchestrator.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_patcher.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_persona_system.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_repo_map.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_rules.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_sdk.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_security_healer.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_session.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_simple_ui_and_rules.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_smart_git.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_storage_manager.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_strands_agent.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_subagents.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_tui.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_tui_animations.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_tui_app.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_tui_app_screens.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_tui_pilot.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_verifier.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_viewport_engine.py +0 -0
- {k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_web_ui.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: k-cli-for-devs
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: K-CLI for Devs: Autonomous Self-Healing DevOps & Engineering Agent built with AWS Strands Agents SDK
|
|
5
5
|
License: MIT License
|
|
6
6
|
|
|
@@ -56,7 +56,7 @@ Dynamic: license-file
|
|
|
56
56
|
|
|
57
57
|
# ⚡ K-CLI for Devs: Verification-First Autonomous AI DevOps Workstation
|
|
58
58
|
|
|
59
|
-
### Engineered by **Krishiv Joshi** ([@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)) | AWS Builder ID: `krishivjoshi219
|
|
59
|
+
### Engineered by **Krishiv Joshi** ([@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)) | AWS Builder ID: `krishivjoshi219@gmail.com`
|
|
60
60
|
### Built for the [AWS *Agents for Humans* Hackathon](https://agentsforhumans.devpost.com/) — *Professional Agents Track* ($40,000 Prize Pool)
|
|
61
61
|
|
|
62
62
|
---
|
|
@@ -475,6 +475,6 @@ The official submission video for the AWS "Agents for Humans" Hackathon is rende
|
|
|
475
475
|
|
|
476
476
|
* **Author & Lead Architect**: **Krishiv Joshi**
|
|
477
477
|
* **GitHub Profile**: [@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)
|
|
478
|
-
* **AWS Builder ID**: `krishivjoshi219
|
|
478
|
+
* **AWS Builder ID**: `krishivjoshi219@gmail.com`
|
|
479
479
|
* **Hackathon**: [AWS *Agents for Humans* Hackathon](https://agentsforhumans.devpost.com/) — Professional Agents Track
|
|
480
480
|
* **License**: Open-source under the [MIT License](LICENSE).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ⚡ K-CLI for Devs: Verification-First Autonomous AI DevOps Workstation
|
|
2
2
|
|
|
3
|
-
### Engineered by **Krishiv Joshi** ([@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)) | AWS Builder ID: `krishivjoshi219
|
|
3
|
+
### Engineered by **Krishiv Joshi** ([@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)) | AWS Builder ID: `krishivjoshi219@gmail.com`
|
|
4
4
|
### Built for the [AWS *Agents for Humans* Hackathon](https://agentsforhumans.devpost.com/) — *Professional Agents Track* ($40,000 Prize Pool)
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -419,6 +419,6 @@ The official submission video for the AWS "Agents for Humans" Hackathon is rende
|
|
|
419
419
|
|
|
420
420
|
* **Author & Lead Architect**: **Krishiv Joshi**
|
|
421
421
|
* **GitHub Profile**: [@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)
|
|
422
|
-
* **AWS Builder ID**: `krishivjoshi219
|
|
422
|
+
* **AWS Builder ID**: `krishivjoshi219@gmail.com`
|
|
423
423
|
* **Hackathon**: [AWS *Agents for Humans* Hackathon](https://agentsforhumans.devpost.com/) — Professional Agents Track
|
|
424
424
|
* **License**: Open-source under the [MIT License](LICENSE).
|
|
@@ -301,9 +301,43 @@ Available Tools:
|
|
|
301
301
|
- `search_codebase(query="...", directory=".")`: Search for symbols or text across files.
|
|
302
302
|
- `triage_and_heal_incident(error_traceback="...")`: Automated crash traceback triage and repair.
|
|
303
303
|
|
|
304
|
+
COMMUNICATION & NATURAL LANGUAGE STYLE (MANDATORY):
|
|
305
|
+
- Talk like an elite senior staff engineer (similar to Claude Code, Aider, and Google Antigravity). Direct, natural, authoritative, concise.
|
|
306
|
+
- ZERO ROBOTIC PREAMBLES OR CONVERSATIONAL FILLER:
|
|
307
|
+
- NEVER output robotic phrases like "Okay, I now have a clear picture of...", "Based on the file structure...", "Based on my analysis...", "Here's why I find it impressive:", "Sure, I'd be happy to help!", "Certainly!", or "In summary...".
|
|
308
|
+
- Get straight to the technical substance without stating what you are about to do or narrating your cognitive state.
|
|
309
|
+
- When reviewing a project or directory:
|
|
310
|
+
- Deliver a crisp, natural, high-signal technical evaluation.
|
|
311
|
+
- Highlight key architectural layers, modules, testing infrastructure, and technical design decisions using clean bullet points and precise paths.
|
|
312
|
+
- When writing or modifying code:
|
|
313
|
+
- Perform the filesystem and compiler operations silently using tools, then state what was accomplished and verified.
|
|
314
|
+
|
|
304
315
|
Always take real action. Inspect real files, write real code to disk, and verify before giving your final answer."""
|
|
305
316
|
|
|
306
317
|
|
|
318
|
+
def clean_conversational_filler(text: str) -> str:
|
|
319
|
+
"""Strips robotic chatbot preambles to ensure natural, senior developer communication."""
|
|
320
|
+
if not text:
|
|
321
|
+
return text
|
|
322
|
+
|
|
323
|
+
cleaned = text.strip()
|
|
324
|
+
patterns = [
|
|
325
|
+
r"^(?:Okay|Ok|Alright|Great),\s+I\s+now\s+have\s+a\s+clear\s+picture\s+of[^\n.]*[.\n]*",
|
|
326
|
+
r"^(?:Based\s+on\s+(?:the\s+file\s+structure|the\s+directory\s+structure|the\s+files|my\s+analysis|the\s+above)[^.\n]*[.\n]*)",
|
|
327
|
+
r"^(?:Here(?:\x27s|'s|\s+is)\s+why\s+I\s+find\s+it\s+impressive:\s*)",
|
|
328
|
+
r"^(?:Sure|Certainly|Of\s+course)[,!.]?\s+(?:I(?:\s+would|'d)?\s+be\s+happy\s+to\s+help|I\s+can\s+help\s+with\s+that|let's\s+dive\s+in)[^\n.]*[.\n]*",
|
|
329
|
+
r"^(?:As\s+an\s+AI\s+(?:language\s+model|assistant)[^.\n]*[.\n]*)",
|
|
330
|
+
]
|
|
331
|
+
for _ in range(5):
|
|
332
|
+
prev = cleaned
|
|
333
|
+
for pat in patterns:
|
|
334
|
+
cleaned = re.sub(pat, "", cleaned, flags=re.IGNORECASE).strip()
|
|
335
|
+
if cleaned == prev:
|
|
336
|
+
break
|
|
337
|
+
|
|
338
|
+
return cleaned
|
|
339
|
+
|
|
340
|
+
|
|
307
341
|
# ==============================================================================
|
|
308
342
|
# AUTONOMOUS AGENT RUNNER
|
|
309
343
|
# ==============================================================================
|
|
@@ -522,13 +556,15 @@ class AutonomousAgent:
|
|
|
522
556
|
conversation_history.append(
|
|
523
557
|
f"Assistant Action:\n{model_out}\n\n"
|
|
524
558
|
f"<tool_result tool=\"{tool_name}\">\n{tool_result}\n</tool_result>\n"
|
|
525
|
-
f"
|
|
559
|
+
f"Tool execution succeeded. Based on the tool result above, provide your direct, concise technical response in natural senior developer language (or execute the next tool if needed). Do NOT include conversational preambles like 'Okay, I now have a clear picture' or meta-analysis fluff. Speak directly as a senior engineer."
|
|
526
560
|
)
|
|
527
561
|
current_persona = "CODER" if "write" in tool_name else "VERIFIER"
|
|
528
562
|
|
|
529
563
|
if not final_response:
|
|
530
564
|
final_response = model_out or "Task completed by K-CLI Autonomous Agent."
|
|
531
565
|
|
|
566
|
+
final_response = clean_conversational_filler(final_response)
|
|
567
|
+
|
|
532
568
|
duration = time.time() - start_time
|
|
533
569
|
return AutonomousAgentResult(
|
|
534
570
|
success=True,
|
|
@@ -227,6 +227,8 @@ def create_app() -> FastAPI:
|
|
|
227
227
|
|
|
228
228
|
return {
|
|
229
229
|
"success": result.success,
|
|
230
|
+
"response": result.final_response,
|
|
231
|
+
"message": result.final_response,
|
|
230
232
|
"final_code": result.final_response,
|
|
231
233
|
"attempts": len(result.steps),
|
|
232
234
|
"tools_executed": result.tools_executed,
|
|
@@ -523,6 +525,8 @@ def create_app() -> FastAPI:
|
|
|
523
525
|
comp_payload = {
|
|
524
526
|
"type": "done",
|
|
525
527
|
"success": agent_result.success,
|
|
528
|
+
"response": agent_result.final_response,
|
|
529
|
+
"message": agent_result.final_response,
|
|
526
530
|
"final_code": agent_result.final_response,
|
|
527
531
|
"attempts": len(agent_result.steps),
|
|
528
532
|
"tools_executed": agent_result.tools_executed,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: k-cli-for-devs
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: K-CLI for Devs: Autonomous Self-Healing DevOps & Engineering Agent built with AWS Strands Agents SDK
|
|
5
5
|
License: MIT License
|
|
6
6
|
|
|
@@ -56,7 +56,7 @@ Dynamic: license-file
|
|
|
56
56
|
|
|
57
57
|
# ⚡ K-CLI for Devs: Verification-First Autonomous AI DevOps Workstation
|
|
58
58
|
|
|
59
|
-
### Engineered by **Krishiv Joshi** ([@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)) | AWS Builder ID: `krishivjoshi219
|
|
59
|
+
### Engineered by **Krishiv Joshi** ([@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)) | AWS Builder ID: `krishivjoshi219@gmail.com`
|
|
60
60
|
### Built for the [AWS *Agents for Humans* Hackathon](https://agentsforhumans.devpost.com/) — *Professional Agents Track* ($40,000 Prize Pool)
|
|
61
61
|
|
|
62
62
|
---
|
|
@@ -475,6 +475,6 @@ The official submission video for the AWS "Agents for Humans" Hackathon is rende
|
|
|
475
475
|
|
|
476
476
|
* **Author & Lead Architect**: **Krishiv Joshi**
|
|
477
477
|
* **GitHub Profile**: [@krishivjoshi219-collab](https://github.com/krishivjoshi219-collab)
|
|
478
|
-
* **AWS Builder ID**: `krishivjoshi219
|
|
478
|
+
* **AWS Builder ID**: `krishivjoshi219@gmail.com`
|
|
479
479
|
* **Hackathon**: [AWS *Agents for Humans* Hackathon](https://agentsforhumans.devpost.com/) — Professional Agents Track
|
|
480
480
|
* **License**: Open-source under the [MIT License](LICENSE).
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "k-cli-for-devs"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.2"
|
|
8
8
|
description = "K-CLI for Devs: Autonomous Self-Healing DevOps & Engineering Agent built with AWS Strands Agents SDK"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -9,6 +9,7 @@ from k_cli.agents.autonomous_agent import (
|
|
|
9
9
|
tool_execute_command,
|
|
10
10
|
tool_verify_code_file,
|
|
11
11
|
tool_search_codebase,
|
|
12
|
+
clean_conversational_filler,
|
|
12
13
|
AVAILABLE_TOOLS,
|
|
13
14
|
)
|
|
14
15
|
from k_cli.core.llm_driver import LLMDriver
|
|
@@ -58,3 +59,20 @@ def test_autonomous_agent_mock_run(tmp_path):
|
|
|
58
59
|
res = agent.run("build a quick function in python")
|
|
59
60
|
assert res.success is True
|
|
60
61
|
assert res.final_response is not None
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def test_clean_conversational_filler():
|
|
65
|
+
immature_text = (
|
|
66
|
+
"Okay, I now have a clear picture of the /home/k/K-Cli-for-Devs directory. "
|
|
67
|
+
"Based on the file structure, this project appears to be a highly sophisticated and ambitious "
|
|
68
|
+
"AI-powered command-line interface for developers. Here's why I find it impressive: "
|
|
69
|
+
"Comprehensive AI Features (k_cli/agents, k_cli/tools, incident_triage, security_healer), "
|
|
70
|
+
"Deep Git Integration (conflict_resolver, verifier), Rich User Interface (Textual TUI, Web UI), "
|
|
71
|
+
"and Robust Testing Infrastructure (tests/)..."
|
|
72
|
+
)
|
|
73
|
+
cleaned = clean_conversational_filler(immature_text)
|
|
74
|
+
assert not cleaned.startswith("Okay, I now have a clear picture")
|
|
75
|
+
assert not cleaned.startswith("Based on the file structure")
|
|
76
|
+
assert not cleaned.startswith("Here's why I find it impressive")
|
|
77
|
+
assert "Comprehensive AI Features" in cleaned
|
|
78
|
+
|
|
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
|
|
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
|
|
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
|
{k_cli_for_devs-1.0.1 → k_cli_for_devs-1.0.2}/tests/test_adversarial_m6_patcher_git_session.py
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
|
|
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
|