@rune-kit/rune 2.2.6 → 2.3.1
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/README.md +395 -389
- package/compiler/__tests__/tier-override.test.js +158 -0
- package/compiler/adapters/antigravity.js +3 -8
- package/compiler/adapters/codex.js +3 -8
- package/compiler/adapters/cursor.js +3 -8
- package/compiler/adapters/generic.js +3 -8
- package/compiler/adapters/openclaw.js +4 -9
- package/compiler/adapters/opencode.js +3 -8
- package/compiler/adapters/windsurf.js +3 -8
- package/compiler/bin/rune.js +34 -1
- package/compiler/emitter.js +94 -5
- package/compiler/transforms/branding.js +10 -3
- package/docs/ARCHITECTURE.md +3 -3
- package/docs/SKILL-TEMPLATE.md +15 -0
- package/docs/VISION.md +3 -3
- package/docs/guides/index.html +14 -14
- package/docs/index.html +82 -13
- package/docs/script.js +33 -6
- package/docs/skills/index.html +832 -832
- package/docs/style.css +62 -0
- package/extensions/ai-ml/PACK.md +7 -0
- package/extensions/content/PACK.md +7 -0
- package/extensions/mobile/PACK.md +9 -9
- package/extensions/zalo/PACK.md +9 -0
- package/package.json +8 -6
- package/skills/adversary/SKILL.md +12 -0
- package/skills/audit/SKILL.md +526 -467
- package/skills/autopsy/SKILL.md +12 -0
- package/skills/ba/SKILL.md +349 -342
- package/skills/brainstorm/SKILL.md +11 -0
- package/skills/completion-gate/SKILL.md +260 -249
- package/skills/context-engine/SKILL.md +77 -1
- package/skills/context-pack/SKILL.md +160 -0
- package/skills/cook/SKILL.md +648 -958
- package/skills/cook/references/deviation-rules.md +19 -0
- package/skills/cook/references/error-recovery.md +37 -0
- package/skills/cook/references/exit-conditions.md +31 -0
- package/skills/cook/references/loop-detection.md +39 -0
- package/skills/cook/references/mid-run-signals.md +31 -0
- package/skills/cook/references/output-format.md +40 -0
- package/skills/cook/references/pack-detection.md +82 -0
- package/skills/cook/references/pause-resume-template.md +38 -0
- package/skills/cook/references/rfc-template.md +52 -0
- package/skills/cook/references/sharp-edges.md +24 -0
- package/skills/cook/references/subagent-status.md +38 -0
- package/skills/db/SKILL.md +12 -0
- package/skills/debug/SKILL.md +392 -362
- package/skills/deploy/SKILL.md +10 -0
- package/skills/deploy/references/post-deploy-integration.md +192 -0
- package/skills/design/SKILL.md +9 -0
- package/skills/docs/SKILL.md +12 -0
- package/skills/docs-seeker/SKILL.md +11 -0
- package/skills/fix/SKILL.md +281 -249
- package/skills/incident/SKILL.md +10 -0
- package/skills/launch/SKILL.md +12 -0
- package/skills/logic-guardian/SKILL.md +11 -0
- package/skills/marketing/SKILL.md +13 -0
- package/skills/mcp-builder/SKILL.md +13 -0
- package/skills/onboard/SKILL.md +50 -2
- package/skills/perf/SKILL.md +11 -0
- package/skills/plan/SKILL.md +342 -688
- package/skills/plan/references/completeness-scoring.md +36 -0
- package/skills/plan/references/outcome-block.md +40 -0
- package/skills/plan/references/plan-templates.md +193 -0
- package/skills/plan/references/wave-planning.md +44 -0
- package/skills/plan/references/workflow-registry.md +52 -0
- package/skills/preflight/SKILL.md +360 -280
- package/skills/rescue/SKILL.md +11 -0
- package/skills/research/SKILL.md +149 -150
- package/skills/retro/SKILL.md +11 -0
- package/skills/review/SKILL.md +489 -396
- package/skills/review-intake/SKILL.md +11 -0
- package/skills/safeguard/SKILL.md +12 -0
- package/skills/scaffold/SKILL.md +10 -0
- package/skills/scope-guard/SKILL.md +11 -0
- package/skills/scout/SKILL.md +9 -0
- package/skills/sentinel/SKILL.md +296 -425
- package/skills/sentinel/references/config-protection.md +52 -0
- package/skills/sentinel/references/destructive-commands.md +39 -0
- package/skills/sentinel/references/domain-hooks.md +73 -0
- package/skills/sentinel/references/framework-patterns.md +46 -0
- package/skills/sentinel/references/owasp-patterns.md +69 -0
- package/skills/sentinel/references/secret-patterns.md +40 -0
- package/skills/sentinel/references/skill-content-guard.md +54 -0
- package/skills/session-bridge/SKILL.md +56 -2
- package/skills/skill-forge/SKILL.md +47 -2
- package/skills/skill-router/{SKILL.md → skill.md} +446 -365
- package/skills/surgeon/SKILL.md +12 -0
- package/skills/team/SKILL.md +34 -1
- package/skills/test/SKILL.md +585 -427
- package/skills/watchdog/references/webhook-health-checks.md +243 -0
package/docs/guides/index.html
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Rune Guides — From Install to Production</title>
|
|
7
|
-
<meta name="description" content="Complete guide to using Rune — the
|
|
7
|
+
<meta name="description" content="Complete guide to using Rune — the 59-skill mesh for AI coding assistants. Install, configure, and master every workflow.">
|
|
8
8
|
<meta property="og:title" content="Rune Guides — From Install to Production">
|
|
9
|
-
<meta property="og:description" content="Learn how to use Rune's
|
|
9
|
+
<meta property="og:description" content="Learn how to use Rune's 59-skill mesh to supercharge your AI coding assistant.">
|
|
10
10
|
<meta property="og:type" content="website">
|
|
11
11
|
<meta property="og:url" content="https://rune-kit.github.io/rune/guides/">
|
|
12
12
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
@@ -559,7 +559,7 @@
|
|
|
559
559
|
<h2 id="what-is-rune">What is Rune?</h2>
|
|
560
560
|
|
|
561
561
|
<p>
|
|
562
|
-
<strong>Rune is a
|
|
562
|
+
<strong>Rune is a 59-skill mesh ecosystem</strong> for AI coding assistants. Instead of giving your AI one prompt at a time,
|
|
563
563
|
Rune gives it structured workflows where skills call each other automatically.
|
|
564
564
|
</p>
|
|
565
565
|
|
|
@@ -614,7 +614,7 @@
|
|
|
614
614
|
|
|
615
615
|
<span class="comment"># Verify it's loaded</span>
|
|
616
616
|
<span class="cmd">claude</span>
|
|
617
|
-
<span class="output">
|
|
617
|
+
<span class="output"> 59 skills loaded from rune</span></div>
|
|
618
618
|
<button class="copy-btn" data-copy="claude plugin marketplace add rune-kit/rune && claude plugin install rune">Copy</button>
|
|
619
619
|
</div>
|
|
620
620
|
<div class="callout callout-tip">
|
|
@@ -624,14 +624,14 @@
|
|
|
624
624
|
</div>
|
|
625
625
|
|
|
626
626
|
<div class="tab-panel" id="install-cursor">
|
|
627
|
-
<p>Cursor uses <code>.mdc</code> rule files. Rune compiles all
|
|
627
|
+
<p>Cursor uses <code>.mdc</code> rule files. Rune compiles all 59 skills into Cursor's format.</p>
|
|
628
628
|
<div class="code-wrapper">
|
|
629
629
|
<div class="code-block"><span class="comment"># In your project directory</span>
|
|
630
630
|
<span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform cursor</span></span>
|
|
631
631
|
|
|
632
632
|
<span class="output"> → Detected: cursor</span>
|
|
633
633
|
<span class="output"> ✓ Created rune.config.json</span>
|
|
634
|
-
<span class="output"> ✓ Built
|
|
634
|
+
<span class="output"> ✓ Built 59 skills + 14 extensions to .cursor/rules/</span></div>
|
|
635
635
|
<button class="copy-btn" data-copy="npx --yes @rune-kit/rune init --platform cursor">Copy</button>
|
|
636
636
|
</div>
|
|
637
637
|
<p>Skills are compiled into <code>.cursor/rules/</code>. Cursor picks them up automatically.</p>
|
|
@@ -642,7 +642,7 @@
|
|
|
642
642
|
<div class="code-wrapper">
|
|
643
643
|
<div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform windsurf</span></span>
|
|
644
644
|
|
|
645
|
-
<span class="output"> ✓ Built
|
|
645
|
+
<span class="output"> ✓ Built 59 skills + 14 extensions to .windsurf/rules/</span></div>
|
|
646
646
|
<button class="copy-btn" data-copy="npx --yes @rune-kit/rune init --platform windsurf">Copy</button>
|
|
647
647
|
</div>
|
|
648
648
|
</div>
|
|
@@ -652,7 +652,7 @@
|
|
|
652
652
|
<div class="code-wrapper">
|
|
653
653
|
<div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform antigravity</span></span>
|
|
654
654
|
|
|
655
|
-
<span class="output"> ✓ Built
|
|
655
|
+
<span class="output"> ✓ Built 59 skills + 14 extensions to .agent/rules/</span></div>
|
|
656
656
|
<button class="copy-btn" data-copy="npx --yes @rune-kit/rune init --platform antigravity">Copy</button>
|
|
657
657
|
</div>
|
|
658
658
|
<div class="callout callout-info">
|
|
@@ -667,7 +667,7 @@
|
|
|
667
667
|
<div class="code-wrapper">
|
|
668
668
|
<div class="code-block"><span class="cmd">clawhub install rune-kit</span>
|
|
669
669
|
|
|
670
|
-
<span class="comment"># All
|
|
670
|
+
<span class="comment"># All 59 skills installed as one mesh package</span>
|
|
671
671
|
<span class="comment"># Works with any OpenClaw-compatible agent</span></div>
|
|
672
672
|
<button class="copy-btn" data-copy="clawhub install rune-kit">Copy</button>
|
|
673
673
|
</div>
|
|
@@ -748,7 +748,7 @@
|
|
|
748
748
|
</div>
|
|
749
749
|
|
|
750
750
|
<p>
|
|
751
|
-
200+ connections between
|
|
751
|
+
200+ connections between 59 skills. When <code>debug</code> can't find the cause,
|
|
752
752
|
it escalates to <code>problem-solver</code>. When <code>cook</code> hits a wall 3 times,
|
|
753
753
|
it pivots to <code>brainstorm</code>. When <code>sentinel</code> finds a vulnerability,
|
|
754
754
|
it blocks the commit. The mesh is self-healing.
|
|
@@ -1050,7 +1050,7 @@
|
|
|
1050
1050
|
<span class="output"> ├── rune-fix/SKILL.md</span>
|
|
1051
1051
|
<span class="output"> ├── rune-plan/SKILL.md</span>
|
|
1052
1052
|
<span class="output"> ├── rune-test/SKILL.md</span>
|
|
1053
|
-
<span class="output"> └── ... (
|
|
1053
|
+
<span class="output"> └── ... (59 skills total)</span></div>
|
|
1054
1054
|
</div>
|
|
1055
1055
|
|
|
1056
1056
|
<p>
|
|
@@ -1109,7 +1109,7 @@
|
|
|
1109
1109
|
<div class="code-wrapper">
|
|
1110
1110
|
<div class="code-block"><span class="cmd">clawhub install rune-kit</span>
|
|
1111
1111
|
|
|
1112
|
-
<span class="comment"># All
|
|
1112
|
+
<span class="comment"># All 59 skills + 14 extension packs as one mesh package</span>
|
|
1113
1113
|
<span class="comment"># Slug: rune-kit on clawhub.ai</span></div>
|
|
1114
1114
|
</div>
|
|
1115
1115
|
|
|
@@ -1119,7 +1119,7 @@
|
|
|
1119
1119
|
</div>
|
|
1120
1120
|
|
|
1121
1121
|
<div class="callout callout-info">
|
|
1122
|
-
<strong>All platforms get the same
|
|
1122
|
+
<strong>All platforms get the same 59 skills.</strong> The compiler handles format differences.
|
|
1123
1123
|
Cross-references, tool names, and model hints are adapted per platform.
|
|
1124
1124
|
</div>
|
|
1125
1125
|
|
|
@@ -1256,7 +1256,7 @@
|
|
|
1256
1256
|
|
|
1257
1257
|
<h3>Is Rune free?</h3>
|
|
1258
1258
|
<p>
|
|
1259
|
-
Yes. The full
|
|
1259
|
+
Yes. The full 59-skill mesh + 14 extension packs are <strong>free forever, MIT license</strong>.
|
|
1260
1260
|
<a href="../#pricing">Rune Pro</a> ($49 lifetime) adds business department skills (Product, Sales, Data Science).
|
|
1261
1261
|
</p>
|
|
1262
1262
|
|
package/docs/index.html
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Rune — Less skills. Deeper connections.</title>
|
|
7
|
-
<meta name="description" content="
|
|
7
|
+
<meta name="description" content="59-skill mesh ecosystem for AI coding assistants. Works on Claude Code, Cursor, Windsurf, and any AI IDE.">
|
|
8
8
|
<meta property="og:title" content="Rune — AI Skill Mesh">
|
|
9
|
-
<meta property="og:description" content="
|
|
9
|
+
<meta property="og:description" content="59 skills, 200+ mesh connections, 8 platforms. From idea to production.">
|
|
10
10
|
<meta property="og:image" content="https://raw.githubusercontent.com/rune-kit/rune/master/assets/banner.svg">
|
|
11
11
|
<meta property="og:type" content="website">
|
|
12
12
|
<meta property="og:url" content="https://rune-kit.github.io/rune">
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
<canvas id="mesh-canvas"></canvas>
|
|
63
63
|
</div>
|
|
64
64
|
<div class="hero-content">
|
|
65
|
-
<p class="hero-badge">v2.
|
|
65
|
+
<p class="hero-badge">v2.3.1 — 59 skills • 8 platforms • MIT</p>
|
|
66
66
|
<h1>Less skills.<br><span class="accent">Deeper connections.</span></h1>
|
|
67
67
|
<p class="hero-sub">A mesh ecosystem for AI coding assistants. Skills call each other bidirectionally, forming resilient workflows that adapt when things go wrong.</p>
|
|
68
68
|
<div class="hero-actions">
|
|
@@ -231,7 +231,7 @@ D ↔ E ↔ F
|
|
|
231
231
|
<div class="feature-card">
|
|
232
232
|
<div class="feature-icon">🌐</div>
|
|
233
233
|
<h3>Multi-Platform</h3>
|
|
234
|
-
<p>Same
|
|
234
|
+
<p>Same 59 skills compile to Claude Code, Cursor, Windsurf, Antigravity, OpenAI Codex, OpenClaw, and generic. Zero knowledge loss across IDEs.</p>
|
|
235
235
|
</div>
|
|
236
236
|
</div>
|
|
237
237
|
</div>
|
|
@@ -256,13 +256,13 @@ claude plugin install rune</code></pre>
|
|
|
256
256
|
<h3>Cursor / Windsurf / Any IDE</h3>
|
|
257
257
|
<p class="install-badge">Compiled Rules</p>
|
|
258
258
|
<pre class="code-block"><code>npx @rune-kit/rune init</code></pre>
|
|
259
|
-
<p>Auto-detects platform. Compiles all
|
|
259
|
+
<p>Auto-detects platform. Compiles all 59 skills to native rule format.</p>
|
|
260
260
|
</div>
|
|
261
261
|
<div class="install-card">
|
|
262
262
|
<h3>OpenClaw</h3>
|
|
263
263
|
<p class="install-badge">ClawHub Registry</p>
|
|
264
264
|
<pre class="code-block"><code>clawhub install rune-kit</code></pre>
|
|
265
|
-
<p>
|
|
265
|
+
<p>59 skills as unified mesh package. Works with any OpenClaw agent.</p>
|
|
266
266
|
</div>
|
|
267
267
|
</div>
|
|
268
268
|
</div>
|
|
@@ -335,7 +335,7 @@ claude plugin install rune</code></pre>
|
|
|
335
335
|
<div class="mesh-tier-header">
|
|
336
336
|
<span class="mesh-tier-badge mesh-badge-free">FREE</span>
|
|
337
337
|
<strong>Core Mesh</strong>
|
|
338
|
-
<span class="mesh-tier-stats">
|
|
338
|
+
<span class="mesh-tier-stats">59 skills • 200+ connections</span>
|
|
339
339
|
</div>
|
|
340
340
|
<div class="mesh-layers">
|
|
341
341
|
<div class="mesh-layer">
|
|
@@ -839,12 +839,42 @@ claude plugin install rune</code></pre>
|
|
|
839
839
|
</div>
|
|
840
840
|
|
|
841
841
|
<!-- Step 4: Success -->
|
|
842
|
-
<div id="pay-step-4" class="pay-step" hidden>
|
|
843
|
-
<div class="pay-success-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
842
|
+
<div id="pay-step-4" class="pay-step pay-success" hidden>
|
|
843
|
+
<div class="pay-success-badge">
|
|
844
|
+
<svg class="pay-success-check" viewBox="0 0 52 52" width="52" height="52">
|
|
845
|
+
<circle class="pay-success-circle" cx="26" cy="26" r="24" fill="none" stroke="currentColor" stroke-width="2.5"/>
|
|
846
|
+
<path class="pay-success-tick" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" d="M15 27l7 7 15-15"/>
|
|
847
|
+
</svg>
|
|
848
|
+
</div>
|
|
849
|
+
<h3 class="pay-success-title">You're in!</h3>
|
|
850
|
+
<p class="pay-success-sub">A GitHub repo invitation is on its way to <strong id="pay-success-user"></strong></p>
|
|
851
|
+
|
|
852
|
+
<div class="pay-success-steps">
|
|
853
|
+
<div class="pay-success-step">
|
|
854
|
+
<span class="pay-success-num">1</span>
|
|
855
|
+
<div>
|
|
856
|
+
<strong>Check your GitHub email</strong>
|
|
857
|
+
<span>Look for an invite from <code>noreply@github.com</code> — usually within 1 minute</span>
|
|
858
|
+
</div>
|
|
859
|
+
</div>
|
|
860
|
+
<div class="pay-success-step">
|
|
861
|
+
<span class="pay-success-num">2</span>
|
|
862
|
+
<div>
|
|
863
|
+
<strong>Accept the invitation</strong>
|
|
864
|
+
<span>Click "View invitation" to join the private repo</span>
|
|
865
|
+
</div>
|
|
866
|
+
</div>
|
|
867
|
+
<div class="pay-success-step">
|
|
868
|
+
<span class="pay-success-num">3</span>
|
|
869
|
+
<div>
|
|
870
|
+
<strong>Install your packs</strong>
|
|
871
|
+
<span id="pay-success-install">Follow the setup guide in the repo README</span>
|
|
872
|
+
</div>
|
|
873
|
+
</div>
|
|
874
|
+
</div>
|
|
875
|
+
|
|
876
|
+
<button class="btn btn-primary pay-success-done" onclick="closePayment()">Got it</button>
|
|
877
|
+
<p class="pay-success-help">Didn't get the invite? Check spam, or email <a href="mailto:claude@theio.vn">claude@theio.vn</a></p>
|
|
848
878
|
</div>
|
|
849
879
|
|
|
850
880
|
<!-- Step 5: International — GitHub username + Polar checkout -->
|
|
@@ -861,6 +891,45 @@ claude plugin install rune</code></pre>
|
|
|
861
891
|
<button id="pay-intl-submit" class="btn btn-pro" style="width:100%;margin-top:16px" onclick="startPolarCheckout()">Pay with Card / PayPal</button>
|
|
862
892
|
<p class="pay-hint" style="margin-top:12px">You'll be redirected to Polar's secure checkout page</p>
|
|
863
893
|
</div>
|
|
894
|
+
|
|
895
|
+
<!-- Step 6: Success (Vietnamese — for SePay flow) -->
|
|
896
|
+
<div id="pay-step-6" class="pay-step pay-success notranslate" translate="no" hidden>
|
|
897
|
+
<div class="pay-success-badge">
|
|
898
|
+
<svg class="pay-success-check" viewBox="0 0 52 52" width="52" height="52">
|
|
899
|
+
<circle class="pay-success-circle" cx="26" cy="26" r="24" fill="none" stroke="currentColor" stroke-width="2.5"/>
|
|
900
|
+
<path class="pay-success-tick" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" d="M15 27l7 7 15-15"/>
|
|
901
|
+
</svg>
|
|
902
|
+
</div>
|
|
903
|
+
<h3 class="pay-success-title">Thanh toán thành công!</h3>
|
|
904
|
+
<p class="pay-success-sub">Lời mời truy cập repo đã được gửi đến <strong id="pay-success-user-vn"></strong></p>
|
|
905
|
+
|
|
906
|
+
<div class="pay-success-steps">
|
|
907
|
+
<div class="pay-success-step">
|
|
908
|
+
<span class="pay-success-num">1</span>
|
|
909
|
+
<div>
|
|
910
|
+
<strong>Kiểm tra email GitHub</strong>
|
|
911
|
+
<span>Tìm email mời từ <code>noreply@github.com</code> — thường trong vòng 1 phút</span>
|
|
912
|
+
</div>
|
|
913
|
+
</div>
|
|
914
|
+
<div class="pay-success-step">
|
|
915
|
+
<span class="pay-success-num">2</span>
|
|
916
|
+
<div>
|
|
917
|
+
<strong>Chấp nhận lời mời</strong>
|
|
918
|
+
<span>Nhấn "View invitation" để vào private repo</span>
|
|
919
|
+
</div>
|
|
920
|
+
</div>
|
|
921
|
+
<div class="pay-success-step">
|
|
922
|
+
<span class="pay-success-num">3</span>
|
|
923
|
+
<div>
|
|
924
|
+
<strong>Cài đặt skill packs</strong>
|
|
925
|
+
<span id="pay-success-install-vn">Làm theo hướng dẫn trong README của repo</span>
|
|
926
|
+
</div>
|
|
927
|
+
</div>
|
|
928
|
+
</div>
|
|
929
|
+
|
|
930
|
+
<button class="btn btn-primary pay-success-done" onclick="closePayment()">Xong</button>
|
|
931
|
+
<p class="pay-success-help">Chưa nhận được? Kiểm tra spam, hoặc email <a href="mailto:claude@theio.vn">claude@theio.vn</a></p>
|
|
932
|
+
</div>
|
|
864
933
|
</div>
|
|
865
934
|
</div>
|
|
866
935
|
|
package/docs/script.js
CHANGED
|
@@ -227,8 +227,9 @@ function closePayment() {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
function showPayStep(n) {
|
|
230
|
-
for (let i = 1; i <=
|
|
231
|
-
document.getElementById('pay-step-' + i)
|
|
230
|
+
for (let i = 1; i <= 6; i++) {
|
|
231
|
+
const el = document.getElementById('pay-step-' + i);
|
|
232
|
+
if (el) el.hidden = (i !== n);
|
|
232
233
|
}
|
|
233
234
|
}
|
|
234
235
|
|
|
@@ -290,7 +291,7 @@ async function startPolarCheckout() {
|
|
|
290
291
|
const data = await res.json();
|
|
291
292
|
if (!data.success || !data.url) throw new Error(data.error || 'Failed to create checkout');
|
|
292
293
|
|
|
293
|
-
// Redirect to Polar checkout page
|
|
294
|
+
// Redirect to Polar checkout page (context embedded in success_url by worker)
|
|
294
295
|
window.location.href = data.url;
|
|
295
296
|
} catch (err) {
|
|
296
297
|
errorEl.textContent = err.message;
|
|
@@ -365,8 +366,14 @@ function startPolling(github) {
|
|
|
365
366
|
if (data.status === 'delivered') {
|
|
366
367
|
clearInterval(payState.pollTimer);
|
|
367
368
|
payState.pollTimer = null;
|
|
368
|
-
|
|
369
|
-
|
|
369
|
+
// VN users → Vietnamese success (step 6)
|
|
370
|
+
const vnUser = document.getElementById('pay-success-user-vn');
|
|
371
|
+
if (vnUser) vnUser.textContent = github;
|
|
372
|
+
const vnInstall = document.getElementById('pay-success-install-vn');
|
|
373
|
+
if (vnInstall && (payState.product === 'rune-biz' || payState.product === 'RUNE-BIZ')) {
|
|
374
|
+
vnInstall.textContent = 'Bạn nhận cả Pro + Business packs — xem README trong repo';
|
|
375
|
+
}
|
|
376
|
+
showPayStep(6);
|
|
370
377
|
} else if (data.status === 'underpaid') {
|
|
371
378
|
document.getElementById('pay-status').innerHTML =
|
|
372
379
|
'<span style="color:var(--loss)">⚠ Amount too low. Please transfer the exact amount.</span>';
|
|
@@ -452,17 +459,37 @@ function startPolling(github) {
|
|
|
452
459
|
(function checkPolarReturn() {
|
|
453
460
|
const params = new URLSearchParams(window.location.search);
|
|
454
461
|
if (params.get('polar') === 'success') {
|
|
462
|
+
// Read context from URL (embedded by worker in success_url)
|
|
463
|
+
const github = params.get('gh') || 'your GitHub account';
|
|
464
|
+
const product = params.get('pkg') || '';
|
|
465
|
+
|
|
455
466
|
// Clean URL
|
|
456
467
|
window.history.replaceState({}, '', window.location.pathname);
|
|
468
|
+
|
|
457
469
|
// Show success message
|
|
458
470
|
const modal = document.getElementById('pay-modal');
|
|
459
471
|
if (modal) {
|
|
460
472
|
modal.hidden = false;
|
|
461
473
|
document.body.style.overflow = 'hidden';
|
|
462
|
-
|
|
474
|
+
showSuccessForProduct(product, github);
|
|
463
475
|
for (let i = 1; i <= 5; i++) {
|
|
464
476
|
document.getElementById('pay-step-' + i).hidden = (i !== 4);
|
|
465
477
|
}
|
|
466
478
|
}
|
|
467
479
|
}
|
|
468
480
|
})();
|
|
481
|
+
|
|
482
|
+
// Update success page based on product context
|
|
483
|
+
function showSuccessForProduct(product, github) {
|
|
484
|
+
const el = document.getElementById('pay-success-user');
|
|
485
|
+
if (el) el.textContent = github || 'your GitHub account';
|
|
486
|
+
|
|
487
|
+
const installEl = document.getElementById('pay-success-install');
|
|
488
|
+
if (!installEl) return;
|
|
489
|
+
|
|
490
|
+
if (product === 'rune-biz' || product === 'RUNE-BIZ') {
|
|
491
|
+
installEl.textContent = 'You get Pro + Business packs — check the repo README for setup';
|
|
492
|
+
} else {
|
|
493
|
+
installEl.textContent = 'Follow the setup guide in the repo README';
|
|
494
|
+
}
|
|
495
|
+
}
|