@viberaven/cli 1.5.2 → 1.6.0

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.
@@ -852,3 +852,157 @@ select.sel:focus, input.sel:focus { outline: none; box-shadow: inset 0 0 0 1px #
852
852
  .fc-score { gap: 14px; }
853
853
  .fc-score-num { width: 68px; height: 68px; font-size: 22px; }
854
854
  }
855
+
856
+ /* ---------- the project canvas, as on the viberaven.dev hero: tabs in the bar, the stack as cards on a dotted
857
+ canvas that fills the window, each later step as a panel over the canvas, and the loop as a dock ---------- */
858
+ .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
859
+
860
+ /* Views in the bar. */
861
+ .top-tabs { display: flex; align-self: stretch; gap: 20px; margin-right: 10px; }
862
+ .top-tab { position: relative; display: inline-flex; align-items: center; gap: 7px; height: 100%; padding: 0 1px; border-radius: 0; font-size: 13.5px; font-weight: 500; color: var(--ink-3); transition: color 0.15s; }
863
+ .top-tab:hover:not(:disabled) { color: var(--ink); }
864
+ .top-tab[aria-current="page"] { color: var(--ink); }
865
+ .top-tab[aria-current="page"]::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1.5px; background: var(--ink); }
866
+ .top-tab:disabled { opacity: 0.4; cursor: default; }
867
+ .top-tab-count { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: rgba(255, 255, 255, 0.1); font-family: var(--mono); font-size: 11px; color: var(--ink); }
868
+
869
+ /* The dock: Scan, Fix, Re-check, Launch. */
870
+ .rail { top: auto; bottom: 18px; left: 50%; right: auto; transform: translateX(-50%); z-index: 31; padding: 4px; border-radius: 14px; border: 1px solid var(--line-2); background: rgba(18, 18, 22, 0.96); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); box-shadow: 0 20px 40px -16px rgba(0, 0, 0, 0.9); transition: left 0.45s var(--ease); }
871
+ .rail ol { display: flex; gap: 2px; }
872
+ .rail-button { position: relative; overflow: hidden; height: 40px; padding: 0 16px; border-radius: 10px; gap: 8px; }
873
+ .rail-button:hover:not(:disabled) { background: rgba(255, 255, 255, 0.05); }
874
+ .rail-mark, .is-current .rail-mark, .is-passed .rail-mark { display: inline-grid; place-items: center; width: auto; height: auto; margin: 0; border-radius: 0; background: none; box-shadow: none; color: var(--ink-3); }
875
+ .rail-mark svg { width: 15px; height: 15px; }
876
+ .is-current .rail-mark::after { display: none; }
877
+ .rail-label { font-size: 14px; font-weight: 500; color: var(--ink-2); }
878
+ .is-current .rail-button { background: rgba(255, 255, 255, 0.1); }
879
+ .is-current .rail-label, .is-current .rail-mark { color: var(--ink); }
880
+ .is-passed .rail-mark { color: var(--green); }
881
+ .is-locked .rail-button { opacity: 0.4; }
882
+ .rail-time { position: absolute; left: 10px; right: 10px; bottom: 3px; height: 2px; border-radius: 2px; background: #f7d27f; transform-origin: left; animation: rail-time 1.6s ease-in-out infinite; }
883
+ @keyframes rail-time { 0% { transform: scaleX(0); } 60% { transform: scaleX(1); opacity: 1; } 100% { transform: scaleX(1); opacity: 0; } }
884
+ .app:has(.stage.has-panel) .rail { left: calc((100% - min(560px, 46%)) / 2); }
885
+
886
+ /* The canvas fills the window under the bar. */
887
+ .app .stage { position: relative; height: calc(100vh - var(--top)); height: calc(100dvh - var(--top)); min-height: 360px; padding: 0; overflow: hidden; }
888
+ .canvas { position: absolute; inset: 0; overflow: auto; display: grid; place-items: center; padding: 48px 32px 128px; background: radial-gradient(rgba(255, 255, 255, 0.1) 1px, transparent 1.2px) 0 0 / 18px 18px, #060607; transition: right 0.45s var(--ease); }
889
+ .stage.has-panel .canvas { right: min(560px, 46%); }
890
+ .stage-alert { position: absolute; top: 14px; left: 50%; z-index: 6; transform: translateX(-50%); margin: 0; }
891
+ .app .board { width: min(1080px, 100%); margin: 0; padding: 0; border: 0; border-radius: 0; background: none; min-height: 0; }
892
+ .app .board-col { width: min(260px, 100%); }
893
+
894
+ /* Cards: mark and name, what it is in mono, a hairline, then the state with its verdict at the edge. */
895
+ .app .node, .app .board-app { display: block; width: 100%; padding: 12px 14px; border-radius: 10px; border: 1px solid var(--line-2); background: #111114; box-shadow: 0 16px 30px -18px rgba(0, 0, 0, 0.9); text-align: left; transition: border-color 0.45s var(--ease); }
896
+ .node-head { display: flex; align-items: center; gap: 9px; min-width: 0; }
897
+ .app .node-head img, .app .node-head .node-fallback { flex: none; width: 18px; height: 18px; }
898
+ .node-head .ico { display: inline-grid; color: var(--ink); }
899
+ .app .node-name { font-size: 14px; font-weight: 500; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
900
+ .node-detail, .app .board-app-name { display: block; margin: 4px 0 0 27px; font-family: var(--mono); font-size: 11px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
901
+ .app .node-state { display: flex; align-items: center; gap: 8px; margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--line); font-size: 12.5px; color: var(--ink-2); }
902
+ .node-text { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
903
+ .node-verdict { flex: none; font-family: var(--mono); font-size: 10.5px; color: var(--ink-3); }
904
+ .node.is-pass .node-verdict { color: var(--green); }
905
+ .node.is-warn .node-verdict { color: var(--warn); }
906
+ .node.is-fail .node-verdict { color: var(--red); }
907
+ .app .node.is-pass .node-state, .app .node.is-warn .node-state, .app .node.is-fail .node-state { color: var(--ink-2); }
908
+ .app .board-app { padding: 14px 16px; }
909
+ .app .board-status { margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--line); }
910
+ .app .board-status strong { font-size: 18px; font-weight: 500; letter-spacing: -0.02em; }
911
+ .app .board-checks { margin-top: 10px; padding: 0; border-top: 0; gap: 5px; }
912
+ .app .board-checks li { font-size: 12px; color: var(--ink-2); }
913
+ .canvas-note { font-size: 12.5px; color: var(--ink-3); text-align: center; }
914
+ .stage-body.step-app { position: absolute; left: 0; right: 0; bottom: 78px; z-index: 2; max-width: none; margin: 0; pointer-events: none; }
915
+
916
+ /* Every later step: a panel over the canvas. */
917
+ .stage-body.panel { position: absolute; top: 14px; right: 14px; bottom: 14px; z-index: 5; width: calc(min(560px, 46%) - 28px); max-width: none; margin: 0; overflow: auto; padding: 20px 24px 32px; border-radius: 16px; border: 1px solid var(--line-2); background: rgba(10, 10, 12, 0.97); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.9); animation: panel-in 0.45s var(--ease) both; }
918
+ @keyframes panel-in { from { transform: translateX(28px); opacity: 0; } }
919
+ .panel-close { display: inline-flex; align-items: center; gap: 6px; height: 30px; margin-bottom: 18px; padding: 0 12px; font-size: 13px; }
920
+ .panel h1 { font-size: 26px; max-width: none; letter-spacing: -0.03em; }
921
+ .panel .stage-sub { font-size: 15px; }
922
+ .panel .primary-row { margin-top: 24px; }
923
+ .panel .findings { margin-top: 22px; }
924
+ .panel .finding, .panel .finding.is-static { grid-template-columns: minmax(0, 1fr) 16px; gap: 6px 12px; padding: 13px 16px; }
925
+ .panel .finding .sev { grid-column: 1; grid-row: 1; }
926
+ .panel .finding .finding-title { grid-column: 1; grid-row: 2; white-space: normal; }
927
+ .panel .finding .where, .panel .finding .finding-tag { grid-column: 1; grid-row: 3; }
928
+ .panel .finding > .ico { grid-column: 2; grid-row: 1 / span 3; align-self: center; }
929
+ .panel .ready-grid { grid-template-columns: minmax(0, 1fr); }
930
+ .panel .strip { margin-top: 18px; }
931
+
932
+ @media (max-width: 1100px) {
933
+ .top-tab-count { display: none; }
934
+ }
935
+ @media (max-width: 900px) {
936
+ .stage.has-panel .canvas { right: 0; }
937
+ .stage-body.panel { left: 10px; right: 10px; top: 10px; bottom: 76px; width: auto; }
938
+ .app:has(.stage.has-panel) .rail { left: 50%; }
939
+ #tab-terminal, #tab-releases { display: none; }
940
+ }
941
+ @media (max-width: 640px) {
942
+ .top { gap: 10px; padding: 0 14px; }
943
+ .top-project strong { max-width: 30vw; }
944
+ .top-tabs { gap: 14px; margin-right: 0; }
945
+ .rail { left: 10px; right: 10px; transform: none; }
946
+ .app:has(.stage.has-panel) .rail { left: 10px; }
947
+ .rail ol { justify-content: space-between; }
948
+ .rail-button { padding: 0 10px; gap: 6px; }
949
+ .rail-label { font-size: 13px; }
950
+ .canvas { place-items: start center; padding: 20px 14px 140px; }
951
+ .stage-body.step-app { bottom: 72px; }
952
+ .stage-body.panel { padding: 16px 16px 24px; }
953
+ }
954
+ @media (prefers-reduced-motion: reduce) {
955
+ .stage-body.panel, .rail-time { animation: none; }
956
+ .canvas, .rail { transition: none; }
957
+ }
958
+ .app .node.is-focus { border-color: #f5f5f7; box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.12), 0 16px 30px -18px rgba(0, 0, 0, 0.9); }
959
+
960
+ /* The board sizes to the canvas, not the window: with a panel open, the space left of it decides the layout. */
961
+ .canvas { container-type: inline-size; }
962
+ @container (max-width: 820px) {
963
+ .app .board { width: min(600px, 100%); }
964
+ .app .board-col { width: 100%; }
965
+ }
966
+ @container (min-width: 560px) and (max-width: 820px) {
967
+ .board.is-side { grid-template-columns: minmax(200px, 250px) minmax(200px, 250px); grid-template-areas: "app right"; column-gap: clamp(40px, 8cqi, 72px); align-items: center; }
968
+ .board.is-side .board-lines { display: block; }
969
+ .app .board.is-side { width: auto; }
970
+ }
971
+
972
+ /* A movable canvas: drag the ground to pan, drag a card to move it, zoom from the tools. */
973
+ .canvas { overflow: hidden; cursor: grab; touch-action: none; -webkit-user-select: none; user-select: none; }
974
+ .canvas.is-dragging { cursor: grabbing; }
975
+ .app .board { transform-origin: 50% 50%; will-change: transform; }
976
+ .app .node, .app .board-app { position: relative; cursor: grab; }
977
+ .canvas.is-dragging .node, .canvas.is-dragging .board-app { cursor: grabbing; }
978
+ .app .node.is-lifted, .app .board-app.is-lifted { z-index: 3; border-color: rgba(255, 255, 255, 0.5); box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.08), 0 30px 50px -20px rgba(0, 0, 0, 0.95); }
979
+ .canvas.is-dragging .board-lines .pulse { animation: none; opacity: 0; }
980
+ .canvas-tools { position: absolute; left: 14px; top: 14px; z-index: 4; display: grid; gap: 2px; padding: 4px; border-radius: 10px; border: 1px solid var(--line); background: rgba(17, 17, 20, 0.92); cursor: default; }
981
+ .canvas-tool { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 7px; color: var(--ink-3); transition: background 0.15s, color 0.15s; }
982
+ .canvas-tool:hover { background: rgba(255, 255, 255, 0.08); color: var(--ink); }
983
+ .canvas-tool.is-reset { display: none; }
984
+ .canvas.is-moved .canvas-tool.is-reset { display: grid; }
985
+ @media (max-width: 640px) {
986
+ .canvas-tools { top: 10px; left: 10px; }
987
+ }
988
+
989
+ /* Checks on every pull request: a button in the canvas corner and a card that says what it writes. */
990
+ .pr-checks { position: absolute; right: 14px; top: 14px; z-index: 4; display: grid; justify-items: end; gap: 8px; cursor: default; }
991
+ .pr-checks-button { display: inline-flex; align-items: center; gap: 8px; height: 34px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--line-2); background: rgba(17, 17, 20, 0.94); font-size: 13px; font-weight: 500; color: var(--ink); transition: background 0.15s, border-color 0.15s; }
992
+ .pr-checks-button:hover { background: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.4); }
993
+ .pr-checks-button[aria-expanded="true"] { background: #f5f5f7; border-color: #f5f5f7; color: #0a0a0b; }
994
+ .pr-checks-button.is-on { color: var(--ink-2); }
995
+ .pr-checks-button.is-on .ico { color: var(--green); }
996
+ .pr-card { width: min(340px, calc(100vw - 48px)); display: grid; gap: 10px; padding: 16px; border-radius: 14px; border: 1px solid var(--line-2); background: rgba(12, 12, 14, 0.98); box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.9); animation: settle 0.3s var(--ease) both; }
997
+ .pr-card h3 { font-size: 15px; font-weight: 500; letter-spacing: -0.01em; }
998
+ .pr-card p { font-size: 13px; line-height: 1.5; color: var(--ink-2); }
999
+ .pr-card code { font-family: var(--mono); font-size: 12px; color: var(--ink); }
1000
+ .pr-points { display: grid; gap: 6px; padding-left: 16px; font-size: 12.5px; line-height: 1.45; color: var(--ink-3); }
1001
+ .pr-command { margin: 0; padding: 10px 12px; border-radius: 9px; background: #060607; box-shadow: inset 0 0 0 1px var(--line); font-family: var(--mono); font-size: 11.5px; line-height: 1.5; color: var(--ink); white-space: pre-wrap; word-break: break-all; }
1002
+ .pr-muted { color: var(--ink-3) !important; }
1003
+ .pr-error { color: var(--red-ink) !important; }
1004
+ .pr-actions { display: flex; gap: 8px; flex-wrap: wrap; }
1005
+ @media (max-width: 640px) {
1006
+ .pr-checks { top: 10px; right: 10px; }
1007
+ .pr-checks-button { height: 32px; padding: 0 12px; font-size: 12.5px; }
1008
+ }
package/package.json CHANGED
@@ -1,84 +1,84 @@
1
- {
2
- "name": "@viberaven/cli",
3
- "version": "1.5.2",
4
- "description": "Local Studio cockpit for AI-built apps: agentic chat, provider context, release review, diffs, and approval-controlled repo work.",
5
- "license": "MIT",
6
- "author": "VibeRaven",
7
- "homepage": "https://viberaven.dev",
8
- "bugs": {
9
- "url": "https://github.com/ohad6k/VibeRaven/issues"
10
- },
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/ohad6k/VibeRaven.git",
14
- "directory": "packages/cli"
15
- },
16
- "keywords": [
17
- "viberaven",
18
- "launch-readiness",
19
- "production-readiness",
20
- "launch-gaps",
21
- "ai-built-apps",
22
- "agent-mode",
23
- "mcp",
24
- "claude-code",
25
- "codex",
26
- "cursor",
27
- "ai",
28
- "production",
29
- "supabase",
30
- "vercel",
31
- "stripe"
32
- ],
33
- "publishConfig": {
34
- "access": "public",
35
- "tag": "latest"
36
- },
37
- "bin": {
38
- "viberaven": "dist/cli.js"
39
- },
40
- "files": [
41
- "dist",
42
- "playbooks",
43
- "AGENTS.md",
44
- "SECURITY.md",
45
- "templates",
46
- "schemas"
47
- ],
48
- "scripts": {
49
- "sync-report-assets": "node scripts/sync-report-assets.mjs",
50
- "build": "node scripts/build.mjs",
51
- "dev": "node scripts/build.mjs && node dist/cli.js",
52
- "typecheck": "tsc -p tsconfig.json",
53
- "demo-report": "node scripts/demo-report.mjs --open",
54
- "verify:release:smoke": "npm run build && node scripts/verify-beta-flow.mjs --smoke",
55
- "verify:release:live": "npm run build && node scripts/verify-beta-flow.mjs --live",
56
- "test": "vitest run",
57
- "prepublishOnly": "npm run sync-report-assets && npm run check:agent-discovery && npm run typecheck && npm run test && npm run build",
58
- "check:agent-discovery": "node scripts/check-agent-discovery.mjs",
59
- "viberaven:gate": "npx -y viberaven --agent-mode",
60
- "viberaven:verify": "npx -y viberaven --verify",
61
- "viberaven:strict": "npx -y viberaven --strict"
62
- },
63
- "engines": {
64
- "node": ">=20"
65
- },
66
- "dependencies": {
67
- "@clack/prompts": "^0.10.1",
68
- "picocolors": "^1.1.1"
69
- },
70
- "peerDependencies": {
71
- "@electric-sql/pglite": ">=0.5.8 <0.6.0"
72
- },
73
- "peerDependenciesMeta": {
74
- "@electric-sql/pglite": {
75
- "optional": true
76
- }
77
- },
78
- "devDependencies": {
79
- "@electric-sql/pglite": "0.5.8",
80
- "esbuild": "^0.25.0",
81
- "typescript": "^5.8.0",
82
- "vitest": "^3.2.0"
83
- }
84
- }
1
+ {
2
+ "name": "@viberaven/cli",
3
+ "version": "1.6.0",
4
+ "description": "Local Studio cockpit for AI-built apps: agentic chat, provider context, release review, diffs, and approval-controlled repo work.",
5
+ "license": "MIT",
6
+ "author": "VibeRaven",
7
+ "homepage": "https://viberaven.dev",
8
+ "bugs": {
9
+ "url": "https://github.com/ohad6k/VibeRaven/issues"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/ohad6k/VibeRaven.git",
14
+ "directory": "packages/cli"
15
+ },
16
+ "keywords": [
17
+ "viberaven",
18
+ "launch-readiness",
19
+ "production-readiness",
20
+ "launch-gaps",
21
+ "ai-built-apps",
22
+ "agent-mode",
23
+ "mcp",
24
+ "claude-code",
25
+ "codex",
26
+ "cursor",
27
+ "ai",
28
+ "production",
29
+ "supabase",
30
+ "vercel",
31
+ "stripe"
32
+ ],
33
+ "publishConfig": {
34
+ "access": "public",
35
+ "tag": "latest"
36
+ },
37
+ "bin": {
38
+ "viberaven": "dist/cli.js"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "playbooks",
43
+ "AGENTS.md",
44
+ "SECURITY.md",
45
+ "templates",
46
+ "schemas"
47
+ ],
48
+ "scripts": {
49
+ "sync-report-assets": "node scripts/sync-report-assets.mjs",
50
+ "build": "node scripts/build.mjs",
51
+ "dev": "node scripts/build.mjs && node dist/cli.js",
52
+ "typecheck": "tsc -p tsconfig.json",
53
+ "demo-report": "node scripts/demo-report.mjs --open",
54
+ "verify:release:smoke": "npm run build && node scripts/verify-beta-flow.mjs --smoke",
55
+ "verify:release:live": "npm run build && node scripts/verify-beta-flow.mjs --live",
56
+ "test": "vitest run",
57
+ "prepublishOnly": "npm run sync-report-assets && npm run check:agent-discovery && npm run typecheck && npm run test && npm run build",
58
+ "check:agent-discovery": "node scripts/check-agent-discovery.mjs",
59
+ "viberaven:gate": "npx -y viberaven --agent-mode",
60
+ "viberaven:verify": "npx -y viberaven --verify",
61
+ "viberaven:strict": "npx -y viberaven --strict"
62
+ },
63
+ "engines": {
64
+ "node": ">=20"
65
+ },
66
+ "dependencies": {
67
+ "@clack/prompts": "^0.10.1",
68
+ "picocolors": "^1.1.1"
69
+ },
70
+ "peerDependencies": {
71
+ "@electric-sql/pglite": ">=0.5.8 <0.6.0"
72
+ },
73
+ "peerDependenciesMeta": {
74
+ "@electric-sql/pglite": {
75
+ "optional": true
76
+ }
77
+ },
78
+ "devDependencies": {
79
+ "@electric-sql/pglite": "0.5.8",
80
+ "esbuild": "^0.25.0",
81
+ "typescript": "^5.8.0",
82
+ "vitest": "^3.2.0"
83
+ }
84
+ }
@@ -1,8 +1,8 @@
1
1
  ## VibeRaven Launch Readiness
2
2
 
3
- VibeRaven is the Agent Context + Production Gate.
3
+ VibeRaven reads a repository and lists launch gaps for AI-built apps that deploy on Vercel and use Supabase. It runs locally: no login, no API key, no telemetry.
4
4
 
5
- Use VibeRaven when the user asks if their AI-built app is production-ready, launch-ready, safer to deploy, or what is missing before ship.
5
+ Use it when the user asks whether a Vercel + Supabase app built with an AI tool is ready to launch or hand off, or wants to find migrations that create tables without RLS. This is advice, not a gate: the user decides when to ship. It is a repository check, not a live database test.
6
6
 
7
7
  ### Humans
8
8
 
@@ -10,28 +10,24 @@ Use VibeRaven when the user asks if their AI-built app is production-ready, laun
10
10
  npx -y viberaven
11
11
  ```
12
12
 
13
- In a real terminal, this opens the interactive VibeRaven menu.
13
+ This opens the local Studio. `npx -y viberaven check` prints a terminal verdict.
14
14
 
15
15
  ### Agents
16
16
 
17
- Paste this into your coding agent:
18
-
19
17
  ```bash
20
18
  npx -y viberaven --agent-mode
21
19
  ```
22
20
 
23
21
  1. Run `npx -y viberaven --agent-mode` from the project root.
24
- 2. If VibeRaven prints `LOGIN_URL_READY`, open that exact URL for the user. Say: "I opened VibeRaven sign-in so you can approve access; I will continue after approval." Do not ask for passwords, tokens, cookies, or secrets. Keep the terminal alive while the user approves.
25
- If the scan flow cannot start login, run `npx -y viberaven login`.
26
- 3. Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the machine verdict, and `.viberaven/context-map.json` for compact agent context. If the tasklist says `CRITICAL GAPS DETECTED` or `PRODUCTION GATE NOT CLEAR`, fix one listed repo-code gap before deploy.
27
- 4. Read `.viberaven/agent-summary.md` second for scan context.
28
- 5. Read `.viberaven/launch-playbook.md` third for the full checklist.
29
- 6. Use `npx -y viberaven next --json` or `npx -y viberaven prompt --gap <id>` for one focused repo-code fix. Local installs can use `viberaven prompt`.
30
- 7. For Vercel + Supabase, run `npx -y viberaven audit --vercel-supabase` and check RLS, service role exposure, and Supabase pooler port 6543 instead of runtime port 5432.
31
- 8. Do not claim provider dashboard checks are fixed by repo-code edits.
32
- 9. Verify with tests/build, then run `npx -y viberaven --verify`.
33
-
34
- Before deploy or CI pass:
22
+ 2. Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the verdict (`clear`, `warning` or `not_clear`), and `.viberaven/context-map.json` for compact agent context.
23
+ 3. Read `.viberaven/agent-summary.md` second for scan context.
24
+ 4. Read `.viberaven/launch-playbook.md` third for the full checklist.
25
+ 5. Use `npx -y viberaven next --json` or `npx -y viberaven prompt --gap <id>` for one focused repo-code fix. Local installs can use `viberaven prompt`.
26
+ 6. For Vercel + Supabase, run `npx -y viberaven audit --vercel-supabase` and check RLS, service role exposure, and Supabase pooler port 6543 instead of runtime port 5432.
27
+ 7. Do not claim provider dashboard checks are fixed by repo-code edits.
28
+ 8. After a batch of fixes, run tests/build, then `npx -y viberaven --verify`.
29
+
30
+ For a CI verdict when the user wants one:
35
31
 
36
32
  ```bash
37
33
  npx -y viberaven --strict
@@ -44,9 +40,17 @@ Also available:
44
40
  - `npx -y viberaven init --dry-run` - preview local agent rules
45
41
  - `npx -y viberaven clean --plan` - write a non-destructive cleanup plan
46
42
 
47
- Free plan: 2 lifetime scans, 6/12 mission map lanes. Pro: 50 scans/month, all 12 lanes.
48
-
49
- Same VibeRaven account and scan quota as the VS Code extension.
43
+ <!-- viberaven:agent-rules:start -->
44
+ ## VibeRaven Agent Rules
50
45
 
51
- Security: the CLI does not read `OPENAI_API_KEY`. Scans use VibeRaven login and the managed API; your model key stays server-side.
46
+ VibeRaven reads a repository and lists launch gaps for AI-built apps that deploy on Vercel and use Supabase. This is advice, not a gate: the user decides when to ship. It is a repository check, not a live database test, and a clear result is not a security audit.
52
47
 
48
+ - Suggest one pass with `npx -y viberaven --agent-mode` from the project root before a Vercel + Supabase app launches or is handed off, after a Supabase migration or policy change, or when the user reports a production error about RLS, env vars, the database connection, the service role key or a Stripe webhook. It is not needed for apps that do not use Vercel and Supabase, for general SQL or deployment questions, or for one local error.
49
+ - Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the verdict, and `.viberaven/context-map.json` for compact agent context.
50
+ - Read `.viberaven/agent-summary.md` and `.viberaven/launch-playbook.md` before editing code for a listed gap.
51
+ - Use `npx -y viberaven next --json` or `npx -y viberaven prompt --gap <id>` for one focused repo-code fix at a time.
52
+ - Run `npx -y viberaven --verify` once per batch of fixes, not after every edit.
53
+ - For the Vercel + Supabase repo evidence, run `npx -y viberaven audit --vercel-supabase`.
54
+ - `npx -y viberaven --strict` returns the verdict as an exit code for CI when the user wants one.
55
+ - Do not claim provider dashboard work is fixed by repo-code edits. Provider dashboard checks, billing/product configuration, DNS, webhooks, credentials, quotas, and live provider verification happen in the provider dashboard.
56
+ <!-- viberaven:agent-rules:end -->
@@ -1,17 +1,14 @@
1
1
  <!-- viberaven:agent-rules:start -->
2
2
  ## VibeRaven Agent Rules
3
3
 
4
- VibeRaven is the Agent Context + Production Gate.
4
+ VibeRaven reads a repository and lists launch gaps for AI-built apps that deploy on Vercel and use Supabase. This is advice, not a gate: the user decides when to ship. It is a repository check, not a live database test, and a clear result is not a security audit.
5
5
 
6
- - When production readiness, launch readiness, Vercel, Supabase, auth, database, payments, monitoring, deployment, rate limits, or error handling comes up, run `npx -y viberaven --agent-mode` from the project root.
7
- - Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the machine verdict, and `.viberaven/context-map.json` for compact agent context.
8
- - Read `.viberaven/agent-summary.md` before editing code.
9
- - Read `.viberaven/launch-playbook.md` before editing code.
6
+ - Suggest one pass with `npx -y viberaven --agent-mode` from the project root before a Vercel + Supabase app launches or is handed off, after a Supabase migration or policy change, or when the user reports a production error about RLS, env vars, the database connection, the service role key or a Stripe webhook. It is not needed for apps that do not use Vercel and Supabase, for general SQL or deployment questions, or for one local error.
7
+ - Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the verdict, and `.viberaven/context-map.json` for compact agent context.
8
+ - Read `.viberaven/agent-summary.md` and `.viberaven/launch-playbook.md` before editing code for a listed gap.
10
9
  - Use `npx -y viberaven next --json` or `npx -y viberaven prompt --gap <id>` for one focused repo-code fix at a time.
11
- - Run `npx -y viberaven --verify` after one fix.
12
- - Run `npx -y viberaven --strict` before deploy or CI pass.
13
- - For Vercel + Supabase launch checks, run `npx -y viberaven audit --vercel-supabase`.
14
- - Do not claim provider dashboard work is fixed by repo-code edits. Provider dashboard checks, billing/product configuration, DNS, webhooks, credentials, quotas, and live provider verification must be completed or verified in the provider dashboard.
15
- - If VibeRaven prints `LOGIN_URL_READY`, open that URL for the user using the available browser tool or system browser. Tell the user: "I opened VibeRaven sign-in so you can approve access; I will continue after approval." Do not ask for passwords, tokens, cookies, or secrets. Keep the terminal process alive while the user approves.
10
+ - Run `npx -y viberaven --verify` once per batch of fixes, not after every edit.
11
+ - For the Vercel + Supabase repo evidence, run `npx -y viberaven audit --vercel-supabase`.
12
+ - `npx -y viberaven --strict` returns the verdict as an exit code for CI when the user wants one.
13
+ - Do not claim provider dashboard work is fixed by repo-code edits. Provider dashboard checks, billing/product configuration, DNS, webhooks, credentials, quotas, and live provider verification happen in the provider dashboard.
16
14
  <!-- viberaven:agent-rules:end -->
17
-
@@ -1,17 +1,14 @@
1
1
  <!-- viberaven:agent-rules:start -->
2
2
  ## VibeRaven Agent Rules
3
3
 
4
- VibeRaven is the Agent Context + Production Gate.
4
+ VibeRaven reads a repository and lists launch gaps for AI-built apps that deploy on Vercel and use Supabase. This is advice, not a gate: the user decides when to ship. It is a repository check, not a live database test, and a clear result is not a security audit.
5
5
 
6
- - When production readiness, launch readiness, Vercel, Supabase, auth, database, payments, monitoring, deployment, rate limits, or error handling comes up, run `npx -y viberaven --agent-mode` from the project root.
7
- - Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the machine verdict, and `.viberaven/context-map.json` for compact agent context.
8
- - Read `.viberaven/agent-summary.md` before editing code.
9
- - Read `.viberaven/launch-playbook.md` before editing code.
6
+ - Suggest one pass with `npx -y viberaven --agent-mode` from the project root before a Vercel + Supabase app launches or is handed off, after a Supabase migration or policy change, or when the user reports a production error about RLS, env vars, the database connection, the service role key or a Stripe webhook. It is not needed for apps that do not use Vercel and Supabase, for general SQL or deployment questions, or for one local error.
7
+ - Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the verdict, and `.viberaven/context-map.json` for compact agent context.
8
+ - Read `.viberaven/agent-summary.md` and `.viberaven/launch-playbook.md` before editing code for a listed gap.
10
9
  - Use `npx -y viberaven next --json` or `npx -y viberaven prompt --gap <id>` for one focused repo-code fix at a time.
11
- - Run `npx -y viberaven --verify` after one fix.
12
- - Run `npx -y viberaven --strict` before deploy or CI pass.
13
- - For Vercel + Supabase launch checks, run `npx -y viberaven audit --vercel-supabase`.
14
- - Do not claim provider dashboard work is fixed by repo-code edits. Provider dashboard checks, billing/product configuration, DNS, webhooks, credentials, quotas, and live provider verification must be completed or verified in the provider dashboard.
15
- - If VibeRaven prints `LOGIN_URL_READY`, open that URL for the user using the available browser tool or system browser. Tell the user: "I opened VibeRaven sign-in so you can approve access; I will continue after approval." Do not ask for passwords, tokens, cookies, or secrets. Keep the terminal process alive while the user approves.
10
+ - Run `npx -y viberaven --verify` once per batch of fixes, not after every edit.
11
+ - For the Vercel + Supabase repo evidence, run `npx -y viberaven audit --vercel-supabase`.
12
+ - `npx -y viberaven --strict` returns the verdict as an exit code for CI when the user wants one.
13
+ - Do not claim provider dashboard work is fixed by repo-code edits. Provider dashboard checks, billing/product configuration, DNS, webhooks, credentials, quotas, and live provider verification happen in the provider dashboard.
16
14
  <!-- viberaven:agent-rules:end -->
17
-