vibexray 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vibexray-0.1.0/.agents/plugins/marketplace.json +11 -0
- vibexray-0.1.0/.claude-plugin/marketplace.json +12 -0
- vibexray-0.1.0/.claude-plugin/plugin.json +9 -0
- vibexray-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +70 -0
- vibexray-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- vibexray-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +27 -0
- vibexray-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +18 -0
- vibexray-0.1.0/.github/dependabot.yml +23 -0
- vibexray-0.1.0/.github/workflows/ci.yml +30 -0
- vibexray-0.1.0/.github/workflows/publish.yml +67 -0
- vibexray-0.1.0/.gitignore +20 -0
- vibexray-0.1.0/.gitleaksignore +5 -0
- vibexray-0.1.0/.pre-commit-config.yaml +21 -0
- vibexray-0.1.0/AGENTS.md +42 -0
- vibexray-0.1.0/CHANGELOG.md +20 -0
- vibexray-0.1.0/CLAUDE.md +1 -0
- vibexray-0.1.0/CODE_OF_CONDUCT.md +27 -0
- vibexray-0.1.0/CONTRIBUTING.md +29 -0
- vibexray-0.1.0/LICENSE +21 -0
- vibexray-0.1.0/Makefile +59 -0
- vibexray-0.1.0/PKG-INFO +302 -0
- vibexray-0.1.0/README.md +272 -0
- vibexray-0.1.0/SECURITY.md +18 -0
- vibexray-0.1.0/docs/benchmark.md +51 -0
- vibexray-0.1.0/docs/cli.tape +32 -0
- vibexray-0.1.0/docs/hero.tape +39 -0
- vibexray-0.1.0/docs/install-check.md +42 -0
- vibexray-0.1.0/docs/media/app.gif +0 -0
- vibexray-0.1.0/docs/media/cli.gif +0 -0
- vibexray-0.1.0/docs/media/decisions.gif +0 -0
- vibexray-0.1.0/docs/media/fake.gif +0 -0
- vibexray-0.1.0/docs/media/logo.svg +11 -0
- vibexray-0.1.0/docs/media/parts.gif +0 -0
- vibexray-0.1.0/docs/media/report.gif +0 -0
- vibexray-0.1.0/docs/media/risks.gif +0 -0
- vibexray-0.1.0/docs/results/sealed-1/claude.md +81 -0
- vibexray-0.1.0/docs/results/sealed-1/codex.md +81 -0
- vibexray-0.1.0/docs/results/sealed-1/rules.txt +1 -0
- vibexray-0.1.0/plugin.json +10 -0
- vibexray-0.1.0/pyproject.toml +74 -0
- vibexray-0.1.0/scripts/audit_precision.py +109 -0
- vibexray-0.1.0/scripts/bootstrap-demo.sh +31 -0
- vibexray-0.1.0/scripts/bundle_skill.py +34 -0
- vibexray-0.1.0/scripts/eval_review.py +457 -0
- vibexray-0.1.0/scripts/fetch_corpus.py +61 -0
- vibexray-0.1.0/scripts/merge_labels.py +65 -0
- vibexray-0.1.0/scripts/record_report.py +149 -0
- vibexray-0.1.0/scripts/score_rules.py +35 -0
- vibexray-0.1.0/scripts/unmatched_findings.py +87 -0
- vibexray-0.1.0/scripts/video_to_gif.py +128 -0
- vibexray-0.1.0/skills/vibexray/SKILL.md +156 -0
- vibexray-0.1.0/skills/vibexray/scripts/run_vibexray.py +11 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/__init__.py +3 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/__main__.py +3 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/apprun.py +273 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/apprun_boot.py +273 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/apprun_crawl.py +180 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/cli.py +172 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/history.py +213 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/model.py +162 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/parts.py +95 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/questions.py +269 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/__init__.py +36 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/assets.py +166 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/common.py +88 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/html.py +469 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/markdown.py +215 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/review.py +311 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/__init__.py +27 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/ai.py +636 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/auth.py +361 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/base.py +142 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/catalog.py +19 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/database.py +339 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/exposed_keys.py +221 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/fake_action.py +265 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/hardcoded.py +211 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/mock_data.py +288 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/security.py +442 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/util.py +324 -0
- vibexray-0.1.0/skills/vibexray/scripts/vibexray/walker.py +176 -0
- vibexray-0.1.0/src/vibexray/__init__.py +3 -0
- vibexray-0.1.0/src/vibexray/__main__.py +3 -0
- vibexray-0.1.0/src/vibexray/apprun.py +273 -0
- vibexray-0.1.0/src/vibexray/apprun_boot.py +273 -0
- vibexray-0.1.0/src/vibexray/apprun_crawl.py +180 -0
- vibexray-0.1.0/src/vibexray/cli.py +172 -0
- vibexray-0.1.0/src/vibexray/history.py +213 -0
- vibexray-0.1.0/src/vibexray/model.py +162 -0
- vibexray-0.1.0/src/vibexray/parts.py +95 -0
- vibexray-0.1.0/src/vibexray/questions.py +269 -0
- vibexray-0.1.0/src/vibexray/report/__init__.py +36 -0
- vibexray-0.1.0/src/vibexray/report/assets.py +166 -0
- vibexray-0.1.0/src/vibexray/report/common.py +88 -0
- vibexray-0.1.0/src/vibexray/report/html.py +469 -0
- vibexray-0.1.0/src/vibexray/report/markdown.py +215 -0
- vibexray-0.1.0/src/vibexray/review.py +311 -0
- vibexray-0.1.0/src/vibexray/rules/__init__.py +27 -0
- vibexray-0.1.0/src/vibexray/rules/ai.py +636 -0
- vibexray-0.1.0/src/vibexray/rules/auth.py +361 -0
- vibexray-0.1.0/src/vibexray/rules/base.py +142 -0
- vibexray-0.1.0/src/vibexray/rules/catalog.py +19 -0
- vibexray-0.1.0/src/vibexray/rules/database.py +339 -0
- vibexray-0.1.0/src/vibexray/rules/exposed_keys.py +221 -0
- vibexray-0.1.0/src/vibexray/rules/fake_action.py +265 -0
- vibexray-0.1.0/src/vibexray/rules/hardcoded.py +211 -0
- vibexray-0.1.0/src/vibexray/rules/mock_data.py +288 -0
- vibexray-0.1.0/src/vibexray/rules/security.py +442 -0
- vibexray-0.1.0/src/vibexray/rules/util.py +324 -0
- vibexray-0.1.0/src/vibexray/walker.py +176 -0
- vibexray-0.1.0/tests/conftest.py +44 -0
- vibexray-0.1.0/tests/corpus/LABELING.md +52 -0
- vibexray-0.1.0/tests/corpus/README.md +45 -0
- vibexray-0.1.0/tests/corpus/SELECTION.md +40 -0
- vibexray-0.1.0/tests/corpus/audit/AUDIT.md +36 -0
- vibexray-0.1.0/tests/corpus/audit/heldout-review-audit.json +1300 -0
- vibexray-0.1.0/tests/corpus/audit/unmatched-audit.json +632 -0
- vibexray-0.1.0/tests/corpus/audit/unmatched-audit.md +75 -0
- vibexray-0.1.0/tests/corpus/corpus.lock.json +406 -0
- vibexray-0.1.0/tests/corpus/labels/Ali1raz__teamcomms.json +530 -0
- vibexray-0.1.0/tests/corpus/labels/Allen-Saji__everdesk.json +545 -0
- vibexray-0.1.0/tests/corpus/labels/EAA-Chapter-84-Connect.json +105 -0
- vibexray-0.1.0/tests/corpus/labels/Hesper-Labs__owly.json +33 -0
- vibexray-0.1.0/tests/corpus/labels/IObert__twilio-conversations-eve-agent.json +12 -0
- vibexray-0.1.0/tests/corpus/labels/MIND-MIRROR.json +281 -0
- vibexray-0.1.0/tests/corpus/labels/OysterD3__tesboard.json +410 -0
- vibexray-0.1.0/tests/corpus/labels/R3108__Customer_Support_Agent.json +578 -0
- vibexray-0.1.0/tests/corpus/labels/RTE404__Doctor-Appointment-Agent.json +493 -0
- vibexray-0.1.0/tests/corpus/labels/SIDEYS__intelligent-bistro.json +346 -0
- vibexray-0.1.0/tests/corpus/labels/SliceIQ.json +22 -0
- vibexray-0.1.0/tests/corpus/labels/Snodrod__ai-support-agent.json +19 -0
- vibexray-0.1.0/tests/corpus/labels/SpaceSyt__watch-tracker.json +225 -0
- vibexray-0.1.0/tests/corpus/labels/afhamahmed1__ai-support-agent.json +14 -0
- vibexray-0.1.0/tests/corpus/labels/ai-customer-support-agent.json +22 -0
- vibexray-0.1.0/tests/corpus/labels/boffti__stardash.json +718 -0
- vibexray-0.1.0/tests/corpus/labels/cal-ai-clone.json +188 -0
- vibexray-0.1.0/tests/corpus/labels/gg-mo__agent-tea.json +14 -0
- vibexray-0.1.0/tests/corpus/labels/gokapso__whatsapp-support-agent.json +13 -0
- vibexray-0.1.0/tests/corpus/labels/gpt-realtime-2-customer-support-voice-agent.json +17 -0
- vibexray-0.1.0/tests/corpus/labels/harshadasari__ai-customer-support-agent.json +321 -0
- vibexray-0.1.0/tests/corpus/labels/jawwad-ali__ai-customer-support-agent.json +30 -0
- vibexray-0.1.0/tests/corpus/labels/klio-tech__customer_support_agent.json +686 -0
- vibexray-0.1.0/tests/corpus/labels/kupzed__catatz.json +422 -0
- vibexray-0.1.0/tests/corpus/labels/laughingkid-sg__sg-remote-food-order.json +16 -0
- vibexray-0.1.0/tests/corpus/labels/mentee-global__mentee.json +1690 -0
- vibexray-0.1.0/tests/corpus/labels/milk-me-not.json +79 -0
- vibexray-0.1.0/tests/corpus/labels/mj-deving__ai-support-agent.json +10 -0
- vibexray-0.1.0/tests/corpus/labels/mrnetwork0001__Nestor.json +441 -0
- vibexray-0.1.0/tests/corpus/labels/my-wealth-view.json +109 -0
- vibexray-0.1.0/tests/corpus/labels/nexora-ai.json +12 -0
- vibexray-0.1.0/tests/corpus/labels/perfectcse__refund-ai-customer-support-agent.json +425 -0
- vibexray-0.1.0/tests/corpus/labels/resolve-webmcp.json +17 -0
- vibexray-0.1.0/tests/corpus/labels/solusops__MyGPU.json +541 -0
- vibexray-0.1.0/tests/corpus/labels/suissa__redis-agents.json +16 -0
- vibexray-0.1.0/tests/corpus/labels/thesolvers005__queuezeroai.json +670 -0
- vibexray-0.1.0/tests/corpus/labels/trevhud__concier.json +581 -0
- vibexray-0.1.0/tests/corpus/labels/vintasoftware__medplum-ai-concierge.json +344 -0
- vibexray-0.1.0/tests/corpus/labels/vocal-note-keeper-ai.json +144 -0
- vibexray-0.1.0/tests/corpus/labels/workfamilai.json +274 -0
- vibexray-0.1.0/tests/corpus/labels/yana-contabila.json +181 -0
- vibexray-0.1.0/tests/corpus/labels/yedlurisrinu__reno-compass.json +486 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/Ali1raz__teamcomms.json +37 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/Allen-Saji__everdesk.json +393 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/OysterD3__tesboard.json +20 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/R3108__Customer_Support_Agent.json +29 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/RTE404__Doctor-Appointment-Agent.json +385 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/SIDEYS__intelligent-bistro.json +32 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/SpaceSyt__watch-tracker.json +190 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/boffti__stardash.json +44 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/harshadasari__ai-customer-support-agent.json +28 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/klio-tech__customer_support_agent.json +543 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/kupzed__catatz.json +373 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/mentee-global__mentee.json +1068 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/mrnetwork0001__Nestor.json +369 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/perfectcse__refund-ai-customer-support-agent.json +342 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/solusops__MyGPU.json +40 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/thesolvers005__queuezeroai.json +51 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/trevhud__concier.json +476 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/vintasoftware__medplum-ai-concierge.json +225 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/yedlurisrinu__reno-compass.json +30 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/Ali1raz__teamcomms.json +455 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/Allen-Saji__everdesk.json +45 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/OysterD3__tesboard.json +198 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/R3108__Customer_Support_Agent.json +551 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/RTE404__Doctor-Appointment-Agent.json +372 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/SIDEYS__intelligent-bistro.json +263 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/SpaceSyt__watch-tracker.json +184 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/boffti__stardash.json +1 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/harshadasari__ai-customer-support-agent.json +253 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/klio-tech__customer_support_agent.json +558 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/kupzed__catatz.json +339 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/mentee-global__mentee.json +1482 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/mrnetwork0001__Nestor.json +351 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/perfectcse__refund-ai-customer-support-agent.json +358 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/solusops__MyGPU.json +426 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/thesolvers005__queuezeroai.json +57 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/trevhud__concier.json +449 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/vintasoftware__medplum-ai-concierge.json +320 -0
- vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/yedlurisrinu__reno-compass.json +365 -0
- vibexray-0.1.0/tests/corpus/split.json +103 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/drizzle/migrations/0000_survey_responses.sql +36 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/components/CheckForUpdatesButton.tsx +49 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/integrations/supabase/previewAuthStorage.ts +88 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/lib/mcp/index.ts +35 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/pages/UserRoles.tsx +76 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/config.toml +33 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/functions/auth-email-hook/index.ts +203 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/functions/handle-email-events/index.ts +83 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/migrations/20260228011510_2e8af2f8-2ab1-4382-b8e8-c1636a06aeef.sql +234 -0
- vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/migrations/20260302234155_82a8f4f7-af24-4ddc-91e3-6e9fb9ecc700.sql +81 -0
- vibexray-0.1.0/tests/fixtures/Hesper-Labs__owly/public/widget/owly-chat.js +31 -0
- vibexray-0.1.0/tests/fixtures/MIND-MIRROR/src/data/dummyUsers.json +1 -0
- vibexray-0.1.0/tests/fixtures/MIND-MIRROR/src/libs/revenuecat.js +1 -0
- vibexray-0.1.0/tests/fixtures/MIND-MIRROR/src/pages/paywall.jsx +1 -0
- vibexray-0.1.0/tests/fixtures/SOURCES.md +198 -0
- vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/agent/react-loop.ts +237 -0
- vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/agent/tools.ts +248 -0
- vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/index.ts +53 -0
- vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/routes/auth.ts +123 -0
- vibexray-0.1.0/tests/fixtures/SliceIQ/frontend/src/components/Login.tsx +137 -0
- vibexray-0.1.0/tests/fixtures/SliceIQ/frontend/src/components/MessageBubble.tsx +72 -0
- vibexray-0.1.0/tests/fixtures/SliceIQ/frontend/src/components/Toast.tsx +51 -0
- vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/public/app.js +459 -0
- vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/src/data.ts +31 -0
- vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/src/prompt.ts +12 -0
- vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/src/tools.ts +220 -0
- vibexray-0.1.0/tests/fixtures/afhamahmed1__ai-support-agent/public/widget.js +177 -0
- vibexray-0.1.0/tests/fixtures/afhamahmed1__ai-support-agent/src/agent/llm.service.ts +104 -0
- vibexray-0.1.0/tests/fixtures/afhamahmed1__ai-support-agent/src/agent/tools.service.ts +59 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/package.json +55 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/admin/(dashboard)/layout.tsx +51 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/admin/(dashboard)/page.tsx +101 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/chat/route.ts +98 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/conversations/route.ts +33 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/orders/[id]/route.ts +29 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/tickets/route.ts +43 -0
- vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/lib/agent/tools.ts +259 -0
- vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/components/Dashboard.tsx +364 -0
- vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/components/WelcomeScreen.tsx +46 -0
- vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/pages/Index.tsx +166 -0
- vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/pages/Settings.tsx +92 -0
- vibexray-0.1.0/tests/fixtures/docs/faker-usage.js +6 -0
- vibexray-0.1.0/tests/fixtures/docs/firebase-insecure.rules +7 -0
- vibexray-0.1.0/tests/fixtures/docs/vite-env-doc.js +2 -0
- vibexray-0.1.0/tests/fixtures/gpt-realtime-2-customer-support-voice-agent/apps/web/src/components/settings/settings-form.tsx +274 -0
- vibexray-0.1.0/tests/fixtures/gpt-realtime-2-customer-support-voice-agent/services/api/app/__init__.py +0 -0
- vibexray-0.1.0/tests/fixtures/milk-me-not/capacitor.config.ts +18 -0
- vibexray-0.1.0/tests/fixtures/milk-me-not/src/components/MapboxWorldMap.tsx +21 -0
- vibexray-0.1.0/tests/fixtures/milk-me-not/src/contexts/AuthContext.tsx +21 -0
- vibexray-0.1.0/tests/fixtures/milk-me-not/src/hooks/auth/useAuthOperations.ts +61 -0
- vibexray-0.1.0/tests/fixtures/milk-me-not/src/lib/fileValidation.ts +31 -0
- vibexray-0.1.0/tests/fixtures/milk-me-not/supabase/migrations/00000000000000_baseline.sql +16 -0
- vibexray-0.1.0/tests/fixtures/milk-me-not/supabase/migrations/20260820120000_remember_product_barcodes.sql +75 -0
- vibexray-0.1.0/tests/fixtures/mj-deving__ai-support-agent/public/index.html +56 -0
- vibexray-0.1.0/tests/fixtures/my-wealth-view/src/routes/__root.tsx +160 -0
- vibexray-0.1.0/tests/fixtures/my-wealth-view/src/routes/_authenticated/transactions.tsx +1267 -0
- vibexray-0.1.0/tests/fixtures/nexora-ai/app/api/admin/tickets/[id]/route.ts +25 -0
- vibexray-0.1.0/tests/fixtures/nexora-ai/app/api/chat/route.ts +90 -0
- vibexray-0.1.0/tests/fixtures/nexora-ai/app/api/documents/route.ts +32 -0
- vibexray-0.1.0/tests/fixtures/nexora-ai/lib/ai-mock.ts +121 -0
- vibexray-0.1.0/tests/fixtures/nexora-ai/lib/ai.ts +27 -0
- vibexray-0.1.0/tests/fixtures/nexora-ai/scripts/seed.ts +13 -0
- vibexray-0.1.0/tests/fixtures/resolve-webmcp/app/workspace/page.tsx +383 -0
- vibexray-0.1.0/tests/fixtures/resolve-webmcp/lib/data.ts +20 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/package.json +28 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/public/app.js +459 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/public/index.html +59 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/agent.ts +150 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/config.ts +26 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/data.ts +161 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/errors.ts +5 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/executor.ts +75 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/prompt.ts +12 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/server.ts +88 -0
- vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/tools.ts +220 -0
- vibexray-0.1.0/tests/fixtures/review/review.json +18 -0
- vibexray-0.1.0/tests/fixtures/screens/07-chat.png +0 -0
- vibexray-0.1.0/tests/fixtures/sessions/claude/projects/-home-pm-sample-bot/cec8a86a-957f-43cf-80c2-ccb1a6b8b1a4.jsonl +16 -0
- vibexray-0.1.0/tests/fixtures/sessions/codex/sessions/2026/10/03/rollout-2026-10-03T23-55-42-01a1027a-73d9-7640-8d67-cdc711639d1d.jsonl +14 -0
- vibexray-0.1.0/tests/fixtures/sessions/codex/sessions/2026/10/03/rollout-2026-10-03T23-57-12-01a1027b-d345-7563-abb7-3b29515d01ea.jsonl +12 -0
- vibexray-0.1.0/tests/fixtures/vocal-note-keeper-ai/src/lib/summaryService.ts +152 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/src/App.tsx +92 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/src/config/production.ts +38 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/src/pages/Admin.tsx +124 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/src/pages/DemoComingSoon.tsx +253 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/supabase/config.toml +71 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/create-donation/index.ts +83 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/submit-contact-form/index.ts +339 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/submit-work-package-quote/index.ts +445 -0
- vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/subscribe-newsletter/index.ts +143 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/public/yana-local-agent/agent.mjs +31 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/src/components/AICreditsPurchase.tsx +80 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/src/components/VisualFeedback.tsx +21 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/src/pages/PlatformCosts.tsx +21 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/src/pages/StrategicAdvisor.tsx +61 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/config.toml +316 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/awaken-yana/index.ts +178 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/capture-soul-state/index.ts +166 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/consciousness-engine/index.ts +16 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/email-client/index.ts +31 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/samanta-voice-incoming/index.ts +21 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/yana-local-bridge/index.ts +134 -0
- vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/yana-local-claim/index.ts +90 -0
- vibexray-0.1.0/tests/rule_helpers.py +28 -0
- vibexray-0.1.0/tests/test_apprun_copy.py +112 -0
- vibexray-0.1.0/tests/test_apprun_corpus.py +104 -0
- vibexray-0.1.0/tests/test_apprun_sandbox.py +45 -0
- vibexray-0.1.0/tests/test_apprun_unit.py +81 -0
- vibexray-0.1.0/tests/test_cli.py +107 -0
- vibexray-0.1.0/tests/test_context_files.py +38 -0
- vibexray-0.1.0/tests/test_corpus_accuracy.py +142 -0
- vibexray-0.1.0/tests/test_history.py +248 -0
- vibexray-0.1.0/tests/test_merge_labels.py +45 -0
- vibexray-0.1.0/tests/test_no_key_leaks.py +124 -0
- vibexray-0.1.0/tests/test_packaging.py +123 -0
- vibexray-0.1.0/tests/test_questions.py +314 -0
- vibexray-0.1.0/tests/test_redact.py +32 -0
- vibexray-0.1.0/tests/test_report.py +286 -0
- vibexray-0.1.0/tests/test_report_browser.py +134 -0
- vibexray-0.1.0/tests/test_report_screens.py +98 -0
- vibexray-0.1.0/tests/test_review.py +308 -0
- vibexray-0.1.0/tests/test_rule_catalog.py +62 -0
- vibexray-0.1.0/tests/test_rules_ai.py +56 -0
- vibexray-0.1.0/tests/test_rules_audit_fixes.py +127 -0
- vibexray-0.1.0/tests/test_rules_auth.py +46 -0
- vibexray-0.1.0/tests/test_rules_database.py +40 -0
- vibexray-0.1.0/tests/test_rules_exposed_keys.py +37 -0
- vibexray-0.1.0/tests/test_rules_fake_action.py +70 -0
- vibexray-0.1.0/tests/test_rules_hardcoded.py +54 -0
- vibexray-0.1.0/tests/test_rules_mock_data.py +38 -0
- vibexray-0.1.0/tests/test_rules_precision.py +106 -0
- vibexray-0.1.0/tests/test_rules_security.py +74 -0
- vibexray-0.1.0/tests/test_walker.py +57 -0
- vibexray-0.1.0/uv.lock +229 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vibexray",
|
|
3
|
+
"description": "Marketplace for the vibexray plugin",
|
|
4
|
+
"owner": { "name": "Xavier Puspus" },
|
|
5
|
+
"plugins": [
|
|
6
|
+
{
|
|
7
|
+
"name": "vibexray",
|
|
8
|
+
"source": "./",
|
|
9
|
+
"description": "X-ray a prototype built with AI and write a PM report and an engineer handoff"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vibexray",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "X-ray a prototype built with AI: what is real, what is fake, what can break, and what the PM must decide",
|
|
5
|
+
"author": { "name": "Xavier Puspus" },
|
|
6
|
+
"repository": "https://github.com/xmpuspus/vibexray",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"keywords": ["prototype", "handoff", "vibe-coding", "product-management", "agent-skills"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a wrong finding, a crash, or a broken report
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: description
|
|
7
|
+
attributes:
|
|
8
|
+
label: What happened
|
|
9
|
+
description: Describe the problem. For a wrong finding, give the rule ID or the review entry.
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: steps
|
|
15
|
+
attributes:
|
|
16
|
+
label: Steps to repeat
|
|
17
|
+
description: The command or prompt you ran, in order.
|
|
18
|
+
placeholder: |
|
|
19
|
+
1. Run `vibexray scan ./my-prototype --no-run`
|
|
20
|
+
2. Open `vibexray-report/report.html`
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
- type: textarea
|
|
25
|
+
id: expected_actual
|
|
26
|
+
attributes:
|
|
27
|
+
label: Expected and actual result
|
|
28
|
+
description: What you expected, and what you got.
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
- type: input
|
|
33
|
+
id: version
|
|
34
|
+
attributes:
|
|
35
|
+
label: Version
|
|
36
|
+
description: Output of `vibexray --version`
|
|
37
|
+
placeholder: "vibexray 0.1.0"
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
|
|
41
|
+
- type: dropdown
|
|
42
|
+
id: host
|
|
43
|
+
attributes:
|
|
44
|
+
label: Host
|
|
45
|
+
options:
|
|
46
|
+
- Claude Code
|
|
47
|
+
- Codex
|
|
48
|
+
- Command line only
|
|
49
|
+
validations:
|
|
50
|
+
required: true
|
|
51
|
+
|
|
52
|
+
- type: dropdown
|
|
53
|
+
id: os
|
|
54
|
+
attributes:
|
|
55
|
+
label: Operating system
|
|
56
|
+
options:
|
|
57
|
+
- macOS
|
|
58
|
+
- Linux
|
|
59
|
+
- Windows
|
|
60
|
+
- Other
|
|
61
|
+
validations:
|
|
62
|
+
required: true
|
|
63
|
+
|
|
64
|
+
- type: textarea
|
|
65
|
+
id: logs
|
|
66
|
+
attributes:
|
|
67
|
+
label: Logs or screenshots
|
|
68
|
+
description: Paste the terminal output. Remove any secret before you paste.
|
|
69
|
+
validations:
|
|
70
|
+
required: false
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Suggest a new rule, a report change, or a new host
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: description
|
|
7
|
+
attributes:
|
|
8
|
+
label: What you want
|
|
9
|
+
description: Describe the feature.
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: use_case
|
|
15
|
+
attributes:
|
|
16
|
+
label: Problem it solves
|
|
17
|
+
description: What does the PM or the engineer miss today? For a new rule, link a public repo that shows the pattern.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: proposed_solution
|
|
23
|
+
attributes:
|
|
24
|
+
label: Proposed behavior
|
|
25
|
+
description: The finding, flag, or report section you have in mind.
|
|
26
|
+
validations:
|
|
27
|
+
required: false
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
<!-- What does this PR change, and why? -->
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
- [ ] <!-- one change -->
|
|
8
|
+
|
|
9
|
+
## Checks
|
|
10
|
+
|
|
11
|
+
- [ ] `make lint` passes
|
|
12
|
+
- [ ] `make test` passes
|
|
13
|
+
- [ ] `make bundle` ran after any change in `src/`
|
|
14
|
+
- [ ] A new rule has a test on real code from a public prototype repo
|
|
15
|
+
|
|
16
|
+
## Related issues
|
|
17
|
+
|
|
18
|
+
<!-- Closes #N, or N/A -->
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "pip"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
open-pull-requests-limit: 3
|
|
8
|
+
labels:
|
|
9
|
+
- "dependencies"
|
|
10
|
+
groups:
|
|
11
|
+
python-deps:
|
|
12
|
+
patterns: ["*"]
|
|
13
|
+
|
|
14
|
+
- package-ecosystem: "github-actions"
|
|
15
|
+
directory: "/"
|
|
16
|
+
schedule:
|
|
17
|
+
interval: "weekly"
|
|
18
|
+
open-pull-requests-limit: 3
|
|
19
|
+
labels:
|
|
20
|
+
- "ci"
|
|
21
|
+
groups:
|
|
22
|
+
actions:
|
|
23
|
+
patterns: ["*"]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ${{ matrix.os }}
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
15
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: astral-sh/setup-uv@v5
|
|
19
|
+
with:
|
|
20
|
+
enable-cache: true
|
|
21
|
+
cache-dependency-glob: uv.lock
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
- name: Install
|
|
24
|
+
run: uv sync --extra dev
|
|
25
|
+
- name: Ruff check
|
|
26
|
+
run: uv run ruff check .
|
|
27
|
+
- name: Ruff format check
|
|
28
|
+
run: uv run ruff format --check .
|
|
29
|
+
- name: Test
|
|
30
|
+
run: uv run pytest -q -m "not corpus and not browser"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: astral-sh/setup-uv@v5
|
|
13
|
+
with:
|
|
14
|
+
python-version: "3.12"
|
|
15
|
+
- name: Install
|
|
16
|
+
run: uv sync --extra dev
|
|
17
|
+
- name: Test
|
|
18
|
+
run: uv run pytest -q -m "not corpus and not browser"
|
|
19
|
+
- name: Build
|
|
20
|
+
run: uv build
|
|
21
|
+
- uses: actions/upload-artifact@v4
|
|
22
|
+
with:
|
|
23
|
+
name: dist
|
|
24
|
+
path: dist/
|
|
25
|
+
|
|
26
|
+
smoke:
|
|
27
|
+
name: Fresh-venv install and CLI smoke
|
|
28
|
+
needs: build
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/download-artifact@v4
|
|
32
|
+
with:
|
|
33
|
+
name: dist
|
|
34
|
+
path: dist/
|
|
35
|
+
- uses: actions/setup-python@v5
|
|
36
|
+
with:
|
|
37
|
+
python-version: "3.12"
|
|
38
|
+
- name: Install the wheel in a clean venv
|
|
39
|
+
run: |
|
|
40
|
+
python -m venv /tmp/smoke-venv
|
|
41
|
+
/tmp/smoke-venv/bin/pip install dist/*.whl
|
|
42
|
+
- name: Run every command
|
|
43
|
+
run: |
|
|
44
|
+
mkdir -p /tmp/tiny-app
|
|
45
|
+
printf 'print("hello")\n' > /tmp/tiny-app/app.py
|
|
46
|
+
/tmp/smoke-venv/bin/vibexray --version
|
|
47
|
+
/tmp/smoke-venv/bin/vibexray rules
|
|
48
|
+
/tmp/smoke-venv/bin/vibexray scan /tmp/tiny-app --out /tmp/tiny-out --no-run --no-history
|
|
49
|
+
test -f /tmp/tiny-out/report.html
|
|
50
|
+
test -f /tmp/tiny-out/handoff.md
|
|
51
|
+
test -f /tmp/tiny-out/vibexray.json
|
|
52
|
+
|
|
53
|
+
# Trusted publishing needs a PyPI publisher for this repo, workflow, and the pypi
|
|
54
|
+
# environment. Set the repo variable PYPI_TRUSTED_PUBLISHER to true after you add it.
|
|
55
|
+
publish:
|
|
56
|
+
needs: smoke
|
|
57
|
+
if: vars.PYPI_TRUSTED_PUBLISHER == 'true'
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
environment: pypi
|
|
60
|
+
permissions:
|
|
61
|
+
id-token: write
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/download-artifact@v4
|
|
64
|
+
with:
|
|
65
|
+
name: dist
|
|
66
|
+
path: dist/
|
|
67
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Fake keys that the redaction tests use as input. None is a real credential.
|
|
2
|
+
7de76c024c16121768a41dc7f7c3b5bda6d8ad8b:tests/test_no_key_leaks.py:generic-api-key:17
|
|
3
|
+
7de76c024c16121768a41dc7f7c3b5bda6d8ad8b:tests/test_no_key_leaks.py:generic-api-key:48
|
|
4
|
+
a9a89c1369867b294d34e5544e428b5720132bc4:tests/test_redact.py:generic-api-key:25
|
|
5
|
+
a9a89c1369867b294d34e5544e428b5720132bc4:tests/test_redact.py:stripe-access-token:26
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.15.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff
|
|
6
|
+
args: [--fix]
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
|
|
9
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
10
|
+
rev: v5.0.0
|
|
11
|
+
hooks:
|
|
12
|
+
- id: trailing-whitespace
|
|
13
|
+
exclude: ^tests/fixtures/
|
|
14
|
+
- id: end-of-file-fixer
|
|
15
|
+
exclude: ^tests/fixtures/
|
|
16
|
+
- id: check-yaml
|
|
17
|
+
- id: check-added-large-files
|
|
18
|
+
args: [--maxkb=2500]
|
|
19
|
+
- id: check-merge-conflict
|
|
20
|
+
- id: detect-private-key
|
|
21
|
+
exclude: ^tests/fixtures/
|
vibexray-0.1.0/AGENTS.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# vibexray repository guide
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
vibexray reads an AI-built prototype and writes a handoff. The PM reads `report.html`. The engineer and the coding agent read `handoff.md`. Tools read `vibexray.json`.
|
|
6
|
+
|
|
7
|
+
## Layout
|
|
8
|
+
|
|
9
|
+
- `src/vibexray/` holds the package. `cli.py` runs the stages in order.
|
|
10
|
+
- `src/vibexray/rules/` holds the detection rules. Each rule returns findings with a file and a line.
|
|
11
|
+
- `src/vibexray/report/` makes the HTML report, the markdown handoff, and the JSON output.
|
|
12
|
+
- `skills/vibexray/` holds the Agent Skill for Claude Code and Codex.
|
|
13
|
+
- `tests/` holds unit tests, CLI tests, corpus tests, and browser tests.
|
|
14
|
+
- `tests/corpus/` holds the pinned list of real prototype repos and their hand labels.
|
|
15
|
+
- `scripts/` holds the corpus fetch, skill bundle, and demo recording scripts.
|
|
16
|
+
- `docs/` holds the GIFs, the logo, and their recipes.
|
|
17
|
+
|
|
18
|
+
## Setup
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
uv venv && uv pip install -e ".[dev]"
|
|
22
|
+
uv run playwright install chromium
|
|
23
|
+
make corpus
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Checks
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
make lint
|
|
30
|
+
make test
|
|
31
|
+
make e2e
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Contracts
|
|
35
|
+
|
|
36
|
+
- Every finding names a file and a line from the scanned repo. A rule never guesses.
|
|
37
|
+
- Tests use real code from public prototype repos. Never write mock or made-up fixtures.
|
|
38
|
+
- The hand labels in `tests/corpus/labels/` are the answer key. Never edit a label to make a test pass.
|
|
39
|
+
- The scan runs no third-party code unless the user asks for an app run. An app run installs with `--ignore-scripts` and a clean environment.
|
|
40
|
+
- The report never shows a secret value. `rules/base.py` hides key-shaped strings.
|
|
41
|
+
- Every report section shows explicit text when it has no data. A blank panel is a bug.
|
|
42
|
+
- The skill folder carries a copy of the package. Run `make bundle` after any change in `src/`. A test fails if the copy is stale.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The project follows [Semantic Versioning](https://semver.org/).
|
|
4
|
+
|
|
5
|
+
## [0.1.0] - 2026-10-04
|
|
6
|
+
|
|
7
|
+
First release.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- The `vibexray` command line tool with the `scan`, `review`, and `rules` commands.
|
|
12
|
+
- 72 pattern rules for fake data, fake actions, open access, database rules, secrets, and AI tools.
|
|
13
|
+
- The app run. It starts the prototype in a temporary copy, visits up to 8 pages, and saves screenshots.
|
|
14
|
+
- The build-chat reader for Claude Code and Codex sessions of the scanned folder.
|
|
15
|
+
- The PM report (`report.html`), the engineer handoff (`handoff.md`), and `vibexray.json`.
|
|
16
|
+
- The AI review step. `vibexray review` keeps a host finding only if its quote is on the cited line.
|
|
17
|
+
- The Agent Skill in `skills/vibexray/`, with a bundled copy of the package and a launcher.
|
|
18
|
+
- Plugin manifests for Claude Code and Codex.
|
|
19
|
+
|
|
20
|
+
[0.1.0]: https://github.com/xmpuspus/vibexray/releases/tag/v0.1.0
|
vibexray-0.1.0/CLAUDE.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Code of conduct
|
|
2
|
+
|
|
3
|
+
## Our pledge
|
|
4
|
+
|
|
5
|
+
We want this project to be open and welcoming. We ask every participant to treat others with respect.
|
|
6
|
+
|
|
7
|
+
## Expected behavior
|
|
8
|
+
|
|
9
|
+
- Be kind and patient with other people.
|
|
10
|
+
- Accept feedback on your work in good faith.
|
|
11
|
+
- Focus on what helps the project and its users.
|
|
12
|
+
|
|
13
|
+
## Unacceptable behavior
|
|
14
|
+
|
|
15
|
+
- Harassment, insults, or personal attacks.
|
|
16
|
+
- Public or private threats.
|
|
17
|
+
- Publishing the private information of others.
|
|
18
|
+
|
|
19
|
+
## Enforcement
|
|
20
|
+
|
|
21
|
+
Maintainers remove comments, commits, and issues that break this code. They can block repeat offenders.
|
|
22
|
+
|
|
23
|
+
Report a problem by opening a private security advisory on the [GitHub repository](https://github.com/xmpuspus/vibexray/security/advisories/new). Maintainers review every report and keep the reporter private.
|
|
24
|
+
|
|
25
|
+
## Attribution
|
|
26
|
+
|
|
27
|
+
This code adapts the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/), version 2.1.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
## Set up
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
uv venv && uv pip install -e ".[dev]"
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Check your change
|
|
10
|
+
|
|
11
|
+
Run these commands before you open a pull request.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
make lint
|
|
15
|
+
make test
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Rules
|
|
19
|
+
|
|
20
|
+
- Run `make bundle` after any change in `src/`. A test fails if the bundled copy is stale.
|
|
21
|
+
- Write tests against real code from public prototype repos. Do not write made-up fixtures.
|
|
22
|
+
- Never edit a hand label in `tests/corpus/labels/` to make a test pass.
|
|
23
|
+
- Every finding must name a file and a line from the scanned repo.
|
|
24
|
+
- Write prose in short sentences. Use the active voice.
|
|
25
|
+
|
|
26
|
+
## Commits
|
|
27
|
+
|
|
28
|
+
- Write one plain sentence as the subject.
|
|
29
|
+
- Give the cause, the fix, and the proof in the body.
|
vibexray-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Xavier Puspus
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
vibexray-0.1.0/Makefile
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
.PHONY: install lint fmt test e2e browser corpus bundle check demo gif feature-gifs cli-gif clean
|
|
2
|
+
|
|
3
|
+
PY ?= uv run
|
|
4
|
+
|
|
5
|
+
install:
|
|
6
|
+
uv venv
|
|
7
|
+
uv pip install -e ".[dev]"
|
|
8
|
+
$(PY) playwright install chromium
|
|
9
|
+
|
|
10
|
+
lint:
|
|
11
|
+
$(PY) ruff check .
|
|
12
|
+
$(PY) ruff format --check .
|
|
13
|
+
|
|
14
|
+
fmt:
|
|
15
|
+
$(PY) ruff check --fix .
|
|
16
|
+
$(PY) ruff format .
|
|
17
|
+
|
|
18
|
+
test:
|
|
19
|
+
$(PY) pytest -q -m "not corpus and not browser"
|
|
20
|
+
|
|
21
|
+
corpus:
|
|
22
|
+
$(PY) python scripts/fetch_corpus.py
|
|
23
|
+
|
|
24
|
+
e2e:
|
|
25
|
+
$(PY) pytest -q -m "corpus or browser"
|
|
26
|
+
|
|
27
|
+
bundle:
|
|
28
|
+
$(PY) python scripts/bundle_skill.py
|
|
29
|
+
|
|
30
|
+
check: lint test e2e
|
|
31
|
+
claude plugin validate .
|
|
32
|
+
|
|
33
|
+
# Real recordings only. See the header of docs/hero.tape before you record.
|
|
34
|
+
demo:
|
|
35
|
+
scripts/bootstrap-demo.sh
|
|
36
|
+
vhs docs/hero.tape
|
|
37
|
+
$(PY) python scripts/video_to_gif.py tmp/hero/hero.mp4 docs/media/hero.gif --trim-tail --seconds 35 --hold 10 --width 1100
|
|
38
|
+
|
|
39
|
+
# The report GIF uses a fresh scan plus the review.json that the hero session wrote.
|
|
40
|
+
gif:
|
|
41
|
+
$(PY) vibexray scan /tmp/vibexray-demo/support-bot --out tmp/hero/report
|
|
42
|
+
$(PY) vibexray review tmp/hero/report --input /tmp/vibexray-demo/support-bot/vibexray-report/review.json
|
|
43
|
+
$(PY) python scripts/record_report.py tmp/hero/report/report.html docs/media/report.gif
|
|
44
|
+
|
|
45
|
+
# One GIF per report section, from the same report as `make gif`.
|
|
46
|
+
feature-gifs:
|
|
47
|
+
for s in decisions parts fake risks app; do \
|
|
48
|
+
$(PY) python scripts/record_report.py tmp/hero/report/report.html docs/media/$$s.gif --section $$s; \
|
|
49
|
+
done
|
|
50
|
+
|
|
51
|
+
# The command line demo scans a fresh copy of the pinned support-bot prototype.
|
|
52
|
+
cli-gif:
|
|
53
|
+
rm -rf /tmp/vibexray-demo-cli && mkdir -p /tmp/vibexray-demo-cli/support-bot tmp/cli
|
|
54
|
+
git -C .cache/corpus/ai-customer-support-agent archive HEAD | tar -x -C /tmp/vibexray-demo-cli/support-bot
|
|
55
|
+
vhs docs/cli.tape
|
|
56
|
+
$(PY) python scripts/video_to_gif.py tmp/cli/cli.mp4 docs/media/cli.gif --hold 3 --width 1100
|
|
57
|
+
|
|
58
|
+
clean:
|
|
59
|
+
rm -rf dist build .pytest_cache .ruff_cache vibexray-report tmp
|