diff --git a/.claude/hooks/status-line.sh b/.claude/hooks/status-line.sh index 4b99683..7751635 100755 --- a/.claude/hooks/status-line.sh +++ b/.claude/hooks/status-line.sh @@ -1,21 +1,67 @@ #!/usr/bin/env bash -# Status line: Show active codeflash org/project. +# Status line: derive context from git state, not just cwd. -cd "$CLAUDE_PROJECT_DIR" 2>/dev/null || exit 0 +input=$(cat) +project_dir=$(echo "$input" | jq -r '.workspace.project_dir') -CF_DIR="$CLAUDE_PROJECT_DIR/.codeflash" -[ -d "$CF_DIR" ] || exit 0 +user=$(whoami) +branch=$(git -C "$project_dir" branch --show-current 2>/dev/null) -# Find the org/project directory (first one found) -for ORG_DIR in "$CF_DIR"/*/; do - [ -d "$ORG_DIR" ] || continue - ORG=$(basename "$ORG_DIR") - for PROJ_DIR in "$ORG_DIR"/*/; do - [ -d "$PROJ_DIR" ] || continue - PROJECT=$(basename "$PROJ_DIR") - echo "codeflash-agent is working in: $ORG/$PROJECT" - exit 0 - done -done +# Detect active area from recently changed files (staged + unstaged). +changed=$(git -C "$project_dir" diff --name-only HEAD 2>/dev/null) +[ -z "$changed" ] && changed=$(git -C "$project_dir" diff --name-only 2>/dev/null) +[ -z "$changed" ] && changed=$(git -C "$project_dir" diff --name-only --cached 2>/dev/null) -exit 0 +# Derive area from the most common top-level path in changed files. +if [ -n "$changed" ]; then + area=$(echo "$changed" | sed 's|/.*||' | sort | uniq -c | sort -rn | head -1 | awk '{print $2}') +else + area="" +fi + +# Build context from area + changed file patterns. +context="" +case "$area" in + reports) + target=$(echo "$changed" | grep '^reports/' | sed 's|^reports/||; s|/.*||' | sort -u | head -1) + [ -n "$target" ] && context="building report: $target" ;; + packages) + target=$(echo "$changed" | grep '^packages/' | sed 's|^packages/||; s|/.*||' | sort -u | head -1) + [ -n "$target" ] && context="developing $target" ;; + plugin) + lang=$(echo "$changed" | grep '^plugin/languages/' | sed 's|^plugin/languages/||; s|/.*||' | sort -u | head -1) + if [ -n "$lang" ]; then + context="developing plugin: $lang" + else + context="developing plugin" + fi ;; + .codeflash) + target=$(echo "$changed" | grep '^\.codeflash/' | sed 's|^\.codeflash/[^/]*/||; s|/.*||' | sort -u | paste -sd/ - | head -1) + [ -n "$target" ] && context="optimizing $target" ;; + case-studies) + target=$(echo "$changed" | grep '^case-studies/' | sed 's|^case-studies/||' | cut -d/ -f1-2 | sort -u | head -1) + [ -n "$target" ] && context="writing case study: $target" ;; + evals) + context="running evals" ;; +esac + +# If no changed files, fall back to branch name for context. +if [ -z "$context" ] && [ -n "$branch" ]; then + case "$branch" in + perf/*) context="optimizing: ${branch#perf/}" ;; + feat/*) context="building: ${branch#feat/}" ;; + fix/*) context="fixing: ${branch#fix/}" ;; + esac +fi + +# Dirty indicator. +dirty="" +if [ -n "$(git -C "$project_dir" status --porcelain 2>/dev/null)" ]; then + dirty=" *" +fi + +# Assemble. +status="$user | codeflash-agent" +[ -n "$context" ] && status="$status | $context" +[ -n "$branch" ] && status="$status | $branch$dirty" +echo "$status" diff --git a/.claude/rules/commits.md b/.claude/rules/commits.md index eb308b5..3f1d165 100644 --- a/.claude/rules/commits.md +++ b/.claude/rules/commits.md @@ -22,6 +22,11 @@ Every commit must be a single, self-contained logical change. Tests must pass at - Use the body for *why*, not *what* — the diff shows what changed - Reference the pipeline stage or roadmap item when relevant +## Pre-push + +- Run `prek run --all-files` before pushing to catch lint/format issues CI would flag +- This catches pre-existing issues in files you didn't touch — CI lints the whole repo, not just your diff + ## Branch Hygiene - Delete feature branches locally after merging into main (`git branch -d `) diff --git a/.codeflash/observability/read-tracker b/.codeflash/observability/read-tracker deleted file mode 100644 index 4f03456..0000000 --- a/.codeflash/observability/read-tracker +++ /dev/null @@ -1,973 +0,0 @@ -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/session-start.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/marketplace.json -/Users/krrt7/.claude/plugins/installed_plugins.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/68002f6d-738e-4a6d-b87d-a62be19bc3f2/tool-results/toolu_bdrk_01ALMycNAjRgTASDNUEH2pM9.txt -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/68002f6d-738e-4a6d-b87d-a62be19bc3f2/tool-results/toolu_bdrk_01Xw8n3HEpS1jAepuxBorgm1.txt -/Users/krrt7/.claude/settings.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.json -/Users/krrt7/.claude/settings.json -/Users/krrt7/.claude/settings.json -/Users/krrt7/.claude/settings.json -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/68002f6d-738e-4a6d-b87d-a62be19bc3f2/tool-results/toolu_bdrk_016CToSfc7XujfZ6isnmCMpK.txt -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.local.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.json -/Users/krrt7/.zshrc -/Users/krrt7/.zshenv -/Users/krrt7/.zprofile -/Users/krrt7/.zshrc -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/6057a151-05ef-4c61-8731-4ab4641aecf8/tool-results/toolu_bdrk_01Pa25ekXei8MYWmrJS1rdgt.txt -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.json -/Users/krrt7/.claude/settings.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/vm-manage.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/results.tsv -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/cloud-init.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/case-study-README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/evals/check-regression.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/scripts/new-case-study.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/evals/run-eval.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/intro.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/evals/.gitignore -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.github/workflows/github-app-tests.yml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/scripts/new-case-study.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/status-line.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/require-read.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/bash-guard.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/track-read.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/session-start.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/post-compact.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/hooks/hooks.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/vendor/codex/scripts/session-lifecycle-hook.mjs -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/case-study-README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/cloud-init.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/vm-manage.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/results.tsv -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/case-studies.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/microsoft/typeagent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/pypa/pip/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/textualize/rich/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/netflix/metaflow/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/sessions.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/microsoft/typeagent/infra/cloud-init.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/textualize/rich/infra/cloud-init.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/commits.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/agent-discipline.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.local.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/microsoft/typeagent/data/results.tsv -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/pypa/pip/data/results.tsv -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/microsoft/typeagent/infra/vm-manage.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/scripts/new-case-study.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/microsoft/typeagent/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/unstructured/core-product/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/unstructured/core-product/infra/vm-manage.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/unstructured/core-product/infra/cloud-init.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/session-start.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/templates/case-study-README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/microsoft/typeagent/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/session-start.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/testorg/testproject/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/case-studies/testorg/testproject/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/commands/codex-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/commands/codex-status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/commands/codex-setup.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/adversarial-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/hooks/hooks.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/languages/python/plugin/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/intro.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.gitignore -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-agent/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/case-studies.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/post-compact.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/commits.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-agent/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/settings.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/session-start.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-self-optimization/prior-art/pip-summary.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-self-optimization/prior-art/rich-summary.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-self-optimization/profiles/codeflash/tachyon-usage.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-self-optimization/infra/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/codeflash-ai/codeflash-self-optimization/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/post-compact.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/case-studies.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/sessions.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/scripts/scaffold.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.gitignore -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/infra/cloud-init.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/infra/vm-manage.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/data/conventions.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/bench/bench_throughput.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/data/results.tsv -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/.zshrc -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/ARCHITECTURE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/languages/python/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/languages/python/plugin/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/intro.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/marketplace.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/commands/codex-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash-researcher.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/commands/codex-setup.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/commands/codex-status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/hooks/hooks.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pr-body-templates.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/experiment-loop-base.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pr-preparation.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/ROADMAP.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pre-submit-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/e2e-benchmarks.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/learnings-template.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/adversarial-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/changelog-template.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/micro-benchmark.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/handoff-template.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/unified-profiling-script.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pr-body-templates.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/micro-benchmark.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/experiment-loop-base.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/handoff-template.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pre-submit-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/learnings-template.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pr-preparation.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/changelog-template.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/unified-profiling-script.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/e2e-benchmarks.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/adversarial-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/languages/python/plugin/references/library-replacement.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/languages/python/plugin/references/memory/pytest-memray.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/e2e-benchmarks.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/micro-benchmark.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pr-body-templates.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pre-submit-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/post-compact.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-setup.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/experiment-loop-base.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-setup.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-pr-prep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-ci.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-scan.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash-researcher.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/handoff-template.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/library-replacement.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/experiment-loop-base.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/micro-benchmark.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/async/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/structure/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/data-structures/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/memory/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/skills/memray-profiling/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/e2e-benchmarks.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/pr-preparation.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/e2e-benchmarks.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-scan.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-pr-prep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-ci.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-pr-prep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-ci.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-scan.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-base-protocol.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/sessions.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-bundle.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/references/prisma-performance.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/references/prisma-performance.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/plugin.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/.claude-plugin/marketplace.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/hooks/hooks.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/intro.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash-review.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash-researcher.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-memory.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-setup.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-async.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-ci.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-pr-prep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-scan.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-teams.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/v2/skills/codeflash-optimize/SKILL.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/intro.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/README.md -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-microsoft-org-typeagent/32354454-df78-4e14-a5b8-b4232f84cab7.jsonl -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-microsoft-org-typeagent/32354454-df78-4e14-a5b8-b4232f84cab7.jsonl -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-cpu.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/experiment-loop-base.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/references/prisma-performance.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-deep.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/post-compact.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/hooks/hooks.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/session-start.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/session-start.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/post-compact.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/hooks/hooks.json -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/hooks/post-compact.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/data/conventions.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/data/results.tsv -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/infra/vm-manage.sh -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/bench/bench_throughput.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/infra/cloud-init.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/memory/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/async/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/structure/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/data-structures/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/references/database/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-ci.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-js-ci.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/data-structures/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/data-structures/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/async/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/data-structures/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/data-structures/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/references/database/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/memory/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/data-structures/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/async/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/references/memory/guide.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/2c0831c4-1ac1-41fc-94f4-5e2ef736de5c/tool-results/toolu_bdrk_01Gu517mYwYDPEdQovg6pcHV.txt -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/2c0831c4-1ac1-41fc-94f4-5e2ef736de5c/tool-results/toolu_bdrk_01JWDFJj6zcovUuVPJh2AkJV.txt -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/failure-modes.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/team-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/scope.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/rules/scope.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/agent-teams.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/router-base.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/team-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/team-structure.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.gitignore -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/README.md -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/requirements.txt -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/cd_project.yml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/ci.yml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.github/workflows/github-app-tests.yml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/messagebus/messagebus/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/messagebus/messagebus/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/conftest.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/conftest.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/storage/blob_storage_adapters/tests/conftest.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/auth/jwt_auth/tests/conftest.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/github-app/tests/conftest.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/storage/blob_storage_adapters/Makefile -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/storage/blob_storage_adapters/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/ci_project.yml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.pre-commit-config.yaml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/scripts/versioning.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.gitignore -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/contracts/types/README.md -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/contracts/types/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/example/blob_storage_adapter/README.md -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/example/blob_storage_adapter/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/claude.yaml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/github-app/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/scripts/release.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/DEVELOPMENT.md -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/secrets/README.md -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/secrets/secrets_adapters/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/tests/test_git_utils.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.gitignore -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.github/workflows/github-app-tests.yml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.pre-commit-config.yaml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/auth/jwt_auth/Makefile -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/messagebus/messagebus/Makefile -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/storage/blob_storage_adapters/Makefile -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/ci.yml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/ci_project.yml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/cd_project.yml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/scripts/versioning.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/scripts/release.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/.github/workflows/cd_schema.yml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/Makefile -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/auth/jwt_auth/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/scripts/combine-changelogs.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/github-app/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.github/workflows/github-app-tests.yml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/scripts/versioning.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/scripts/combine-changelogs.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/handoffs/latest.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/handoffs/latest.md -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/factory.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/__init__.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/configuration.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/components/identity.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/components/bucket.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/components/common.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_model.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/utic_cloud_provider_azure/factory.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/utic_cloud_provider_azure/configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/utic_cloud_provider_azure/components/bucket.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/utic_cloud_provider_azure/components/identity.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_optimizer.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/minikube/utic_cloud_provider_minikube/factory.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/minikube/utic_cloud_provider_minikube/configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/components/__init__.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/utic_cloud_provider_azure/components/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_model.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/argocd/example/__main__.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/README.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_discovery.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/components/vpc.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/abstractions/utic_cloud_abstractions/components/types.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/utic_cloud_provider_azure/components/vpc.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/README.md -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/observability/utic_cloud_provider_observability/factory.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/observability/utic_cloud_provider_observability/configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_constants.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/azure/utic_cloud_provider_azure/__init__.py -/Users/krrt7/Desktop/work/unstructured_org/platform-libs/libs/cloud_abstractions/minikube/utic_cloud_provider_minikube/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/github-app/github_app/backends.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/ARCHITECTURE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_model.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/agents/codeflash.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/javascript/agents/codeflash-javascript.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/languages/python/agents/codeflash-python.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/references/shared/router-base.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/api/_config.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/api/_session.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/api/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_capabilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/bcsfi5oiz.output -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/conftest.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/utilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/test_bubblesort_pytest.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b20t55bpm.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b20t55bpm.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/bqqnsifl9.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/bqqnsifl9.output -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_state.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_capabilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_state.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/utilities.py -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b2h3h93wt.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b2h3h93wt.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b2h3h93wt.output -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/conftest.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/test_async.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/test_bubblesort_pytest.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/utilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/utilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/e2e/utilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_state.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_constants.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/_model.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_model.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_platform.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/api/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_compat.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_state.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_capabilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_telemetry.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_shell.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_git.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/exceptions.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/result.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_reference_graph.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_function_ranking.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_platform.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_benchmarking.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_replacement.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/orchestration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_capabilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_model.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_shell.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_git.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/test_discovery/discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/test_discovery/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_test_runner.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_baseline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_verification.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_ranking.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_capabilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/utils.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/stream.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/safe.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_telemetry.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/new_type.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/models.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_state.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/models.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_platform.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_compat.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_shell.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/tests/test_shell_utils.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/tests/test_shell_utils.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/test_discovery/discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_codeflash_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_subprocess_runners.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_config.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_concolic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_humanize_time.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_benchmarking.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/ai/_refinement.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_model.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_shell.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_shell.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/tests/test_shell_utils.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_compat.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_model.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_platform.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/test_discovery/discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_concolic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_config.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_subprocess_runners.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_codeflash_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_platform.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_telemetry.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_add_needed_imports_from_module.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_add_needed_imports_from_module.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_config.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_subprocess_runners.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_http.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_telemetry.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_platform.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_replacement.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/.claude/projects/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tool-results/toolu_bdrk_014HoRNyfAhzPCxxPNuSNUdR.txt -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_normalizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_baseline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_codeflash_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_all_and_run.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_inject_profiling_used_frameworks.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_async_run_and_parse_tests.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_async_tests.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_codeflash_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_tests.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrumentation_run_results_aiservice.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_async_tests.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_async_tests.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_async_tests.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_instrument_async_tests.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_import_management.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_replacement.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_replacement.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrument_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrument_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrument_core.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrumentation.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_post_selection.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_post_selection.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_post_selection.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_test_orchestrator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_cli.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/bo5ltp289.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/bo5ltp289.output -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_post_selection.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_normalizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/imports.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/resolve.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_import_management.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_critic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_function_references.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/helpers.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_reference_graph.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_ranking.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/test_discovery/linking.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_critic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_critic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_function_optimizer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_critic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/imports.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_import_management.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_replacement.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_imports.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/fallback.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_import_management.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/imports.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_import_management.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/imports.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_import_management.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/imports.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/imports.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/codegen/_import_management.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_tracing.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_verification.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_baseline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrument_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_ranking.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_baseline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_critic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/models.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_code_context_extractor.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/helpers.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/models.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/resolve.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_parse_test_output_regex.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_parse_pytest_test_failures.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_code_utils.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_path_resolution.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_xml_parser.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_data_parsers.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_stdout_parsers.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_result_merger.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_parse_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_candidate_eval.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/pipeline/_async_bench.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_benchmark_merge_test_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_async_concurrency_decorator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_critic.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_merge_test_results.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/github-app/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_tracing.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_tracing.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_tracing.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_tracer.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_tracing.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_tracing.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/models.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_trace_models.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_replay_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/benchmarking/_replay_gen.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/testing/_instrument_capture.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_enrichment.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_code_context_extractor.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/_class_analysis.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/context/_class_analysis.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/CLAUDE.md -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b6spxrfuz.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b6spxrfuz.output -/private/tmp/claude-501/-Users-krrt7-Desktop-work-cf-org-codeflash-agent/0016339b-4b7c-44c1-ad2a-cde00d8e4953/tasks/b6spxrfuz.output -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/analysis/_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_function_discovery.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/github-app/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/handoffs/latest.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.claude/handoffs/latest.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_verification.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/tests/test_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/src/codeflash_python/verification/_comparator.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-python/ROADMAP.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/unstructured/core-product/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/ROADMAP.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/github-app/ROADMAP.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/netflix/metaflow/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/pypa/pip/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/coveragepy/coveragepy/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/microsoft/typeagent/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.codeflash/textualize/rich/status.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/plugin/ROADMAP.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/pyproject.toml -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_client.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_pipeline.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_git.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_model.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_telemetry.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_platform.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_http.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/exceptions.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_plugin.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_state.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_capabilities.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/_configuration.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/result.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/new_type.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/safe.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/__init__.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/stream.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/packages/codeflash-core/src/codeflash_core/danom/utils.py -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.gitignore -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.gitignore -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/Makefile -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/.gitignore -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md -/Users/krrt7/Desktop/work/cf_org/codeflash-agent/CLAUDE.md diff --git a/.gitignore b/.gitignore index 45b5ec3..7c0c7ef 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ original_base_research/ dist/ dist-*/ dist-v2/ +.playwright-mcp/ diff --git a/evals/score.py b/evals/score.py index 350540e..959bb75 100644 --- a/evals/score.py +++ b/evals/score.py @@ -44,7 +44,11 @@ def _read_single_jsonl(jsonl: Path) -> list[str]: elif block.get("type") == "tool_use": name = block.get("name", "") inp = block.get("input", {}) - cmd = inp.get("command", "") if isinstance(inp, dict) else "" + cmd = ( + inp.get("command", "") + if isinstance(inp, dict) + else "" + ) if cmd: parts.append(f"[{name}] {cmd}") elif name == "Write" and isinstance(inp, dict): @@ -61,8 +65,13 @@ def _read_single_jsonl(jsonl: Path) -> list[str]: parts.append(f"[result] {inner[:2000]}") elif isinstance(inner, list): for item in inner: - if isinstance(item, dict) and item.get("type") == "text": - parts.append(f"[result] {item['text'][:2000]}") + if ( + isinstance(item, dict) + and item.get("type") == "text" + ): + parts.append( + f"[result] {item['text'][:2000]}" + ) elif isinstance(content, str) and content: parts.append(content) @@ -178,20 +187,29 @@ def detect_memory_profiler_usage(session_text: str) -> bool: return bool(_MEMORY_PROFILER_PATTERNS.search(session_text)) -def count_profiling_runs(session_text: str, profiler_type: str = "memory") -> int: +def count_profiling_runs( + session_text: str, profiler_type: str = "memory" +) -> int: """Count distinct profiling command invocations in the session. Counts both direct bash commands (domain agent style) and profiling script executions (deep agent writes scripts then runs them). """ - pattern = _MEMORY_PROFILER_PATTERNS if profiler_type == "memory" else _CPU_PROFILER_PATTERNS + pattern = ( + _MEMORY_PROFILER_PATTERNS + if profiler_type == "memory" + else _CPU_PROFILER_PATTERNS + ) count = len(pattern.findall(session_text)) # Also count script executions that run profiling scripts # Deep agent writes /tmp/deep_profile.py or similar, then runs it - script_runs = len(re.findall( - r"\[Bash\]\s.*python[3]?\s+/tmp/\w*prof\w*\.py", - session_text, re.IGNORECASE, - )) + script_runs = len( + re.findall( + r"\[Bash\]\s.*python[3]?\s+/tmp/\w*prof\w*\.py", + session_text, + re.IGNORECASE, + ) + ) return max(count, count + script_runs) @@ -216,21 +234,26 @@ def detect_ranked_list(session_text: str) -> bool: """ has_profiler = bool(_CPU_PROFILER_PATTERNS.search(session_text)) # Look for ranking output — lines with percentages in a list/table context - has_ranking = bool(re.search( - r"(?:\d+\.?\d*\s*%.*(?:function|target|time|cumtime|tottime|CPU|Mem))|" - r"(?:(?:#\d|rank|\d\.\s).*\d+\.?\d*\s*%)|" - # Deep agent unified targets table - r"\[unified targets\]|" - r"(?:CPU\s*%.*Mem.*MiB)", - session_text, re.IGNORECASE, - )) + has_ranking = bool( + re.search( + r"(?:\d+\.?\d*\s*%.*(?:function|target|time|cumtime|tottime|CPU|Mem))|" + r"(?:(?:#\d|rank|\d\.\s).*\d+\.?\d*\s*%)|" + # Deep agent unified targets table + r"\[unified targets\]|" + r"(?:CPU\s*%.*Mem.*MiB)", + session_text, + re.IGNORECASE, + ) + ) return has_profiler and has_ranking # --- LLM scoring --- -def build_scoring_prompt(manifest: dict, conversation: str, variant: str) -> str: +def build_scoring_prompt( + manifest: dict, conversation: str, variant: str +) -> str: """Build the prompt for LLM-based scoring.""" rubric = manifest.get("rubric", {}) criteria = rubric.get("criteria") or rubric.get("per_bug", {}) @@ -261,7 +284,7 @@ def build_scoring_prompt(manifest: dict, conversation: str, variant: str) -> str return f"""You are scoring an AI agent's performance on a code optimization task. ## Task Description -{manifest.get('description', 'No description')} +{manifest.get("description", "No description")} ## Known Bugs {bugs_desc} @@ -281,7 +304,7 @@ of actual tool use (profiling commands, code edits, test runs). Return ONLY a JSON object with this exact structure: {{ "criteria": {{ - {', '.join(f'"{name}": <0-{pts}>' for name, pts in criteria.items())} + {", ".join(f'"{name}": <0-{pts}>' for name, pts in criteria.items())} }}, "notes": "" }}""" @@ -291,9 +314,13 @@ def llm_score(prompt: str) -> dict: """Call Claude to score, return parsed JSON.""" result = subprocess.run( [ - "claude", "-p", prompt, - "--output-format", "json", - "--model", "sonnet", + "claude", + "-p", + prompt, + "--output-format", + "json", + "--model", + "sonnet", ], capture_output=True, text=True, @@ -311,7 +338,9 @@ def llm_score(prompt: str) -> dict: # The result might be a JSON string if isinstance(inner, str): # Extract JSON from markdown code blocks if present - json_match = re.search(r"```(?:json)?\s*(\{.*?\})\s*```", inner, re.DOTALL) + json_match = re.search( + r"```(?:json)?\s*(\{.*?\})\s*```", inner, re.DOTALL + ) if json_match: return json.loads(json_match.group(1)) # Try parsing directly @@ -319,7 +348,11 @@ def llm_score(prompt: str) -> dict: return json.loads(inner) except json.JSONDecodeError: # Find JSON object in the text - brace_match = re.search(r"\{[^{}]*\"criteria\"[^{}]*\{[^{}]*\}[^{}]*\}", inner, re.DOTALL) + brace_match = re.search( + r"\{[^{}]*\"criteria\"[^{}]*\{[^{}]*\}[^{}]*\}", + inner, + re.DOTALL, + ) if brace_match: return json.loads(brace_match.group(0)) elif isinstance(inner, dict): @@ -327,7 +360,10 @@ def llm_score(prompt: str) -> dict: except json.JSONDecodeError: continue - print(f"WARNING: Could not parse LLM response:\n{output[:500]}", file=sys.stderr) + print( + f"WARNING: Could not parse LLM response:\n{output[:500]}", + file=sys.stderr, + ) return {} @@ -360,10 +396,12 @@ def score_variant(variant: str, results_dir: Path, manifest: dict) -> dict: break except (json.JSONDecodeError, TypeError): pass - print(f" No session JSONL, using result text ({len(conversation)} chars)") + print( + f" No session JSONL, using result text ({len(conversation)} chars)" + ) # LLM scoring - print(f" Grading with LLM...") + print(" Grading with LLM...") prompt = build_scoring_prompt(manifest, conversation, variant) llm_result = llm_score(prompt) scores = llm_result.get("criteria", {}) @@ -376,7 +414,9 @@ def score_variant(variant: str, results_dir: Path, manifest: dict) -> dict: # Auto-score: tests_pass (deterministic, don't need LLM) if "tests_pass" in criteria: - scores["tests_pass"] = criteria["tests_pass"] if check_tests_pass(test_output) else 0 + scores["tests_pass"] = ( + criteria["tests_pass"] if check_tests_pass(test_output) else 0 + ) # Auto-score: optimization_depth from peak memory thresholds auto_score = rubric.get("auto_score", {}) @@ -386,7 +426,9 @@ def score_variant(variant: str, results_dir: Path, manifest: dict) -> dict: for t in auto_score["optimization_depth"].get("thresholds", []): if peak <= t["max_mb"]: scores["optimization_depth"] = t["points"] - llm_notes += f" | optimization_depth: {peak:.1f}MB → {t['label']}" + llm_notes += ( + f" | optimization_depth: {peak:.1f}MB → {t['label']}" + ) break # Auto-score: used_memory_profiler (deterministic — did agent use memray/tracemalloc?) @@ -396,7 +438,9 @@ def score_variant(variant: str, results_dir: Path, manifest: dict) -> dict: llm_notes += " | used_memory_profiler: detected (deterministic)" else: scores["used_memory_profiler"] = 0 - llm_notes += " | used_memory_profiler: NOT detected (deterministic)" + llm_notes += ( + " | used_memory_profiler: NOT detected (deterministic)" + ) # Auto-score: profiled_iteratively (deterministic — count profiling runs) if "profiled_iteratively" in criteria and conversation: @@ -413,11 +457,15 @@ def score_variant(variant: str, results_dir: Path, manifest: dict) -> dict: # Auto-score: ran_adversarial_review (deterministic — codex adversarial review invoked) if "ran_adversarial_review" in criteria and conversation: if detect_adversarial_review(conversation): - scores["ran_adversarial_review"] = criteria["ran_adversarial_review"] + scores["ran_adversarial_review"] = criteria[ + "ran_adversarial_review" + ] llm_notes += " | ran_adversarial_review: detected (deterministic)" else: scores["ran_adversarial_review"] = 0 - llm_notes += " | ran_adversarial_review: NOT detected (deterministic)" + llm_notes += ( + " | ran_adversarial_review: NOT detected (deterministic)" + ) # Auto-score: profiled_and_identified (deterministic — any profiler used) if "profiled_and_identified" in criteria and conversation: @@ -425,10 +473,14 @@ def score_variant(variant: str, results_dir: Path, manifest: dict) -> dict: has_mem = detect_memory_profiler_usage(conversation) if has_cpu or has_mem: # Profiler detected — let LLM score the quality (don't override) - llm_notes += f" | profiler: detected (cpu={has_cpu}, mem={has_mem})" + llm_notes += ( + f" | profiler: detected (cpu={has_cpu}, mem={has_mem})" + ) else: scores["profiled_and_identified"] = 0 - llm_notes += " | profiler: NOT detected (deterministic override to 0)" + llm_notes += ( + " | profiler: NOT detected (deterministic override to 0)" + ) # Fill missing criteria with 0 for name in criteria: @@ -468,7 +520,10 @@ def aggregate_runs(parent_dir: Path) -> int: """Aggregate scores from multiple runs into stats per criterion.""" run_dirs = sorted(parent_dir.glob("run-*/")) if not run_dirs: - print(f"ERROR: No run-*/ directories found in {parent_dir}", file=sys.stderr) + print( + f"ERROR: No run-*/ directories found in {parent_dir}", + file=sys.stderr, + ) return 1 for variant in ("skill", "baseline"): @@ -496,7 +551,9 @@ def aggregate_runs(parent_dir: Path) -> int: "min": min(vals), "max": max(vals), "avg": round(avg, 1), - "stddev": round(math.sqrt(sum((v - avg) ** 2 for v in vals) / n), 2), + "stddev": round( + math.sqrt(sum((v - avg) ** 2 for v in vals) / n), 2 + ), } total_avg = sum(totals) / n @@ -508,7 +565,9 @@ def aggregate_runs(parent_dir: Path) -> int: "min": min(totals), "max": max(totals), "avg": round(total_avg, 1), - "stddev": round(math.sqrt(sum((v - total_avg) ** 2 for v in totals) / n), 2), + "stddev": round( + math.sqrt(sum((v - total_avg) ** 2 for v in totals) / n), 2 + ), }, "max_possible": max_total, "criteria": criteria_stats, @@ -520,7 +579,9 @@ def aggregate_runs(parent_dir: Path) -> int: agg["flaky_criteria"] = flaky # Collect durations - durations = [s.get("duration") for s in scores if s.get("duration") is not None] + durations = [ + s.get("duration") for s in scores if s.get("duration") is not None + ] if durations: agg["duration"] = { "min": min(durations), @@ -533,22 +594,30 @@ def aggregate_runs(parent_dir: Path) -> int: # Print summary print(f"=== {variant} aggregate ({n} runs) ===") - print(f" Total: {agg['total']['avg']}/{max_total} " - f"(range {agg['total']['min']}-{agg['total']['max']}, " - f"stddev {agg['total']['stddev']})") + print( + f" Total: {agg['total']['avg']}/{max_total} " + f"(range {agg['total']['min']}-{agg['total']['max']}, " + f"stddev {agg['total']['stddev']})" + ) print() for crit, stats in criteria_stats.items(): flaky_mark = " *" if stats["stddev"] > 0 else "" - print(f" {crit:40s} avg={stats['avg']:4.1f} " - f"range=[{stats['min']}-{stats['max']}] " - f"stddev={stats['stddev']}{flaky_mark}") + print( + f" {crit:40s} avg={stats['avg']:4.1f} " + f"range=[{stats['min']}-{stats['max']}] " + f"stddev={stats['stddev']}{flaky_mark}" + ) if flaky: - print(f"\n * flaky criteria (non-zero stddev): {', '.join(flaky)}") + print( + f"\n * flaky criteria (non-zero stddev): {', '.join(flaky)}" + ) if agg.get("duration"): d = agg["duration"] - print(f"\n Duration: avg={d['avg']}s range=[{d['min']}-{d['max']}s]") + print( + f"\n Duration: avg={d['avg']}s range=[{d['min']}-{d['max']}s]" + ) print() return 0 @@ -588,8 +657,9 @@ def score_single(results_dir: Path) -> int: if result.get("duration"): print(f" Duration: {result['duration']}s") - rubric_criteria = (manifest.get("rubric", {}).get("criteria") or - manifest.get("rubric", {}).get("per_bug", {})) + rubric_criteria = manifest.get("rubric", {}).get( + "criteria" + ) or manifest.get("rubric", {}).get("per_bug", {}) for criterion, score in result["criteria"].items(): max_pts = rubric_criteria.get(criterion, "?") print(f" {criterion}: {score}/{max_pts}") @@ -633,12 +703,17 @@ def score_single(results_dir: Path) -> int: def main(): if len(sys.argv) < 2: print("Usage: python3 score.py ", file=sys.stderr) - print(" python3 score.py aggregate ", file=sys.stderr) + print( + " python3 score.py aggregate ", file=sys.stderr + ) return 1 if sys.argv[1] == "aggregate": if len(sys.argv) < 3: - print("Usage: python3 score.py aggregate ", file=sys.stderr) + print( + "Usage: python3 score.py aggregate ", + file=sys.stderr, + ) return 1 return aggregate_runs(Path(sys.argv[2])) diff --git a/evals/templates/crossdomain-easy/src/log_analyzer/batch.py b/evals/templates/crossdomain-easy/src/log_analyzer/batch.py index 37b5b14..2ae76a5 100644 --- a/evals/templates/crossdomain-easy/src/log_analyzer/batch.py +++ b/evals/templates/crossdomain-easy/src/log_analyzer/batch.py @@ -1,6 +1,5 @@ """Batch processing module with async interface.""" -import asyncio async def async_batch_process(items: list[dict]) -> list[dict]: @@ -31,7 +30,9 @@ def _transform(item: dict) -> dict: """Apply transformation to a single item.""" return { "id": item["id"], - "data": item["data"].upper() if isinstance(item["data"], str) else item["data"], + "data": item["data"].upper() + if isinstance(item["data"], str) + else item["data"], "priority": item["priority"], "processed": True, } diff --git a/evals/templates/crossdomain-easy/tests/test_analyzer.py b/evals/templates/crossdomain-easy/tests/test_analyzer.py index 34ed96e..302736e 100644 --- a/evals/templates/crossdomain-easy/tests/test_analyzer.py +++ b/evals/templates/crossdomain-easy/tests/test_analyzer.py @@ -1,4 +1,3 @@ -import pytest from log_analyzer.analyzer import analyze_logs diff --git a/evals/templates/crossdomain-easy/tests/test_batch.py b/evals/templates/crossdomain-easy/tests/test_batch.py index 9154b9d..bfaf7ca 100644 --- a/evals/templates/crossdomain-easy/tests/test_batch.py +++ b/evals/templates/crossdomain-easy/tests/test_batch.py @@ -1,5 +1,5 @@ import asyncio -import pytest + from log_analyzer.batch import async_batch_process diff --git a/evals/templates/crossdomain-easy/tests/test_streamer.py b/evals/templates/crossdomain-easy/tests/test_streamer.py index 65ef010..3585e37 100644 --- a/evals/templates/crossdomain-easy/tests/test_streamer.py +++ b/evals/templates/crossdomain-easy/tests/test_streamer.py @@ -1,5 +1,4 @@ -import pytest -from log_analyzer.streamer import stream_results, aggregate_results +from log_analyzer.streamer import aggregate_results, stream_results def test_stream_basic(): diff --git a/evals/templates/crossdomain-hard/src/pipeline/enricher.py b/evals/templates/crossdomain-hard/src/pipeline/enricher.py index 62fb5f1..e0d68d6 100644 --- a/evals/templates/crossdomain-hard/src/pipeline/enricher.py +++ b/evals/templates/crossdomain-hard/src/pipeline/enricher.py @@ -1,12 +1,9 @@ """Event enrichment with async metadata lookup and fingerprinting.""" import asyncio -import hashlib -async def enrich_events( - events: list[dict], metadata_db: dict -) -> list[dict]: +async def enrich_events(events: list[dict], metadata_db: dict) -> list[dict]: """Enrich events with metadata and compute dedup fingerprints. For each event, looks up source metadata from the DB and computes diff --git a/evals/templates/crossdomain-hard/src/pipeline/formatter.py b/evals/templates/crossdomain-hard/src/pipeline/formatter.py index 3fbfda2..dc0bb7e 100644 --- a/evals/templates/crossdomain-hard/src/pipeline/formatter.py +++ b/evals/templates/crossdomain-hard/src/pipeline/formatter.py @@ -1,13 +1,11 @@ """Output formatting for aggregated pipeline results.""" import copy -import json import hashlib +import json -def format_results( - records: list[dict], schema: dict -) -> list[str]: +def format_results(records: list[dict], schema: dict) -> list[str]: """Format records according to schema, adding computed fields. Each record gets merged with the schema defaults, then enriched with diff --git a/evals/templates/crossdomain-hard/tests/test_aggregator.py b/evals/templates/crossdomain-hard/tests/test_aggregator.py index 8eab3f1..2525e82 100644 --- a/evals/templates/crossdomain-hard/tests/test_aggregator.py +++ b/evals/templates/crossdomain-hard/tests/test_aggregator.py @@ -1,4 +1,3 @@ -import pytest from pipeline.aggregator import aggregate_by_category diff --git a/evals/templates/crossdomain-hard/tests/test_enricher.py b/evals/templates/crossdomain-hard/tests/test_enricher.py index 1ca6dee..0b77e39 100644 --- a/evals/templates/crossdomain-hard/tests/test_enricher.py +++ b/evals/templates/crossdomain-hard/tests/test_enricher.py @@ -1,5 +1,5 @@ import asyncio -import pytest + from pipeline.enricher import enrich_events @@ -18,7 +18,10 @@ def test_enrich_basic(): def test_enrich_large_batch(): """Production-scale enrichment — this async endpoint is too slow.""" sources = [f"source-{i}" for i in range(20)] - db = {s: {"region": f"region-{i % 5}", "tier": "pro"} for i, s in enumerate(sources)} + db = { + s: {"region": f"region-{i % 5}", "tier": "pro"} + for i, s in enumerate(sources) + } events = [] for i in range(30_000): events.append( diff --git a/evals/templates/crossdomain-hard/tests/test_formatter.py b/evals/templates/crossdomain-hard/tests/test_formatter.py index 01a7a05..040378b 100644 --- a/evals/templates/crossdomain-hard/tests/test_formatter.py +++ b/evals/templates/crossdomain-hard/tests/test_formatter.py @@ -1,4 +1,3 @@ -import pytest from pipeline.formatter import format_results diff --git a/evals/templates/layered/tests/test_processor.py b/evals/templates/layered/tests/test_processor.py index 326a35b..97c8a86 100644 --- a/evals/templates/layered/tests/test_processor.py +++ b/evals/templates/layered/tests/test_processor.py @@ -1,4 +1,3 @@ -import pytest from processor.core import process_records @@ -46,7 +45,10 @@ def test_process_large_batch(): "routing": { "queue": "default", "priority_levels": [1, 2, 3, 4, 5], - "retry_policy": {"max_retries": 5, "delay_ms": [100, 500, 2000]}, + "retry_policy": { + "max_retries": 5, + "delay_ms": [100, 500, 2000], + }, }, }, } diff --git a/evals/templates/memory-balanced/src/orders/core.py b/evals/templates/memory-balanced/src/orders/core.py index 93e8178..0463790 100644 --- a/evals/templates/memory-balanced/src/orders/core.py +++ b/evals/templates/memory-balanced/src/orders/core.py @@ -6,8 +6,17 @@ from collections import defaultdict class Order: """A customer order with product, pricing, and shipping info.""" - def __init__(self, id, customer, product, category, quantity, price, - shipping_address, metadata): + def __init__( + self, + id, + customer, + product, + category, + quantity, + price, + shipping_address, + metadata, + ): self.id = id self.customer = customer self.product = product @@ -24,16 +33,18 @@ def parse_orders(raw_data): """Parse raw dicts into Order objects.""" orders = [] for item in raw_data: - orders.append(Order( - id=item["id"], - customer=item["customer"], - product=item["product"], - category=item["category"], - quantity=item["quantity"], - price=item["price"], - shipping_address=item["shipping_address"], - metadata=item.get("metadata", {}), - )) + orders.append( + Order( + id=item["id"], + customer=item["customer"], + product=item["product"], + category=item["category"], + quantity=item["quantity"], + price=item["price"], + shipping_address=item["shipping_address"], + metadata=item.get("metadata", {}), + ) + ) return orders @@ -96,12 +107,16 @@ def build_fulfillment_plan(orders): f"Details: {json.dumps(order.metadata)}\n" f"{'=' * 50}\n" ) - plan.append({ - "order_id": order.id, - "label": label, - "warehouse": f"WH-{abs(hash(order.shipping_address)) % 5}", - "priority": "EXPRESS" if order.final_price > 500 else "STANDARD", - }) + plan.append( + { + "order_id": order.id, + "label": label, + "warehouse": f"WH-{abs(hash(order.shipping_address)) % 5}", + "priority": "EXPRESS" + if order.final_price > 500 + else "STANDARD", + } + ) return plan @@ -116,7 +131,9 @@ def generate_summary(orders): summary[cat] = { "count": len(cat_orders), "total_revenue": round(sum(o.final_price for o in cat_orders), 2), - "avg_quantity": round(sum(o.quantity for o in cat_orders) / len(cat_orders), 1), + "avg_quantity": round( + sum(o.quantity for o in cat_orders) / len(cat_orders), 1 + ), } return summary diff --git a/evals/templates/memory-balanced/tests/test_orders.py b/evals/templates/memory-balanced/tests/test_orders.py index 162e998..d0628ad 100644 --- a/evals/templates/memory-balanced/tests/test_orders.py +++ b/evals/templates/memory-balanced/tests/test_orders.py @@ -1,18 +1,38 @@ -import pytest from orders.core import process_orders def test_basic(): raw = [ - {"id": 1, "customer": "Alice", "product": "Widget", "category": "tools", - "quantity": 2, "price": 25.0, "shipping_address": "123 Main St", - "metadata": {"payment_method": "credit_card"}}, - {"id": 2, "customer": "Bob", "product": "Gadget", "category": "tools", - "quantity": 1, "price": 50.0, "shipping_address": "456 Oak Ave", - "metadata": {"payment_method": "paypal"}}, - {"id": 3, "customer": "Carol", "product": "Gizmo", "category": "electronics", - "quantity": 5, "price": 10.0, "shipping_address": "789 Elm Dr", - "metadata": {"payment_method": "debit"}}, + { + "id": 1, + "customer": "Alice", + "product": "Widget", + "category": "tools", + "quantity": 2, + "price": 25.0, + "shipping_address": "123 Main St", + "metadata": {"payment_method": "credit_card"}, + }, + { + "id": 2, + "customer": "Bob", + "product": "Gadget", + "category": "tools", + "quantity": 1, + "price": 50.0, + "shipping_address": "456 Oak Ave", + "metadata": {"payment_method": "paypal"}, + }, + { + "id": 3, + "customer": "Carol", + "product": "Gizmo", + "category": "electronics", + "quantity": 5, + "price": 10.0, + "shipping_address": "789 Elm Dr", + "metadata": {"payment_method": "debit"}, + }, ] result = process_orders(raw) assert len(result["summary"]) == 2 @@ -43,10 +63,19 @@ def test_large_batch(): "price": round(10.0 + (i % 500) * 0.5, 2), "shipping_address": f"{100 + i % 999} Main St, City-{i % 50}, ST {10000 + i % 90000}", "metadata": { - "payment_method": ["credit_card", "debit", "paypal", "bank_transfer"][i % 4], - "order_source": ["web", "mobile", "api", "in_store"][i % 4], + "payment_method": [ + "credit_card", + "debit", + "paypal", + "bank_transfer", + ][i % 4], + "order_source": ["web", "mobile", "api", "in_store"][ + i % 4 + ], "loyalty_tier": ["bronze", "silver", "gold"][i % 3], - "promo_code": f"PROMO-{i % 20:03d}" if i % 5 == 0 else None, + "promo_code": f"PROMO-{i % 20:03d}" + if i % 5 == 0 + else None, "gift_wrap": i % 7 == 0, "notes": f"Order note #{i}" if i % 10 == 0 else "", "tracking": {"email": True, "sms": i % 3 == 0}, diff --git a/evals/templates/memory-hard/src/pipeline/core.py b/evals/templates/memory-hard/src/pipeline/core.py index c0e6d0d..8ba39a0 100644 --- a/evals/templates/memory-hard/src/pipeline/core.py +++ b/evals/templates/memory-hard/src/pipeline/core.py @@ -3,19 +3,20 @@ import json import time from collections import defaultdict - # Processing log — records each operation for debugging and audit trail _processing_log = [] def _log_operation(stage, reading_id, snapshot): """Append an operation record to the processing log.""" - _processing_log.append({ - "stage": stage, - "reading_id": reading_id, - "timestamp": time.monotonic(), - "snapshot": snapshot, - }) + _processing_log.append( + { + "stage": stage, + "reading_id": reading_id, + "timestamp": time.monotonic(), + "snapshot": snapshot, + } + ) def _snapshot(reading): @@ -73,8 +74,7 @@ def validate_readings(readings): def calibrate(readings): """Apply per-sensor-type calibration offsets.""" offsets = { - f"sensor-{i}": round(0.1 * (i % 5) - 0.2, 2) - for i in range(100) + f"sensor-{i}": round(0.1 * (i % 5) - 0.2, 2) for i in range(100) } calibrated = [] diff --git a/evals/templates/memory-hard/tests/test_pipeline.py b/evals/templates/memory-hard/tests/test_pipeline.py index b176fb8..0f34400 100644 --- a/evals/templates/memory-hard/tests/test_pipeline.py +++ b/evals/templates/memory-hard/tests/test_pipeline.py @@ -1,15 +1,29 @@ -import pytest from pipeline.core import process_readings def test_basic(): raw = [ - {"id": 1, "sensor_type": "temp", "timestamp": "2024-01-01T00:00:00", - "value": 22.5, "metadata": {"location": {"lat": 0, "lng": 0}}}, - {"id": 2, "sensor_type": "temp", "timestamp": "2024-01-01T01:00:00", - "value": 23.0, "metadata": {"location": {"lat": 0, "lng": 0}}}, - {"id": 3, "sensor_type": "humidity", "timestamp": "2024-01-01T00:00:00", - "value": 45.0, "metadata": {"location": {"lat": 0, "lng": 0}}}, + { + "id": 1, + "sensor_type": "temp", + "timestamp": "2024-01-01T00:00:00", + "value": 22.5, + "metadata": {"location": {"lat": 0, "lng": 0}}, + }, + { + "id": 2, + "sensor_type": "temp", + "timestamp": "2024-01-01T01:00:00", + "value": 23.0, + "metadata": {"location": {"lat": 0, "lng": 0}}, + }, + { + "id": 3, + "sensor_type": "humidity", + "timestamp": "2024-01-01T00:00:00", + "value": 45.0, + "metadata": {"location": {"lat": 0, "lng": 0}}, + }, ] result = process_readings(raw) assert len(result) == 2 diff --git a/evals/templates/memory-misdirection/src/analytics/core.py b/evals/templates/memory-misdirection/src/analytics/core.py index 5fb843b..acbb5cc 100644 --- a/evals/templates/memory-misdirection/src/analytics/core.py +++ b/evals/templates/memory-misdirection/src/analytics/core.py @@ -3,10 +3,20 @@ import json import time from collections import defaultdict -VALID_CATEGORIES = frozenset({ - "electronics", "clothing", "food", "home", "sports", - "books", "toys", "health", "auto", "garden", -}) +VALID_CATEGORIES = frozenset( + { + "electronics", + "clothing", + "food", + "home", + "sports", + "books", + "toys", + "health", + "auto", + "garden", + } +) REGIONS = frozenset({"US-EAST", "US-WEST", "EU-NORTH", "EU-SOUTH", "APAC"}) @@ -19,20 +29,26 @@ REGION_NAMES = { } CURRENCIES = { - "US-EAST": "USD", "US-WEST": "USD", - "EU-NORTH": "EUR", "EU-SOUTH": "EUR", + "US-EAST": "USD", + "US-WEST": "USD", + "EU-NORTH": "EUR", + "EU-SOUTH": "EUR", "APAC": "JPY", } TAX_RATES = { - "US-EAST": 0.08, "US-WEST": 0.075, - "EU-NORTH": 0.25, "EU-SOUTH": 0.22, + "US-EAST": 0.08, + "US-WEST": 0.075, + "EU-NORTH": 0.25, + "EU-SOUTH": 0.22, "APAC": 0.10, } class Transaction: - def __init__(self, id, amount, category, region, timestamp, customer, metadata): + def __init__( + self, id, amount, category, region, timestamp, customer, metadata + ): self.id = id self.amount = amount self.category = category @@ -45,6 +61,7 @@ class Transaction: def generate_transactions(n): """Generate raw transaction data for testing.""" import random + rng = random.Random(42) categories = sorted(VALID_CATEGORIES) @@ -54,19 +71,21 @@ def generate_transactions(n): raw = [] for i in range(n): - raw.append({ - "id": i, - "amount": round(rng.uniform(5.0, 500.0), 2), - "category": rng.choice(categories), - "region": rng.choice(regions), - "timestamp": f"2024-01-{(i % 28) + 1:02d}T{i % 24:02d}:{i % 60:02d}:00Z", - "customer": f"customer-{rng.randint(1, 10000):05d}", - "metadata": { - "channel": rng.choice(channels), - "priority": rng.choice(priorities), - "tags": [f"tag-{rng.randint(1, 100)}" for _ in range(3)], - }, - }) + raw.append( + { + "id": i, + "amount": round(rng.uniform(5.0, 500.0), 2), + "category": rng.choice(categories), + "region": rng.choice(regions), + "timestamp": f"2024-01-{(i % 28) + 1:02d}T{i % 24:02d}:{i % 60:02d}:00Z", + "customer": f"customer-{rng.randint(1, 10000):05d}", + "metadata": { + "channel": rng.choice(channels), + "priority": rng.choice(priorities), + "tags": [f"tag-{rng.randint(1, 100)}" for _ in range(3)], + }, + } + ) return raw @@ -74,15 +93,17 @@ def parse_transactions(raw_data): """Parse raw dicts into Transaction objects.""" transactions = [] for item in raw_data: - transactions.append(Transaction( - id=item["id"], - amount=item["amount"], - category=item["category"], - region=item["region"], - timestamp=item["timestamp"], - customer=item["customer"], - metadata=item["metadata"], - )) + transactions.append( + Transaction( + id=item["id"], + amount=item["amount"], + category=item["category"], + region=item["region"], + timestamp=item["timestamp"], + customer=item["customer"], + metadata=item["metadata"], + ) + ) return transactions @@ -100,38 +121,49 @@ def validate_transactions(transactions): "amount_limit": t.amount < 1_000_000, "category_known": t.category in VALID_CATEGORIES, "region_active": t.region in REGIONS, - "customer_format": bool(t.customer) and t.customer.startswith("customer-"), + "customer_format": bool(t.customer) + and t.customer.startswith("customer-"), "timestamp_present": bool(t.timestamp), - "metadata_valid": isinstance(t.metadata, dict) and "channel" in t.metadata, + "metadata_valid": isinstance(t.metadata, dict) + and "channel" in t.metadata, } # Build comprehensive audit snapshot for compliance record - audit_snapshot = json.dumps({ - "transaction_id": t.id, - "amount": str(t.amount), - "category": t.category, - "region": t.region, - "customer": t.customer, - "timestamp": t.timestamp, - "metadata_repr": repr(t.metadata), - "field_checks": field_checks, - "validation_ts": time.time(), - }, sort_keys=True, default=str) + audit_snapshot = json.dumps( + { + "transaction_id": t.id, + "amount": str(t.amount), + "category": t.category, + "region": t.region, + "customer": t.customer, + "timestamp": t.timestamp, + "metadata_repr": repr(t.metadata), + "field_checks": field_checks, + "validation_ts": time.time(), + }, + sort_keys=True, + default=str, + ) # Generate compliance hash chain for audit trail primary_hash = hashlib.sha256(audit_snapshot.encode()).hexdigest() - compliance_envelope = json.dumps({ - "primary_hash": primary_hash, - "rules_version": "2024.1.3", - "field_checks": field_checks, - "chain_input": ( - f"VALIDATE:{t.id}:{t.amount}:{t.category}" - f":{t.region}:{primary_hash[:16]}" - ), - }, sort_keys=True) + compliance_envelope = json.dumps( + { + "primary_hash": primary_hash, + "rules_version": "2024.1.3", + "field_checks": field_checks, + "chain_input": ( + f"VALIDATE:{t.id}:{t.amount}:{t.category}" + f":{t.region}:{primary_hash[:16]}" + ), + }, + sort_keys=True, + ) # Store ONLY the final compliance hash (not the full audit data) - t._compliance_hash = hashlib.sha256(compliance_envelope.encode()).hexdigest() + t._compliance_hash = hashlib.sha256( + compliance_envelope.encode() + ).hexdigest() if all(field_checks.values()): t.validated = True @@ -221,14 +253,18 @@ def format_report(analytics): lines.append(f" Transactions: {stats['count']:,}") lines.append(f" Revenue: ${stats['revenue']:,.2f}") lines.append(f" Avg Order: ${stats['avg_order']:,.2f}") - lines.append(f" Range: ${stats['min_order']:,.2f} — ${stats['max_order']:,.2f}") + lines.append( + f" Range: ${stats['min_order']:,.2f} — ${stats['max_order']:,.2f}" + ) lines.append("") - lines.extend([ - "=" * 60, - f"TOTAL: {total_count:,} transactions, ${total_revenue:,.2f} revenue", - "=" * 60, - ]) + lines.extend( + [ + "=" * 60, + f"TOTAL: {total_count:,} transactions, ${total_revenue:,.2f} revenue", + "=" * 60, + ] + ) return "\n".join(lines) diff --git a/evals/templates/memory/tests/test_aggregator.py b/evals/templates/memory/tests/test_aggregator.py index 8a9cca3..6ec61fb 100644 --- a/evals/templates/memory/tests/test_aggregator.py +++ b/evals/templates/memory/tests/test_aggregator.py @@ -1,15 +1,32 @@ -import pytest from aggregator.core import process_dataset def test_basic(): raw = [ - {"id": 1, "category": "web", "source": "s1", "date": "2024-01-01", - "value": 10.0, "metadata": {"tags": ["a"], "region": "us"}}, - {"id": 2, "category": "web", "source": "s2", "date": "2024-01-02", - "value": 20.0, "metadata": {"tags": ["b"], "region": "eu"}}, - {"id": 3, "category": "api", "source": "s1", "date": "2024-01-01", - "value": 5.0, "metadata": {"tags": ["a"], "region": "us"}}, + { + "id": 1, + "category": "web", + "source": "s1", + "date": "2024-01-01", + "value": 10.0, + "metadata": {"tags": ["a"], "region": "us"}, + }, + { + "id": 2, + "category": "web", + "source": "s2", + "date": "2024-01-02", + "value": 20.0, + "metadata": {"tags": ["b"], "region": "eu"}, + }, + { + "id": 3, + "category": "api", + "source": "s1", + "date": "2024-01-01", + "value": 5.0, + "metadata": {"tags": ["a"], "region": "us"}, + }, ] result = process_dataset(raw) assert len(result) == 2 diff --git a/evals/templates/ranking-hard/src/analytics/pipeline.py b/evals/templates/ranking-hard/src/analytics/pipeline.py index f9344e6..e4eb149 100644 --- a/evals/templates/ranking-hard/src/analytics/pipeline.py +++ b/evals/templates/ranking-hard/src/analytics/pipeline.py @@ -1,10 +1,10 @@ """Analytics pipeline: parse → validate → normalize → deduplicate → - enrich → score → rank → filter → format → summarize.""" +enrich → score → rank → filter → format → summarize.""" import copy +import hashlib import json import re -import hashlib def run_pipeline(records: list[dict], config: dict) -> dict: @@ -208,7 +208,9 @@ def generate_summary(records: list[dict]) -> dict: for other_cat in categories: if other_cat == cat: continue - other_records = [r for r in records if r.get("category", "") == other_cat] + other_records = [ + r for r in records if r.get("category", "") == other_cat + ] other_sources = [r.get("source", "") for r in other_records] shared = 0 for s in cat_sources: diff --git a/evals/templates/ranking-hard/tests/test_pipeline.py b/evals/templates/ranking-hard/tests/test_pipeline.py index c72ffea..20f16b5 100644 --- a/evals/templates/ranking-hard/tests/test_pipeline.py +++ b/evals/templates/ranking-hard/tests/test_pipeline.py @@ -1,4 +1,3 @@ -import pytest from analytics.pipeline import run_pipeline @@ -11,14 +10,45 @@ def test_basic(): "defaults": {"priority": 0}, } records = [ - {"id": 1, "value": 10.0, "category": "web", "source": "s1", "tags": []}, - {"id": 2, "value": 20.0, "category": "web", "source": "s2", "tags": []}, - {"id": 3, "value": 5.0, "category": "api", "source": "s1", "tags": ["spam"]}, - {"id": 4, "value": 15.0, "category": "api", "source": "banned", "tags": []}, - {"value": 1.0, "category": "x", "source": "s1", "tags": []}, # missing id + { + "id": 1, + "value": 10.0, + "category": "web", + "source": "s1", + "tags": [], + }, + { + "id": 2, + "value": 20.0, + "category": "web", + "source": "s2", + "tags": [], + }, + { + "id": 3, + "value": 5.0, + "category": "api", + "source": "s1", + "tags": ["spam"], + }, + { + "id": 4, + "value": 15.0, + "category": "api", + "source": "banned", + "tags": [], + }, + { + "value": 1.0, + "category": "x", + "source": "s1", + "tags": [], + }, # missing id ] result = run_pipeline(records, config) - assert len(result["records"]) == 2 # filtered: missing id, blocked source, blocked tag + assert ( + len(result["records"]) == 2 + ) # filtered: missing id, blocked source, blocked tag assert len(result["summary"]) > 0 diff --git a/evals/templates/ranking/src/pipeline/core.py b/evals/templates/ranking/src/pipeline/core.py index 9e3eb95..122d396 100644 --- a/evals/templates/ranking/src/pipeline/core.py +++ b/evals/templates/ranking/src/pipeline/core.py @@ -40,9 +40,7 @@ def clean_records(records: list[dict]) -> list[dict]: return cleaned -def validate_records( - records: list[dict], config: dict -) -> list[dict]: +def validate_records(records: list[dict], config: dict) -> list[dict]: """Filter records missing required fields or on the blocklist. Uses a list for blocklist lookups to preserve insertion order diff --git a/evals/templates/ranking/tests/test_pipeline.py b/evals/templates/ranking/tests/test_pipeline.py index 61de2ee..b047913 100644 --- a/evals/templates/ranking/tests/test_pipeline.py +++ b/evals/templates/ranking/tests/test_pipeline.py @@ -1,4 +1,3 @@ -import pytest from pipeline.core import run_pipeline @@ -11,7 +10,11 @@ def test_basic(): {"id": 1, "value": "hello world", "category": "a", "base_score": 1.0}, {"id": 2, "value": "foo", "category": "a", "base_score": 2.0}, {"id": 999, "value": "blocked", "category": "b", "base_score": 1.0}, - {"id": 3, "value": "bar", "category": "b"}, # missing base_score is ok (defaults to 1.0) + { + "id": 3, + "value": "bar", + "category": "b", + }, # missing base_score is ok (defaults to 1.0) {"value": "no id"}, # missing required field ] result = run_pipeline(records, config) @@ -40,5 +43,7 @@ def test_large_batch(): } ) result = run_pipeline(records, config) - assert len(result) == 5_000 # none blocked (IDs 0-4999, blocklist 9000-9099) + assert ( + len(result) == 5_000 + ) # none blocked (IDs 0-4999, blocklist 9000-9099) assert all("score" in r for r in result) diff --git a/plugin/languages/python/references/unified-profiling-script.py b/plugin/languages/python/references/unified-profiling-script.py index ff05207..6358b23 100644 --- a/plugin/languages/python/references/unified-profiling-script.py +++ b/plugin/languages/python/references/unified-profiling-script.py @@ -6,15 +6,24 @@ # Usage: Adapt the "RUN TARGET HERE" section for your test/benchmark, # then run with: $RUNNER /tmp/deep_profile.py -import cProfile, tracemalloc, gc, time, pstats, os, sys +import cProfile +import gc +import os +import pstats +import time +import tracemalloc # Track GC to quantify allocation→CPU interaction gc_times = [] + + def gc_callback(phase, info): - if phase == 'start': + if phase == "start": gc_callback._start = time.perf_counter() - elif phase == 'stop': + elif phase == "stop": gc_times.append(time.perf_counter() - gc_callback._start) + + gc.callbacks.append(gc_callback) tracemalloc.start() @@ -25,11 +34,11 @@ profiler.enable() profiler.disable() mem_snapshot = tracemalloc.take_snapshot() -profiler.dump_stats('/tmp/deep_cpu.prof') +profiler.dump_stats("/tmp/deep_cpu.prof") # Memory top allocators print("=== MEMORY: Top allocators ===") -for stat in mem_snapshot.statistics('lineno')[:15]: +for stat in mem_snapshot.statistics("lineno")[:15]: print(stat) # GC impact @@ -38,9 +47,9 @@ print(f"\n=== GC: {len(gc_times)} collections, {total_gc:.3f}s total ===") # CPU top functions (project-only) print("\n=== CPU: Top project functions ===") -p = pstats.Stats('/tmp/deep_cpu.prof') +p = pstats.Stats("/tmp/deep_cpu.prof") stats = p.stats -src = os.path.abspath('src') # adjust to project source root +src = os.path.abspath("src") # adjust to project source root project_funcs = [] for (file, line, name), (cc, nc, tt, ct, callers) in stats.items(): if not os.path.abspath(file).startswith(src): @@ -48,8 +57,8 @@ for (file, line, name), (cc, nc, tt, ct, callers) in stats.items(): project_funcs.append((ct, tt, name, file, line)) project_funcs.sort(reverse=True) total = project_funcs[0][0] if project_funcs else 1 -if not os.path.exists('/tmp/deep_baseline_total'): - with open('/tmp/deep_baseline_total', 'w') as f: +if not os.path.exists("/tmp/deep_baseline_total"): + with open("/tmp/deep_baseline_total", "w") as f: f.write(str(total)) for ct, tt, name, file, line in project_funcs[:15]: pct = ct / total * 100 diff --git a/pyproject.toml b/pyproject.toml index 946f2da..6e09777 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" requires-python = ">=3.9" [tool.uv.workspace] -members = ["packages/*"] +members = ["packages/*", "reports/*"] [dependency-groups] dev = [ @@ -50,6 +50,7 @@ src = [ "packages/github-app", ] extend-exclude = [ + ".codeflash/", "packages/codeflash-python/tests/code_to_optimize", "packages/codeflash-python/src/codeflash_python/ai/_tabulate.py", ] @@ -234,6 +235,17 @@ ignore = [ "W", # whitespace issues in test data strings ] +"reports/*" = [ + "C901", # complex layout builders are expected in Dash apps + "E501", # long strings in inline HTML + "ERA001", # section separator comments + "PERF403", # dict comprehension not clearer here + "PLR0913", # helper functions with many style params + "PLR0915", # long layout functions are expected in Dash + "PLR2004", # magic values in layout (pixel sizes, etc.) + "T201", # print for dev server +] + [tool.isort] known_first_party = ["codeflash_python", "codeflash_core"] @@ -258,6 +270,7 @@ module = "codeflash_python.testing._instrumentation" ignore_errors = true [tool.pytest.ini_options] +asyncio_mode = "auto" addopts = [ "--strict-markers", "--strict-config", diff --git a/reports/unstructured/data.json b/reports/unstructured/data.json new file mode 100644 index 0000000..4e7a9d7 --- /dev/null +++ b/reports/unstructured/data.json @@ -0,0 +1,73 @@ +{ + "core_product_base": "https://github.com/Unstructured-IO/core-product/pull", + "github_workflows_base": "https://github.com/Unstructured-IO/github-workflows/pull", + "mem_before": { + "pre_partition_mb": 2619, + "post_partition_mb": 3491, + "max_alloc_mb": 268, + "k8s_gb": 32 + }, + "mem_after": { + "pre_partition_mb": 499, + "post_partition_mb": 1398, + "max_alloc_mb": 134, + "k8s_gb": 4 + }, + "bench_before": { + "post_import_mib": 1189, + "first_partition_delta_mib": 949, + "peak_gb": 1.660, + "total_gb": 16.398, + "allocs": 5585979, + "wall_s": 76.0 + }, + "bench_after": { + "post_import_mib": 952, + "first_partition_delta_mib": 707, + "peak_gb": 1.473, + "total_gb": 20.239, + "allocs": 6210809, + "wall_s": 86.0 + }, + "latency_opts": [ + ["Pdfium PNG -> BMP render", 89, 890, 2.1, "#1503"], + ["Pass file path to tesseract", 515, 5148, 12.2, "#1506"] + ], + "ci_before": { + "jobs_spawned": 301, + "jobs_ran": 193, + "billed_min": 205, + "wall": "3m 49s", + "cost": 1.64 + }, + "ci_after": { + "jobs_spawned": 33, + "jobs_ran": 31, + "billed_min": 31, + "wall": "1m 05s", + "cost": 0.25 + }, + "merged_prs": [ + [1398, "2026-03-27", "Fix: avoid blocking event loop during gzip decompression", "Reliability", "core-product"], + [1399, "2026-04-03", "Fix: avoid blocking event loop during PDF validation", "Reliability", "core-product"], + [1400, "2026-03-30", "Fix: avoid blocking event loop during CSV response merging", "Reliability", "core-product"], + [1441, "2026-04-03", "mem: resize-first preprocessing", "Memory", "core-product"], + [1448, "2026-03-24", "mem: free page image before table OCR", "Memory", "core-product"], + [1464, "2026-03-27", "refactor: replace lazyproperty with cached_property", "Code quality", "core-product"], + [1481, "2026-04-03", "perf: reduce attribute lookups in hot path", "Latency", "core-product"], + [1502, "2026-04-14", "perf: CPU-aware serial OCR (sched_getaffinity)", "Memory", "core-product"], + [1506, "2026-04-13", "perf: pass file path directly to tesseract", "Latency", "core-product"], + [1507, "2026-04-14", "perf: use jemalloc to reduce fragmentation", "Memory", "core-product"], + [360, "2026-04-10", "Add uv workspace support via optional package input", "CI/CD", "github-workflows"], + [361, "2026-04-11", "Skip pip.conf in uv workspace mode", "CI/CD", "github-workflows"] + ], + "open_prs": [ + [1471, "Async OCR pipeline via aiopytesseract", "Latency", "core-product"], + [1500, "Stacked optimizations for hi_res PDF pipeline", "Memory + Latency", "core-product"], + [1503, "Render PDF pages as BMP instead of PNG", "Latency", "core-product"], + [1505, "Pass image file path directly to tesseract OCR", "Latency", "core-product"], + [1509, "Use BMP instead of PNG for pytesseract temp files", "Latency", "core-product"], + [667, "POC: uv workspace for platform-libs (28 packages)", "CI/CD", "platform-libs"], + [669, "CI baseline measurement (do not merge)", "CI/CD", "platform-libs"] + ] +} diff --git a/reports/unstructured/engagement_report.py b/reports/unstructured/engagement_report.py new file mode 100644 index 0000000..b45c691 --- /dev/null +++ b/reports/unstructured/engagement_report.py @@ -0,0 +1,2406 @@ +"""Unstructured x Codeflash — Engagement Report + +Three-tier report: + 1. Executive Brief — for Chris Maddock (SVP Eng) and JPC + 2. Engineering Team — for Crag's team, aggregate view + 3. Engineering Detail — per-PR, benchmarks, methodology +""" + +import json +from pathlib import Path + +import plotly.graph_objects as go +from dash import ( + Dash, + Input, + Output, + clientside_callback, + dash_table, + dcc, + html, +) +from theme import ( + ACCENT, + AMBER, + BG, + BLUE, + CARD, + CARD_BG, + CARD_BORDER, + DARK, + FONT, + GRAY, + GREEN, + LIGHT_GRAY, + LIGHT_GREEN, + LIGHT_RED, + MONO, + PINK, + PURPLE, + RED, + SLATE, + TABLE_STYLE, + WHITE, +) + +# ── Data ──────────────────────────────────────────────────────────────────── +_DATA = json.loads((Path(__file__).parent / "data.json").read_text()) + +CORE_PRODUCT_BASE = _DATA["core_product_base"] +GITHUB_WORKFLOWS_BASE = _DATA["github_workflows_base"] +MEM_BEFORE = _DATA["mem_before"] +MEM_AFTER = _DATA["mem_after"] +BENCH_BEFORE = _DATA["bench_before"] +BENCH_AFTER = _DATA["bench_after"] +LATENCY_OPTS = _DATA["latency_opts"] +CI_BEFORE = _DATA["ci_before"] +CI_AFTER = _DATA["ci_after"] +MERGED_PRS = _DATA["merged_prs"] +OPEN_PRS = _DATA["open_prs"] + +# ── Helpers ────────────────────────────────────────────────────────────────── + + +def hero_metric(value, label, detail, color=GREEN): + return html.Div( + [ + html.Div( + value, + style={ + "fontSize": "42px", + "fontWeight": "800", + "color": color, + "lineHeight": "1", + "letterSpacing": "-0.02em", + "fontFamily": FONT, + }, + ), + html.Div( + label, + style={ + "fontSize": "15px", + "fontWeight": "600", + "color": SLATE, + "marginTop": "8px", + }, + ), + html.Div( + detail, + style={"fontSize": "13px", "color": GRAY, "marginTop": "4px"}, + ), + ], + style={ + "background": CARD_BG, + "borderRadius": "12px", + "padding": "32px 24px", + "textAlign": "center", + "flex": "1", + "minWidth": "200px", + "border": f"1px solid {CARD_BORDER}", + }, + ) + + +def section(title, subtitle=None): + children = [ + html.H2( + title, + style={ + "fontSize": "22px", + "fontWeight": "700", + "color": SLATE, + "margin": "0", + "fontFamily": FONT, + "letterSpacing": "-0.01em", + }, + ) + ] + if subtitle: + children.append( + html.P( + subtitle, + style={ + "fontSize": "14px", + "color": GRAY, + "margin": "6px 0 0", + "lineHeight": "1.5", + }, + ) + ) + return html.Div(children, style={"margin": "56px 0 24px"}) + + +def card(children, **kw): + style = {**CARD} + for k, v in kw.items(): + style[k] = v + return html.Div(children, style=style) + + +def metric_row( + label, before, after, unit="", fmt="{:,.0f}", better="lower", note=None +): + if before and after: + delta = (after - before) / before * 100 + improved = delta < 0 if better == "lower" else delta > 0 + delta_text = f"{delta:+.0f}%" + delta_color = GREEN if improved else RED + delta_bg = LIGHT_GREEN if improved else LIGHT_RED + else: + delta_text, delta_color, delta_bg = "—", GRAY, "transparent" + + def _f(v): + return f"{fmt.format(v)} {unit}".strip() if v is not None else "—" + + return html.Div( + [ + html.Div( + [ + html.Span( + label, + style={ + "fontWeight": "600", + "color": SLATE, + "fontSize": "14px", + }, + ), + html.Span( + f" {note}", + style={"fontSize": "12px", "color": LIGHT_GRAY}, + ) + if note + else html.Span(), + ], + style={"flex": "1"}, + ), + html.Div( + _f(before), + style={ + "width": "140px", + "textAlign": "right", + "color": GRAY, + "fontSize": "14px", + "fontFamily": MONO, + }, + ), + html.Div( + _f(after), + style={ + "width": "140px", + "textAlign": "right", + "color": SLATE, + "fontSize": "14px", + "fontWeight": "600", + "fontFamily": MONO, + }, + ), + html.Span( + delta_text, + style={ + "width": "80px", + "textAlign": "center", + "fontSize": "13px", + "fontWeight": "700", + "color": delta_color, + "background": delta_bg, + "borderRadius": "6px", + "padding": "2px 8px", + }, + ), + ], + style={ + "display": "flex", + "alignItems": "center", + "gap": "16px", + "padding": "12px 0", + "borderBottom": f"1px solid {CARD_BORDER}", + }, + ) + + +def table_header(cols): + return html.Div( + style={ + "display": "flex", + "gap": "16px", + "padding": "10px 0", + "borderBottom": f"2px solid {CARD_BORDER}", + "marginBottom": "4px", + }, + children=[ + html.Div( + c["label"], + style={ + "flex": "1" if c.get("flex") else None, + "width": c.get("width"), + "textAlign": c.get("align", "left"), + "fontWeight": "700", + "fontSize": "13px", + "color": ACCENT, + "textTransform": "uppercase", + "letterSpacing": "0.05em", + }, + ) + for c in cols + ], + ) + + +# ── Charts ─────────────────────────────────────────────────────────────────── + + +def make_memory_chart(): + """Before/after memory: the headline chart.""" + cats = ["Pre-Partition RSS", "Post-Partition RSS", "K8s Allocation"] + before = [ + MEM_BEFORE["pre_partition_mb"], + MEM_BEFORE["post_partition_mb"], + MEM_BEFORE["k8s_gb"] * 1024, + ] + after = [ + MEM_AFTER["pre_partition_mb"], + MEM_AFTER["post_partition_mb"], + MEM_AFTER["k8s_gb"] * 1024, + ] + + fig = go.Figure() + fig.add_trace( + go.Bar( + name="Before (4 OCR workers)", + x=cats, + y=before, + marker_color=LIGHT_GRAY, + marker_cornerradius=6, + text=[f"{v:,.0f} MB" for v in before], + textposition="outside", + textfont={"size": 13, "color": GRAY}, + ) + ) + fig.add_trace( + go.Bar( + name="After (serial OCR)", + x=cats, + y=after, + marker_color=ACCENT, + marker_cornerradius=6, + text=[f"{v:,.0f} MB" for v in after], + textposition="outside", + textfont={"size": 13, "color": ACCENT}, + ) + ) + fig.update_layout( + barmode="group", + bargap=0.3, + bargroupgap=0.1, + plot_bgcolor="rgba(0,0,0,0)", + paper_bgcolor="rgba(0,0,0,0)", + font={"family": FONT, "size": 13, "color": SLATE}, + yaxis={ + "title": "Memory (MB)", + "gridcolor": CARD_BORDER, + "zeroline": False, + }, + xaxis={"title": ""}, + margin={"t": 20, "b": 60, "l": 60, "r": 20}, + legend={ + "orientation": "h", + "yanchor": "bottom", + "y": 1.05, + "xanchor": "center", + "x": 0.5, + "font": {"size": 13}, + }, + height=380, + ) + return fig + + +def make_k8s_chart(): + """K8s allocation: 32 GB -> 4 GB.""" + fig = go.Figure() + fig.add_trace( + go.Bar( + y=["K8s Pod"], + x=[32], + orientation="h", + marker_color=LIGHT_GRAY, + marker_cornerradius=6, + opacity=0.5, + name="Before: 32 GB", + text=["32 GB"], + textposition="inside", + textfont={"size": 14, "color": WHITE}, + ) + ) + fig.add_trace( + go.Bar( + y=["K8s Pod"], + x=[4], + orientation="h", + marker_color=ACCENT, + marker_cornerradius=6, + name="Recommended: 4 GB", + text=["4 GB"], + textposition="inside", + textfont={"size": 14, "color": DARK, "family": FONT}, + ) + ) + fig.update_layout( + barmode="overlay", + plot_bgcolor="rgba(0,0,0,0)", + paper_bgcolor="rgba(0,0,0,0)", + font={"family": FONT, "size": 13, "color": SLATE}, + xaxis={ + "title": "Memory (GB)", + "gridcolor": CARD_BORDER, + "zeroline": False, + "range": [0, 36], + }, + margin={"t": 10, "b": 40, "l": 80, "r": 20}, + legend={ + "orientation": "h", + "yanchor": "bottom", + "y": 1.10, + "xanchor": "center", + "x": 0.5, + "font": {"size": 12}, + }, + height=160, + ) + return fig + + +def make_ci_chart(): + """CI: before/after.""" + cats = ["Jobs Spawned", "Billed Minutes", "Wall Clock (s)"] + before = [CI_BEFORE["jobs_spawned"], CI_BEFORE["billed_min"], 229] # 3m49s + after = [CI_AFTER["jobs_spawned"], CI_AFTER["billed_min"], 65] # 1m05s + + fig = go.Figure() + fig.add_trace( + go.Bar( + name="Before", + x=cats, + y=before, + marker_color=LIGHT_GRAY, + marker_cornerradius=6, + text=["301", "205 min", "3m 49s"], + textposition="outside", + textfont={"size": 13, "color": GRAY}, + ) + ) + fig.add_trace( + go.Bar( + name="After", + x=cats, + y=after, + marker_color=ACCENT, + marker_cornerradius=6, + text=["33", "31 min", "1m 05s"], + textposition="outside", + textfont={"size": 13, "color": ACCENT}, + ) + ) + fig.update_layout( + barmode="group", + bargap=0.3, + bargroupgap=0.1, + plot_bgcolor="rgba(0,0,0,0)", + paper_bgcolor="rgba(0,0,0,0)", + font={"family": FONT, "size": 13, "color": SLATE}, + yaxis={"gridcolor": CARD_BORDER, "zeroline": False}, + xaxis={"title": ""}, + margin={"t": 20, "b": 60, "l": 60, "r": 20}, + legend={ + "orientation": "h", + "yanchor": "bottom", + "y": 1.05, + "xanchor": "center", + "x": 0.5, + "font": {"size": 13}, + }, + height=340, + ) + return fig + + +# ── View builders ──────────────────────────────────────────────────────────── + + +def build_exec_view(): + return html.Div( + id="exec-view", + children=[ + section( + "The Problem", + "core-product pods were configured with 32 GB K8s limits and still occasionally OOM'ing.", + ), + card( + [ + html.P( + [ + "The root cause: on Knative pods with ", + html.Span( + "1 CPU request", + style={ + "fontWeight": "700", + "color": ACCENT, + }, + ), + ", Python's ", + html.Code( + "os.cpu_count()", + style={ + "fontFamily": MONO, + "color": ACCENT, + "fontSize": "13px", + }, + ), + " returns the ", + html.Span( + "host's full CPU count", + style={"fontWeight": "700"}, + ), + " (e.g. 4), so the OCR pool spawns 4 workers that each load the full ONNX model set " + "- with zero parallelism benefit on a single core. This means 4x the memory for no speed gain.", + ], + style={ + "color": GRAY, + "fontSize": "15px", + "lineHeight": "1.7", + "margin": "0", + }, + ), + ] + ), + section("The Result"), + html.Div( + style={ + "display": "flex", + "gap": "20px", + "flexWrap": "wrap", + }, + children=[ + card( + [ + html.Div( + "BEFORE", + style={ + "fontSize": "11px", + "fontWeight": "700", + "color": RED, + "letterSpacing": "0.1em", + "marginBottom": "16px", + }, + ), + html.Div( + "32 GB", + style={ + "fontSize": "48px", + "fontWeight": "800", + "color": SLATE, + "lineHeight": "1", + }, + ), + html.Div( + "K8s pod allocation", + style={ + "fontSize": "14px", + "color": GRAY, + "marginTop": "4px", + }, + ), + html.Div( + style={ + "marginTop": "16px", + "paddingTop": "16px", + "borderTop": f"1px solid {CARD_BORDER}", + }, + children=[ + html.Div( + "3,491 MB peak RSS", + style={ + "color": GRAY, + "fontSize": "14px", + "marginBottom": "4px", + }, + ), + html.Div( + "268 MB max single allocation", + style={ + "color": GRAY, + "fontSize": "14px", + "marginBottom": "4px", + }, + ), + html.Div( + "Still OOM'ing occasionally", + style={ + "color": RED, + "fontSize": "14px", + "fontWeight": "600", + }, + ), + ], + ), + ], + flex="1", + minWidth="260px", + borderTop=f"4px solid {RED}", + ), + html.Div( + "\u2192", + style={ + "fontSize": "42px", + "color": GRAY, + "alignSelf": "center", + "padding": "0 8px", + }, + ), + card( + [ + html.Div( + "AFTER", + style={ + "fontSize": "11px", + "fontWeight": "700", + "color": GREEN, + "letterSpacing": "0.1em", + "marginBottom": "16px", + }, + ), + html.Div( + "4 GB", + style={ + "fontSize": "48px", + "fontWeight": "800", + "color": GREEN, + "lineHeight": "1", + }, + ), + html.Div( + "recommended K8s allocation", + style={ + "fontSize": "14px", + "color": GRAY, + "marginTop": "4px", + }, + ), + html.Div( + style={ + "marginTop": "16px", + "paddingTop": "16px", + "borderTop": f"1px solid {CARD_BORDER}", + }, + children=[ + html.Div( + "1,398 MB peak RSS", + style={ + "color": SLATE, + "fontSize": "14px", + "marginBottom": "4px", + }, + ), + html.Div( + "134 MB max single allocation", + style={ + "color": SLATE, + "fontSize": "14px", + "marginBottom": "4px", + }, + ), + html.Div( + "2.6 GB headroom at 4 GB limit", + style={ + "color": GREEN, + "fontSize": "14px", + "fontWeight": "600", + }, + ), + ], + ), + ], + flex="1", + minWidth="260px", + borderTop=f"4px solid {GREEN}", + ), + ], + ), + card( + [ + dcc.Graph( + figure=make_k8s_chart(), + config={"displayModeBar": False}, + ), + html.P( + "With serial OCR on 1-CPU pods, peak RSS is ~1.4 GB. " + "A 4 GB request / 6 GB limit provides headroom for document size variance. " + "This is a direct per-pod infrastructure cost reduction.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "marginTop": "12px", + }, + ), + ], + marginTop="20px", + ), + section( + "How This Was Tested", + "Reproducible A/B benchmark on identical hardware with controlled conditions.", + ), + card( + [ + html.Ul( + [ + html.Li( + [ + html.Span( + "Same hardware: ", + style={ + "fontWeight": "600", + "color": SLATE, + }, + ), + "Azure Standard_D8s_v5 (8 vCPU, 32 GB RAM)", + ] + ), + html.Li( + [ + html.Span( + "Same workload: ", + style={ + "fontWeight": "600", + "color": SLATE, + }, + ), + "18 common partition tests (od_only, hi_res, pptx, docx)", + ] + ), + html.Li( + [ + html.Span( + "Same model: ", + style={ + "fontWeight": "600", + "color": SLATE, + }, + ), + "Proprietary YOLOX, identical weights", + ] + ), + html.Li( + [ + html.Span( + "Profiler: ", + style={ + "fontWeight": "600", + "color": SLATE, + }, + ), + "memray --native (captures C/C++ malloc + mmap, not just Python)", + ] + ), + html.Li( + [ + html.Span( + "Protocol: ", + style={ + "fontWeight": "600", + "color": SLATE, + }, + ), + "VM rebooted + 5-min idle before each run", + ] + ), + ], + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "2.0", + "paddingLeft": "20px", + "margin": "0", + }, + ), + ] + ), + section( + "Beyond core-product", + "Delivered in addition to the core performance work. Each is available as a standalone engagement.", + ), + html.Div( + style={ + "display": "flex", + "gap": "20px", + "flexWrap": "wrap", + }, + children=[ + card( + [ + html.Div( + "CI/CD Modernization", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + "marginBottom": "8px", + }, + ), + html.Div( + "separate engagement", + style={ + "fontSize": "12px", + "color": ACCENT, + "fontWeight": "600", + "letterSpacing": "0.05em", + "marginBottom": "12px", + }, + ), + html.P( + "Consolidated 28 Python packages from per-package invoke/pip/venv toolchains " + "into a single uv workspace with unified CI. " + "Wall clock dropped 72%, CI cost dropped 85%.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + ], + flex="1", + minWidth="280px", + ), + card( + [ + html.Div( + "Security Audit", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + "marginBottom": "8px", + }, + ), + html.Div( + "separate engagement", + style={ + "fontSize": "12px", + "color": RED, + "fontWeight": "600", + "letterSpacing": "0.05em", + "marginBottom": "12px", + }, + ), + html.P( + "Identified dependency confusion risk across 28 packages and a lockfile bypass " + "in Docker builds that caused CVE patches to never reach production for ~2 months.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + ], + flex="1", + minWidth="280px", + ), + ], + ), + section("Delivered"), + card( + [ + html.Div( + style={ + "display": "flex", + "gap": "40px", + "flexWrap": "wrap", + }, + children=[ + html.Div( + [ + html.Div( + "12", + style={ + "fontSize": "36px", + "fontWeight": "800", + "color": ACCENT, + "lineHeight": "1", + }, + ), + html.Div( + "PRs merged", + style={ + "fontSize": "14px", + "color": GRAY, + "marginTop": "4px", + }, + ), + ] + ), + html.Div( + [ + html.Div( + "7", + style={ + "fontSize": "36px", + "fontWeight": "800", + "color": AMBER, + "lineHeight": "1", + }, + ), + html.Div( + "PRs in progress", + style={ + "fontSize": "14px", + "color": GRAY, + "marginTop": "4px", + }, + ), + ] + ), + html.Div( + [ + html.Div( + "3", + style={ + "fontSize": "36px", + "fontWeight": "800", + "color": SLATE, + "lineHeight": "1", + }, + ), + html.Div( + "repos touched", + style={ + "fontSize": "14px", + "color": GRAY, + "marginTop": "4px", + }, + ), + ] + ), + html.Div( + [ + html.Div( + "348", + style={ + "fontSize": "36px", + "fontWeight": "800", + "color": GREEN, + "lineHeight": "1", + }, + ), + html.Div( + "tests passing", + style={ + "fontSize": "14px", + "color": GRAY, + "marginTop": "4px", + }, + ), + ] + ), + ], + ), + ] + ), + ], + ) + + +def build_team_view(): + return html.Div( + id="team-view", + style={"display": "none"}, + children=[ + section( + "What Changed: Memory", + "Three root causes fixed, one allocator optimization added.", + ), + html.Div( + [ + html.Div( + [ + html.Div( + "CPU-Aware OCR Worker Count", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + }, + ), + html.Span( + "Biggest impact", + style={ + "marginLeft": "12px", + "padding": "2px 10px", + "borderRadius": "999px", + "fontSize": "12px", + "fontWeight": "600", + "background": ACCENT, + "color": DARK, + }, + ), + ], + style={ + "marginBottom": "12px", + "display": "flex", + "alignItems": "center", + }, + ), + html.P( + [ + html.Code( + "os.cpu_count()", + style={ + "fontFamily": MONO, + "color": ACCENT, + }, + ), + " returns the host CPU count (4), not the cgroup limit (1). ", + "The OCR pool was spawning 4 workers on a 1-CPU pod, each loading the full ONNX model set. " + "Replaced with ", + html.Code( + "os.sched_getaffinity(0)", + style={ + "fontFamily": MONO, + "color": ACCENT, + }, + ), + " which respects cgroup/taskset limits. Result: serial mode on 1-CPU pods, " + "eliminating 3 redundant model copies from memory.", + ], + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.Div( + html.A( + "PR #1502", + href=f"{CORE_PRODUCT_BASE}/1502", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + style={"marginTop": "8px"}, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {ACCENT}", + }, + ), + html.Div( + [ + html.Div( + "Resize-First Preprocessing", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + "marginBottom": "12px", + }, + ), + html.P( + "Pages were being converted to full-resolution numpy arrays before any resizing. " + "Now resizes the PIL image first, avoiding a large temporary allocation for every page.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.Div( + html.A( + "PR #1441", + href=f"{CORE_PRODUCT_BASE}/1441", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + style={"marginTop": "8px"}, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {GREEN}", + }, + ), + html.Div( + [ + html.Div( + "Early Page Image Release", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + "marginBottom": "12px", + }, + ), + html.P( + "Page images were held in memory through the entire table OCR + transformer inference pipeline. " + "Now freed as soon as OCR is complete, reducing peak concurrent memory.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.Div( + html.A( + "PR #1448", + href=f"{CORE_PRODUCT_BASE}/1448", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + style={"marginTop": "8px"}, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {GREEN}", + }, + ), + html.Div( + [ + html.Div( + "jemalloc Allocator", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + "marginBottom": "12px", + }, + ), + html.P( + "Switched from glibc malloc to jemalloc via LD_PRELOAD. Reduces memory fragmentation " + "from the allocate/free/allocate pattern in the image processing pipeline. " + "Opt-in via environment variable, fault-tolerant if jemalloc is not installed.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.Div( + html.A( + "PR #1507", + href=f"{CORE_PRODUCT_BASE}/1507", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + style={"marginTop": "8px"}, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {AMBER}", + }, + ), + # Memory results chart + section("Memory Results"), + card( + [ + dcc.Graph( + figure=make_memory_chart(), + config={"displayModeBar": False}, + ) + ] + ), + # Memory table + card( + [ + table_header( + [ + {"label": "Metric", "flex": True}, + { + "label": "Before", + "width": "140px", + "align": "right", + }, + { + "label": "After", + "width": "140px", + "align": "right", + }, + { + "label": "Delta", + "width": "80px", + "align": "center", + }, + ] + ), + metric_row( + "Pre-partition RSS", + MEM_BEFORE["pre_partition_mb"], + MEM_AFTER["pre_partition_mb"], + "MB", + ), + metric_row( + "Post-partition RSS", + MEM_BEFORE["post_partition_mb"], + MEM_AFTER["post_partition_mb"], + "MB", + ), + metric_row( + "Max single allocation", + MEM_BEFORE["max_alloc_mb"], + MEM_AFTER["max_alloc_mb"], + "MB", + ), + metric_row( + "K8s allocation", + MEM_BEFORE["k8s_gb"] * 1024, + MEM_AFTER["k8s_gb"] * 1024, + "MB", + ), + ], + marginTop="20px", + ), + section( + "What Changed: Latency", + "Two optimizations in the OCR pipeline that eliminate redundant image format conversions.", + ), + html.Div( + [ + html.Div( + "BMP Instead of PNG for PDF Rendering", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + "marginBottom": "12px", + }, + ), + html.P( + "pdfium was rendering pages as PNG (compressed) when the downstream consumer immediately " + "decompresses to a raw bitmap. Switching to BMP skips the compression step entirely.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.Div( + [ + html.Span( + "-89 ms/page", + style={ + "color": GREEN, + "fontWeight": "700", + }, + ), + html.Span( + " | -890 ms for a 10-page scan", + style={"color": GRAY}, + ), + ], + style={ + "marginTop": "8px", + "fontSize": "14px", + }, + ), + html.Div( + html.A( + "PR #1503 (open)", + href=f"{CORE_PRODUCT_BASE}/1503", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + style={"marginTop": "4px"}, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {GREEN}", + }, + ), + html.Div( + [ + html.Div( + "Direct File Path to Tesseract", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + "marginBottom": "12px", + }, + ), + html.P( + "The OCR path was converting numpy -> PIL -> PNG bytes -> temp file -> tesseract. " + "In serial mode, the page image file already exists on disk. " + "Passing the path directly skips three intermediate copies.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.Div( + [ + html.Span( + "-515 ms/page", + style={ + "color": GREEN, + "fontWeight": "700", + }, + ), + html.Span( + " | -5,148 ms for a 10-page scan | 12.2% of pipeline", + style={"color": GRAY}, + ), + ], + style={ + "marginTop": "8px", + "fontSize": "14px", + }, + ), + html.Div( + html.A( + "PR #1506 (merged)", + href=f"{CORE_PRODUCT_BASE}/1506", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + style={"marginTop": "4px"}, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {GREEN}", + }, + ), + section( + "What Changed: CI/CD", + "platform-libs unified workflow - 28 packages, one CI pipeline.", + ), + card( + [ + dcc.Graph( + figure=make_ci_chart(), + config={"displayModeBar": False}, + ) + ] + ), + card( + [ + table_header( + [ + {"label": "Metric", "flex": True}, + { + "label": "Before", + "width": "140px", + "align": "right", + }, + { + "label": "After", + "width": "140px", + "align": "right", + }, + { + "label": "Delta", + "width": "80px", + "align": "center", + }, + ] + ), + metric_row( + "CI jobs spawned", + CI_BEFORE["jobs_spawned"], + CI_AFTER["jobs_spawned"], + ), + metric_row( + "Jobs that ran", + CI_BEFORE["jobs_ran"], + CI_AFTER["jobs_ran"], + ), + metric_row( + "Billed minutes", + CI_BEFORE["billed_min"], + CI_AFTER["billed_min"], + "min", + ), + metric_row( + "Cost per run", + CI_BEFORE["cost"], + CI_AFTER["cost"], + "$", + "{:.2f}", + ), + ], + marginTop="20px", + ), + section("What Changed: Reliability & Code Quality"), + html.Div( + style={ + "display": "flex", + "gap": "16px", + "flexDirection": "column", + }, + children=[ + card( + [ + html.Div( + [ + html.Span( + "Event loop blocking", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "15px", + }, + ), + html.Span( + " 3 PRs", + style={ + "color": ACCENT, + "fontSize": "13px", + "fontWeight": "600", + }, + ), + ] + ), + html.P( + "Gzip decompression, PDF validation, and CSV response merging were all running " + "synchronously in the async event loop. Fixed with async I/O wrappers.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "8px 0 0", + }, + ), + html.Div( + [ + html.A( + "#1398", + href=f"{CORE_PRODUCT_BASE}/1398", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + html.Span( + ", ", + style={ + "color": BLUE, + "fontSize": "13px", + }, + ), + html.A( + "#1399", + href=f"{CORE_PRODUCT_BASE}/1399", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + html.Span( + ", ", + style={ + "color": BLUE, + "fontSize": "13px", + }, + ), + html.A( + "#1400", + href=f"{CORE_PRODUCT_BASE}/1400", + target="_blank", + style={ + "color": BLUE, + "fontSize": "13px", + "textDecoration": "none", + }, + ), + ], + style={"marginTop": "8px"}, + ), + ] + ), + card( + [ + html.Div( + [ + html.Span( + "Security audit", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "15px", + }, + ), + html.Span( + " separate engagement", + style={ + "marginLeft": "12px", + "padding": "2px 10px", + "borderRadius": "999px", + "fontSize": "11px", + "fontWeight": "600", + "background": LIGHT_RED, + "color": RED, + }, + ), + ] + ), + html.P( + [ + "Identified dependency confusion risk across 28 packages " + "and a lockfile bypass in Docker builds that caused CVE patches to never reach " + "production for ~2 months. The team fixed the Docker issue in ", + html.A( + "#1465", + href=f"{CORE_PRODUCT_BASE}/1465", + target="_blank", + style={ + "color": BLUE, + "textDecoration": "none", + }, + ), + ".", + ], + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "8px 0 0", + }, + ), + ] + ), + ], + ), + ], + ) + + +def build_detail_view(): + return html.Div( + id="detail-view", + style={"display": "none"}, + children=[ + section( + "Merged PR Inventory", + "All PRs merged across 3 repositories, ordered by date.", + ), + dash_table.DataTable( + columns=[ + {"name": "PR", "id": "pr"}, + {"name": "Merged", "id": "date"}, + {"name": "Description", "id": "desc"}, + {"name": "Category", "id": "cat"}, + {"name": "Repo", "id": "repo"}, + ], + data=[ + { + "pr": f"#{r[0]}", + "date": r[1], + "desc": r[2], + "cat": r[3], + "repo": r[4], + } + for r in MERGED_PRS + ], + **{ + **TABLE_STYLE, + "style_data_conditional": [ + { + "if": {"row_index": "odd"}, + "backgroundColor": "#1f1f23", + }, + *[ + { + "if": { + "filter_query": f'{{cat}} = "{cat}"', + "column_id": "cat", + }, + "color": color, + "fontWeight": "600", + } + for cat, color in { + "Memory": GREEN, + "Latency": ACCENT, + "Reliability": BLUE, + "Code quality": PURPLE, + "CI/CD": PINK, + }.items() + ], + ], + }, + ), + section("Open / In-Progress PRs"), + dash_table.DataTable( + columns=[ + {"name": "PR", "id": "pr"}, + {"name": "Description", "id": "desc"}, + {"name": "Category", "id": "cat"}, + {"name": "Repo", "id": "repo"}, + ], + data=[ + { + "pr": f"#{r[0]}", + "desc": r[1], + "cat": r[2], + "repo": r[3], + } + for r in OPEN_PRS + ], + **{ + **TABLE_STYLE, + "style_data_conditional": [ + { + "if": {"row_index": "odd"}, + "backgroundColor": "#1f1f23", + }, + ], + }, + ), + section( + "A/B Benchmark Results (memray --native)", + "18 common partition tests, pre-Feb 2026 baseline vs current main.", + ), + card( + [ + table_header( + [ + {"label": "Metric", "flex": True}, + { + "label": "Baseline", + "width": "140px", + "align": "right", + }, + { + "label": "Current", + "width": "140px", + "align": "right", + }, + { + "label": "Delta", + "width": "80px", + "align": "center", + }, + ] + ), + metric_row( + "Post-import RSS", + BENCH_BEFORE["post_import_mib"], + BENCH_AFTER["post_import_mib"], + "MiB", + ), + metric_row( + "First partition delta", + BENCH_BEFORE["first_partition_delta_mib"], + BENCH_AFTER["first_partition_delta_mib"], + "MiB", + ), + metric_row( + "Peak memory", + BENCH_BEFORE["peak_gb"], + BENCH_AFTER["peak_gb"], + "GB", + "{:.3f}", + ), + metric_row( + "Total allocated", + BENCH_BEFORE["total_gb"], + BENCH_AFTER["total_gb"], + "GB", + "{:.1f}", + better="lower", + ), + metric_row( + "Allocation count", + BENCH_BEFORE["allocs"], + BENCH_AFTER["allocs"], + "", + "{:,.0f}", + better="lower", + ), + metric_row( + "Wall time", + BENCH_BEFORE["wall_s"], + BENCH_AFTER["wall_s"], + "s", + "{:.1f}", + ), + ] + ), + html.P( + "Total allocated increased because current uses more frequent smaller allocations - " + "peak (the OOM-risk metric) still decreased. This pattern indicates better memory recycling.", + style={ + "color": LIGHT_GRAY, + "fontSize": "12px", + "marginTop": "12px", + }, + ), + section( + "Latency Optimization Detail", + "Traced 9-step PIL conversion chain in the OCR path.", + ), + dash_table.DataTable( + columns=[ + {"name": "Optimization", "id": "opt"}, + {"name": "Per Page", "id": "per_page"}, + {"name": "10-Page Scan", "id": "ten_page"}, + {"name": "% of Pipeline", "id": "pct"}, + {"name": "PR", "id": "pr"}, + ], + data=[ + { + "opt": r[0], + "per_page": f"-{r[1]} ms", + "ten_page": f"-{r[2]:,} ms", + "pct": f"{r[3]}%", + "pr": r[4], + } + for r in LATENCY_OPTS + ] + + [ + { + "opt": "Combined", + "per_page": "-604 ms", + "ten_page": "-6,038 ms", + "pct": "14.4%", + "pr": "", + } + ], + **TABLE_STYLE, + ), + section( + "CI/CD Detail", + "platform-libs: 28 packages migrated from per-package toolchains to uv workspace.", + ), + card( + [ + html.Ul( + [ + html.Li( + "7-11 runners per package consolidated to 1" + ), + html.Li( + "28 independent lockfiles replaced by 1 workspace lockfile (245 packages)" + ), + html.Li( + "~1,500 lines of boilerplate deleted (23 tasks.py, 27 .python-version, 13 requirements/ dirs)" + ), + html.Li( + "messagebus test suite optimized: ~64s -> ~30s (sleep-based -> event-based)" + ), + html.Li( + [ + "2 merged PRs in github-workflows (", + html.A( + "#360", + href=f"{GITHUB_WORKFLOWS_BASE}/360", + target="_blank", + style={ + "color": BLUE, + "textDecoration": "none", + }, + ), + ", ", + html.A( + "#361", + href=f"{GITHUB_WORKFLOWS_BASE}/361", + target="_blank", + style={ + "color": BLUE, + "textDecoration": "none", + }, + ), + ") adding uv workspace support", + ] + ), + ], + style={ + "color": SLATE, + "fontSize": "14px", + "lineHeight": "2.0", + "paddingLeft": "20px", + "margin": "0", + }, + ), + ] + ), + section("Estimated Cost Impact (platform-libs)"), + card( + [ + table_header( + [ + {"label": "", "flex": True}, + { + "label": "Monthly", + "width": "140px", + "align": "right", + }, + { + "label": "Annual", + "width": "140px", + "align": "right", + }, + ] + ), + html.Div( + [ + html.Div( + "GitHub Actions billing savings", + style={ + "flex": "1", + "fontWeight": "600", + "color": SLATE, + "fontSize": "14px", + }, + ), + html.Div( + "$7", + style={ + "width": "140px", + "textAlign": "right", + "color": SLATE, + "fontSize": "14px", + "fontFamily": MONO, + }, + ), + html.Div( + "$85", + style={ + "width": "140px", + "textAlign": "right", + "color": SLATE, + "fontSize": "14px", + "fontFamily": MONO, + }, + ), + ], + style={ + "display": "flex", + "gap": "16px", + "padding": "12px 0", + "borderBottom": f"1px solid {CARD_BORDER}", + }, + ), + html.Div( + [ + html.Div( + "Engineering wait time reduced", + style={ + "flex": "1", + "fontWeight": "600", + "color": SLATE, + "fontSize": "14px", + }, + ), + html.Div( + "$5,640", + style={ + "width": "140px", + "textAlign": "right", + "color": GREEN, + "fontSize": "14px", + "fontWeight": "700", + "fontFamily": MONO, + }, + ), + html.Div( + "$67,680", + style={ + "width": "140px", + "textAlign": "right", + "color": GREEN, + "fontSize": "14px", + "fontWeight": "700", + "fontFamily": MONO, + }, + ), + ], + style={ + "display": "flex", + "gap": "16px", + "padding": "12px 0", + "borderBottom": f"1px solid {CARD_BORDER}", + }, + ), + html.P( + "Assumptions: 15 engineers, 5 CI pushes/engineer/day, $75/h loaded rate, 22 working days/month. " + "Engineering wait time is an upper-bound proxy for context-switching cost.", + style={ + "color": LIGHT_GRAY, + "fontSize": "12px", + "marginTop": "12px", + }, + ), + ] + ), + section("Security Findings"), + html.Div( + [ + html.Div( + [ + html.Div( + "Dependency Confusion Risk", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + }, + ), + html.Span( + "High", + style={ + "marginLeft": "12px", + "padding": "2px 10px", + "borderRadius": "999px", + "fontSize": "12px", + "fontWeight": "600", + "background": RED, + "color": DARK, + }, + ), + ], + style={ + "marginBottom": "12px", + "display": "flex", + "alignItems": "center", + }, + ), + html.P( + "Each of 28 platform-libs packages had its own index config pointing at the private " + "Azure DevOps feed with no explicit priority relative to PyPI. An attacker could publish " + "a malicious package with the same name as an internal package.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.P( + [ + "Fix: ", + html.Span( + "PyPI set as default, private feed set as explicit, " + "all internal packages mapped as workspace sources.", + style={"fontWeight": "600"}, + ), + ], + style={ + "color": SLATE, + "fontSize": "14px", + "marginTop": "8px", + }, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {RED}", + }, + ), + html.Div( + [ + html.Div( + [ + html.Div( + "CVE Patches Not Reaching Production", + style={ + "fontWeight": "700", + "color": SLATE, + "fontSize": "16px", + }, + ), + html.Span( + "Critical", + style={ + "marginLeft": "12px", + "padding": "2px 10px", + "borderRadius": "999px", + "fontSize": "12px", + "fontWeight": "600", + "background": RED, + "color": DARK, + }, + ), + ], + style={ + "marginBottom": "12px", + "display": "flex", + "alignItems": "center", + }, + ), + html.P( + "uv pip install in Docker builds bypassed the lockfile. Renovate CVE fix PRs were merged " + "and the lockfile updated, but production images never received the patches. " + "This also caused torch to pull CUDA variants, adding ~2.5 GB of unnecessary nvidia packages.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "margin": "0", + }, + ), + html.P( + "Unstructured processes sensitive documents for enterprise customers in regulated industries " + "(HIPAA, SOC 2, PCI-DSS). Unpatched CVEs in production are a compliance risk.", + style={ + "color": GRAY, + "fontSize": "14px", + "lineHeight": "1.6", + "marginTop": "8px", + }, + ), + html.P( + [ + "Fixed by Unstructured team: ", + html.A( + "#1465", + href=f"{CORE_PRODUCT_BASE}/1465", + target="_blank", + style={ + "color": BLUE, + "fontWeight": "600", + "textDecoration": "none", + }, + ), + html.Span( + " (uv sync --locked) and ", + style={"fontWeight": "600"}, + ), + html.A( + "#1319", + href=f"{CORE_PRODUCT_BASE}/1319", + target="_blank", + style={ + "color": BLUE, + "fontWeight": "600", + "textDecoration": "none", + }, + ), + html.Span( + " (Dockerfile layer caching).", + style={"fontWeight": "600"}, + ), + ], + style={ + "color": SLATE, + "fontSize": "14px", + "marginTop": "8px", + }, + ), + ], + style={ + **CARD, + "marginBottom": "16px", + "borderLeft": f"4px solid {RED}", + }, + ), + section("Benchmark Environment"), + dash_table.DataTable( + columns=[ + {"name": "Parameter", "id": "param"}, + {"name": "Value", "id": "value"}, + ], + data=[ + { + "param": "VM", + "value": "Azure Standard_D8s_v5 (8 vCPU, 32 GB RAM)", + }, + {"param": "OS", "value": "Ubuntu 20.04"}, + {"param": "Python", "value": "3.12"}, + { + "param": "Profiler", + "value": "memray --native (C/C++ malloc, mmap)", + }, + { + "param": "Test Runner", + "value": "memray run --native -o {out}.bin --force -m pytest -v", + }, + { + "param": "Baseline", + "value": "pre-Feb 2026 (4 OCR workers, os.cpu_count)", + }, + { + "param": "Current", + "value": "main (serial OCR, sched_getaffinity)", + }, + { + "param": "Protocol", + "value": "VM reboot + 5-min idle before each run", + }, + { + "param": "Production Target", + "value": "Knative pods, 1 CPU / 32 GB RAM -> 4 GB recommended", + }, + { + "param": "Test Scope", + "value": "18 common partition tests (od_only, hi_res, pptx, docx)", + }, + ], + **TABLE_STYLE, + ), + ], + ) + + +# ── App ────────────────────────────────────────────────────────────────────── + +app = Dash( + __name__, + meta_tags=[ + {"name": "viewport", "content": "width=device-width, initial-scale=1"}, + { + "property": "og:title", + "content": "Unstructured x Codeflash — Engagement Report", + }, + { + "property": "og:description", + "content": "Performance optimization results: 87.5% memory reduction, 14.4% latency improvement", + }, + ], + suppress_callback_exceptions=True, +) +app.title = "Unstructured x Codeflash — Engagement Report" + +app.index_string = """ + + + {%metas%} + {%title%} + + + + {%favicon%} + {%css%} + + + {%app_entry%} + + +""" + +app.layout = html.Div( + style={"background": BG, "minHeight": "100vh", "fontFamily": FONT}, + children=[ + # ── Hero ── + html.Div( + style={ + "background": f"linear-gradient(135deg, {DARK} 0%, #1c1917 50%, {DARK} 100%)", + "padding": "60px 24px 52px", + "textAlign": "center", + "borderBottom": f"1px solid {CARD_BORDER}", + }, + children=[ + html.Div( + "UNSTRUCTURED", + style={ + "fontSize": "13px", + "fontWeight": "700", + "color": ACCENT, + "letterSpacing": "0.15em", + "marginBottom": "12px", + }, + ), + html.H1( + "Codeflash Engagement Report", + style={ + "color": WHITE, + "fontSize": "36px", + "fontWeight": "800", + "margin": "0", + "letterSpacing": "-0.02em", + "fontFamily": FONT, + }, + ), + html.P( + "core-product performance optimization, CI/CD modernization, and security hardening", + style={ + "color": GRAY, + "fontSize": "17px", + "margin": "12px auto 0", + "maxWidth": "700px", + }, + ), + html.Div( + style={ + "marginTop": "24px", + "display": "flex", + "justifyContent": "center", + "gap": "24px", + "flexWrap": "wrap", + }, + children=[ + html.Span( + "March - April 2026", + style={"color": LIGHT_GRAY, "fontSize": "13px"}, + ), + html.Span("|", style={"color": LIGHT_GRAY}), + html.Span( + "12 PRs merged", + style={"color": LIGHT_GRAY, "fontSize": "13px"}, + ), + html.Span("|", style={"color": LIGHT_GRAY}), + html.Span( + "7 PRs in progress", + style={"color": LIGHT_GRAY, "fontSize": "13px"}, + ), + html.Span("|", style={"color": LIGHT_GRAY}), + html.Span( + "3 repos", + style={"color": LIGHT_GRAY, "fontSize": "13px"}, + ), + ], + ), + ], + ), + # ── Content ── + html.Div( + style={ + "maxWidth": "960px", + "margin": "0 auto", + "padding": "0 24px 80px", + }, + children=[ + # ── Hero Metrics ── + html.Div( + style={ + "display": "flex", + "gap": "20px", + "flexWrap": "wrap", + "marginTop": "-40px", + "position": "relative", + "zIndex": "1", + }, + children=[ + hero_metric( + "32 \u2192 4 GB", + "K8s Pod Memory", + "87.5% infrastructure reduction", + GREEN, + ), + hero_metric( + "-60%", + "Peak RSS", + "3,491 MB \u2192 1,398 MB post-partition", + GREEN, + ), + hero_metric( + "-14.4%", + "Latency", + "604 ms/page eliminated from OCR pipeline", + ACCENT, + ), + hero_metric( + "0", + "Regressions", + "348 tests pass, zero breakage", + ACCENT, + ), + ], + ), + # ── View Toggle ── + html.Div( + style={ + "display": "flex", + "justifyContent": "center", + "margin": "40px 0 8px", + }, + children=[ + html.Div( + style={ + "display": "inline-flex", + "background": CARD_BG, + "borderRadius": "12px", + "padding": "4px", + "border": f"1px solid {CARD_BORDER}", + }, + children=[ + html.Button( + "Executive Brief", + id="btn-exec", + n_clicks=1, + style={ + "padding": "10px 24px", + "border": "none", + "borderRadius": "8px", + "cursor": "pointer", + "fontSize": "14px", + "fontWeight": "600", + "fontFamily": FONT, + "background": ACCENT, + "color": DARK, + "transition": "all 0.2s", + }, + ), + html.Button( + "Engineering Team", + id="btn-team", + n_clicks=0, + style={ + "padding": "10px 24px", + "border": "none", + "borderRadius": "8px", + "cursor": "pointer", + "fontSize": "14px", + "fontWeight": "600", + "fontFamily": FONT, + "background": "transparent", + "color": GRAY, + "transition": "all 0.2s", + }, + ), + html.Button( + "Full Detail", + id="btn-detail", + n_clicks=0, + style={ + "padding": "10px 24px", + "border": "none", + "borderRadius": "8px", + "cursor": "pointer", + "fontSize": "14px", + "fontWeight": "600", + "fontFamily": FONT, + "background": "transparent", + "color": GRAY, + "transition": "all 0.2s", + }, + ), + ], + ), + ], + ), + # ═════════════════════════════════════════════════════════════════════ + # VIEW 1: EXECUTIVE BRIEF + # For Chris Maddock (SVP Eng) and JPC + # ═════════════════════════════════════════════════════════════════════ + build_exec_view(), + # ═════════════════════════════════════════════════════════════════════ + # VIEW 2: ENGINEERING TEAM + # For Crag's team — what changed, in plain language, with commit refs + # ═════════════════════════════════════════════════════════════════════ + build_team_view(), + # ═════════════════════════════════════════════════════════════════════ + # VIEW 3: FULL DETAIL + # Per-PR inventory, benchmarks, methodology + # ═════════════════════════════════════════════════════════════════════ + build_detail_view(), + # ── Footer (always visible) ── + html.Div( + style={ + "textAlign": "center", + "marginTop": "64px", + "paddingTop": "24px", + "borderTop": f"1px solid {CARD_BORDER}", + }, + children=[ + html.Div( + "UNSTRUCTURED", + style={ + "fontSize": "11px", + "fontWeight": "700", + "color": ACCENT, + "letterSpacing": "0.15em", + "marginBottom": "4px", + }, + ), + html.P( + "Codeflash Engagement Report — April 2026", + style={ + "color": LIGHT_GRAY, + "fontSize": "13px", + "margin": "0", + }, + ), + ], + ), + ], + ), + ], +) + + +# ── Toggle callback ── +clientside_callback( + """ + function(exec_c, team_c, detail_c) { + exec_c = exec_c || 0; + team_c = team_c || 0; + detail_c = detail_c || 0; + var base = { + "padding": "10px 24px", "border": "none", "borderRadius": "8px", + "cursor": "pointer", "fontSize": "14px", "fontWeight": "600", + "fontFamily": "'Inter', system-ui, -apple-system, sans-serif", + "transition": "all 0.2s" + }; + var active = Object.assign({}, base, {"background": "#ffd227", "color": "#09090b"}); + var inactive = Object.assign({}, base, {"background": "transparent", "color": "#a1a1aa"}); + var show = {"display": "block"}; + var hide = {"display": "none"}; + var mx = Math.max(exec_c, team_c, detail_c); + if (detail_c === mx && detail_c > 0) return [hide, hide, show, inactive, inactive, active]; + if (team_c === mx && team_c > 0) return [hide, show, hide, inactive, active, inactive]; + return [show, hide, hide, active, inactive, inactive]; + } + """, + Output("exec-view", "style"), + Output("team-view", "style"), + Output("detail-view", "style"), + Output("btn-exec", "style"), + Output("btn-team", "style"), + Output("btn-detail", "style"), + Input("btn-exec", "n_clicks"), + Input("btn-team", "n_clicks"), + Input("btn-detail", "n_clicks"), +) + +server = app.server + +if __name__ == "__main__": + app.run(debug=False, port=8050) diff --git a/reports/unstructured/pyproject.toml b/reports/unstructured/pyproject.toml new file mode 100644 index 0000000..fc9c779 --- /dev/null +++ b/reports/unstructured/pyproject.toml @@ -0,0 +1,8 @@ +[project] +name = "unstructured-report" +version = "0.1.0" +requires-python = ">=3.12" +dependencies = [ + "dash>=4.1", + "plotly>=6.7", +] diff --git a/reports/unstructured/theme.py b/reports/unstructured/theme.py new file mode 100644 index 0000000..dec94a7 --- /dev/null +++ b/reports/unstructured/theme.py @@ -0,0 +1,59 @@ +"""Theme and styling constants for the Unstructured x Codeflash engagement report.""" + +# ── Colors (Codeflash dark - amber/zinc) ──────────────────────────────────── +ACCENT = "#ffd227" +DARK = "#09090b" +CARD_BG = "#18181b" +CARD_BORDER = "#27272a" +SLATE = "#e4e4e7" +GRAY = "#a1a1aa" +LIGHT_GRAY = "#71717a" +BG = "#09090b" +WHITE = "#fafafa" +GREEN = "#4ade80" +LIGHT_GREEN = "rgba(74,222,128,0.12)" +RED = "#f87171" +LIGHT_RED = "rgba(248,113,113,0.12)" +AMBER = "#fbbf24" +BLUE = "#60a5fa" +PURPLE = "#a78bfa" +PINK = "#f472b6" + +# ── Component styles ──────────────────────────────────────────────────────── +CARD = { + "background": CARD_BG, + "borderRadius": "12px", + "padding": "28px 32px", + "border": f"1px solid {CARD_BORDER}", +} +FONT = "'Inter', system-ui, -apple-system, sans-serif" +MONO = "'JetBrains Mono', 'Menlo', monospace" + +# ── Table styles ──────────────────────────────────────────────────────────── +TABLE_STYLE = { + "style_header": { + "backgroundColor": "#0f0f12", + "color": ACCENT, + "fontWeight": "600", + "fontSize": "13px", + "padding": "12px 16px", + "borderBottom": f"1px solid {CARD_BORDER}", + }, + "style_cell": { + "textAlign": "left", + "padding": "12px 16px", + "fontSize": "13px", + "fontFamily": FONT, + "border": "none", + "color": SLATE, + }, + "style_data": {"backgroundColor": CARD_BG, "color": SLATE}, + "style_data_conditional": [ + {"if": {"row_index": "odd"}, "backgroundColor": "#1f1f23"} + ], + "style_table": { + "borderRadius": "12px", + "overflow": "hidden", + "border": f"1px solid {CARD_BORDER}", + }, +} diff --git a/scripts/claude_insights.py b/scripts/claude_insights.py index bf13bfd..2604073 100644 --- a/scripts/claude_insights.py +++ b/scripts/claude_insights.py @@ -31,14 +31,14 @@ import re import statistics import subprocess from collections import Counter, defaultdict +from collections.abc import Iterable from dataclasses import asdict, dataclass, field from datetime import datetime, timezone from functools import lru_cache from pathlib import Path -from typing import Any, Iterable +from typing import Any from uuid import UUID - EXTENSION_TO_LANGUAGE: dict[str, str] = { ".ts": "TypeScript", ".tsx": "TypeScript", @@ -142,150 +142,150 @@ AGENT_TOOL_NAMES = {"Agent", "Task"} GOAL_PATTERNS: dict[str, list[re.Pattern[str]]] = { "debug_investigate": [ - re.compile(r"\bdebug\b", re.I), - re.compile(r"\binvestigat", re.I), - re.compile(r"\btrace\b", re.I), - re.compile(r"\bwhy\b", re.I), - re.compile(r"\berror\b", re.I), - re.compile(r"\bissue\b", re.I), + re.compile(r"\bdebug\b", re.IGNORECASE), + re.compile(r"\binvestigat", re.IGNORECASE), + re.compile(r"\btrace\b", re.IGNORECASE), + re.compile(r"\bwhy\b", re.IGNORECASE), + re.compile(r"\berror\b", re.IGNORECASE), + re.compile(r"\bissue\b", re.IGNORECASE), ], "implement_feature": [ - re.compile(r"\bimplement\b", re.I), - re.compile(r"\bbuild\b", re.I), - re.compile(r"\bfeature\b", re.I), - re.compile(r"\badd\b", re.I), - re.compile(r"\bcreate\b", re.I), + re.compile(r"\bimplement\b", re.IGNORECASE), + re.compile(r"\bbuild\b", re.IGNORECASE), + re.compile(r"\bfeature\b", re.IGNORECASE), + re.compile(r"\badd\b", re.IGNORECASE), + re.compile(r"\bcreate\b", re.IGNORECASE), ], "fix_bug": [ - re.compile(r"\bfix\b", re.I), - re.compile(r"\bbug\b", re.I), - re.compile(r"\bbroken\b", re.I), - re.compile(r"\bfailing\b", re.I), + re.compile(r"\bfix\b", re.IGNORECASE), + re.compile(r"\bbug\b", re.IGNORECASE), + re.compile(r"\bbroken\b", re.IGNORECASE), + re.compile(r"\bfailing\b", re.IGNORECASE), ], "write_script_tool": [ - re.compile(r"\bscript\b", re.I), - re.compile(r"\bcli\b", re.I), - re.compile(r"\btool\b", re.I), - re.compile(r"\bautomation\b", re.I), + re.compile(r"\bscript\b", re.IGNORECASE), + re.compile(r"\bcli\b", re.IGNORECASE), + re.compile(r"\btool\b", re.IGNORECASE), + re.compile(r"\bautomation\b", re.IGNORECASE), ], "refactor_code": [ - re.compile(r"\brefactor\b", re.I), - re.compile(r"\bcleanup\b", re.I), - re.compile(r"\breorgan", re.I), - re.compile(r"\bsimplif", re.I), + re.compile(r"\brefactor\b", re.IGNORECASE), + re.compile(r"\bcleanup\b", re.IGNORECASE), + re.compile(r"\breorgan", re.IGNORECASE), + re.compile(r"\bsimplif", re.IGNORECASE), ], "configure_system": [ - re.compile(r"\bconfigure\b", re.I), - re.compile(r"\bsetup\b", re.I), - re.compile(r"\binstall\b", re.I), - re.compile(r"\bconfig\b", re.I), - re.compile(r"\benv\b", re.I), - re.compile(r"\bdocker\b", re.I), - re.compile(r"\bci\b", re.I), + re.compile(r"\bconfigure\b", re.IGNORECASE), + re.compile(r"\bsetup\b", re.IGNORECASE), + re.compile(r"\binstall\b", re.IGNORECASE), + re.compile(r"\bconfig\b", re.IGNORECASE), + re.compile(r"\benv\b", re.IGNORECASE), + re.compile(r"\bdocker\b", re.IGNORECASE), + re.compile(r"\bci\b", re.IGNORECASE), ], "create_pr_commit": [ - re.compile(r"\bcommit\b", re.I), - re.compile(r"\bpull request\b", re.I), - re.compile(r"\bpr\b", re.I), - re.compile(r"\bmerge\b", re.I), + re.compile(r"\bcommit\b", re.IGNORECASE), + re.compile(r"\bpull request\b", re.IGNORECASE), + re.compile(r"\bpr\b", re.IGNORECASE), + re.compile(r"\bmerge\b", re.IGNORECASE), ], "analyze_data": [ - re.compile(r"\banaly[sz]e\b", re.I), - re.compile(r"\bmetrics\b", re.I), - re.compile(r"\breport\b", re.I), - re.compile(r"\bdata\b", re.I), + re.compile(r"\banaly[sz]e\b", re.IGNORECASE), + re.compile(r"\bmetrics\b", re.IGNORECASE), + re.compile(r"\breport\b", re.IGNORECASE), + re.compile(r"\bdata\b", re.IGNORECASE), ], "understand_codebase": [ - re.compile(r"\bunderstand\b", re.I), - re.compile(r"\bexplain\b", re.I), - re.compile(r"\bwalk ?through\b", re.I), - re.compile(r"\bhow does\b", re.I), - re.compile(r"\bwhere is\b", re.I), + re.compile(r"\bunderstand\b", re.IGNORECASE), + re.compile(r"\bexplain\b", re.IGNORECASE), + re.compile(r"\bwalk ?through\b", re.IGNORECASE), + re.compile(r"\bhow does\b", re.IGNORECASE), + re.compile(r"\bwhere is\b", re.IGNORECASE), ], "write_tests": [ - re.compile(r"\btests?\b", re.I), - re.compile(r"\bpytest\b", re.I), - re.compile(r"\bunit test\b", re.I), - re.compile(r"\bintegration test\b", re.I), + re.compile(r"\btests?\b", re.IGNORECASE), + re.compile(r"\bpytest\b", re.IGNORECASE), + re.compile(r"\bunit test\b", re.IGNORECASE), + re.compile(r"\bintegration test\b", re.IGNORECASE), ], "write_docs": [ - re.compile(r"\breadme\b", re.I), - re.compile(r"\bdocs?\b", re.I), - re.compile(r"\bdocument", re.I), + re.compile(r"\breadme\b", re.IGNORECASE), + re.compile(r"\bdocs?\b", re.IGNORECASE), + re.compile(r"\bdocument", re.IGNORECASE), ], "deploy_infra": [ - re.compile(r"\bdeploy\b", re.I), - re.compile(r"\binfra\b", re.I), - re.compile(r"\bterraform\b", re.I), - re.compile(r"\bkubernetes\b", re.I), - re.compile(r"\bk8s\b", re.I), + re.compile(r"\bdeploy\b", re.IGNORECASE), + re.compile(r"\binfra\b", re.IGNORECASE), + re.compile(r"\bterraform\b", re.IGNORECASE), + re.compile(r"\bkubernetes\b", re.IGNORECASE), + re.compile(r"\bk8s\b", re.IGNORECASE), ], } REPEATED_INSTRUCTION_PATTERNS = [ - re.compile(r"\balways\b", re.I), - re.compile(r"\bnever\b", re.I), - re.compile(r"\bdon't\b", re.I), - re.compile(r"\bdo not\b", re.I), - re.compile(r"\bplease\b", re.I), - re.compile(r"\bmake sure\b", re.I), - re.compile(r"\buse\b", re.I), - re.compile(r"\brun\b", re.I), - re.compile(r"\bavoid\b", re.I), + re.compile(r"\balways\b", re.IGNORECASE), + re.compile(r"\bnever\b", re.IGNORECASE), + re.compile(r"\bdon't\b", re.IGNORECASE), + re.compile(r"\bdo not\b", re.IGNORECASE), + re.compile(r"\bplease\b", re.IGNORECASE), + re.compile(r"\bmake sure\b", re.IGNORECASE), + re.compile(r"\buse\b", re.IGNORECASE), + re.compile(r"\brun\b", re.IGNORECASE), + re.compile(r"\bavoid\b", re.IGNORECASE), ] POSITIVE_STRONG_PATTERNS = [ - re.compile(r"\bperfect\b", re.I), - re.compile(r"\bgreat\b", re.I), - re.compile(r"\bawesome\b", re.I), - re.compile(r"\bexcellent\b", re.I), - re.compile(r"\blove\b", re.I), - re.compile(r"\bship it\b", re.I), + re.compile(r"\bperfect\b", re.IGNORECASE), + re.compile(r"\bgreat\b", re.IGNORECASE), + re.compile(r"\bawesome\b", re.IGNORECASE), + re.compile(r"\bexcellent\b", re.IGNORECASE), + re.compile(r"\blove\b", re.IGNORECASE), + re.compile(r"\bship it\b", re.IGNORECASE), ] POSITIVE_MILD_PATTERNS = [ - re.compile(r"\bthanks\b", re.I), - re.compile(r"\bthat works\b", re.I), - re.compile(r"\bworks\b", re.I), - re.compile(r"\blooks good\b", re.I), - re.compile(r"\bsolid\b", re.I), + re.compile(r"\bthanks\b", re.IGNORECASE), + re.compile(r"\bthat works\b", re.IGNORECASE), + re.compile(r"\bworks\b", re.IGNORECASE), + re.compile(r"\blooks good\b", re.IGNORECASE), + re.compile(r"\bsolid\b", re.IGNORECASE), ] NEGATIVE_STRONG_PATTERNS = [ - re.compile(r"\bbroken\b", re.I), - re.compile(r"\bfrustrat", re.I), - re.compile(r"\bgive up\b", re.I), - re.compile(r"\buseless\b", re.I), - re.compile(r"\bterrible\b", re.I), + re.compile(r"\bbroken\b", re.IGNORECASE), + re.compile(r"\bfrustrat", re.IGNORECASE), + re.compile(r"\bgive up\b", re.IGNORECASE), + re.compile(r"\buseless\b", re.IGNORECASE), + re.compile(r"\bterrible\b", re.IGNORECASE), ] NEGATIVE_MILD_PATTERNS = [ - re.compile(r"\bnot right\b", re.I), - re.compile(r"\bwrong\b", re.I), - re.compile(r"\btry again\b", re.I), - re.compile(r"\bstill failing\b", re.I), - re.compile(r"\bdoesn't work\b", re.I), - re.compile(r"\bdoes not work\b", re.I), - re.compile(r"\bproblem\b", re.I), + re.compile(r"\bnot right\b", re.IGNORECASE), + re.compile(r"\bwrong\b", re.IGNORECASE), + re.compile(r"\btry again\b", re.IGNORECASE), + re.compile(r"\bstill failing\b", re.IGNORECASE), + re.compile(r"\bdoesn't work\b", re.IGNORECASE), + re.compile(r"\bdoes not work\b", re.IGNORECASE), + re.compile(r"\bproblem\b", re.IGNORECASE), ] CONTINUATION_PATTERNS = [ - re.compile(r"\bok\b", re.I), - re.compile(r"\bokay\b", re.I), - re.compile(r"\bnow\b", re.I), - re.compile(r"\bnext\b", re.I), - re.compile(r"\balso\b", re.I), - re.compile(r"\bthen\b", re.I), + re.compile(r"\bok\b", re.IGNORECASE), + re.compile(r"\bokay\b", re.IGNORECASE), + re.compile(r"\bnow\b", re.IGNORECASE), + re.compile(r"\bnext\b", re.IGNORECASE), + re.compile(r"\balso\b", re.IGNORECASE), + re.compile(r"\bthen\b", re.IGNORECASE), ] -PROMPT_NOISE_RE = re.compile(r"^\s*<[a-z][^>]*>", re.I) +PROMPT_NOISE_RE = re.compile(r"^\s*<[a-z][^>]*>", re.IGNORECASE) PROJECT_AREA_DESCRIPTIONS = { @@ -407,7 +407,7 @@ class SessionMeta: user_message_timestamps: list[str] @classmethod - def from_dict(cls, payload: dict[str, Any]) -> "SessionMeta": + def from_dict(cls, payload: dict[str, Any]) -> SessionMeta: return cls(**payload) @@ -427,7 +427,7 @@ class SessionFacets: user_instructions_to_claude: list[str] = field(default_factory=list) @classmethod - def from_dict(cls, payload: dict[str, Any]) -> "SessionFacets": + def from_dict(cls, payload: dict[str, Any]) -> SessionFacets: return cls(**payload) @@ -2652,9 +2652,9 @@ def generate_time_of_day_chart(hours: list[int]) -> str: "Morning (6-12)": range(6, 12), "Afternoon (12-18)": range(12, 18), "Evening (18-24)": range(18, 24), - "Night (0-6)": range(0, 6), + "Night (0-6)": range(6), } - counts = {label: 0 for label in periods} + counts = dict.fromkeys(periods, 0) for hour in hours: for label, hour_range in periods.items(): if hour in hour_range: diff --git a/scripts/codex_insights.py b/scripts/codex_insights.py index 8b75cbd..456f15e 100644 --- a/scripts/codex_insights.py +++ b/scripts/codex_insights.py @@ -32,7 +32,6 @@ from functools import lru_cache from pathlib import Path from typing import Any - LABEL_MAP: dict[str, str] = { "debug_investigate": "Debug/Investigate", "implement_feature": "Implement Feature", @@ -66,79 +65,79 @@ LABEL_MAP: dict[str, str] = { GOAL_PATTERNS: dict[str, list[re.Pattern[str]]] = { "debug_investigate": [ - re.compile(r"\bdebug\b", re.I), - re.compile(r"\binvestigat", re.I), - re.compile(r"\btrace\b", re.I), - re.compile(r"\berror\b", re.I), - re.compile(r"\bwhy\b", re.I), - re.compile(r"\bfail", re.I), + re.compile(r"\bdebug\b", re.IGNORECASE), + re.compile(r"\binvestigat", re.IGNORECASE), + re.compile(r"\btrace\b", re.IGNORECASE), + re.compile(r"\berror\b", re.IGNORECASE), + re.compile(r"\bwhy\b", re.IGNORECASE), + re.compile(r"\bfail", re.IGNORECASE), ], "implement_feature": [ - re.compile(r"\bimplement\b", re.I), - re.compile(r"\bbuild\b", re.I), - re.compile(r"\bfeature\b", re.I), - re.compile(r"\badd\b", re.I), - re.compile(r"\bcreate\b", re.I), + re.compile(r"\bimplement\b", re.IGNORECASE), + re.compile(r"\bbuild\b", re.IGNORECASE), + re.compile(r"\bfeature\b", re.IGNORECASE), + re.compile(r"\badd\b", re.IGNORECASE), + re.compile(r"\bcreate\b", re.IGNORECASE), ], "fix_bug": [ - re.compile(r"\bfix\b", re.I), - re.compile(r"\bbug\b", re.I), - re.compile(r"\bbroken\b", re.I), - re.compile(r"\bfailing\b", re.I), + re.compile(r"\bfix\b", re.IGNORECASE), + re.compile(r"\bbug\b", re.IGNORECASE), + re.compile(r"\bbroken\b", re.IGNORECASE), + re.compile(r"\bfailing\b", re.IGNORECASE), ], "write_script_tool": [ - re.compile(r"\bscript\b", re.I), - re.compile(r"\bcli\b", re.I), - re.compile(r"\btool\b", re.I), - re.compile(r"\bautomation\b", re.I), + re.compile(r"\bscript\b", re.IGNORECASE), + re.compile(r"\bcli\b", re.IGNORECASE), + re.compile(r"\btool\b", re.IGNORECASE), + re.compile(r"\bautomation\b", re.IGNORECASE), ], "refactor_code": [ - re.compile(r"\brefactor\b", re.I), - re.compile(r"\bcleanup\b", re.I), - re.compile(r"\breorgan", re.I), - re.compile(r"\bsimplif", re.I), + re.compile(r"\brefactor\b", re.IGNORECASE), + re.compile(r"\bcleanup\b", re.IGNORECASE), + re.compile(r"\breorgan", re.IGNORECASE), + re.compile(r"\bsimplif", re.IGNORECASE), ], "configure_system": [ - re.compile(r"\bconfigure\b", re.I), - re.compile(r"\bsetup\b", re.I), - re.compile(r"\binstall\b", re.I), - re.compile(r"\bconfig\b", re.I), - re.compile(r"\benv\b", re.I), - re.compile(r"\bci\b", re.I), + re.compile(r"\bconfigure\b", re.IGNORECASE), + re.compile(r"\bsetup\b", re.IGNORECASE), + re.compile(r"\binstall\b", re.IGNORECASE), + re.compile(r"\bconfig\b", re.IGNORECASE), + re.compile(r"\benv\b", re.IGNORECASE), + re.compile(r"\bci\b", re.IGNORECASE), ], "create_pr_commit": [ - re.compile(r"\bcommit\b", re.I), - re.compile(r"\bpull request\b", re.I), - re.compile(r"\bpr\b", re.I), - re.compile(r"\bmerge\b", re.I), - re.compile(r"\bbranch\b", re.I), + re.compile(r"\bcommit\b", re.IGNORECASE), + re.compile(r"\bpull request\b", re.IGNORECASE), + re.compile(r"\bpr\b", re.IGNORECASE), + re.compile(r"\bmerge\b", re.IGNORECASE), + re.compile(r"\bbranch\b", re.IGNORECASE), ], "analyze_data": [ - re.compile(r"\banaly[sz]e\b", re.I), - re.compile(r"\bmetrics\b", re.I), - re.compile(r"\breport\b", re.I), - re.compile(r"\binsights?\b", re.I), - re.compile(r"\bdata\b", re.I), + re.compile(r"\banaly[sz]e\b", re.IGNORECASE), + re.compile(r"\bmetrics\b", re.IGNORECASE), + re.compile(r"\breport\b", re.IGNORECASE), + re.compile(r"\binsights?\b", re.IGNORECASE), + re.compile(r"\bdata\b", re.IGNORECASE), ], "understand_codebase": [ - re.compile(r"\bunderstand\b", re.I), - re.compile(r"\bexplain\b", re.I), - re.compile(r"\bwalk ?through\b", re.I), - re.compile(r"\bhow does\b", re.I), - re.compile(r"\bwhere is\b", re.I), - re.compile(r"\bfind\b", re.I), + re.compile(r"\bunderstand\b", re.IGNORECASE), + re.compile(r"\bexplain\b", re.IGNORECASE), + re.compile(r"\bwalk ?through\b", re.IGNORECASE), + re.compile(r"\bhow does\b", re.IGNORECASE), + re.compile(r"\bwhere is\b", re.IGNORECASE), + re.compile(r"\bfind\b", re.IGNORECASE), ], "write_tests": [ - re.compile(r"\btests?\b", re.I), - re.compile(r"\bpytest\b", re.I), - re.compile(r"\bunit test\b", re.I), - re.compile(r"\bintegration test\b", re.I), - re.compile(r"\bbenchmark\b", re.I), + re.compile(r"\btests?\b", re.IGNORECASE), + re.compile(r"\bpytest\b", re.IGNORECASE), + re.compile(r"\bunit test\b", re.IGNORECASE), + re.compile(r"\bintegration test\b", re.IGNORECASE), + re.compile(r"\bbenchmark\b", re.IGNORECASE), ], "write_docs": [ - re.compile(r"\breadme\b", re.I), - re.compile(r"\bdocs?\b", re.I), - re.compile(r"\bdocument", re.I), + re.compile(r"\breadme\b", re.IGNORECASE), + re.compile(r"\bdocs?\b", re.IGNORECASE), + re.compile(r"\bdocument", re.IGNORECASE), ], } @@ -163,13 +162,13 @@ SHELL_TOOL_NAMES = {"exec_command", "shell", "shell_command"} TEST_COMMAND_RE = re.compile( r"\b(pytest|npm test|pnpm test|yarn test|cargo test|go test|vitest|jest|ruff|mypy|gradle test|mvn test)\b", - re.I, + re.IGNORECASE, ) -GIT_COMMIT_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+commit\b", re.I) -GIT_PUSH_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+push\b", re.I) -GH_RE = re.compile(r"(^|[;&|]\s*|\s)gh\b", re.I) +GIT_COMMIT_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+commit\b", re.IGNORECASE) +GIT_PUSH_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+push\b", re.IGNORECASE) +GH_RE = re.compile(r"(^|[;&|]\s*|\s)gh\b", re.IGNORECASE) @dataclass(frozen=True) diff --git a/scripts/gemini_insights.py b/scripts/gemini_insights.py index 536e3c0..7dbfc70 100644 --- a/scripts/gemini_insights.py +++ b/scripts/gemini_insights.py @@ -33,7 +33,6 @@ from functools import lru_cache from pathlib import Path from typing import Any - LABEL_MAP: dict[str, str] = { "debug_investigate": "Debug/Investigate", "implement_feature": "Implement Feature", @@ -75,91 +74,91 @@ LABEL_MAP: dict[str, str] = { GOAL_PATTERNS: dict[str, list[re.Pattern[str]]] = { "debug_investigate": [ - re.compile(r"\bdebug\b", re.I), - re.compile(r"\binvestigat", re.I), - re.compile(r"\btrace\b", re.I), - re.compile(r"\berror\b", re.I), - re.compile(r"\bwhy\b", re.I), - re.compile(r"\bfail", re.I), + re.compile(r"\bdebug\b", re.IGNORECASE), + re.compile(r"\binvestigat", re.IGNORECASE), + re.compile(r"\btrace\b", re.IGNORECASE), + re.compile(r"\berror\b", re.IGNORECASE), + re.compile(r"\bwhy\b", re.IGNORECASE), + re.compile(r"\bfail", re.IGNORECASE), ], "implement_feature": [ - re.compile(r"\bimplement\b", re.I), - re.compile(r"\bbuild\b", re.I), - re.compile(r"\bfeature\b", re.I), - re.compile(r"\badd\b", re.I), - re.compile(r"\bcreate\b", re.I), + re.compile(r"\bimplement\b", re.IGNORECASE), + re.compile(r"\bbuild\b", re.IGNORECASE), + re.compile(r"\bfeature\b", re.IGNORECASE), + re.compile(r"\badd\b", re.IGNORECASE), + re.compile(r"\bcreate\b", re.IGNORECASE), ], "fix_bug": [ - re.compile(r"\bfix\b", re.I), - re.compile(r"\bbug\b", re.I), - re.compile(r"\bbroken\b", re.I), - re.compile(r"\bfailing\b", re.I), + re.compile(r"\bfix\b", re.IGNORECASE), + re.compile(r"\bbug\b", re.IGNORECASE), + re.compile(r"\bbroken\b", re.IGNORECASE), + re.compile(r"\bfailing\b", re.IGNORECASE), ], "write_script_tool": [ - re.compile(r"\bscript\b", re.I), - re.compile(r"\bcli\b", re.I), - re.compile(r"\btool\b", re.I), - re.compile(r"\bautomation\b", re.I), + re.compile(r"\bscript\b", re.IGNORECASE), + re.compile(r"\bcli\b", re.IGNORECASE), + re.compile(r"\btool\b", re.IGNORECASE), + re.compile(r"\bautomation\b", re.IGNORECASE), ], "refactor_code": [ - re.compile(r"\brefactor\b", re.I), - re.compile(r"\bcleanup\b", re.I), - re.compile(r"\breorgan", re.I), - re.compile(r"\bsimplif", re.I), + re.compile(r"\brefactor\b", re.IGNORECASE), + re.compile(r"\bcleanup\b", re.IGNORECASE), + re.compile(r"\breorgan", re.IGNORECASE), + re.compile(r"\bsimplif", re.IGNORECASE), ], "configure_system": [ - re.compile(r"\bconfigure\b", re.I), - re.compile(r"\bsetup\b", re.I), - re.compile(r"\binstall\b", re.I), - re.compile(r"\bconfig\b", re.I), - re.compile(r"\benv\b", re.I), - re.compile(r"\bci\b", re.I), - re.compile(r"\bauth\b", re.I), - re.compile(r"\blogin\b", re.I), + re.compile(r"\bconfigure\b", re.IGNORECASE), + re.compile(r"\bsetup\b", re.IGNORECASE), + re.compile(r"\binstall\b", re.IGNORECASE), + re.compile(r"\bconfig\b", re.IGNORECASE), + re.compile(r"\benv\b", re.IGNORECASE), + re.compile(r"\bci\b", re.IGNORECASE), + re.compile(r"\bauth\b", re.IGNORECASE), + re.compile(r"\blogin\b", re.IGNORECASE), ], "create_pr_commit": [ - re.compile(r"\bcommit\b", re.I), - re.compile(r"\bpull request\b", re.I), - re.compile(r"\bpr\b", re.I), - re.compile(r"\bmerge\b", re.I), - re.compile(r"\bbranch\b", re.I), + re.compile(r"\bcommit\b", re.IGNORECASE), + re.compile(r"\bpull request\b", re.IGNORECASE), + re.compile(r"\bpr\b", re.IGNORECASE), + re.compile(r"\bmerge\b", re.IGNORECASE), + re.compile(r"\bbranch\b", re.IGNORECASE), ], "analyze_data": [ - re.compile(r"\banaly[sz]e\b", re.I), - re.compile(r"\bmetrics\b", re.I), - re.compile(r"\breport\b", re.I), - re.compile(r"\binsights?\b", re.I), - re.compile(r"\bdata\b", re.I), + re.compile(r"\banaly[sz]e\b", re.IGNORECASE), + re.compile(r"\bmetrics\b", re.IGNORECASE), + re.compile(r"\breport\b", re.IGNORECASE), + re.compile(r"\binsights?\b", re.IGNORECASE), + re.compile(r"\bdata\b", re.IGNORECASE), ], "understand_codebase": [ - re.compile(r"\bunderstand\b", re.I), - re.compile(r"\bexplain\b", re.I), - re.compile(r"\bwalk ?through\b", re.I), - re.compile(r"\bhow does\b", re.I), - re.compile(r"\bwhere is\b", re.I), - re.compile(r"\bfind\b", re.I), - re.compile(r"\breview\b", re.I), + re.compile(r"\bunderstand\b", re.IGNORECASE), + re.compile(r"\bexplain\b", re.IGNORECASE), + re.compile(r"\bwalk ?through\b", re.IGNORECASE), + re.compile(r"\bhow does\b", re.IGNORECASE), + re.compile(r"\bwhere is\b", re.IGNORECASE), + re.compile(r"\bfind\b", re.IGNORECASE), + re.compile(r"\breview\b", re.IGNORECASE), ], "write_tests": [ - re.compile(r"\btests?\b", re.I), - re.compile(r"\bpytest\b", re.I), - re.compile(r"\bunit test\b", re.I), - re.compile(r"\bintegration test\b", re.I), - re.compile(r"\bbenchmark\b", re.I), + re.compile(r"\btests?\b", re.IGNORECASE), + re.compile(r"\bpytest\b", re.IGNORECASE), + re.compile(r"\bunit test\b", re.IGNORECASE), + re.compile(r"\bintegration test\b", re.IGNORECASE), + re.compile(r"\bbenchmark\b", re.IGNORECASE), ], "write_docs": [ - re.compile(r"\breadme\b", re.I), - re.compile(r"\bdocs?\b", re.I), - re.compile(r"\bdocument", re.I), + re.compile(r"\breadme\b", re.IGNORECASE), + re.compile(r"\bdocs?\b", re.IGNORECASE), + re.compile(r"\bdocument", re.IGNORECASE), ], "manage_email": [ - re.compile(r"\bgmail\b", re.I), - re.compile(r"\bemail\b", re.I), - re.compile(r"\binbox\b", re.I), - re.compile(r"\bunsubscrib", re.I), - re.compile(r"\bdeclutter\b", re.I), - re.compile(r"\bdraft\b", re.I), - re.compile(r"\bdelete\b", re.I), + re.compile(r"\bgmail\b", re.IGNORECASE), + re.compile(r"\bemail\b", re.IGNORECASE), + re.compile(r"\binbox\b", re.IGNORECASE), + re.compile(r"\bunsubscrib", re.IGNORECASE), + re.compile(r"\bdeclutter\b", re.IGNORECASE), + re.compile(r"\bdraft\b", re.IGNORECASE), + re.compile(r"\bdelete\b", re.IGNORECASE), ], } @@ -177,17 +176,17 @@ FRICTION_DESCRIPTIONS: dict[str, str] = { GEMINI_GMAIL_PREFIX = "mcp_google-workspace_gmail." WORKSPACE_BOUNDARY_RE = re.compile( - r"workspace directories|project temp directory", re.I + r"workspace directories|project temp directory", re.IGNORECASE ) HASH_DIR_RE = re.compile(r"^[0-9a-f]{64}$") EXIT_CODE_RE = re.compile(r"Exit Code:\s*(-?\d+)") TEST_COMMAND_RE = re.compile( r"\b(pytest|npm test|pnpm test|yarn test|cargo test|go test|vitest|jest|ruff|mypy|gradle test|mvn test)\b", - re.I, + re.IGNORECASE, ) -GIT_COMMIT_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+commit\b", re.I) -GIT_PUSH_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+push\b", re.I) -GH_RE = re.compile(r"(^|[;&|]\s*|\s)gh\b", re.I) +GIT_COMMIT_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+commit\b", re.IGNORECASE) +GIT_PUSH_RE = re.compile(r"(^|[;&|]\s*|\s)git\s+push\b", re.IGNORECASE) +GH_RE = re.compile(r"(^|[;&|]\s*|\s)gh\b", re.IGNORECASE) @dataclass(frozen=True) diff --git a/scripts/versioning.py b/scripts/versioning.py index 7f662eb..9132a1e 100644 --- a/scripts/versioning.py +++ b/scripts/versioning.py @@ -10,7 +10,6 @@ Usage: from __future__ import annotations -import os import subprocess import sys from pathlib import Path @@ -39,7 +38,7 @@ def _write_version(pyproject_path: Path, new_version: str) -> None: def _bump_patch(version: str) -> str: """Bump the patch component: 0.1.0 -> 0.1.1, 0.1.1.dev0 -> 0.1.2.""" - base = version.split(".dev")[0] + base = version.split(".dev", maxsplit=1)[0] parts = base.split(".") parts[-1] = str(int(parts[-1]) + 1) return ".".join(parts) @@ -62,7 +61,14 @@ def _changed_packages() -> list[str]: for pkg in VERSIONED_PACKAGES: pkg_path = f"packages/{pkg}/" result = subprocess.run( - ["git", "diff", "--name-only", "origin/main..HEAD", "--", pkg_path], + [ + "git", + "diff", + "--name-only", + "origin/main..HEAD", + "--", + pkg_path, + ], capture_output=True, text=True, ) @@ -154,9 +160,7 @@ def cmd_version_dev(package: str) -> None: changelogs_dir.mkdir(exist_ok=True) safe_branch = branch.replace("_", "-").replace("/", "-") entry_path = changelogs_dir / f"{safe_branch}.md" - entry_path.write_text( - "### Enhancements\n\n### Features\n\n### Fixes\n" - ) + entry_path.write_text("### Enhancements\n\n### Features\n\n### Fixes\n") subprocess.run(["git", "add", str(entry_path)], check=True) print(f"Created changelog entry: {entry_path.relative_to(REPO_ROOT)}") diff --git a/uv.lock b/uv.lock index 7588fa1..a950316 100644 --- a/uv.lock +++ b/uv.lock @@ -21,6 +21,7 @@ members = [ "codeflash-python", "codeflash-service", "codeflash-workspace", + "unstructured-report", ] [[package]] @@ -126,6 +127,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/0d/52d98722666d6fc6c3dd4c76df339501d6efd40e0ff95e6186a7b7f0befd/black-26.3.1-py3-none-any.whl", hash = "sha256:2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b", size = 207542, upload-time = "2026-03-12T03:36:01.668Z" }, ] +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, +] + [[package]] name = "cachetools" version = "7.0.5" @@ -751,6 +761,26 @@ nvtx = [ { name = "nvidia-nvtx", marker = "sys_platform == 'linux'" }, ] +[[package]] +name = "dash" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flask" }, + { name = "importlib-metadata" }, + { name = "nest-asyncio" }, + { name = "plotly" }, + { name = "requests" }, + { name = "retrying" }, + { name = "setuptools" }, + { name = "typing-extensions" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/44/da/a13ae3a6528bd51a6901461dbff4549c6009de203d6249a89b9a09ac5cfb/dash-4.1.0.tar.gz", hash = "sha256:17a92a87b0c1eacc025079a705e44e72cd4c5794629c0a2909942b611faeb595", size = 6927689, upload-time = "2026-03-23T20:39:47.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/00/10b1f8b3885fc4add1853e9603af15c593fa0be20d37c158c4d811e868dc/dash-4.1.0-py3-none-any.whl", hash = "sha256:1af9f302bc14061061012cdb129b7e370d3604b12a7f730b252ad8e4966f01f7", size = 7232489, upload-time = "2026-03-23T20:39:40.658Z" }, +] + [[package]] name = "dill" version = "0.4.1" @@ -794,6 +824,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" }, ] +[[package]] +name = "flask" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", size = 759004, upload-time = "2026-02-19T05:00:57.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c", size = 103424, upload-time = "2026-02-19T05:00:56.027Z" }, +] + [[package]] name = "flatbuffers" version = "25.12.19" @@ -1048,6 +1095,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3e/95/c7c34aa53c16353c56d0b802fba48d5f5caa2cdee7958acbcb795c830416/isort-8.0.1-py3-none-any.whl", hash = "sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75", size = 89733, upload-time = "2026-02-28T10:08:19.466Z" }, ] +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + [[package]] name = "jax" version = "0.9.2" @@ -1648,6 +1704,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b2/bc/465daf1de06409cdd4532082806770ee0d8d7df434da79c76564d0f69741/namex-0.1.0-py3-none-any.whl", hash = "sha256:e2012a474502f1e2251267062aae3114611f07df4224b6e06334c57b0f2ce87c", size = 5905, upload-time = "2025-05-26T23:17:37.695Z" }, ] +[[package]] +name = "narwhals" +version = "2.19.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/1a/bd3317c0bdbcd9ffb710ddf5250b32898f8f2c240be99494fe137feb77a7/narwhals-2.19.0.tar.gz", hash = "sha256:14fd7040b5ff211d415a82e4827b9d04c354e213e72a6d0730205ffd72e3b7ff", size = 623698, upload-time = "2026-04-06T15:50:58.786Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl", hash = "sha256:1f8dfa4a33a6dbff878c3e9be4c3b455dfcaf2a9322f1357db00e4e92e95b84b", size = 446991, upload-time = "2026-04-06T15:50:57.046Z" }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + [[package]] name = "networkx" version = "3.6.1" @@ -2073,6 +2147,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" }, ] +[[package]] +name = "plotly" +version = "6.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "narwhals" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/7f/0f100df1172aadf88a929a9dbb902656b0880ba4b960fe5224867159d8f4/plotly-6.7.0.tar.gz", hash = "sha256:45eea0ff27e2a23ccd62776f77eb43aa1ca03df4192b76036e380bb479b892c6", size = 6911286, upload-time = "2026-04-09T20:36:45.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl", hash = "sha256:ac8aca1c25c663a59b5b9140a549264a5badde2e057d79b8c772ae2920e32ff0", size = 9898444, upload-time = "2026-04-09T20:36:39.812Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -2489,6 +2576,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1d/4a/221da6ca167db45693d8d26c7dc79ccfc978a440251bf6721c9aaf251ac0/respx-0.23.1-py2.py3-none-any.whl", hash = "sha256:b18004b029935384bccfa6d7d9d74b4ec9af73a081cc28600fffc0447f4b8c1a", size = 25557, upload-time = "2026-04-08T14:37:14.613Z" }, ] +[[package]] +name = "retrying" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/5a/b17e1e257d3e6f2e7758930e1256832c9ddd576f8631781e6a072914befa/retrying-1.4.2.tar.gz", hash = "sha256:d102e75d53d8d30b88562d45361d6c6c934da06fab31bd81c0420acb97a8ba39", size = 11411, upload-time = "2025-08-03T03:35:25.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/f3/6cd296376653270ac1b423bb30bd70942d9916b6978c6f40472d6ac038e7/retrying-1.4.2-py3-none-any.whl", hash = "sha256:bbc004aeb542a74f3569aeddf42a2516efefcdaff90df0eb38fbfbf19f179f59", size = 10859, upload-time = "2025-08-03T03:35:23.829Z" }, +] + [[package]] name = "rich" version = "14.3.3" @@ -2892,6 +2988,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/73/d21edf5b204d1467e06500080a50f79d49ef2b997c79123a536d4a17d97c/uc_micro_py-2.0.0-py3-none-any.whl", hash = "sha256:3603a3859af53e5a39bc7677713c78ea6589ff188d70f4fee165db88e22b242c", size = 6383, upload-time = "2026-03-01T06:31:26.257Z" }, ] +[[package]] +name = "unstructured-report" +version = "0.1.0" +source = { virtual = "reports/unstructured" } +dependencies = [ + { name = "dash" }, + { name = "plotly" }, +] + +[package.metadata] +requires-dist = [ + { name = "dash", specifier = ">=4.1" }, + { name = "plotly", specifier = ">=6.7" }, +] + [[package]] name = "urllib3" version = "2.6.3" @@ -3081,6 +3192,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, ] +[[package]] +name = "werkzeug" +version = "3.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/b2/381be8cfdee792dd117872481b6e378f85c957dd7c5bca38897b08f765fd/werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44", size = 875852, upload-time = "2026-04-02T18:49:14.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl", hash = "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50", size = 226459, upload-time = "2026-04-02T18:49:12.72Z" }, +] + [[package]] name = "wheel" version = "0.46.3"