Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
2d92fc3
Merge pull request #19 from MikePfunk28/main
MikePfunk28 Oct 24, 2025
d8e33a2
Merge pull request #20 from MikePfunk28/main
MikePfunk28 Oct 24, 2025
dba1ffd
fix som✅ Complete Summary
MikePfunk28 Oct 27, 2025
64e0917
🚀 Next Steps
MikePfunk28 Oct 29, 2025
3d969ff
✅ Complete Summary - What's ACTUALLY Working Now
MikePfunk28 Nov 4, 2025
e060ade
Add GitHub Actions workflow for project automation and enhance error …
MikePfunk28 Nov 13, 2025
1267062
refactor: remove Ollama installation wizard and status components
MikePfunk28 Feb 10, 2026
a1490f0
Fixed github oauth and removed google as I have not yet gotten google…
MikePfunk28 Feb 10, 2026
d9f0ef2
feat: update model references to Claude 4.5 Haiku across the application
MikePfunk28 Feb 9, 2026
81f13bf
feat: enhance MCP server integration and dynamic tool loading in visu…
MikePfunk28 Feb 10, 2026
c12e9ce
1. GitHub Workflow - Subshell loop (setup-github-projects_Version3.ym…
MikePfunk28 Feb 10, 2026
16019b7
fix: update model provider check and downgrade Ollama version in requ…
MikePfunk28 Feb 10, 2026
f21b3fb
feat: enhance role management with user role hierarchy and permission…
MikePfunk28 Feb 10, 2026
909afee
Add PricingPanel and UsageMeter components for subscription management
MikePfunk28 Feb 10, 2026
cec88ac
Refactor usage tracking and subscription management
MikePfunk28 Feb 11, 2026
b8bf1e4
feat: update model IDs and enhance agent execution logic for improved…
MikePfunk28 Feb 11, 2026
032b713
feat: update model IDs to latest version for improved performance and…
MikePfunk28 Feb 11, 2026
d3b41d5
feat: enhance security checks and improve configuration handling acro…
MikePfunk28 Feb 11, 2026
8306aae
Refactor pricing and usage terminology; update model catalog with new…
MikePfunk28 Feb 12, 2026
86250e7
feat: Implement tier-based access control for Bedrock models and enha…
MikePfunk28 Feb 12, 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
130 changes: 130 additions & 0 deletions .github/workflows/setup-github-projects_Version3.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
name: Setup GitHub Project Automations

on:
push:
branches:
- main
schedule:
- cron: "0 0 * * 0" # Every Sunday at midnight UTC
issues:
types: [opened, reopened]
pull_request:
types: [opened, reopened]
workflow_dispatch:

jobs:
setup-project:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up GitHub CLI
run: |
sudo apt-get update
sudo apt-get install -y gh
# Verify gh CLI version is compatible (>=2.21.0) for native 'gh project' commands
version=$(gh --version | head -n1 | awk '{print $3}' 2>/dev/null || echo "0.0.0")
major=$(echo "$version" | cut -d. -f1)
minor=$(echo "$version" | cut -d. -f2)
if [ "$major" -lt 2 ] || { [ "$major" -eq 2 ] && [ "$minor" -lt 21 ]; }; then
echo "gh CLI >= 2.21.0 required. Current: $version" >&2
exit 1
fi

- name: Authenticate GH CLI
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh auth login --with-token <<< "${GH_TOKEN}"

- name: Create Project with description
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PROJECT_NAME="Auto Project"
PROJECT_DESC="Automated project for task management with weekly iterations"

# Check if project exists
proj_list=$(gh project list --owner ${{ github.repository_owner }} --format json 2>&1)
rc=$?
if [ $rc -ne 0 ]; then
echo "gh project list failed: $proj_list" >&2
exit $rc
fi
PROJECT_ID=$(echo "$proj_list" | jq -r "[.[] | select(.title == \"$PROJECT_NAME\") | .number] | first // empty")

if [ -z "$PROJECT_ID" ]; then
echo "Creating new project..."
gh project create "$PROJECT_NAME" --owner ${{ github.repository_owner }} --body "$PROJECT_DESC"

# Re-check to ensure we obtained an ID, fail explicitly if not found
proj_list=$(gh project list --owner ${{ github.repository_owner }} --format json 2>&1)
rc=$?
if [ $rc -ne 0 ]; then
echo "gh project list failed after create: $proj_list" >&2
exit $rc
fi
PROJECT_ID=$(echo "$proj_list" | jq -r "[.[] | select(.title == \"$PROJECT_NAME\") | .number] | first // empty")
if [ -z "$PROJECT_ID" ]; then
echo "Failed to obtain PROJECT_ID for $PROJECT_NAME" >&2
exit 1
fi
fi

echo "PROJECT_ID=$PROJECT_ID" >> $GITHUB_ENV
Comment thread
coderabbitai[bot] marked this conversation as resolved.

- name: Reminder - Create views manually
run: |
echo "NOTE: GitHub Projects v2 views cannot be created via the gh CLI."
echo "Please create the following views manually in the GitHub web UI:"
echo " 1. 'Tasks Table' (Table view)"
echo " 2. 'Kanban Board' (Board view)"
echo " 3. 'Schedule Timeline' (Timeline view)"

- name: Backfill existing open issues
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PROJECT_ID=${{ env.PROJECT_ID }}
REPO="${{ github.repository }}"

# Fetch all open issues via paginated API
failures=0
issues_json=$(gh api --paginate "repos/$REPO/issues?state=open&per_page=100" --jq '.[].number' 2>&1)
rc=$?
if [ $rc -ne 0 ]; then
echo "Error listing issues for $REPO: $issues_json" >&2
exit $rc
fi

while read -r issue_num; do
[ -z "$issue_num" ] && continue
ISSUE_URL="https://github.com/$REPO/issues/$issue_num"
err=$(gh project item-add "$PROJECT_ID" --url "$ISSUE_URL" 2>&1) || {
echo "Error adding issue $issue_num to project $PROJECT_ID: $err" >&2
failures=$((failures+1))
}
done <<< "$issues_json"

if [ "$failures" -gt 0 ]; then
echo "Summary: $failures issue(s) failed to add to project $PROJECT_ID" >&2
fi

- name: Add new issues/PRs to project
if: github.event_name == 'issues' || github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PROJECT_ID=${{ env.PROJECT_ID }}
REPO="${{ github.repository }}"

if [ "${{ github.event_name }}" = "issues" ]; then
ISSUE_URL="https://github.com/${REPO}/issues/${{ github.event.issue.number }}"
out=$(gh project item-add "$PROJECT_ID" --url "$ISSUE_URL" 2>&1) || { echo "Error adding issue $ISSUE_URL to project: $out" >&2; exit 1; }
elif [ "${{ github.event_name }}" = "pull_request" ]; then
URL="https://github.com/${REPO}/pull/${{ github.event.pull_request.number }}"
out=$(gh project item-add "$PROJECT_ID" --url "$URL" 2>&1) || { echo "Error adding PR $URL to project: $out" >&2; exit 1; }
else
echo "Unsupported event: ${{ github.event_name }}" >&2
exit 1
fi
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,21 @@ current_logs.txt
agent_builder_full_architecture_with_api_gateway
agent_builder_complete_infrastructure

.amazonq/agents/default.json
evaluators/diagram_test.py
evaluators/dynamic_mcp.py

evaluators/dynamic_model_selection.py
evaluators/evaluator_workflow.py
evaluators/llm-judge.py
evaluators/structured_eval.py
evaluators/tool_context.py
evaluators/tool_eval.py
langchain_chain.py
mydiagram.py
diagrams/Web Application Architecture..png
evaluators/db_tool.py
ARCHITECTURE_DIAGRAM.txt
OLLAMA_QUICK_SUMMARY.txt
mcp.json
tmp_write_check.txt
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -520,3 +520,6 @@ Proprietary - All rights reserved
- Agent deployments use AWS (AgentCore or Fargate)
- MCP integration enables agent-to-agent communication
- Meta-tooling allows agents to create their own tools

## Security
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/13bcb475933b44fca1e7f27dcdbb9078)](https://app.codacy.com?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
3 changes: 3 additions & 0 deletions Security_checkup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from strands import Agent, tool
from strands_tools import LocalChromiumBrowser
from strands_tools import think, readfile
Comment on lines +1 to +3
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

File contains only unused imports with no implementation.

This file imports Agent, tool, LocalChromiumBrowser, think, and readfile but never uses any of them. As-is, it serves no purpose and looks like an accidentally committed stub. Either add the intended security checkup logic or remove the file to avoid dead code in the repository.

Additionally, the two strands_tools imports on lines 2–3 can be consolidated:

♻️ Merge imports (if file is kept)
 from strands import Agent, tool
-from strands_tools import LocalChromiumBrowser
-from strands_tools import think, readfile
+from strands_tools import LocalChromiumBrowser, think, readfile

,

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
from strands import Agent, tool
from strands_tools import LocalChromiumBrowser
from strands_tools import think, readfile
from strands import Agent, tool
from strands_tools import LocalChromiumBrowser, think, readfile
🤖 Prompt for AI Agents
In `@Security_checkup.py` around lines 1 - 3, This file currently only imports
Agent, tool, LocalChromiumBrowser, think, and readfile but contains no
implementation; either delete Security_checkup.py to remove dead code or
implement the intended security checkup logic—if implementing, create a clear
entrypoint function (e.g., run_security_checkup) that uses Agent and tool for
orchestration and LocalChromiumBrowser/think/readfile where needed, and
consolidate the two strands_tools imports into a single line importing
LocalChromiumBrowser, think, readfile to remove duplication; ensure unused
imports are removed if not used.

16 changes: 8 additions & 8 deletions assistant/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

# AWS Bedrock configuration
AWS_REGION = os.getenv("AWS_REGION", "us-east-1")
CLAUDE_HAIKU_MODEL = "us.anthropic.claude-haiku-4-5-20250514-v1:0"
CLAUDE_HAIKU_MODEL = "anthropic.claude-haiku-4-5-20251001-v1:0"

bedrock_config = Config(
region_name=AWS_REGION,
Expand Down Expand Up @@ -99,13 +99,13 @@ async def chat_with_assistant(request: AssistantRequest):
try:
# Build messages for Claude
messages = [{"role": msg.role, "content": msg.content} for msg in request.messages]

# Add context if provided
if request.context:
context_str = f"\n\nCurrent Context:\n{json.dumps(request.context, indent=2)}"
if messages:
messages[-1]["content"] += context_str

# Prepare request body
body = {
"anthropic_version": "bedrock-2023-05-31",
Expand All @@ -114,28 +114,28 @@ async def chat_with_assistant(request: AssistantRequest):
"system": SYSTEM_PROMPT,
"messages": messages
}

# Invoke Bedrock model (serverless - pay per token)
logger.info(f"Invoking {CLAUDE_HAIKU_MODEL}")
response = bedrock_runtime.invoke_model(
modelId=CLAUDE_HAIKU_MODEL,
body=json.dumps(body)
)

# Parse response
response_body = json.loads(response['body'].read())
assistant_message = response_body['content'][0]['text']

# Extract suggestions and code snippets if present
suggestions = extract_suggestions(assistant_message)
code_snippet = extract_code_snippet(assistant_message)

return AssistantResponse(
message=assistant_message,
suggestions=suggestions,
code_snippet=code_snippet
)

except Exception as e:
logger.error(f"Error invoking assistant: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
Comment on lines 139 to 141
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Raw exception detail forwarded to the client may leak internals.

str(e) can contain AWS SDK errors, stack info, or account identifiers. Return a generic message and log the detail server-side.

Suggested fix
     except Exception as e:
         logger.error(f"Error invoking assistant: {str(e)}")
-        raise HTTPException(status_code=500, detail=str(e))
+        raise HTTPException(status_code=500, detail="Internal error processing request")
🧰 Tools
🪛 Ruff (0.15.0)

[warning] 139-139: Do not catch blind exception: Exception

(BLE001)


[warning] 140-140: Use logging.exception instead of logging.error

Replace with exception

(TRY400)


[warning] 140-140: Use explicit conversion flag

Replace with conversion flag

(RUF010)


[warning] 141-141: Within an except clause, raise exceptions with raise ... from err or raise ... from None to distinguish them from errors in exception handling

(B904)

🤖 Prompt for AI Agents
In `@assistant/main.py` around lines 139 - 141, The exception handler currently
logs and returns str(e) to the client; change it to log the full error details
server-side using logger.exception or logger.error with the exception, but
return a generic message to the client when raising HTTPException (e.g.,
"Internal server error" or "An internal error occurred") instead of str(e);
update the except block around the assistant invocation (the except Exception as
e handler that calls logger.error and raises HTTPException) to use
logger.exception(e) or logger.error(..., exc_info=True) and raise
HTTPException(status_code=500, detail="Internal server error") so internal
details are not leaked.

Expand Down
Loading