@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.
- package/AGENTS.md +32 -125
- package/README.md +1 -1
- package/dist/cli.js +1279 -653
- package/dist/stack/app.js +16 -15
- package/dist/stack/stack.css +154 -0
- package/package.json +84 -84
- package/templates/AGENTS.snippet.md +24 -20
- package/templates/CLAUDE.snippet.md +8 -11
- package/templates/CURSOR.snippet.md +8 -11
package/dist/stack/stack.css
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
-
|
|
7
|
-
- Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the
|
|
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
|
|
12
|
-
-
|
|
13
|
-
-
|
|
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
|
|
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
|
|
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
|
-
-
|
|
7
|
-
- Read `.viberaven/agent-tasklist.md` first, `.viberaven/gate-result.json` for the
|
|
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
|
|
12
|
-
-
|
|
13
|
-
-
|
|
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
|
|
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
|
-
|