@viberaven/cli 1.2.4 → 1.3.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 +42 -157
- package/README.md +8 -8
- package/SECURITY.md +1 -2
- package/dist/cli.js +198 -102
- package/dist/cli.js.map +2 -2
- package/package.json +10 -12
- package/templates/AGENTS.snippet.md +45 -52
- package/templates/CLAUDE.snippet.md +19 -17
- package/templates/CURSOR.snippet.md +29 -17
package/dist/cli.js
CHANGED
|
@@ -9145,7 +9145,7 @@ function generateAgentSummary(artifact) {
|
|
|
9145
9145
|
lines.push("Do not claim human-provider actions as repo-code fixes.");
|
|
9146
9146
|
lines.push("");
|
|
9147
9147
|
lines.push("## Agent workflow");
|
|
9148
|
-
lines.push("1. Read `.viberaven/agent-tasklist.md` first for the
|
|
9148
|
+
lines.push("1. Read `.viberaven/agent-tasklist.md` first for the what-changed map.");
|
|
9149
9149
|
lines.push("2. Read `.viberaven/launch-playbook.md` for the full checklist.");
|
|
9150
9150
|
lines.push("3. Run `viberaven next --json` - one action at a time.");
|
|
9151
9151
|
lines.push("4. Repo fix: `viberaven prompt --gap <id>` then implement.");
|
|
@@ -9419,7 +9419,7 @@ function generateLaunchPlaybook(artifact) {
|
|
|
9419
9419
|
}
|
|
9420
9420
|
}
|
|
9421
9421
|
lines.push("## Agent loop", "");
|
|
9422
|
-
lines.push("1. Read `.viberaven/agent-tasklist.md` for the current
|
|
9422
|
+
lines.push("1. Read `.viberaven/agent-tasklist.md` for the current what-changed map.");
|
|
9423
9423
|
lines.push("2. `viberaven next --json`");
|
|
9424
9424
|
lines.push("3. Fix repo or run `viberaven guide <provider>`");
|
|
9425
9425
|
lines.push(`4. Run \`${PUBLIC_VERIFY_COMMAND}\` to refresh the gate and \`.viberaven/agent-tasklist.md\`.`);
|
|
@@ -12230,16 +12230,16 @@ function originalHint(gap) {
|
|
|
12230
12230
|
function buildAgentFixPrompt(artifact, gap) {
|
|
12231
12231
|
const affected = [gap.primaryMapCategory, ...gap.affectedMapCategories ?? []].filter(Boolean).filter((value, index, all) => all.indexOf(value) === index).join(", ");
|
|
12232
12232
|
return [
|
|
12233
|
-
"You are an AI coding agent using VibeRaven as the
|
|
12233
|
+
"You are an AI coding agent using VibeRaven as the what-changed layer for a real app.",
|
|
12234
12234
|
"",
|
|
12235
|
-
"Goal:
|
|
12235
|
+
"Goal: understand what changed, which provider context matters, and fix one repo-code gap at a time.",
|
|
12236
12236
|
"",
|
|
12237
12237
|
`Project: ${artifact.workspacePath}`,
|
|
12238
|
-
`Current VibeRaven state:
|
|
12238
|
+
`Current VibeRaven state: context core ${artifact.productionCorePercent}% | score ${artifact.score} (${artifact.scoreLabel})`,
|
|
12239
12239
|
`Gap: ${gap.title}`,
|
|
12240
12240
|
`Gap id: ${gap.id}`,
|
|
12241
12241
|
`Severity: ${gap.severity}`,
|
|
12242
|
-
`
|
|
12242
|
+
`Context area: ${gap.primaryMapCategory}${affected ? ` | affected: ${affected}` : ""}`,
|
|
12243
12243
|
`Scanner detail: ${compact(gap.detail)}`,
|
|
12244
12244
|
"",
|
|
12245
12245
|
"Required workflow:",
|
|
@@ -12249,7 +12249,7 @@ function buildAgentFixPrompt(artifact, gap) {
|
|
|
12249
12249
|
"4. Inspect the real implementation files. Do not assume framework/provider wiring from package names alone.",
|
|
12250
12250
|
"5. Make the smallest durable repo-code change that addresses this specific gap.",
|
|
12251
12251
|
"6. Keep provider dashboard work separate. Open provider dashboards only when VibeRaven asks for a provider/manual action, and explain why you opened them.",
|
|
12252
|
-
`7. For Vercel + Supabase apps, run \`${PUBLIC_AUDIT_COMMAND}\` before claiming
|
|
12252
|
+
`7. For Vercel + Supabase apps, run \`${PUBLIC_AUDIT_COMMAND}\` before claiming the fix is grounded.`,
|
|
12253
12253
|
"8. Treat that audit as local repo evidence only; do not claim provider dashboard settings are fixed unless the user verifies them or read-only provider MCP confirms them.",
|
|
12254
12254
|
"9. Do not claim provider dashboard or read-only MCP checks as repo-code fixes.",
|
|
12255
12255
|
`10. VibeRaven cleanup is non-destructive. You may run \`${PUBLIC_CLEAN_PLAN_COMMAND}\` only to create a reviewable context cleanup plan, not to delete code.`,
|
|
@@ -12281,7 +12281,7 @@ var VERSION;
|
|
|
12281
12281
|
var init_version = __esm({
|
|
12282
12282
|
"src/version.ts"() {
|
|
12283
12283
|
"use strict";
|
|
12284
|
-
VERSION = "1.
|
|
12284
|
+
VERSION = "1.3.0";
|
|
12285
12285
|
}
|
|
12286
12286
|
});
|
|
12287
12287
|
|
|
@@ -12682,7 +12682,7 @@ function normalizeLineEndings(value) {
|
|
|
12682
12682
|
function escapeRegExp3(value) {
|
|
12683
12683
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
12684
12684
|
}
|
|
12685
|
-
var VIBERAVEN_BLOCK_START, VIBERAVEN_BLOCK_END, VIBERAVEN_LEGACY_BLOCK_START, VIBERAVEN_LEGACY_BLOCK_END, HEAL_PLAN_GAP_COMMAND, PROMPT_GAP_COMMAND, HEAL_APPLY_GAP_COMMAND, AGENT_RULES_PREAMBLE, STACK_FRAMING, AGENT_NEGATIVE_CONSTRAINTS, ANCHOR_FOOTER, AGENT_RULES_BODY, AGENT_CONTEXT_BODY, MISSION_MAP_BODY, BLOCK_MARKER_PAIRS;
|
|
12685
|
+
var VIBERAVEN_BLOCK_START, VIBERAVEN_BLOCK_END, VIBERAVEN_LEGACY_BLOCK_START, VIBERAVEN_LEGACY_BLOCK_END, HEAL_PLAN_GAP_COMMAND, PROMPT_GAP_COMMAND, HEAL_APPLY_GAP_COMMAND, AGENT_RULES_PREAMBLE, STACK_FRAMING, ARCHITECTURE_ORIENTATION, AGENT_NEGATIVE_CONSTRAINTS, ANCHOR_FOOTER, AGENT_RULES_BODY, AGENT_CONTEXT_BODY, MISSION_MAP_BODY, BLOCK_MARKER_PAIRS;
|
|
12686
12686
|
var init_agentRulesBlock = __esm({
|
|
12687
12687
|
"src/commands/agentRulesBlock.ts"() {
|
|
12688
12688
|
"use strict";
|
|
@@ -12694,54 +12694,88 @@ var init_agentRulesBlock = __esm({
|
|
|
12694
12694
|
HEAL_PLAN_GAP_COMMAND = healPlanGapCommand("<id>");
|
|
12695
12695
|
PROMPT_GAP_COMMAND = promptGapCommand("<id>");
|
|
12696
12696
|
HEAL_APPLY_GAP_COMMAND = `${PUBLIC_COMMAND} --heal --apply --gap <id> --yes`;
|
|
12697
|
-
AGENT_RULES_PREAMBLE = `
|
|
12697
|
+
AGENT_RULES_PREAMBLE = `AI agents can code. They still need senior-engineer context before they change real apps.
|
|
12698
12698
|
|
|
12699
|
-
Canonical command: \`${
|
|
12699
|
+
Canonical Studio command: \`${PUBLIC_COMMAND}\`
|
|
12700
12700
|
|
|
12701
|
-
|
|
12701
|
+
Non-interactive artifact loop: \`${PUBLIC_AGENT_MODE_COMMAND}\`
|
|
12702
12702
|
|
|
12703
|
-
|
|
12703
|
+
Use VibeRaven at the start of production-sensitive coding work, feature work, provider work, release/version debugging, or launch work, including when the agent needs to know which version broke or what provider context matters.
|
|
12704
12704
|
|
|
12705
|
-
|
|
12705
|
+
Default loop: orient the architecture, ask only the missing questions needed for a safe plan, inspect release/provider context, choose the right VibeRaven skill, fix one evidenced change, then verify.
|
|
12706
|
+
|
|
12707
|
+
Maps repo evidence, release drift, architecture boundaries, and provider boundaries into agent-readable context.`;
|
|
12706
12708
|
STACK_FRAMING = `Stack context for this repo: Next.js, Supabase, Vercel, VibeRaven.
|
|
12707
|
-
Do NOT deploy to Vercel or ship to production users without
|
|
12708
|
-
Do NOT rely on manual
|
|
12709
|
-
|
|
12709
|
+
Do NOT deploy to Vercel or ship to production users without VibeRaven architecture/release/provider context.
|
|
12710
|
+
Do NOT rely on manual checklists when VibeRaven artifacts exist in \`.viberaven/\`.`;
|
|
12711
|
+
ARCHITECTURE_ORIENTATION = `## VibeRaven Architecture Orientation
|
|
12712
|
+
|
|
12713
|
+
At the start of a real app task, before writing a plan or editing code:
|
|
12714
|
+
|
|
12715
|
+
1. Identify the product surface, user path, and desired outcome.
|
|
12716
|
+
2. Map the architecture boundary involved: UI/API, auth/session, data/schema/RLS, provider dashboard, deploy/env, background job/webhook, billing, storage, or release/version drift.
|
|
12717
|
+
3. Check existing VibeRaven context: \`.viberaven/production-context.md\`, \`.viberaven/agent-context.md\`, \`.viberaven/mission-map.md\`, and recent git history when present.
|
|
12718
|
+
4. Ask concise questions only when the missing answer changes the plan, such as last working version, provider involved, production symptom, deploy target, or whether dashboard proof exists.
|
|
12719
|
+
5. Build the plan around the architecture boundary first, then the code change. Do not start from the nearest file.
|
|
12720
|
+
6. Route to the suited VibeRaven skill:
|
|
12721
|
+
- \`what-broke\` for regressions, version drift, or "worked yesterday" bugs.
|
|
12722
|
+
- \`production-context\` for release notes, architecture memory, provider boundaries, migrations, incidents, and rollback notes.
|
|
12723
|
+
- \`viberaven\` for Studio, MCP context, provider cards, connected agents, access modes, and release/version context.
|
|
12724
|
+
- \`go-live\` for push, deploy, live URL proof, and provider/human launch boundaries.
|
|
12725
|
+
|
|
12726
|
+
Output shape before implementation:
|
|
12727
|
+
|
|
12728
|
+
\`\`\`text
|
|
12729
|
+
Architecture boundary:
|
|
12730
|
+
- ...
|
|
12731
|
+
|
|
12732
|
+
Questions/blockers:
|
|
12733
|
+
- ... or none
|
|
12734
|
+
|
|
12735
|
+
Plan:
|
|
12736
|
+
- ...
|
|
12737
|
+
|
|
12738
|
+
VibeRaven skill/context:
|
|
12739
|
+
- ...
|
|
12740
|
+
\`\`\``;
|
|
12741
|
+
AGENT_NEGATIVE_CONSTRAINTS = `## Event-Triggered Context Check
|
|
12710
12742
|
|
|
12711
|
-
Trigger: modifications to \`package.json\`, \`vercel.json\`, \`supabase/migrations/**/*\`, \`.env.example\`,
|
|
12743
|
+
Trigger: modifications to \`package.json\`, \`vercel.json\`, \`supabase/migrations/**/*\`, \`.env.example\`, provider-sensitive paths, or deploy workflow files.
|
|
12712
12744
|
|
|
12713
|
-
1. Do NOT claim
|
|
12745
|
+
1. Do NOT claim the app is ready to ship until \`decision.status\` is not \`blocked\` and \`gate.status === "clear"\` in \`.viberaven/gate-result.json\`.
|
|
12714
12746
|
2. Do NOT run verify after every file patch. Batch heals, then \`${PUBLIC_VERIFY_COMMAND}\` once per loop.
|
|
12715
|
-
3. Do NOT \`git push\` or deploy after
|
|
12747
|
+
3. Do NOT \`git push\` or deploy after provider-sensitive changes without VibeRaven architecture/release/provider context.
|
|
12716
12748
|
4. If anomalies appear, read \`.viberaven/agent-tasklist.md\` fully before writing new repo logic.
|
|
12717
|
-
5. Do NOT mark
|
|
12749
|
+
5. Do NOT mark the app ready because the local dev server starts successfully; INSTEAD open Studio or run the artifact loop and read \`.viberaven/gate-result.json\`.
|
|
12718
12750
|
6. Do NOT treat the Supabase dashboard UI as proof of RLS; INSTEAD fix repo evidence gaps from \`.viberaven/agent-tasklist.md\`.
|
|
12719
|
-
7. Do NOT add or change npm dependencies without calling \`viberaven_validate_npm_package\` (MCP) or verifying the package exists on the public npm registry; INSTEAD
|
|
12751
|
+
7. Do NOT add or change npm dependencies without calling \`viberaven_validate_npm_package\` (MCP) or verifying the package exists on the public npm registry; INSTEAD refresh architecture/release/provider context after dependency changes.
|
|
12720
12752
|
8. Do NOT refactor or edit files unrelated to the current TASK-001 gap; INSTEAD make minimal, targeted changes.
|
|
12721
12753
|
9. Do NOT install new dependencies unless TASK-001 or the user explicitly requires them.
|
|
12722
|
-
10. Do NOT claim provider
|
|
12754
|
+
10. Do NOT claim live provider state is complete from repo edits alone; INSTEAD name the provider proof or dashboard action still needed.
|
|
12723
12755
|
|
|
12724
|
-
Prefer \`viberaven_check_readiness\` when MCP is configured; otherwise \`${PUBLIC_AGENT_MODE_COMMAND}
|
|
12756
|
+
Prefer \`viberaven_check_readiness\` when MCP is configured; otherwise \`${PUBLIC_COMMAND}\` for Studio or \`${PUBLIC_AGENT_MODE_COMMAND}\` for artifacts.`;
|
|
12725
12757
|
ANCHOR_FOOTER = `## Anchor (mandatory)
|
|
12726
12758
|
|
|
12727
|
-
Before ending any deploy,
|
|
12728
|
-
\`${
|
|
12729
|
-
|
|
12759
|
+
Before ending any deploy, provider-sensitive, database-policy, or dependency task, open Studio or run the artifact loop:
|
|
12760
|
+
\`${PUBLIC_COMMAND}\`
|
|
12761
|
+
Context is not clear until \`gate.status === "clear"\` in \`.viberaven/gate-result.json\`.`;
|
|
12730
12762
|
AGENT_RULES_BODY = `${AGENT_RULES_PREAMBLE}
|
|
12731
12763
|
|
|
12732
12764
|
${STACK_FRAMING}
|
|
12733
12765
|
|
|
12766
|
+
${ARCHITECTURE_ORIENTATION}
|
|
12767
|
+
|
|
12734
12768
|
${AGENT_NEGATIVE_CONSTRAINTS}
|
|
12735
12769
|
|
|
12736
|
-
## VibeRaven
|
|
12770
|
+
## VibeRaven What-Changed Layer
|
|
12737
12771
|
|
|
12738
|
-
- Before running build, compile, cleanup, deployment, vercel, or supabase commands,
|
|
12739
|
-
- Treat VibeRaven as
|
|
12740
|
-
- Read \`.viberaven/agent-tasklist.md\` first. If it says CRITICAL GAPS DETECTED or
|
|
12772
|
+
- Before running build, compile, cleanup, deployment, vercel, or supabase commands, open Studio with \`${PUBLIC_COMMAND}\` or run the artifact loop when non-interactive context is needed.
|
|
12773
|
+
- Treat VibeRaven as senior-engineer architecture, release drift, and provider context for AI-built apps: identify the boundary, what changed, which version broke, and what provider state matters before editing.
|
|
12774
|
+
- Read \`.viberaven/agent-tasklist.md\` first. If it says CRITICAL GAPS DETECTED or the decision is not clear, fix one listed repo-code gap before deploying.
|
|
12741
12775
|
- Read \`.viberaven/gate-result.json\` for the machine verdict.
|
|
12742
12776
|
- Read \`.viberaven/context-map.json\` for compact agent context.
|
|
12743
12777
|
- Read \`.viberaven/agent-summary.md\` second for scan context.
|
|
12744
|
-
- Read \`.viberaven/launch-playbook.md\` third for the full
|
|
12778
|
+
- Read \`.viberaven/launch-playbook.md\` third for the full context map.
|
|
12745
12779
|
- Use \`${PUBLIC_NEXT_JSON_COMMAND}\` or \`${PROMPT_GAP_COMMAND}\` for one focused repo-code fix at a time.
|
|
12746
12780
|
- For Vercel + Supabase launch checks, run \`${PUBLIC_AUDIT_COMMAND}\`.
|
|
12747
12781
|
- Run \`${PUBLIC_VERIFY_COMMAND}\` after one fix.
|
|
@@ -12750,11 +12784,11 @@ ${AGENT_NEGATIVE_CONSTRAINTS}
|
|
|
12750
12784
|
- Only use \`${HEAL_APPLY_GAP_COMMAND}\` for supported low-risk repo-code recipes.
|
|
12751
12785
|
- Preview local rule installation with \`${PUBLIC_INIT_ALL_COMMAND} --dry-run\`.
|
|
12752
12786
|
- Cleanup is non-destructive: only run \`${PUBLIC_CLEAN_PLAN_COMMAND}\` to create a reviewable cleanup plan.
|
|
12753
|
-
- Provider dashboard checks are not cleared by repo-code edits.
|
|
12787
|
+
- Provider dashboard checks are not cleared by repo-code edits. Database rules, storage behavior, deployment/runtime behavior, quotas, dashboard toggles, and live provider proof must be completed or verified in the provider dashboard or through read-only provider MCP evidence.
|
|
12754
12788
|
- Do not claim provider dashboard work is fixed by repo-code edits.
|
|
12755
12789
|
- 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.
|
|
12756
12790
|
|
|
12757
|
-
## VibeRaven
|
|
12791
|
+
## VibeRaven What-Changed Loop
|
|
12758
12792
|
|
|
12759
12793
|
After every scan, read \`.viberaven/agent-tasklist.md\` for the prioritized task list.
|
|
12760
12794
|
|
|
@@ -12775,7 +12809,7 @@ The loop is:
|
|
|
12775
12809
|
- Wait for user confirmation, then verify.
|
|
12776
12810
|
9. If \`fixType === 'upgrade-required'\`, provide upgradeUrl and move on.
|
|
12777
12811
|
|
|
12778
|
-
Do not stop at "scan complete." The loop is not done until \`gate.status === 'clear'
|
|
12812
|
+
Do not stop at "scan complete." The loop is not done until the agent knows what changed, \`gate.status === 'clear'\`, and the next fix is grounded in evidence.`;
|
|
12779
12813
|
AGENT_CONTEXT_BODY = `${AGENT_RULES_PREAMBLE}
|
|
12780
12814
|
|
|
12781
12815
|
After \`--agent-mode\`, read these artifacts in order:
|
|
@@ -12783,14 +12817,16 @@ After \`--agent-mode\`, read these artifacts in order:
|
|
|
12783
12817
|
1. \`.viberaven/mission-map.md\`
|
|
12784
12818
|
2. \`.viberaven/agent-tasklist.md\`
|
|
12785
12819
|
3. \`.viberaven/gate-result.json\`
|
|
12786
|
-
4. \`.viberaven/context-map.json
|
|
12820
|
+
4. \`.viberaven/context-map.json\`
|
|
12821
|
+
|
|
12822
|
+
Before editing, summarize the architecture boundary and missing questions from those artifacts.`;
|
|
12787
12823
|
MISSION_MAP_BODY = `${AGENT_RULES_PREAMBLE}
|
|
12788
12824
|
|
|
12789
12825
|
## Mission Map loop
|
|
12790
12826
|
|
|
12791
12827
|
1. Run \`${PUBLIC_AGENT_MODE_COMMAND}\` from the project root.
|
|
12792
12828
|
2. Read \`.viberaven/agent-tasklist.md\` and \`.viberaven/gate-result.json\`.
|
|
12793
|
-
3. Fix one
|
|
12829
|
+
3. Fix one evidenced change with architecture/release/provider context.
|
|
12794
12830
|
4. Re-run VibeRaven until \`gate.status === 'clear'\`.`;
|
|
12795
12831
|
BLOCK_MARKER_PAIRS = [
|
|
12796
12832
|
[VIBERAVEN_BLOCK_START, VIBERAVEN_BLOCK_END],
|
|
@@ -12806,20 +12842,24 @@ function buildCursorRulesPack() {
|
|
|
12806
12842
|
filename: "viberaven-core.mdc",
|
|
12807
12843
|
content: [
|
|
12808
12844
|
"---",
|
|
12809
|
-
"description: VibeRaven
|
|
12845
|
+
"description: VibeRaven what-changed layer for architecture, release, and provider context",
|
|
12810
12846
|
"alwaysApply: true",
|
|
12811
12847
|
"---",
|
|
12812
12848
|
"",
|
|
12813
|
-
|
|
12849
|
+
"At the start of real app work, map the architecture boundary before editing: UI/API, auth/session, data/schema/RLS, provider dashboard, deploy/env, background job/webhook, billing, storage, or release/version drift.",
|
|
12850
|
+
"",
|
|
12851
|
+
"Ask concise questions only when the answer changes the plan: last working version, production symptom, provider involved, deploy target, or provider/dashboard proof.",
|
|
12852
|
+
"",
|
|
12853
|
+
`Open Studio with \`npx -y viberaven\` for context. Run \`${PUBLIC_AGENT_MODE_COMMAND}\` before deploy, provider-sensitive, database-policy, or dependency changes when artifact context is needed.`,
|
|
12814
12854
|
"",
|
|
12815
12855
|
"Read `.viberaven/agent-tasklist.md` first, then `.viberaven/gate-result.json` and `.viberaven/mission-map.md`.",
|
|
12816
|
-
`Fix one gap, then \`${PUBLIC_VERIFY_COMMAND}\`. Before CI or production promote: \`${PUBLIC_STRICT_COMMAND}\`.`,
|
|
12856
|
+
`Fix one scoped gap, then \`${PUBLIC_VERIFY_COMMAND}\`. Before CI or production promote: \`${PUBLIC_STRICT_COMMAND}\`.`,
|
|
12817
12857
|
"",
|
|
12818
|
-
'
|
|
12858
|
+
'Context is not clear until the architecture boundary, release/version context, and provider proof boundary are understood. For launch gates, `gate.status === "clear"` is required.',
|
|
12819
12859
|
"",
|
|
12820
12860
|
DOMAIN_PATH_POINTER,
|
|
12821
12861
|
"",
|
|
12822
|
-
"Full
|
|
12862
|
+
"Full VibeRaven rules: `AGENTS.md` / `CLAUDE.md` (installed by `npx -y viberaven init --agents all`)."
|
|
12823
12863
|
].join("\n")
|
|
12824
12864
|
},
|
|
12825
12865
|
{
|
|
@@ -12926,7 +12966,7 @@ var init_cursorRulesPack = __esm({
|
|
|
12926
12966
|
init_commands();
|
|
12927
12967
|
CURSOR_RULES_DIR = ".cursor/rules";
|
|
12928
12968
|
LEGACY_CURSOR_RULE_FILE = `${CURSOR_RULES_DIR}/viberaven.mdc`;
|
|
12929
|
-
DOMAIN_PATH_POINTER = "Before editing these files, read `.viberaven/agent-context.md` and `.viberaven/mission-map.md
|
|
12969
|
+
DOMAIN_PATH_POINTER = "Before editing these files, read `.viberaven/agent-context.md` and `.viberaven/mission-map.md` for what changed, which architecture boundary is affected, and which provider context matters.";
|
|
12930
12970
|
}
|
|
12931
12971
|
});
|
|
12932
12972
|
|
|
@@ -13479,7 +13519,7 @@ async function handleOpenDashboard(cwd) {
|
|
|
13479
13519
|
function buildMenuOptions(isSignedIn) {
|
|
13480
13520
|
return [
|
|
13481
13521
|
{ value: "next", label: "What's next?", hint: "One action from last scan" },
|
|
13482
|
-
{ value: "scan", label: "Scan project", hint: "Map
|
|
13522
|
+
{ value: "scan", label: "Scan project", hint: "Map what changed" },
|
|
13483
13523
|
{ value: "open-report", label: "Open report in browser", hint: "Rebuilds UI from last scan" },
|
|
13484
13524
|
{ value: "guide", label: "Provider guide", hint: "Vercel, Supabase, Stripe steps" },
|
|
13485
13525
|
{ value: "open-dashboard", label: "Open dashboard", hint: "Browser link for next step" },
|
|
@@ -15419,7 +15459,7 @@ async function runVerifyActionCommand(input) {
|
|
|
15419
15459
|
}
|
|
15420
15460
|
process.stdout.write(
|
|
15421
15461
|
`Verifying ${entry.id} (${entry.title ?? "untitled action"}).
|
|
15422
|
-
Run \`npx -y viberaven --verify\` to refresh
|
|
15462
|
+
Run \`npx -y viberaven --verify\` to refresh VibeRaven context for this action.
|
|
15423
15463
|
`
|
|
15424
15464
|
);
|
|
15425
15465
|
return 0;
|
|
@@ -15950,7 +15990,7 @@ var init_providerLogos = __esm({
|
|
|
15950
15990
|
// src/local-ui/prompts.ts
|
|
15951
15991
|
function buildLocalUiPrompt(input) {
|
|
15952
15992
|
const lines = [
|
|
15953
|
-
"You are fixing one VibeRaven
|
|
15993
|
+
"You are fixing one VibeRaven what-changed gap.",
|
|
15954
15994
|
"",
|
|
15955
15995
|
`Project: ${input.projectName}`,
|
|
15956
15996
|
`Provider: ${input.providerName}`,
|
|
@@ -15964,7 +16004,7 @@ function buildLocalUiPrompt(input) {
|
|
|
15964
16004
|
"- .viberaven/gate-result.json",
|
|
15965
16005
|
"",
|
|
15966
16006
|
"Fix only this repo-code gap.",
|
|
15967
|
-
"Do not claim
|
|
16007
|
+
"Do not claim the app is ready until VibeRaven verify is clear.",
|
|
15968
16008
|
"Provider dashboard setup remains manual unless VibeRaven has live provider evidence.",
|
|
15969
16009
|
"After the fix, run:",
|
|
15970
16010
|
"npx -y viberaven --verify"
|
|
@@ -16286,7 +16326,7 @@ function buildMissionCards(artifact, providers) {
|
|
|
16286
16326
|
const connectProviders = buildConnectProviders(providers);
|
|
16287
16327
|
const blockerCount = blockers.length;
|
|
16288
16328
|
const hasScan = Boolean(artifact.scannedAt);
|
|
16289
|
-
const summary = !hasScan ? "
|
|
16329
|
+
const summary = !hasScan ? "Open VibeRaven Studio to inspect what changed and surface missing release or provider context." : blockerCount === 0 ? "No context blockers detected in the latest evidence." : `I analyzed the release evidence and found ${blockerCount} context blocker${blockerCount === 1 ? "" : "s"} to resolve before the next fix.`;
|
|
16290
16330
|
return {
|
|
16291
16331
|
summary,
|
|
16292
16332
|
blockerCount,
|
|
@@ -16896,7 +16936,7 @@ const providerDashboardUrls = {
|
|
|
16896
16936
|
supabase: 'https://supabase.com/dashboard/projects',
|
|
16897
16937
|
vercel: 'https://vercel.com/dashboard',
|
|
16898
16938
|
stripe: 'https://dashboard.stripe.com',
|
|
16899
|
-
github: 'https://github.com/
|
|
16939
|
+
github: 'https://github.com/new',
|
|
16900
16940
|
sentry: 'https://sentry.io',
|
|
16901
16941
|
posthog: 'https://app.posthog.com',
|
|
16902
16942
|
clerk: 'https://dashboard.clerk.com',
|
|
@@ -16909,6 +16949,14 @@ const publicGithubUrl = 'https://github.com/ohad6k/VibeRaven';
|
|
|
16909
16949
|
const publicGithubApiUrl = 'https://api.github.com/repos/ohad6k/VibeRaven';
|
|
16910
16950
|
const docsUrl = 'https://viberaven.dev';
|
|
16911
16951
|
const communityUrl = 'https://github.com/ohad6k/VibeRaven/discussions/7';
|
|
16952
|
+
const goLiveUrls = {
|
|
16953
|
+
githubLogin: 'https://github.com/login',
|
|
16954
|
+
githubNew: 'https://github.com/new',
|
|
16955
|
+
githubCliAuth: 'https://cli.github.com/manual/gh_auth_login',
|
|
16956
|
+
vercelLogin: 'https://vercel.com/login',
|
|
16957
|
+
vercelNew: 'https://vercel.com/new',
|
|
16958
|
+
vercelDashboard: 'https://vercel.com/dashboard',
|
|
16959
|
+
};
|
|
16912
16960
|
|
|
16913
16961
|
const githubStats = {
|
|
16914
16962
|
loading: false,
|
|
@@ -17621,14 +17669,14 @@ function GitHubStats() {
|
|
|
17621
17669
|
function agentPromptText() {
|
|
17622
17670
|
const provider = providers.find((item) => item.id === demo.selectedProviderId) || providers[0];
|
|
17623
17671
|
return [
|
|
17624
|
-
'You are fixing one VibeRaven
|
|
17672
|
+
'You are fixing one VibeRaven what-changed gap.',
|
|
17625
17673
|
'',
|
|
17626
17674
|
'Project: ' + projectName(),
|
|
17627
17675
|
'Focus: ' + provider.name + ' ' + provider.area,
|
|
17628
17676
|
'Stage: ' + (demo.activeStepId || 'agent'),
|
|
17629
17677
|
'',
|
|
17630
17678
|
'Goal:',
|
|
17631
|
-
'- Find the smallest repo-side fix
|
|
17679
|
+
'- Find the smallest repo-side fix grounded in what changed.',
|
|
17632
17680
|
'- Do not claim provider dashboard work from code alone.',
|
|
17633
17681
|
'- Keep the change scoped and verify through the VibeRaven UI action.',
|
|
17634
17682
|
'',
|
|
@@ -17876,7 +17924,7 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
17876
17924
|
const topBlocker = blockers[0];
|
|
17877
17925
|
const gateClear = gate.status === 'clear';
|
|
17878
17926
|
const gateLabel = gate.label || 'Waiting for project evidence';
|
|
17879
|
-
const mainBlocker = mc.mainBlocker || topBlocker?.title || '
|
|
17927
|
+
const mainBlocker = mc.mainBlocker || topBlocker?.title || 'Open context to find what changed';
|
|
17880
17928
|
const blockerText = formatBlockerLines(blockers, 6);
|
|
17881
17929
|
const planText = formatPlanLines(planSteps, 8);
|
|
17882
17930
|
const connectText = connectProviders.slice(0, 5).map((item) => '- ' + item.name + ' (' + item.status + ')').join('\\n');
|
|
@@ -17885,10 +17933,10 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
17885
17933
|
|
|
17886
17934
|
const missions = {
|
|
17887
17935
|
analyze: {
|
|
17888
|
-
title: 'Analyzing
|
|
17889
|
-
label: blockers.length ? 'Analyze ' + blockers.length + ' blocker' + (blockers.length === 1 ? '' : 's') : 'Analyze
|
|
17936
|
+
title: 'Analyzing what changed',
|
|
17937
|
+
label: blockers.length ? 'Analyze ' + blockers.length + ' blocker' + (blockers.length === 1 ? '' : 's') : 'Analyze what changed',
|
|
17890
17938
|
prompt: [
|
|
17891
|
-
'Analyze
|
|
17939
|
+
'Analyze what changed in this project folder.',
|
|
17892
17940
|
'',
|
|
17893
17941
|
'Project status: ' + gateLabel + ' (' + (gate.status || 'unknown') + ')',
|
|
17894
17942
|
'Main blocker: ' + mainBlocker,
|
|
@@ -17902,13 +17950,13 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
17902
17950
|
].filter(Boolean).join('\\n'),
|
|
17903
17951
|
line: 'Reading repo evidence, provider proof, and release context.',
|
|
17904
17952
|
steps: ['Scan evidence', 'Rank risks', 'Prepare fix plan'],
|
|
17905
|
-
notice: blockers.length ? 'Analyzing ' + blockers.length + '
|
|
17953
|
+
notice: blockers.length ? 'Analyzing ' + blockers.length + ' blocker' + (blockers.length === 1 ? '' : 's') + '.' : 'Analyzing what changed.',
|
|
17906
17954
|
},
|
|
17907
17955
|
plan: {
|
|
17908
17956
|
title: 'Building fix plan',
|
|
17909
17957
|
label: planSteps.length ? 'Fix plan \xB7 ' + planSteps.length + ' action' + (planSteps.length === 1 ? '' : 's') : 'Build fix plan',
|
|
17910
17958
|
prompt: [
|
|
17911
|
-
'Build a safe, ordered fix plan
|
|
17959
|
+
'Build a safe, ordered fix plan from the current what-changed context.',
|
|
17912
17960
|
'',
|
|
17913
17961
|
'Project status: ' + gateLabel,
|
|
17914
17962
|
'Main blocker: ' + mainBlocker,
|
|
@@ -17929,7 +17977,7 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
17929
17977
|
title: 'Applying scoped fix',
|
|
17930
17978
|
label: topBlocker ? 'Agent fix \xB7 ' + truncateMissionLabel(topBlocker.title, 34) : 'Apply next repo fix',
|
|
17931
17979
|
prompt: [
|
|
17932
|
-
'Apply ONE scoped repo fix for the highest-priority
|
|
17980
|
+
'Apply ONE scoped repo fix for the highest-priority what-changed blocker.',
|
|
17933
17981
|
'',
|
|
17934
17982
|
topBlocker ? 'Target blocker: ' + topBlocker.title : 'Target: ' + mainBlocker,
|
|
17935
17983
|
topBlocker?.detail ? 'Detail: ' + topBlocker.detail : '',
|
|
@@ -17944,15 +17992,15 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
17944
17992
|
'- Do not claim provider dashboard setup is complete from repo edits alone.',
|
|
17945
17993
|
'- After edits, list files touched and recommend verify.',
|
|
17946
17994
|
].filter(Boolean).join('\\n'),
|
|
17947
|
-
line: 'Patching only the selected
|
|
17995
|
+
line: 'Patching only the selected what-changed gap, then preparing verification.',
|
|
17948
17996
|
steps: ['Patch code', 'Update proof', 'Prepare verify'],
|
|
17949
17997
|
notice: topBlocker ? 'Agent fix started for: ' + truncateMissionLabel(topBlocker.title, 48) + '.' : 'Agent fix mission started.',
|
|
17950
17998
|
},
|
|
17951
17999
|
verify: {
|
|
17952
18000
|
title: 'Running verification',
|
|
17953
|
-
label: gateClear ? 'Re-verify
|
|
18001
|
+
label: gateClear ? 'Re-verify context' : 'Verify context',
|
|
17954
18002
|
prompt: [
|
|
17955
|
-
'Verify
|
|
18003
|
+
'Verify the current what-changed context for this project.',
|
|
17956
18004
|
'',
|
|
17957
18005
|
'Project status: ' + gateLabel + ' (' + (gate.status || 'unknown') + ')',
|
|
17958
18006
|
'Main blocker: ' + mainBlocker,
|
|
@@ -17965,13 +18013,13 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
17965
18013
|
].filter(Boolean).join('\\n'),
|
|
17966
18014
|
line: 'Checking evidence, provider state, and release readiness.',
|
|
17967
18015
|
steps: ['Run checks', 'Read proof', 'Mark status'],
|
|
17968
|
-
notice: gateClear ? 'Re-
|
|
18016
|
+
notice: gateClear ? 'Re-checking release proof.' : 'Checking evidence, provider state, and release context.',
|
|
17969
18017
|
},
|
|
17970
18018
|
diff: {
|
|
17971
18019
|
title: 'Reviewing diff',
|
|
17972
|
-
label: 'Review
|
|
18020
|
+
label: 'Review release diff',
|
|
17973
18021
|
prompt: [
|
|
17974
|
-
'Review the current
|
|
18022
|
+
'Review the current release diff for this project.',
|
|
17975
18023
|
'',
|
|
17976
18024
|
'Project status: ' + gateLabel,
|
|
17977
18025
|
topBlocker ? 'Top blocker context: ' + topBlocker.title : '',
|
|
@@ -17986,7 +18034,7 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
17986
18034
|
title: 'Explaining changes',
|
|
17987
18035
|
label: 'Explain changes & next steps',
|
|
17988
18036
|
prompt: [
|
|
17989
|
-
'Explain
|
|
18037
|
+
'Explain what changed and what to verify next.',
|
|
17990
18038
|
'',
|
|
17991
18039
|
'Project status: ' + gateLabel,
|
|
17992
18040
|
mainBlocker ? 'Main blocker: ' + mainBlocker : '',
|
|
@@ -18029,6 +18077,38 @@ function resolveQuickActionMission(kind, chatIndex, promptOverride) {
|
|
|
18029
18077
|
steps: missingProvider ? ['Check repo', 'List env', 'Dashboard steps'] : ['Read provider', 'Check proof', 'Attach context'],
|
|
18030
18078
|
notice: missingProvider ? provider.name + ' connect mission started.' : provider.name + ' proof check started.',
|
|
18031
18079
|
},
|
|
18080
|
+
'go-live': {
|
|
18081
|
+
title: 'Preparing GitHub and Vercel launch',
|
|
18082
|
+
label: 'Go live on GitHub + Vercel',
|
|
18083
|
+
prompt: [
|
|
18084
|
+
'Take this local project live through GitHub and Vercel with explicit proof.',
|
|
18085
|
+
'',
|
|
18086
|
+
'Project status: ' + gateLabel + ' (' + (gate.status || 'unknown') + ')',
|
|
18087
|
+
'Main blocker: ' + mainBlocker,
|
|
18088
|
+
blockers.length ? 'Known blockers from the latest scan:\\n' + blockerText : 'No scan blockers loaded yet - inspect the repo and .viberaven artifacts if present.',
|
|
18089
|
+
connectText ? '\\nProviders needing connect:\\n' + connectText : '',
|
|
18090
|
+
'',
|
|
18091
|
+
'Launch path:',
|
|
18092
|
+
'1. Inspect git status, branch, remotes, package scripts, Vercel config, and deploy notes before changing anything.',
|
|
18093
|
+
'2. Detect GitHub/Vercel tools with gh --version, gh auth status, vercel --version or npx vercel --version, and vercel whoami or npx vercel whoami.',
|
|
18094
|
+
'3. Run the narrowest local build/typecheck/test command that proves the app can ship.',
|
|
18095
|
+
'4. If no GitHub remote exists and gh is authenticated, create the repo and push after repo name/visibility are clear. If auth/manual setup is needed, open ' + goLiveUrls.githubLogin + ' or ' + goLiveUrls.githubNew + '.',
|
|
18096
|
+
'5. Connect or verify Vercel project linkage, framework/build settings, env var names, and production deploy command. If auth/manual setup is needed, open ' + goLiveUrls.vercelLogin + ', ' + goLiveUrls.vercelNew + ', or ' + goLiveUrls.vercelDashboard + '.',
|
|
18097
|
+
'6. Deploy when auth and intent are clear for the selected access mode. Capture deployment URL and verify it if possible.',
|
|
18098
|
+
'',
|
|
18099
|
+
'Rules:',
|
|
18100
|
+
'- Do every safe step directly. Do not stop at a checklist if commands or official pages can move the launch forward.',
|
|
18101
|
+
'- Do not include .env files, secrets, build output, or unrelated dirty work in commits.',
|
|
18102
|
+
'- Do not ask for passwords, cookies, tokens, API keys, or secret values.',
|
|
18103
|
+
'- Do not claim GitHub or Vercel dashboard state is complete without CLI, MCP, dashboard, or live URL proof.',
|
|
18104
|
+
'- Avoid destructive git operations and force pushes unless the user explicitly asks and the risk is explained.',
|
|
18105
|
+
'',
|
|
18106
|
+
'Return a launch receipt with GitHub repo/branch/SHA, Vercel project/deployment URL, local proof command, live proof result, links opened, and remaining dashboard actions.',
|
|
18107
|
+
].filter(Boolean).join('\\n'),
|
|
18108
|
+
line: 'Connecting repo evidence to GitHub, Vercel, and live deployment proof.',
|
|
18109
|
+
steps: ['Check repo', 'Push GitHub', 'Deploy Vercel', 'Verify live'],
|
|
18110
|
+
notice: 'Go Live mission started for GitHub and Vercel.',
|
|
18111
|
+
},
|
|
18032
18112
|
};
|
|
18033
18113
|
|
|
18034
18114
|
const mission = missions[kind] || missions.analyze;
|
|
@@ -18110,6 +18190,13 @@ function quickActionButtonSpec(index) {
|
|
|
18110
18190
|
hint: gateClear ? 'Re-verify readiness' : 'Verify readiness',
|
|
18111
18191
|
primary: true,
|
|
18112
18192
|
},
|
|
18193
|
+
{
|
|
18194
|
+
action: 'go-live',
|
|
18195
|
+
icon: 'cloud',
|
|
18196
|
+
label: 'Go live',
|
|
18197
|
+
hint: 'Push GitHub + deploy Vercel',
|
|
18198
|
+
primary: true,
|
|
18199
|
+
},
|
|
18113
18200
|
{
|
|
18114
18201
|
action: 'provider-proof',
|
|
18115
18202
|
icon: 'cube',
|
|
@@ -18171,7 +18258,7 @@ function runChatTask(kind, promptOverride) {
|
|
|
18171
18258
|
const responseText = isError
|
|
18172
18259
|
? (message || 'The connected CLI did not return a usable response.')
|
|
18173
18260
|
: (message || 'Ready for the next safe action.');
|
|
18174
|
-
const attachKinds = ['analyze', 'plan', 'provider', 'verify'];
|
|
18261
|
+
const attachKinds = ['analyze', 'plan', 'provider', 'verify', 'go-live'];
|
|
18175
18262
|
const cards = attachKinds.includes(kind)
|
|
18176
18263
|
? (cardsPayload || missionCards)
|
|
18177
18264
|
: (cardsPayload && ['diff', 'explain'].includes(kind) ? cardsPayload : null);
|
|
@@ -18196,7 +18283,7 @@ function runChatTask(kind, promptOverride) {
|
|
|
18196
18283
|
demo.notice = 'Verification finished in chat. Launch proof is green.';
|
|
18197
18284
|
} else if (kind === 'fix') {
|
|
18198
18285
|
demo.activeStepId = 'verify';
|
|
18199
|
-
demo.notice = 'Fix prepared in chat. Run Verify to update
|
|
18286
|
+
demo.notice = 'Fix prepared in chat. Run Verify to update release proof.';
|
|
18200
18287
|
} else {
|
|
18201
18288
|
demo.notice = taskMeta(kind).title + ' finished in chat.';
|
|
18202
18289
|
}
|
|
@@ -18501,16 +18588,16 @@ function AgentModal() {
|
|
|
18501
18588
|
return ModalShell('agent',
|
|
18502
18589
|
'<header class="vr-modal-agent-head">' +
|
|
18503
18590
|
'<img class="vr-modal-agent-avatar" src="' + mascotUrl() + '" alt="" />' +
|
|
18504
|
-
'<div><p>Agent Action</p><h2>VibeRaven</h2><em>' + (verified ? 'Everything is verified in preview mode.' : fixing ? 'I am fixing the
|
|
18591
|
+
'<div><p>Agent Action</p><h2>VibeRaven</h2><em>' + (verified ? 'Everything is verified in preview mode.' : fixing ? 'I am fixing the evidenced change now.' : 'I will fix the issue with release and provider context.') + '</em></div>' +
|
|
18505
18592
|
'<aside>' + Icon('clock') + '<span>' + (verified ? 'Status' : 'Estimated time') + '</span><strong>' + (verified ? 'Complete' : fixing ? 'Running' : '2 - 4 min') + '</strong></aside>' +
|
|
18506
18593
|
'</header>' +
|
|
18507
18594
|
'<section class="vr-modal-tasklist"><h3>Task checklist</h3><ul>' +
|
|
18508
|
-
ModalCheck('Diagnose issue', 'Find the highest-impact
|
|
18509
|
-
ModalCheck('Apply focused fix', 'Patch only the
|
|
18595
|
+
ModalCheck('Diagnose issue', 'Find the highest-impact context gap.', fixing || verified ? 'done' : 'active', fixing || verified ? 'OK' : 'Ready') +
|
|
18596
|
+
ModalCheck('Apply focused fix', 'Patch only the evidenced change.', verified ? 'done' : fixing ? 'running' : 'pending', verified ? 'OK' : fixing ? 'Running' : 'Pending') +
|
|
18510
18597
|
ModalCheck('Run verification tests', 'Confirm the flow is safe after the fix.', verified ? 'done' : fixing ? 'active' : 'pending', verified ? 'OK' : fixing ? 'Queued' : 'Pending') +
|
|
18511
18598
|
ModalCheck('Confirm systems operational', 'Move the launch flow to clear.', verified ? 'done' : 'pending') +
|
|
18512
18599
|
'</ul></section>' +
|
|
18513
|
-
'<section class="vr-modal-progress ' + (!verified && !fixing ? 'is-ready' : '') + '">' + Icon('shield') + '<div><strong>' + (verified ? 'Verification complete' : fixing ? 'Fix in progress' : 'Ready for focused fix') + '</strong><p>' + (verified ? 'The launch flow is green in preview mode.' : fixing ? 'Running checks to
|
|
18600
|
+
'<section class="vr-modal-progress ' + (!verified && !fixing ? 'is-ready' : '') + '">' + Icon('shield') + '<div><strong>' + (verified ? 'Verification complete' : fixing ? 'Fix in progress' : 'Ready for focused fix') + '</strong><p>' + (verified ? 'The launch flow is green in preview mode.' : fixing ? 'Running checks to keep the fix grounded.' : 'Start the agent when you are ready to patch the evidenced change.') + '</p></div>' + Icon('spark') + '</section>' +
|
|
18514
18601
|
'<div class="vr-modal-button-row">' +
|
|
18515
18602
|
GlowButton(fixing ? 'Fixing...' : verified ? 'Complete' : 'Start Agent Fix', { action: 'start-agent-fix', tone: verified ? 'green' : 'purple' }) +
|
|
18516
18603
|
'<button type="button" data-action="verify-now">Verify Now</button>' +
|
|
@@ -18529,7 +18616,7 @@ function GuideModal() {
|
|
|
18529
18616
|
'</header>' +
|
|
18530
18617
|
'<section class="vr-modal-flow-list">' +
|
|
18531
18618
|
'<button type="button" data-provider="' + escapeHtml(provider.id) + '"><span>1</span><div><strong>Review provider proof</strong><em>Open ' + escapeHtml(provider.name) + ' status and dashboard action.</em></div>' + Icon('external') + '</button>' +
|
|
18532
|
-
'<button type="button" data-action="prompt"><span>2</span><div><strong>Open agent mission</strong><em>Give the connected CLI one
|
|
18619
|
+
'<button type="button" data-action="prompt"><span>2</span><div><strong>Open agent mission</strong><em>Give the connected CLI one evidenced change, not the whole app.</em></div>' + Icon('prompt') + '</button>' +
|
|
18533
18620
|
'<button type="button" data-action="verify-now"><span>3</span><div><strong>Verify the flow</strong><em>Turn the launch path green after the focused fix.</em></div>' + Icon('check') + '</button>' +
|
|
18534
18621
|
'</section>'
|
|
18535
18622
|
);
|
|
@@ -18556,13 +18643,13 @@ function PlanModal() {
|
|
|
18556
18643
|
return ModalShell('plan',
|
|
18557
18644
|
'<header class="vr-modal-guide-head">' +
|
|
18558
18645
|
'<img class="vr-modal-agent-avatar" src="' + mascotAssets.idle + '" alt="" />' +
|
|
18559
|
-
'<div><p>
|
|
18646
|
+
'<div><p>Release Plan</p><h2>Safe fix path</h2><em>One scoped mission: understand what changed, fix it, then prepare release proof.</em></div>' +
|
|
18560
18647
|
'<aside>' + Icon('shield') + '<span>Context</span><strong>' + escapeHtml(provider.name) + '</strong></aside>' +
|
|
18561
18648
|
'</header>' +
|
|
18562
18649
|
'<section class="vr-modal-flow-list">' +
|
|
18563
18650
|
'<button type="button" data-action="add-context"><span>1</span><div><strong>Add launch context</strong><em>Drag a provider or version into chat so the agent has the exact proof target.</em></div>' + Icon('plus') + '</button>' +
|
|
18564
|
-
'<button type="button" data-action="prompt"><span>2</span><div><strong>Open scoped mission</strong><em>Use a
|
|
18565
|
-
'<button type="button" data-action="start-agent-fix"><span>3</span><div><strong>Apply one fix</strong><em>Send the connected model to patch the
|
|
18651
|
+
'<button type="button" data-action="prompt"><span>2</span><div><strong>Open scoped mission</strong><em>Use a context-aware prompt tied to ' + escapeHtml(provider.area) + ' evidence.</em></div>' + Icon('prompt') + '</button>' +
|
|
18652
|
+
'<button type="button" data-action="start-agent-fix"><span>3</span><div><strong>Apply one fix</strong><em>Send the connected model to patch the evidenced change only.</em></div>' + Icon('agent') + '</button>' +
|
|
18566
18653
|
'<button type="button" data-action="show-diff"><span>4</span><div><strong>Review diff</strong><em>Inspect repo changes before accepting verification.</em></div>' + Icon('code') + '</button>' +
|
|
18567
18654
|
'<button type="button" data-action="verify-now"><span>5</span><div><strong>Run verify</strong><em>Move the mission into a green verified state after review.</em></div>' + Icon('check') + '</button>' +
|
|
18568
18655
|
'</section>' +
|
|
@@ -18835,7 +18922,7 @@ function ChatFirstTimeConnect(index) {
|
|
|
18835
18922
|
: '<p class="vr-chat-first-connect-note">Click Connect to open the Terminal tab \u2014 install, sign in, then test connection.</p>';
|
|
18836
18923
|
return '<section class="vr-chat-empty-state vr-chat-first-connect" data-chat-index="' + String(index) + '">' +
|
|
18837
18924
|
'<strong>First time</strong>' +
|
|
18838
|
-
'<span>Connect
|
|
18925
|
+
'<span>Connect your repo agent through VibeRaven Studio.</span>' +
|
|
18839
18926
|
'<div class="vr-cli-strip is-inline">' + codingAgents.map((agent) => CliAgentButton(agent, index)).join('') + '</div>' +
|
|
18840
18927
|
hintLine +
|
|
18841
18928
|
'</section>';
|
|
@@ -19317,7 +19404,9 @@ function linkLabelForUrl(url) {
|
|
|
19317
19404
|
if (lower.includes('sentry.io')) return 'Open Sentry';
|
|
19318
19405
|
if (lower.includes('supabase.com')) return 'Open Supabase';
|
|
19319
19406
|
if (lower.includes('vercel.com')) return 'Open Vercel';
|
|
19407
|
+
if (lower.includes('github.com')) return 'Open GitHub';
|
|
19320
19408
|
if (lower.includes('stripe.com')) return 'Open Stripe';
|
|
19409
|
+
if (lower.includes('cli.github.com')) return 'Open GitHub CLI docs';
|
|
19321
19410
|
if (lower.includes('dashboard')) return 'Open dashboard';
|
|
19322
19411
|
return 'Open link';
|
|
19323
19412
|
}
|
|
@@ -19376,7 +19465,7 @@ function renderAgentListItems(items, chatIndex) {
|
|
|
19376
19465
|
function normalizeAgentSectionKey(raw) {
|
|
19377
19466
|
const key = String(raw || '').trim().toLowerCase().replace(/\\s*\\(\\d+\\)\\s*$/, '').trim();
|
|
19378
19467
|
if (/^(gate|production gate)$/.test(key)) return null;
|
|
19379
|
-
if (/^(blockers?|
|
|
19468
|
+
if (/^(blockers?|context gaps?)$/.test(key)) return 'Context gaps';
|
|
19380
19469
|
if (/^(suggested steps?|fix plan)$/.test(key)) return 'Suggested steps';
|
|
19381
19470
|
if (/^(summary|tl;dr|tldr)$/.test(key)) return 'Summary';
|
|
19382
19471
|
if (key === 'findings') return 'Findings';
|
|
@@ -19475,6 +19564,7 @@ function renderAgentSectionCard(section, chatIndex) {
|
|
|
19475
19564
|
const blob = section.items.concat(section.paragraphs).join(' ').toLowerCase();
|
|
19476
19565
|
const actions = [];
|
|
19477
19566
|
if (/fix|wire|implement|add|configure|apply|sentry|monitor/.test(blob)) actions.push(agentApplyFixButton(chatIndex));
|
|
19567
|
+
if (blob.includes('github')) actions.push(agentLinkButton('Open GitHub', providerDashboardUrls.github || goLiveUrls.githubNew));
|
|
19478
19568
|
if (blob.includes('sentry')) actions.push(agentLinkButton('Open Sentry', providerDashboardUrls.sentry || 'https://sentry.io'));
|
|
19479
19569
|
if (blob.includes('supabase')) actions.push(agentLinkButton('Open Supabase', providerDashboardUrls.supabase || 'https://supabase.com/dashboard/projects'));
|
|
19480
19570
|
if (blob.includes('vercel')) actions.push(agentLinkButton('Open Vercel', providerDashboardUrls.vercel || 'https://vercel.com/dashboard'));
|
|
@@ -19849,12 +19939,13 @@ function AgentActionPanel() {
|
|
|
19849
19939
|
return '<aside class="vr-agent-panel" aria-label="VibeRaven AI Agent panel">' +
|
|
19850
19940
|
'<div class="vr-agent-control">' +
|
|
19851
19941
|
'<section class="vr-agent-hero ' + (fixing ? 'is-fixing' : '') + (verified ? ' is-verified' : '') + '">' +
|
|
19852
|
-
'<div><p>VibeRaven Agent</p><h2>' + (verified ? 'Ready
|
|
19942
|
+
'<div><p>VibeRaven Agent</p><h2>' + (verified ? 'Ready with proof' : fixing ? 'Fixing what changed' : 'Ready') + '</h2><em>' + (verified ? 'High confidence. Safe to proceed.' : fixing ? 'Patching proof now.' : 'High confidence. Safe to proceed.') + '</em></div>' +
|
|
19853
19943
|
'<img src="' + mascotUrl() + '" alt="" />' +
|
|
19854
19944
|
'</section>' +
|
|
19855
19945
|
'<section class="vr-quick-actions"><h3>Quick Actions</h3>' +
|
|
19856
19946
|
[
|
|
19857
|
-
{ id: '
|
|
19947
|
+
{ id: 'go-live', icon: 'cloud', title: 'Go Live', caption: 'GitHub + Vercel' },
|
|
19948
|
+
{ id: 'guide', icon: 'guide', title: 'Analyze Issues', caption: 'Find what changed' },
|
|
19858
19949
|
{ id: 'show-diff', icon: 'code', title: 'View Diff', caption: 'Review changes' },
|
|
19859
19950
|
{ id: 'recheck', icon: 'refresh', title: 'Run Verify', caption: 'Run checks again' },
|
|
19860
19951
|
{ id: 'explain-changes', icon: 'prompt', title: 'Explain Changes', caption: 'Summarize the fix' },
|
|
@@ -20407,7 +20498,7 @@ app.addEventListener('click', async (event) => {
|
|
|
20407
20498
|
}
|
|
20408
20499
|
if (action === 'copy-prompt') {
|
|
20409
20500
|
const copied = await copyText(agentPromptText());
|
|
20410
|
-
demo.notice = copied ? 'Agent mission ready. Keep the connected CLI scoped to
|
|
20501
|
+
demo.notice = copied ? 'Agent mission ready. Keep the connected CLI scoped to the evidenced change.' : 'Mission is still visible; clipboard permission was not available.';
|
|
20411
20502
|
render();
|
|
20412
20503
|
return;
|
|
20413
20504
|
}
|
|
@@ -20637,12 +20728,17 @@ app.addEventListener('click', async (event) => {
|
|
|
20637
20728
|
runChatTask('analyze');
|
|
20638
20729
|
return;
|
|
20639
20730
|
}
|
|
20731
|
+
if (action === 'go-live') {
|
|
20732
|
+
demo.pickerChatIndex = actionChatIndex;
|
|
20733
|
+
runChatTask('go-live');
|
|
20734
|
+
return;
|
|
20735
|
+
}
|
|
20640
20736
|
if (action === 'prompt') {
|
|
20641
20737
|
demo.activeNavId = 'agents';
|
|
20642
20738
|
demo.activeStepId = 'agent';
|
|
20643
20739
|
demo.providerPickerOpen = false;
|
|
20644
20740
|
demo.activeModal = 'prompt';
|
|
20645
|
-
demo.notice = 'Agent mission is ready. Keep the fix scoped to the
|
|
20741
|
+
demo.notice = 'Agent mission is ready. Keep the fix scoped to the evidenced change.';
|
|
20646
20742
|
render();
|
|
20647
20743
|
return;
|
|
20648
20744
|
}
|
|
@@ -20726,7 +20822,7 @@ app.addEventListener('click', async (event) => {
|
|
|
20726
20822
|
environment: 'Environment selector is scoped to the local Studio preview.',
|
|
20727
20823
|
account: 'VibeRaven agent opened from the header mascot.',
|
|
20728
20824
|
'all-releases': 'Release history view opens next; this preview keeps the timeline focused.',
|
|
20729
|
-
'explain-changes': 'Change summary opened
|
|
20825
|
+
'explain-changes': 'Change summary opened with release-context wording.',
|
|
20730
20826
|
};
|
|
20731
20827
|
if (actionMessages[action]) {
|
|
20732
20828
|
if (action === 'all-releases') {
|
|
@@ -20899,7 +20995,7 @@ app.addEventListener('drop', (event) => {
|
|
|
20899
20995
|
if (newChatTarget) demo.activeRecentChatId = null;
|
|
20900
20996
|
if (chatIndex === 0) syncPrimaryContext();
|
|
20901
20997
|
if (provider && provider.state === 'not_detected') {
|
|
20902
|
-
context.draft = 'Help me connect ' + provider.name + '
|
|
20998
|
+
context.draft = 'Help me connect ' + provider.name + ' with context. What provider state, runtime behavior, or dashboard proof does this repo need?';
|
|
20903
20999
|
demo.notice = provider.name + ' is missing \u2014 connect steps prefilled. Send when ready.';
|
|
20904
21000
|
} else {
|
|
20905
21001
|
demo.notice = provider ? provider.name + ' context attached to chat ' + String(chatIndex + 1) + '. Suggested actions updated for ' + (stackSlots[provider.id] || provider.area) + '.' : 'Provider context attached.';
|
|
@@ -28739,17 +28835,17 @@ function parseAgentChatRequest(value) {
|
|
|
28739
28835
|
function taskKindExecutionBlock(taskKind) {
|
|
28740
28836
|
switch (taskKind) {
|
|
28741
28837
|
case "analyze":
|
|
28742
|
-
return "Execution mode: analyze
|
|
28838
|
+
return "Execution mode: analyze what changed. Read repo files and .viberaven artifacts; return concise findings with paths. Do not dump CLI install manuals or numbered manual runbooks.";
|
|
28743
28839
|
case "plan":
|
|
28744
28840
|
return "Execution mode: build an ordered fix plan from repo evidence. If the top blocker is repo-code, apply that fix in the project before answering. Do not reply with only manual instructions when code edits are possible.";
|
|
28745
28841
|
case "fix":
|
|
28746
28842
|
return "Execution mode: apply one minimal scoped repo fix IN CODE NOW. Read existing files, edit the project, save changes, then summarize. Forbidden: telling the user what to do manually when you can patch the repo yourself.";
|
|
28747
28843
|
case "verify":
|
|
28748
|
-
return "Execution mode: verify
|
|
28844
|
+
return "Execution mode: verify the what-changed context. Prefer `npx -y viberaven --verify` or read .viberaven/gate-result.json and agent-tasklist.md.";
|
|
28749
28845
|
case "provider":
|
|
28750
28846
|
return "Execution mode: provider proof or connect mission. Edit repo wiring when missing; separate dashboard-only steps from code changes; never claim live connection without proof.";
|
|
28751
28847
|
case "diff":
|
|
28752
|
-
return "Execution mode: review
|
|
28848
|
+
return "Execution mode: review the release diff and flag risky changes.";
|
|
28753
28849
|
case "explain":
|
|
28754
28850
|
return "Execution mode: explain recent changes and next verification steps.";
|
|
28755
28851
|
default:
|
|
@@ -28778,7 +28874,7 @@ async function buildAgentChatPrompt(request, cwd) {
|
|
|
28778
28874
|
const mcp = providerState2?.mcp;
|
|
28779
28875
|
const releaseDiffBlock = await releaseDiffContextBlock(cwd, request.release?.id);
|
|
28780
28876
|
const lines = [
|
|
28781
|
-
"You are VibeRaven Studio, a
|
|
28877
|
+
"You are VibeRaven Studio, a what-changed coding agent for an open-source local runner.",
|
|
28782
28878
|
`Project folder: ${cwd}`,
|
|
28783
28879
|
request.modelId ? `Selected model label: ${request.modelId}` : void 0,
|
|
28784
28880
|
request.reasoning ? `Reasoning: ${request.reasoning}` : void 0,
|
|
@@ -28797,7 +28893,7 @@ async function buildAgentChatPrompt(request, cwd) {
|
|
|
28797
28893
|
"- Stay scoped to this project folder.",
|
|
28798
28894
|
(request.accessMode ?? "approve") === "ask" ? "- Ask before editing files, using the internet, running destructive commands, or changing provider settings." : (request.accessMode ?? "approve") === "full" ? "- Full access is enabled for this local project; still explain destructive changes before running them." : "- Edit project files when needed, but explain risky or destructive changes before making them.",
|
|
28799
28895
|
"- Do not claim provider dashboard setup is complete from repo edits alone.",
|
|
28800
|
-
"- Keep the answer focused on
|
|
28896
|
+
"- Keep the answer focused on what changed, provider context, and the next grounded action.",
|
|
28801
28897
|
"- Return only the final user-facing answer. Do not echo this prompt, session metadata, logs, or command transcripts.",
|
|
28802
28898
|
"- For fix/plan/provider repo gaps: edit files in this project before answering. Manual dashboard steps are only for gaps that cannot be solved in repo code.",
|
|
28803
28899
|
"- Never paste long VibeRaven operator manuals, heal loops, or PowerShell command blocks unless the user explicitly asked how to run verify.",
|
|
@@ -29195,7 +29291,7 @@ async function sendReportArtifact(cwd, response) {
|
|
|
29195
29291
|
</div>
|
|
29196
29292
|
<section class="steps" aria-label="Report next steps">
|
|
29197
29293
|
<div class="step"><b>1. Manage providers</b><span>Use the Provider Control Board to review each slot and open the right dashboard.</span></div>
|
|
29198
|
-
<div class="step"><b>2. Start agent fix</b><span>Preview the handoff flow and keep the fix scoped to one
|
|
29294
|
+
<div class="step"><b>2. Start agent fix</b><span>Preview the handoff flow and keep the fix scoped to one evidenced change.</span></div>
|
|
29199
29295
|
<div class="step"><b>3. Verify</b><span>Use Verify Now in the launch screen when you are ready to check the flow.</span></div>
|
|
29200
29296
|
</section>
|
|
29201
29297
|
<div class="actions">
|
|
@@ -29682,7 +29778,7 @@ function buildNextActionBlock(tasks, loopState, plan) {
|
|
|
29682
29778
|
return {
|
|
29683
29779
|
...base,
|
|
29684
29780
|
type: "stalled",
|
|
29685
|
-
title: "Loop stalled \
|
|
29781
|
+
title: "Loop stalled \xE2\u20AC\u201D no gap reduction after 2+ consecutive scans",
|
|
29686
29782
|
requiresUserAction: true,
|
|
29687
29783
|
stallReason
|
|
29688
29784
|
};
|
|
@@ -29691,7 +29787,7 @@ function buildNextActionBlock(tasks, loopState, plan) {
|
|
|
29691
29787
|
return {
|
|
29692
29788
|
...base,
|
|
29693
29789
|
type: "verify",
|
|
29694
|
-
title: "Batch complete \
|
|
29790
|
+
title: "Batch complete \xE2\u20AC\u201D run verify to rescan before next batch",
|
|
29695
29791
|
mcpTool: "viberaven_verify",
|
|
29696
29792
|
mcpArgs: {},
|
|
29697
29793
|
requiresUserAction: false
|
|
@@ -29734,7 +29830,7 @@ function buildNextActionBlock(tasks, loopState, plan) {
|
|
|
29734
29830
|
return {
|
|
29735
29831
|
...base,
|
|
29736
29832
|
type: "done",
|
|
29737
|
-
title: "All gaps resolved
|
|
29833
|
+
title: "All gaps resolved - what-changed context is clear",
|
|
29738
29834
|
requiresUserAction: false
|
|
29739
29835
|
};
|
|
29740
29836
|
}
|
|
@@ -29907,15 +30003,15 @@ __export(cli_exports, {
|
|
|
29907
30003
|
});
|
|
29908
30004
|
module.exports = __toCommonJS(cli_exports);
|
|
29909
30005
|
function printHelp() {
|
|
29910
|
-
console.log(`viberaven ${VERSION}
|
|
30006
|
+
console.log(`viberaven ${VERSION} - what changed for AI-built apps
|
|
29911
30007
|
|
|
29912
30008
|
|
|
29913
30009
|
|
|
29914
30010
|
Usage:
|
|
29915
30011
|
|
|
29916
|
-
viberaven Open the local
|
|
30012
|
+
viberaven Open the local Studio for human TTY use
|
|
29917
30013
|
|
|
29918
|
-
viberaven ui [path] Open the local
|
|
30014
|
+
viberaven ui [path] Open the local Studio
|
|
29919
30015
|
|
|
29920
30016
|
viberaven tui Same interactive menu
|
|
29921
30017
|
|
|
@@ -29926,7 +30022,7 @@ Usage:
|
|
|
29926
30022
|
viberaven status
|
|
29927
30023
|
|
|
29928
30024
|
viberaven actions [--json] [path]
|
|
29929
|
-
Print current chat-native
|
|
30025
|
+
Print current chat-native action surface
|
|
29930
30026
|
|
|
29931
30027
|
viberaven preview [--agent-mode] [--json]
|
|
29932
30028
|
Local production rehearsal for videos and onboarding; no login or API spend
|
|
@@ -29943,7 +30039,7 @@ Usage:
|
|
|
29943
30039
|
Agent-first scan; writes tasklist, gate-result, context-map, and per-gap JSON
|
|
29944
30040
|
|
|
29945
30041
|
viberaven --strict[=warning] [path]
|
|
29946
|
-
Fail when
|
|
30042
|
+
Fail when what-changed context is not clear; warning mode also fails on warnings
|
|
29947
30043
|
|
|
29948
30044
|
viberaven --condense [path]
|
|
29949
30045
|
Refresh .viberaven/context-map.json from the last scan
|
|
@@ -29988,7 +30084,7 @@ Agent workflow (Claude Code / Codex):
|
|
|
29988
30084
|
|
|
29989
30085
|
Read .viberaven/agent-tasklist.md first, .viberaven/gate-result.json for the machine verdict, then .viberaven/context-map.json
|
|
29990
30086
|
|
|
29991
|
-
viberaven next --json \
|
|
30087
|
+
viberaven next --json \xE2\u2020\u2019 guide/open \xE2\u2020\u2019 scan again
|
|
29992
30088
|
|
|
29993
30089
|
|
|
29994
30090
|
|
|
@@ -30004,7 +30100,7 @@ Environment:
|
|
|
30004
30100
|
|
|
30005
30101
|
Security:
|
|
30006
30102
|
|
|
30007
|
-
CLI scans use VibeRaven login \
|
|
30103
|
+
CLI scans use VibeRaven login \xE2\u20AC\u201D not OPENAI_API_KEY. See packages/cli/SECURITY.md.
|
|
30008
30104
|
|
|
30009
30105
|
`);
|
|
30010
30106
|
}
|
|
@@ -30197,7 +30293,7 @@ async function cmdStatus(flags, positional) {
|
|
|
30197
30293
|
console.log(`Plan: ${synced.plan ?? "unknown"}`);
|
|
30198
30294
|
console.log(formatUsageLine(usage));
|
|
30199
30295
|
if (artifact) {
|
|
30200
|
-
console.log(`Production core: ${artifact.productionCorePercent}% \xB7 Score ${artifact.score}`);
|
|
30296
|
+
console.log(`Production core: ${artifact.productionCorePercent}% \xC2\xB7 Score ${artifact.score}`);
|
|
30201
30297
|
console.log(
|
|
30202
30298
|
`Lanes: ${usage.unlockedMapCategoryKeys.length}/${PRODUCTION_MAP_CATEGORY_KEYS_ALL.length} unlocked`
|
|
30203
30299
|
);
|
|
@@ -30338,7 +30434,7 @@ async function runScanCommand(flags, positional, options) {
|
|
|
30338
30434
|
}
|
|
30339
30435
|
}
|
|
30340
30436
|
if (!options?.deferMachineOutput) {
|
|
30341
|
-
console.log(`Scanning ${workspacePath}\
|
|
30437
|
+
console.log(`Scanning ${workspacePath}\xE2\u20AC\xA6`);
|
|
30342
30438
|
}
|
|
30343
30439
|
const result = await runProjectScan({ workspacePath, accessToken, apiBaseUrl });
|
|
30344
30440
|
if (!result.ok) {
|
|
@@ -30484,7 +30580,7 @@ async function cmdStack(positional) {
|
|
|
30484
30580
|
const file = await loadStackChoicesFile(cwd);
|
|
30485
30581
|
file.choices[area] = { provider: provider2, selectedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
30486
30582
|
await saveStackChoicesFile(cwd, file);
|
|
30487
|
-
console.log(`Set ${area} \
|
|
30583
|
+
console.log(`Set ${area} \xE2\u2020\u2019 ${provider2}. Run \`viberaven scan\` to re-map.`);
|
|
30488
30584
|
return 0;
|
|
30489
30585
|
}
|
|
30490
30586
|
if (sub === "clear") {
|