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.
Files changed (334) hide show
  1. vibexray-0.1.0/.agents/plugins/marketplace.json +11 -0
  2. vibexray-0.1.0/.claude-plugin/marketplace.json +12 -0
  3. vibexray-0.1.0/.claude-plugin/plugin.json +9 -0
  4. vibexray-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +70 -0
  5. vibexray-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. vibexray-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +27 -0
  7. vibexray-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +18 -0
  8. vibexray-0.1.0/.github/dependabot.yml +23 -0
  9. vibexray-0.1.0/.github/workflows/ci.yml +30 -0
  10. vibexray-0.1.0/.github/workflows/publish.yml +67 -0
  11. vibexray-0.1.0/.gitignore +20 -0
  12. vibexray-0.1.0/.gitleaksignore +5 -0
  13. vibexray-0.1.0/.pre-commit-config.yaml +21 -0
  14. vibexray-0.1.0/AGENTS.md +42 -0
  15. vibexray-0.1.0/CHANGELOG.md +20 -0
  16. vibexray-0.1.0/CLAUDE.md +1 -0
  17. vibexray-0.1.0/CODE_OF_CONDUCT.md +27 -0
  18. vibexray-0.1.0/CONTRIBUTING.md +29 -0
  19. vibexray-0.1.0/LICENSE +21 -0
  20. vibexray-0.1.0/Makefile +59 -0
  21. vibexray-0.1.0/PKG-INFO +302 -0
  22. vibexray-0.1.0/README.md +272 -0
  23. vibexray-0.1.0/SECURITY.md +18 -0
  24. vibexray-0.1.0/docs/benchmark.md +51 -0
  25. vibexray-0.1.0/docs/cli.tape +32 -0
  26. vibexray-0.1.0/docs/hero.tape +39 -0
  27. vibexray-0.1.0/docs/install-check.md +42 -0
  28. vibexray-0.1.0/docs/media/app.gif +0 -0
  29. vibexray-0.1.0/docs/media/cli.gif +0 -0
  30. vibexray-0.1.0/docs/media/decisions.gif +0 -0
  31. vibexray-0.1.0/docs/media/fake.gif +0 -0
  32. vibexray-0.1.0/docs/media/logo.svg +11 -0
  33. vibexray-0.1.0/docs/media/parts.gif +0 -0
  34. vibexray-0.1.0/docs/media/report.gif +0 -0
  35. vibexray-0.1.0/docs/media/risks.gif +0 -0
  36. vibexray-0.1.0/docs/results/sealed-1/claude.md +81 -0
  37. vibexray-0.1.0/docs/results/sealed-1/codex.md +81 -0
  38. vibexray-0.1.0/docs/results/sealed-1/rules.txt +1 -0
  39. vibexray-0.1.0/plugin.json +10 -0
  40. vibexray-0.1.0/pyproject.toml +74 -0
  41. vibexray-0.1.0/scripts/audit_precision.py +109 -0
  42. vibexray-0.1.0/scripts/bootstrap-demo.sh +31 -0
  43. vibexray-0.1.0/scripts/bundle_skill.py +34 -0
  44. vibexray-0.1.0/scripts/eval_review.py +457 -0
  45. vibexray-0.1.0/scripts/fetch_corpus.py +61 -0
  46. vibexray-0.1.0/scripts/merge_labels.py +65 -0
  47. vibexray-0.1.0/scripts/record_report.py +149 -0
  48. vibexray-0.1.0/scripts/score_rules.py +35 -0
  49. vibexray-0.1.0/scripts/unmatched_findings.py +87 -0
  50. vibexray-0.1.0/scripts/video_to_gif.py +128 -0
  51. vibexray-0.1.0/skills/vibexray/SKILL.md +156 -0
  52. vibexray-0.1.0/skills/vibexray/scripts/run_vibexray.py +11 -0
  53. vibexray-0.1.0/skills/vibexray/scripts/vibexray/__init__.py +3 -0
  54. vibexray-0.1.0/skills/vibexray/scripts/vibexray/__main__.py +3 -0
  55. vibexray-0.1.0/skills/vibexray/scripts/vibexray/apprun.py +273 -0
  56. vibexray-0.1.0/skills/vibexray/scripts/vibexray/apprun_boot.py +273 -0
  57. vibexray-0.1.0/skills/vibexray/scripts/vibexray/apprun_crawl.py +180 -0
  58. vibexray-0.1.0/skills/vibexray/scripts/vibexray/cli.py +172 -0
  59. vibexray-0.1.0/skills/vibexray/scripts/vibexray/history.py +213 -0
  60. vibexray-0.1.0/skills/vibexray/scripts/vibexray/model.py +162 -0
  61. vibexray-0.1.0/skills/vibexray/scripts/vibexray/parts.py +95 -0
  62. vibexray-0.1.0/skills/vibexray/scripts/vibexray/questions.py +269 -0
  63. vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/__init__.py +36 -0
  64. vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/assets.py +166 -0
  65. vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/common.py +88 -0
  66. vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/html.py +469 -0
  67. vibexray-0.1.0/skills/vibexray/scripts/vibexray/report/markdown.py +215 -0
  68. vibexray-0.1.0/skills/vibexray/scripts/vibexray/review.py +311 -0
  69. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/__init__.py +27 -0
  70. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/ai.py +636 -0
  71. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/auth.py +361 -0
  72. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/base.py +142 -0
  73. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/catalog.py +19 -0
  74. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/database.py +339 -0
  75. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/exposed_keys.py +221 -0
  76. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/fake_action.py +265 -0
  77. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/hardcoded.py +211 -0
  78. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/mock_data.py +288 -0
  79. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/security.py +442 -0
  80. vibexray-0.1.0/skills/vibexray/scripts/vibexray/rules/util.py +324 -0
  81. vibexray-0.1.0/skills/vibexray/scripts/vibexray/walker.py +176 -0
  82. vibexray-0.1.0/src/vibexray/__init__.py +3 -0
  83. vibexray-0.1.0/src/vibexray/__main__.py +3 -0
  84. vibexray-0.1.0/src/vibexray/apprun.py +273 -0
  85. vibexray-0.1.0/src/vibexray/apprun_boot.py +273 -0
  86. vibexray-0.1.0/src/vibexray/apprun_crawl.py +180 -0
  87. vibexray-0.1.0/src/vibexray/cli.py +172 -0
  88. vibexray-0.1.0/src/vibexray/history.py +213 -0
  89. vibexray-0.1.0/src/vibexray/model.py +162 -0
  90. vibexray-0.1.0/src/vibexray/parts.py +95 -0
  91. vibexray-0.1.0/src/vibexray/questions.py +269 -0
  92. vibexray-0.1.0/src/vibexray/report/__init__.py +36 -0
  93. vibexray-0.1.0/src/vibexray/report/assets.py +166 -0
  94. vibexray-0.1.0/src/vibexray/report/common.py +88 -0
  95. vibexray-0.1.0/src/vibexray/report/html.py +469 -0
  96. vibexray-0.1.0/src/vibexray/report/markdown.py +215 -0
  97. vibexray-0.1.0/src/vibexray/review.py +311 -0
  98. vibexray-0.1.0/src/vibexray/rules/__init__.py +27 -0
  99. vibexray-0.1.0/src/vibexray/rules/ai.py +636 -0
  100. vibexray-0.1.0/src/vibexray/rules/auth.py +361 -0
  101. vibexray-0.1.0/src/vibexray/rules/base.py +142 -0
  102. vibexray-0.1.0/src/vibexray/rules/catalog.py +19 -0
  103. vibexray-0.1.0/src/vibexray/rules/database.py +339 -0
  104. vibexray-0.1.0/src/vibexray/rules/exposed_keys.py +221 -0
  105. vibexray-0.1.0/src/vibexray/rules/fake_action.py +265 -0
  106. vibexray-0.1.0/src/vibexray/rules/hardcoded.py +211 -0
  107. vibexray-0.1.0/src/vibexray/rules/mock_data.py +288 -0
  108. vibexray-0.1.0/src/vibexray/rules/security.py +442 -0
  109. vibexray-0.1.0/src/vibexray/rules/util.py +324 -0
  110. vibexray-0.1.0/src/vibexray/walker.py +176 -0
  111. vibexray-0.1.0/tests/conftest.py +44 -0
  112. vibexray-0.1.0/tests/corpus/LABELING.md +52 -0
  113. vibexray-0.1.0/tests/corpus/README.md +45 -0
  114. vibexray-0.1.0/tests/corpus/SELECTION.md +40 -0
  115. vibexray-0.1.0/tests/corpus/audit/AUDIT.md +36 -0
  116. vibexray-0.1.0/tests/corpus/audit/heldout-review-audit.json +1300 -0
  117. vibexray-0.1.0/tests/corpus/audit/unmatched-audit.json +632 -0
  118. vibexray-0.1.0/tests/corpus/audit/unmatched-audit.md +75 -0
  119. vibexray-0.1.0/tests/corpus/corpus.lock.json +406 -0
  120. vibexray-0.1.0/tests/corpus/labels/Ali1raz__teamcomms.json +530 -0
  121. vibexray-0.1.0/tests/corpus/labels/Allen-Saji__everdesk.json +545 -0
  122. vibexray-0.1.0/tests/corpus/labels/EAA-Chapter-84-Connect.json +105 -0
  123. vibexray-0.1.0/tests/corpus/labels/Hesper-Labs__owly.json +33 -0
  124. vibexray-0.1.0/tests/corpus/labels/IObert__twilio-conversations-eve-agent.json +12 -0
  125. vibexray-0.1.0/tests/corpus/labels/MIND-MIRROR.json +281 -0
  126. vibexray-0.1.0/tests/corpus/labels/OysterD3__tesboard.json +410 -0
  127. vibexray-0.1.0/tests/corpus/labels/R3108__Customer_Support_Agent.json +578 -0
  128. vibexray-0.1.0/tests/corpus/labels/RTE404__Doctor-Appointment-Agent.json +493 -0
  129. vibexray-0.1.0/tests/corpus/labels/SIDEYS__intelligent-bistro.json +346 -0
  130. vibexray-0.1.0/tests/corpus/labels/SliceIQ.json +22 -0
  131. vibexray-0.1.0/tests/corpus/labels/Snodrod__ai-support-agent.json +19 -0
  132. vibexray-0.1.0/tests/corpus/labels/SpaceSyt__watch-tracker.json +225 -0
  133. vibexray-0.1.0/tests/corpus/labels/afhamahmed1__ai-support-agent.json +14 -0
  134. vibexray-0.1.0/tests/corpus/labels/ai-customer-support-agent.json +22 -0
  135. vibexray-0.1.0/tests/corpus/labels/boffti__stardash.json +718 -0
  136. vibexray-0.1.0/tests/corpus/labels/cal-ai-clone.json +188 -0
  137. vibexray-0.1.0/tests/corpus/labels/gg-mo__agent-tea.json +14 -0
  138. vibexray-0.1.0/tests/corpus/labels/gokapso__whatsapp-support-agent.json +13 -0
  139. vibexray-0.1.0/tests/corpus/labels/gpt-realtime-2-customer-support-voice-agent.json +17 -0
  140. vibexray-0.1.0/tests/corpus/labels/harshadasari__ai-customer-support-agent.json +321 -0
  141. vibexray-0.1.0/tests/corpus/labels/jawwad-ali__ai-customer-support-agent.json +30 -0
  142. vibexray-0.1.0/tests/corpus/labels/klio-tech__customer_support_agent.json +686 -0
  143. vibexray-0.1.0/tests/corpus/labels/kupzed__catatz.json +422 -0
  144. vibexray-0.1.0/tests/corpus/labels/laughingkid-sg__sg-remote-food-order.json +16 -0
  145. vibexray-0.1.0/tests/corpus/labels/mentee-global__mentee.json +1690 -0
  146. vibexray-0.1.0/tests/corpus/labels/milk-me-not.json +79 -0
  147. vibexray-0.1.0/tests/corpus/labels/mj-deving__ai-support-agent.json +10 -0
  148. vibexray-0.1.0/tests/corpus/labels/mrnetwork0001__Nestor.json +441 -0
  149. vibexray-0.1.0/tests/corpus/labels/my-wealth-view.json +109 -0
  150. vibexray-0.1.0/tests/corpus/labels/nexora-ai.json +12 -0
  151. vibexray-0.1.0/tests/corpus/labels/perfectcse__refund-ai-customer-support-agent.json +425 -0
  152. vibexray-0.1.0/tests/corpus/labels/resolve-webmcp.json +17 -0
  153. vibexray-0.1.0/tests/corpus/labels/solusops__MyGPU.json +541 -0
  154. vibexray-0.1.0/tests/corpus/labels/suissa__redis-agents.json +16 -0
  155. vibexray-0.1.0/tests/corpus/labels/thesolvers005__queuezeroai.json +670 -0
  156. vibexray-0.1.0/tests/corpus/labels/trevhud__concier.json +581 -0
  157. vibexray-0.1.0/tests/corpus/labels/vintasoftware__medplum-ai-concierge.json +344 -0
  158. vibexray-0.1.0/tests/corpus/labels/vocal-note-keeper-ai.json +144 -0
  159. vibexray-0.1.0/tests/corpus/labels/workfamilai.json +274 -0
  160. vibexray-0.1.0/tests/corpus/labels/yana-contabila.json +181 -0
  161. vibexray-0.1.0/tests/corpus/labels/yedlurisrinu__reno-compass.json +486 -0
  162. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/Ali1raz__teamcomms.json +37 -0
  163. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/Allen-Saji__everdesk.json +393 -0
  164. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/OysterD3__tesboard.json +20 -0
  165. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/R3108__Customer_Support_Agent.json +29 -0
  166. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/RTE404__Doctor-Appointment-Agent.json +385 -0
  167. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/SIDEYS__intelligent-bistro.json +32 -0
  168. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/SpaceSyt__watch-tracker.json +190 -0
  169. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/boffti__stardash.json +44 -0
  170. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/harshadasari__ai-customer-support-agent.json +28 -0
  171. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/klio-tech__customer_support_agent.json +543 -0
  172. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/kupzed__catatz.json +373 -0
  173. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/mentee-global__mentee.json +1068 -0
  174. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/mrnetwork0001__Nestor.json +369 -0
  175. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/perfectcse__refund-ai-customer-support-agent.json +342 -0
  176. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/solusops__MyGPU.json +40 -0
  177. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/thesolvers005__queuezeroai.json +51 -0
  178. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/trevhud__concier.json +476 -0
  179. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/vintasoftware__medplum-ai-concierge.json +225 -0
  180. vibexray-0.1.0/tests/corpus/labels-raw/sealed/first/yedlurisrinu__reno-compass.json +30 -0
  181. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/Ali1raz__teamcomms.json +455 -0
  182. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/Allen-Saji__everdesk.json +45 -0
  183. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/OysterD3__tesboard.json +198 -0
  184. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/R3108__Customer_Support_Agent.json +551 -0
  185. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/RTE404__Doctor-Appointment-Agent.json +372 -0
  186. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/SIDEYS__intelligent-bistro.json +263 -0
  187. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/SpaceSyt__watch-tracker.json +184 -0
  188. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/boffti__stardash.json +1 -0
  189. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/harshadasari__ai-customer-support-agent.json +253 -0
  190. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/klio-tech__customer_support_agent.json +558 -0
  191. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/kupzed__catatz.json +339 -0
  192. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/mentee-global__mentee.json +1482 -0
  193. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/mrnetwork0001__Nestor.json +351 -0
  194. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/perfectcse__refund-ai-customer-support-agent.json +358 -0
  195. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/solusops__MyGPU.json +426 -0
  196. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/thesolvers005__queuezeroai.json +57 -0
  197. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/trevhud__concier.json +449 -0
  198. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/vintasoftware__medplum-ai-concierge.json +320 -0
  199. vibexray-0.1.0/tests/corpus/labels-raw/sealed/second/yedlurisrinu__reno-compass.json +365 -0
  200. vibexray-0.1.0/tests/corpus/split.json +103 -0
  201. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/drizzle/migrations/0000_survey_responses.sql +36 -0
  202. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/components/CheckForUpdatesButton.tsx +49 -0
  203. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/integrations/supabase/previewAuthStorage.ts +88 -0
  204. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/lib/mcp/index.ts +35 -0
  205. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/src/pages/UserRoles.tsx +76 -0
  206. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/config.toml +33 -0
  207. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/functions/auth-email-hook/index.ts +203 -0
  208. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/functions/handle-email-events/index.ts +83 -0
  209. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/migrations/20260228011510_2e8af2f8-2ab1-4382-b8e8-c1636a06aeef.sql +234 -0
  210. vibexray-0.1.0/tests/fixtures/EAA-Chapter-84-Connect/supabase/migrations/20260302234155_82a8f4f7-af24-4ddc-91e3-6e9fb9ecc700.sql +81 -0
  211. vibexray-0.1.0/tests/fixtures/Hesper-Labs__owly/public/widget/owly-chat.js +31 -0
  212. vibexray-0.1.0/tests/fixtures/MIND-MIRROR/src/data/dummyUsers.json +1 -0
  213. vibexray-0.1.0/tests/fixtures/MIND-MIRROR/src/libs/revenuecat.js +1 -0
  214. vibexray-0.1.0/tests/fixtures/MIND-MIRROR/src/pages/paywall.jsx +1 -0
  215. vibexray-0.1.0/tests/fixtures/SOURCES.md +198 -0
  216. vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/agent/react-loop.ts +237 -0
  217. vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/agent/tools.ts +248 -0
  218. vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/index.ts +53 -0
  219. vibexray-0.1.0/tests/fixtures/SliceIQ/backend/src/routes/auth.ts +123 -0
  220. vibexray-0.1.0/tests/fixtures/SliceIQ/frontend/src/components/Login.tsx +137 -0
  221. vibexray-0.1.0/tests/fixtures/SliceIQ/frontend/src/components/MessageBubble.tsx +72 -0
  222. vibexray-0.1.0/tests/fixtures/SliceIQ/frontend/src/components/Toast.tsx +51 -0
  223. vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/public/app.js +459 -0
  224. vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/src/data.ts +31 -0
  225. vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/src/prompt.ts +12 -0
  226. vibexray-0.1.0/tests/fixtures/Snodrod__ai-support-agent/src/tools.ts +220 -0
  227. vibexray-0.1.0/tests/fixtures/afhamahmed1__ai-support-agent/public/widget.js +177 -0
  228. vibexray-0.1.0/tests/fixtures/afhamahmed1__ai-support-agent/src/agent/llm.service.ts +104 -0
  229. vibexray-0.1.0/tests/fixtures/afhamahmed1__ai-support-agent/src/agent/tools.service.ts +59 -0
  230. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/package.json +55 -0
  231. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/admin/(dashboard)/layout.tsx +51 -0
  232. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/admin/(dashboard)/page.tsx +101 -0
  233. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/chat/route.ts +98 -0
  234. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/conversations/route.ts +33 -0
  235. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/orders/[id]/route.ts +29 -0
  236. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/app/api/tickets/route.ts +43 -0
  237. vibexray-0.1.0/tests/fixtures/ai-customer-support-agent/src/lib/agent/tools.ts +259 -0
  238. vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/components/Dashboard.tsx +364 -0
  239. vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/components/WelcomeScreen.tsx +46 -0
  240. vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/pages/Index.tsx +166 -0
  241. vibexray-0.1.0/tests/fixtures/cal-ai-clone/src/pages/Settings.tsx +92 -0
  242. vibexray-0.1.0/tests/fixtures/docs/faker-usage.js +6 -0
  243. vibexray-0.1.0/tests/fixtures/docs/firebase-insecure.rules +7 -0
  244. vibexray-0.1.0/tests/fixtures/docs/vite-env-doc.js +2 -0
  245. vibexray-0.1.0/tests/fixtures/gpt-realtime-2-customer-support-voice-agent/apps/web/src/components/settings/settings-form.tsx +274 -0
  246. vibexray-0.1.0/tests/fixtures/gpt-realtime-2-customer-support-voice-agent/services/api/app/__init__.py +0 -0
  247. vibexray-0.1.0/tests/fixtures/milk-me-not/capacitor.config.ts +18 -0
  248. vibexray-0.1.0/tests/fixtures/milk-me-not/src/components/MapboxWorldMap.tsx +21 -0
  249. vibexray-0.1.0/tests/fixtures/milk-me-not/src/contexts/AuthContext.tsx +21 -0
  250. vibexray-0.1.0/tests/fixtures/milk-me-not/src/hooks/auth/useAuthOperations.ts +61 -0
  251. vibexray-0.1.0/tests/fixtures/milk-me-not/src/lib/fileValidation.ts +31 -0
  252. vibexray-0.1.0/tests/fixtures/milk-me-not/supabase/migrations/00000000000000_baseline.sql +16 -0
  253. vibexray-0.1.0/tests/fixtures/milk-me-not/supabase/migrations/20260820120000_remember_product_barcodes.sql +75 -0
  254. vibexray-0.1.0/tests/fixtures/mj-deving__ai-support-agent/public/index.html +56 -0
  255. vibexray-0.1.0/tests/fixtures/my-wealth-view/src/routes/__root.tsx +160 -0
  256. vibexray-0.1.0/tests/fixtures/my-wealth-view/src/routes/_authenticated/transactions.tsx +1267 -0
  257. vibexray-0.1.0/tests/fixtures/nexora-ai/app/api/admin/tickets/[id]/route.ts +25 -0
  258. vibexray-0.1.0/tests/fixtures/nexora-ai/app/api/chat/route.ts +90 -0
  259. vibexray-0.1.0/tests/fixtures/nexora-ai/app/api/documents/route.ts +32 -0
  260. vibexray-0.1.0/tests/fixtures/nexora-ai/lib/ai-mock.ts +121 -0
  261. vibexray-0.1.0/tests/fixtures/nexora-ai/lib/ai.ts +27 -0
  262. vibexray-0.1.0/tests/fixtures/nexora-ai/scripts/seed.ts +13 -0
  263. vibexray-0.1.0/tests/fixtures/resolve-webmcp/app/workspace/page.tsx +383 -0
  264. vibexray-0.1.0/tests/fixtures/resolve-webmcp/lib/data.ts +20 -0
  265. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/package.json +28 -0
  266. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/public/app.js +459 -0
  267. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/public/index.html +59 -0
  268. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/agent.ts +150 -0
  269. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/config.ts +26 -0
  270. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/data.ts +161 -0
  271. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/errors.ts +5 -0
  272. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/executor.ts +75 -0
  273. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/prompt.ts +12 -0
  274. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/server.ts +88 -0
  275. vibexray-0.1.0/tests/fixtures/review/Snodrod__ai-support-agent/src/tools.ts +220 -0
  276. vibexray-0.1.0/tests/fixtures/review/review.json +18 -0
  277. vibexray-0.1.0/tests/fixtures/screens/07-chat.png +0 -0
  278. vibexray-0.1.0/tests/fixtures/sessions/claude/projects/-home-pm-sample-bot/cec8a86a-957f-43cf-80c2-ccb1a6b8b1a4.jsonl +16 -0
  279. 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
  280. 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
  281. vibexray-0.1.0/tests/fixtures/vocal-note-keeper-ai/src/lib/summaryService.ts +152 -0
  282. vibexray-0.1.0/tests/fixtures/workfamilai/src/App.tsx +92 -0
  283. vibexray-0.1.0/tests/fixtures/workfamilai/src/config/production.ts +38 -0
  284. vibexray-0.1.0/tests/fixtures/workfamilai/src/pages/Admin.tsx +124 -0
  285. vibexray-0.1.0/tests/fixtures/workfamilai/src/pages/DemoComingSoon.tsx +253 -0
  286. vibexray-0.1.0/tests/fixtures/workfamilai/supabase/config.toml +71 -0
  287. vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/create-donation/index.ts +83 -0
  288. vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/submit-contact-form/index.ts +339 -0
  289. vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/submit-work-package-quote/index.ts +445 -0
  290. vibexray-0.1.0/tests/fixtures/workfamilai/supabase/functions/subscribe-newsletter/index.ts +143 -0
  291. vibexray-0.1.0/tests/fixtures/yana-contabila/public/yana-local-agent/agent.mjs +31 -0
  292. vibexray-0.1.0/tests/fixtures/yana-contabila/src/components/AICreditsPurchase.tsx +80 -0
  293. vibexray-0.1.0/tests/fixtures/yana-contabila/src/components/VisualFeedback.tsx +21 -0
  294. vibexray-0.1.0/tests/fixtures/yana-contabila/src/pages/PlatformCosts.tsx +21 -0
  295. vibexray-0.1.0/tests/fixtures/yana-contabila/src/pages/StrategicAdvisor.tsx +61 -0
  296. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/config.toml +316 -0
  297. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/awaken-yana/index.ts +178 -0
  298. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/capture-soul-state/index.ts +166 -0
  299. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/consciousness-engine/index.ts +16 -0
  300. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/email-client/index.ts +31 -0
  301. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/samanta-voice-incoming/index.ts +21 -0
  302. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/yana-local-bridge/index.ts +134 -0
  303. vibexray-0.1.0/tests/fixtures/yana-contabila/supabase/functions/yana-local-claim/index.ts +90 -0
  304. vibexray-0.1.0/tests/rule_helpers.py +28 -0
  305. vibexray-0.1.0/tests/test_apprun_copy.py +112 -0
  306. vibexray-0.1.0/tests/test_apprun_corpus.py +104 -0
  307. vibexray-0.1.0/tests/test_apprun_sandbox.py +45 -0
  308. vibexray-0.1.0/tests/test_apprun_unit.py +81 -0
  309. vibexray-0.1.0/tests/test_cli.py +107 -0
  310. vibexray-0.1.0/tests/test_context_files.py +38 -0
  311. vibexray-0.1.0/tests/test_corpus_accuracy.py +142 -0
  312. vibexray-0.1.0/tests/test_history.py +248 -0
  313. vibexray-0.1.0/tests/test_merge_labels.py +45 -0
  314. vibexray-0.1.0/tests/test_no_key_leaks.py +124 -0
  315. vibexray-0.1.0/tests/test_packaging.py +123 -0
  316. vibexray-0.1.0/tests/test_questions.py +314 -0
  317. vibexray-0.1.0/tests/test_redact.py +32 -0
  318. vibexray-0.1.0/tests/test_report.py +286 -0
  319. vibexray-0.1.0/tests/test_report_browser.py +134 -0
  320. vibexray-0.1.0/tests/test_report_screens.py +98 -0
  321. vibexray-0.1.0/tests/test_review.py +308 -0
  322. vibexray-0.1.0/tests/test_rule_catalog.py +62 -0
  323. vibexray-0.1.0/tests/test_rules_ai.py +56 -0
  324. vibexray-0.1.0/tests/test_rules_audit_fixes.py +127 -0
  325. vibexray-0.1.0/tests/test_rules_auth.py +46 -0
  326. vibexray-0.1.0/tests/test_rules_database.py +40 -0
  327. vibexray-0.1.0/tests/test_rules_exposed_keys.py +37 -0
  328. vibexray-0.1.0/tests/test_rules_fake_action.py +70 -0
  329. vibexray-0.1.0/tests/test_rules_hardcoded.py +54 -0
  330. vibexray-0.1.0/tests/test_rules_mock_data.py +38 -0
  331. vibexray-0.1.0/tests/test_rules_precision.py +106 -0
  332. vibexray-0.1.0/tests/test_rules_security.py +74 -0
  333. vibexray-0.1.0/tests/test_walker.py +57 -0
  334. vibexray-0.1.0/uv.lock +229 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "vibexray",
3
+ "plugins": [
4
+ {
5
+ "name": "vibexray",
6
+ "source": { "source": "local", "path": "./" },
7
+ "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
8
+ "category": "Productivity"
9
+ }
10
+ ]
11
+ }
@@ -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,5 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security vulnerability
4
+ url: https://github.com/xmpuspus/vibexray/security/advisories/new
5
+ about: Report a vulnerability in a private advisory. Do not open a public issue.
@@ -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,20 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .venv/
7
+ venv/
8
+ .env
9
+ .pytest_cache/
10
+ .ruff_cache/
11
+ .coverage
12
+ htmlcov/
13
+ .DS_Store
14
+ .idea/
15
+ .vscode/
16
+ .claude-wt/
17
+ .claude/
18
+ .cache/
19
+ tmp/
20
+ vibexray-report/
@@ -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/
@@ -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
@@ -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.
@@ -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