@rune-kit/rune 2.2.0 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +72 -40
  2. package/compiler/__tests__/pack-split.test.js +145 -0
  3. package/compiler/bin/rune.js +26 -9
  4. package/compiler/doctor.js +42 -0
  5. package/compiler/emitter.js +27 -4
  6. package/compiler/parser.js +41 -3
  7. package/compiler/transformer.js +10 -6
  8. package/compiler/transforms/compliance.js +40 -0
  9. package/docs/ANTIGRAVITY-GAP-ANALYSIS.md +369 -0
  10. package/docs/ARCHITECTURE.md +332 -0
  11. package/docs/COMMUNITY-PACKS.md +109 -0
  12. package/docs/CONTRIBUTING-L4.md +215 -0
  13. package/docs/CROSS-IDE-ANALYSIS.md +164 -0
  14. package/docs/EXTENSION-TEMPLATE.md +108 -0
  15. package/docs/MESH-RULES.md +34 -0
  16. package/docs/MULTI-PLATFORM.md +804 -0
  17. package/docs/SKILL-DEPTH-AUDIT.md +191 -0
  18. package/docs/SKILL-TEMPLATE.md +72 -0
  19. package/docs/TRADE-MATRIX.md +327 -0
  20. package/docs/VERSIONING.md +91 -0
  21. package/docs/VISION.md +263 -0
  22. package/docs/assets/demo-subtitles.srt +215 -0
  23. package/docs/assets/end-card.html +276 -0
  24. package/docs/assets/mesh-diagram.html +654 -0
  25. package/docs/assets/thumbnail.html +295 -0
  26. package/docs/guides/cli.md +403 -0
  27. package/docs/guides/index.html +1346 -0
  28. package/docs/index.html +674 -0
  29. package/docs/references/claudekit-analysis.md +414 -0
  30. package/docs/references/voltagent-analysis.md +189 -0
  31. package/docs/script.js +277 -0
  32. package/docs/skills/index.html +832 -0
  33. package/docs/style.css +583 -0
  34. package/docs/video-demo-plan.md +172 -0
  35. package/extensions/ai-ml/PACK.md +38 -474
  36. package/extensions/ai-ml/skills/ai-agents.md +172 -0
  37. package/extensions/ai-ml/skills/code-sandbox.md +187 -0
  38. package/extensions/ai-ml/skills/deep-research.md +146 -0
  39. package/extensions/ai-ml/skills/embedding-search.md +66 -0
  40. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -0
  41. package/extensions/ai-ml/skills/llm-architect.md +125 -0
  42. package/extensions/ai-ml/skills/llm-integration.md +64 -0
  43. package/extensions/ai-ml/skills/prompt-patterns.md +72 -0
  44. package/extensions/ai-ml/skills/rag-patterns.md +66 -0
  45. package/extensions/ai-ml/skills/web-extraction.md +114 -0
  46. package/extensions/analytics/PACK.md +19 -484
  47. package/extensions/analytics/skills/ab-testing.md +72 -0
  48. package/extensions/analytics/skills/dashboard-patterns.md +83 -0
  49. package/extensions/analytics/skills/data-validation.md +68 -0
  50. package/extensions/analytics/skills/funnel-analysis.md +81 -0
  51. package/extensions/analytics/skills/sql-patterns.md +57 -0
  52. package/extensions/analytics/skills/statistical-analysis.md +79 -0
  53. package/extensions/analytics/skills/tracking-setup.md +71 -0
  54. package/extensions/backend/PACK.md +44 -618
  55. package/extensions/backend/skills/api-patterns.md +84 -0
  56. package/extensions/backend/skills/async-pipeline.md +193 -0
  57. package/extensions/backend/skills/auth-patterns.md +97 -0
  58. package/extensions/backend/skills/background-jobs.md +133 -0
  59. package/extensions/backend/skills/caching-patterns.md +108 -0
  60. package/extensions/backend/skills/cli-generation.md +133 -0
  61. package/extensions/backend/skills/database-patterns.md +87 -0
  62. package/extensions/backend/skills/middleware-patterns.md +104 -0
  63. package/extensions/chrome-ext/PACK.md +19 -921
  64. package/extensions/chrome-ext/skills/cws-preflight.md +143 -0
  65. package/extensions/chrome-ext/skills/cws-publish.md +104 -0
  66. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -0
  67. package/extensions/chrome-ext/skills/ext-messaging.md +139 -0
  68. package/extensions/chrome-ext/skills/ext-storage.md +133 -0
  69. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -0
  70. package/extensions/content/PACK.md +43 -335
  71. package/extensions/content/skills/blog-patterns.md +88 -0
  72. package/extensions/content/skills/cms-integration.md +131 -0
  73. package/extensions/content/skills/content-scoring.md +107 -0
  74. package/extensions/content/skills/i18n.md +83 -0
  75. package/extensions/content/skills/mdx-authoring.md +137 -0
  76. package/extensions/content/skills/reference.md +1014 -0
  77. package/extensions/content/skills/seo-patterns.md +67 -0
  78. package/extensions/content/skills/video-repurpose.md +153 -0
  79. package/extensions/devops/PACK.md +38 -457
  80. package/extensions/devops/skills/chaos-testing.md +67 -0
  81. package/extensions/devops/skills/ci-cd.md +75 -0
  82. package/extensions/devops/skills/docker.md +58 -0
  83. package/extensions/devops/skills/edge-serverless.md +163 -0
  84. package/extensions/devops/skills/infra-as-code.md +158 -0
  85. package/extensions/devops/skills/kubernetes.md +110 -0
  86. package/extensions/devops/skills/monitoring.md +57 -0
  87. package/extensions/devops/skills/server-setup.md +64 -0
  88. package/extensions/devops/skills/ssl-domain.md +42 -0
  89. package/extensions/ecommerce/PACK.md +62 -226
  90. package/extensions/ecommerce/skills/cart-system.md +79 -0
  91. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -0
  92. package/extensions/ecommerce/skills/order-management.md +126 -0
  93. package/extensions/ecommerce/skills/payment-integration.md +472 -0
  94. package/extensions/ecommerce/skills/shopify-dev.md +69 -0
  95. package/extensions/ecommerce/skills/subscription-billing.md +93 -0
  96. package/extensions/ecommerce/skills/tax-compliance.md +117 -0
  97. package/extensions/gamedev/PACK.md +66 -317
  98. package/extensions/gamedev/skills/asset-pipeline.md +74 -0
  99. package/extensions/gamedev/skills/audio-system.md +129 -0
  100. package/extensions/gamedev/skills/camera-system.md +87 -0
  101. package/extensions/gamedev/skills/ecs.md +98 -0
  102. package/extensions/gamedev/skills/game-loops.md +72 -0
  103. package/extensions/gamedev/skills/input-system.md +199 -0
  104. package/extensions/gamedev/skills/multiplayer.md +180 -0
  105. package/extensions/gamedev/skills/particles.md +105 -0
  106. package/extensions/gamedev/skills/physics-engine.md +89 -0
  107. package/extensions/gamedev/skills/scene-management.md +146 -0
  108. package/extensions/gamedev/skills/threejs-patterns.md +90 -0
  109. package/extensions/gamedev/skills/webgl.md +71 -0
  110. package/extensions/mobile/PACK.md +56 -223
  111. package/extensions/mobile/skills/app-store-connect.md +152 -0
  112. package/extensions/mobile/skills/app-store-prep.md +66 -0
  113. package/extensions/mobile/skills/deep-linking.md +109 -0
  114. package/extensions/mobile/skills/flutter.md +60 -0
  115. package/extensions/mobile/skills/ios-build-pipeline.md +142 -0
  116. package/extensions/mobile/skills/native-bridge.md +66 -0
  117. package/extensions/mobile/skills/ota-updates.md +97 -0
  118. package/extensions/mobile/skills/push-notifications.md +111 -0
  119. package/extensions/mobile/skills/react-native.md +82 -0
  120. package/extensions/saas/PACK.md +26 -720
  121. package/extensions/saas/skills/billing-integration.md +121 -0
  122. package/extensions/saas/skills/feature-flags.md +130 -0
  123. package/extensions/saas/skills/multi-tenant.md +103 -0
  124. package/extensions/saas/skills/onboarding-flow.md +139 -0
  125. package/extensions/saas/skills/subscription-flow.md +95 -0
  126. package/extensions/saas/skills/team-management.md +144 -0
  127. package/extensions/security/PACK.md +10 -448
  128. package/extensions/security/skills/api-security.md +140 -0
  129. package/extensions/security/skills/compliance.md +68 -0
  130. package/extensions/security/skills/owasp-audit.md +64 -0
  131. package/extensions/security/skills/pentest-patterns.md +77 -0
  132. package/extensions/security/skills/secret-mgmt.md +65 -0
  133. package/extensions/security/skills/supply-chain.md +65 -0
  134. package/extensions/trading/PACK.md +18 -535
  135. package/extensions/trading/skills/chart-components.md +55 -0
  136. package/extensions/trading/skills/experiment-loop.md +125 -0
  137. package/extensions/trading/skills/fintech-patterns.md +47 -0
  138. package/extensions/trading/skills/indicator-library.md +58 -0
  139. package/extensions/trading/skills/quant-analysis.md +111 -0
  140. package/extensions/trading/skills/realtime-data.md +58 -0
  141. package/extensions/trading/skills/trade-logic.md +104 -0
  142. package/extensions/ui/PACK.md +36 -853
  143. package/extensions/ui/skills/a11y-audit.md +91 -0
  144. package/extensions/ui/skills/animation-patterns.md +106 -0
  145. package/extensions/ui/skills/component-patterns.md +75 -0
  146. package/extensions/ui/skills/design-decision.md +108 -0
  147. package/extensions/ui/skills/design-system.md +68 -0
  148. package/extensions/ui/skills/landing-patterns.md +155 -0
  149. package/extensions/ui/skills/palette-picker.md +173 -0
  150. package/extensions/ui/skills/react-health.md +90 -0
  151. package/extensions/ui/skills/type-system.md +125 -0
  152. package/extensions/ui/skills/web-vitals.md +153 -0
  153. package/extensions/zalo/PACK.md +117 -0
  154. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -0
  155. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -0
  156. package/extensions/zalo/skills/zalo-oa-setup.md +236 -0
  157. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -0
  158. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -0
  159. package/extensions/zalo/skills/zalo-personal-setup.md +153 -0
  160. package/extensions/zalo/skills/zalo-rate-guard.md +219 -0
  161. package/hooks/.gitkeep +0 -0
  162. package/hooks/auto-format/index.cjs +48 -0
  163. package/hooks/context-watch/index.cjs +68 -0
  164. package/hooks/hooks.json +99 -0
  165. package/hooks/metrics-collector/index.cjs +42 -0
  166. package/hooks/post-session-reflect/index.cjs +153 -0
  167. package/hooks/pre-compact/index.cjs +95 -0
  168. package/hooks/pre-tool-guard/index.cjs +68 -0
  169. package/hooks/run-hook +17 -0
  170. package/hooks/run-hook.cjs +16 -0
  171. package/hooks/run-hook.cmd +1 -0
  172. package/hooks/secrets-scan/index.cjs +100 -0
  173. package/hooks/session-start/index.cjs +65 -0
  174. package/hooks/typecheck/index.cjs +65 -0
  175. package/package.json +9 -4
  176. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -0
  177. package/references/ui-pro-max-data/charts.csv +26 -0
  178. package/references/ui-pro-max-data/colors.csv +162 -0
  179. package/references/ui-pro-max-data/styles.csv +85 -0
  180. package/references/ui-pro-max-data/typography.csv +74 -0
  181. package/references/ui-pro-max-data/ui-reasoning.csv +162 -0
  182. package/references/ui-pro-max-data/ux-guidelines.csv +100 -0
  183. package/skills/ba/SKILL.md +10 -0
  184. package/skills/brainstorm/SKILL.md +63 -1
  185. package/skills/completion-gate/SKILL.md +34 -1
  186. package/skills/context-engine/SKILL.md +13 -0
  187. package/skills/cook/SKILL.md +155 -5
  188. package/skills/debug/SKILL.md +56 -1
  189. package/skills/design/SKILL.md +11 -0
  190. package/skills/fix/SKILL.md +26 -1
  191. package/skills/mcp-builder/SKILL.md +48 -1
  192. package/skills/plan/SKILL.md +23 -6
  193. package/skills/review/SKILL.md +44 -5
  194. package/skills/review-intake/SKILL.md +17 -1
  195. package/skills/skill-forge/SKILL.md +38 -3
  196. package/skills/skill-router/SKILL.md +89 -7
  197. package/skills/team/SKILL.md +24 -1
  198. package/skills/test/SKILL.md +28 -1
  199. package/skills/verification/SKILL.md +98 -1
package/docs/script.js ADDED
@@ -0,0 +1,277 @@
1
+ // ─── Mesh Canvas Animation ───
2
+ (function initMesh() {
3
+ const canvas = document.getElementById('mesh-canvas');
4
+ if (!canvas) return;
5
+ const ctx = canvas.getContext('2d');
6
+ let w, h, nodes, animId;
7
+
8
+ function resize() {
9
+ w = canvas.width = canvas.parentElement.offsetWidth;
10
+ h = canvas.height = canvas.parentElement.offsetHeight;
11
+ }
12
+
13
+ function createNodes(count) {
14
+ const arr = [];
15
+ for (let i = 0; i < count; i++) {
16
+ arr.push({
17
+ x: Math.random() * w,
18
+ y: Math.random() * h,
19
+ vx: (Math.random() - 0.5) * 0.4,
20
+ vy: (Math.random() - 0.5) * 0.4,
21
+ r: Math.random() * 2 + 1
22
+ });
23
+ }
24
+ return arr;
25
+ }
26
+
27
+ function draw() {
28
+ ctx.clearRect(0, 0, w, h);
29
+ const maxDist = 160;
30
+
31
+ // move nodes
32
+ for (const n of nodes) {
33
+ n.x += n.vx;
34
+ n.y += n.vy;
35
+ if (n.x < 0 || n.x > w) n.vx *= -1;
36
+ if (n.y < 0 || n.y > h) n.vy *= -1;
37
+ }
38
+
39
+ // draw connections
40
+ for (let i = 0; i < nodes.length; i++) {
41
+ for (let j = i + 1; j < nodes.length; j++) {
42
+ const dx = nodes[i].x - nodes[j].x;
43
+ const dy = nodes[i].y - nodes[j].y;
44
+ const dist = Math.sqrt(dx * dx + dy * dy);
45
+ if (dist < maxDist) {
46
+ const alpha = (1 - dist / maxDist) * 0.35;
47
+ ctx.strokeStyle = `rgba(16, 185, 129, ${alpha})`;
48
+ ctx.lineWidth = 0.6;
49
+ ctx.beginPath();
50
+ ctx.moveTo(nodes[i].x, nodes[i].y);
51
+ ctx.lineTo(nodes[j].x, nodes[j].y);
52
+ ctx.stroke();
53
+ }
54
+ }
55
+ }
56
+
57
+ // draw nodes
58
+ for (const n of nodes) {
59
+ ctx.fillStyle = 'rgba(16, 185, 129, 0.6)';
60
+ ctx.beginPath();
61
+ ctx.arc(n.x, n.y, n.r, 0, Math.PI * 2);
62
+ ctx.fill();
63
+ }
64
+
65
+ animId = requestAnimationFrame(draw);
66
+ }
67
+
68
+ function start() {
69
+ resize();
70
+ const density = Math.min(60, Math.floor((w * h) / 15000));
71
+ nodes = createNodes(density);
72
+ if (animId) cancelAnimationFrame(animId);
73
+ draw();
74
+ }
75
+
76
+ // respect reduced motion
77
+ if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
78
+ resize();
79
+ nodes = createNodes(30);
80
+ // draw one static frame
81
+ draw();
82
+ cancelAnimationFrame(animId);
83
+ return;
84
+ }
85
+
86
+ start();
87
+ window.addEventListener('resize', () => { start(); });
88
+ })();
89
+
90
+ // ─── Scroll-triggered animations ───
91
+ (function initScrollAnimations() {
92
+ const observer = new IntersectionObserver((entries) => {
93
+ entries.forEach(entry => {
94
+ if (entry.isIntersecting) {
95
+ entry.target.style.animationPlayState = 'running';
96
+ observer.unobserve(entry.target);
97
+ }
98
+ });
99
+ }, { threshold: 0.1 });
100
+
101
+ document.querySelectorAll('.layer, .feature-card, .workflow-card, .compare-card, .ext-card, .install-card, .pricing-card, .stat').forEach(el => {
102
+ el.style.animationPlayState = 'paused';
103
+ observer.observe(el);
104
+ });
105
+ })();
106
+
107
+ // ─── Counter animation ───
108
+ (function initCounters() {
109
+ const observer = new IntersectionObserver((entries) => {
110
+ entries.forEach(entry => {
111
+ if (entry.isIntersecting) {
112
+ const el = entry.target;
113
+ const target = parseInt(el.dataset.target, 10);
114
+ const duration = 1200;
115
+ const start = performance.now();
116
+
117
+ function tick(now) {
118
+ const elapsed = now - start;
119
+ const progress = Math.min(elapsed / duration, 1);
120
+ // ease out cubic
121
+ const eased = 1 - Math.pow(1 - progress, 3);
122
+ el.textContent = Math.round(target * eased);
123
+ if (progress < 1) requestAnimationFrame(tick);
124
+ }
125
+
126
+ requestAnimationFrame(tick);
127
+ observer.unobserve(el);
128
+ }
129
+ });
130
+ }, { threshold: 0.5 });
131
+
132
+ document.querySelectorAll('.stat-num[data-target]').forEach(el => observer.observe(el));
133
+ })();
134
+
135
+ // ─── Payment Flow ───
136
+ const PAY_API = 'https://pay.theio.vn';
137
+ const BANK_ID = 'vpbank';
138
+ const BANK_ACCOUNT = '04162263666';
139
+ const ACCOUNT_NAME = 'NGUYEN CONG';
140
+
141
+ const PRODUCT_INFO = {
142
+ 'rune-pro': {
143
+ title: 'Get Rune Pro', titleShort: 'Rune Pro',
144
+ priceVN: '1,190,000 VND', priceIntl: '$49 USD',
145
+ amountLabel: '1,190,000 VND (~$49 USD)',
146
+ btnClass: 'btn-pro',
147
+ },
148
+ 'rune-biz': {
149
+ title: 'Get Rune Business', titleShort: 'Rune Business',
150
+ priceVN: '3,590,000 VND', priceIntl: '$149 USD',
151
+ amountLabel: '3,590,000 VND (~$149 USD)',
152
+ btnClass: 'btn-biz',
153
+ },
154
+ };
155
+
156
+ let payState = { product: null, orderCode: null, pollTimer: null };
157
+
158
+ function openPayment(product) {
159
+ const info = PRODUCT_INFO[product];
160
+ if (!info) return;
161
+
162
+ payState = { product, orderCode: null, pollTimer: null };
163
+
164
+ document.getElementById('pay-title').textContent = info.title;
165
+ document.getElementById('pay-title-2').textContent = info.title;
166
+ document.getElementById('pay-amount-2').textContent = info.amountLabel;
167
+ document.getElementById('pay-price-vn').textContent = info.priceVN;
168
+ document.getElementById('pay-price-intl').textContent = info.priceIntl;
169
+ document.getElementById('pay-github').value = '';
170
+ document.getElementById('pay-email').value = '';
171
+ document.getElementById('pay-error').hidden = true;
172
+
173
+ const submitBtn = document.getElementById('pay-submit');
174
+ submitBtn.className = 'btn ' + info.btnClass;
175
+ submitBtn.style.width = '100%';
176
+ submitBtn.style.marginTop = '16px';
177
+
178
+ showPayStep(1);
179
+ document.getElementById('pay-modal').hidden = false;
180
+ document.body.style.overflow = 'hidden';
181
+ }
182
+
183
+ function closePayment() {
184
+ document.getElementById('pay-modal').hidden = true;
185
+ document.body.style.overflow = '';
186
+ if (payState.pollTimer) {
187
+ clearInterval(payState.pollTimer);
188
+ payState.pollTimer = null;
189
+ }
190
+ }
191
+
192
+ function showPayStep(n) {
193
+ for (let i = 1; i <= 4; i++) {
194
+ document.getElementById('pay-step-' + i).hidden = (i !== n);
195
+ }
196
+ }
197
+
198
+ function showVNPayment() {
199
+ showPayStep(2);
200
+ document.getElementById('pay-github').focus();
201
+ }
202
+
203
+ async function createOrder() {
204
+ const github = document.getElementById('pay-github').value.trim();
205
+ const email = document.getElementById('pay-email').value.trim();
206
+ const errorEl = document.getElementById('pay-error');
207
+
208
+ if (!github) {
209
+ errorEl.textContent = 'Please enter your GitHub username';
210
+ errorEl.hidden = false;
211
+ return;
212
+ }
213
+
214
+ if (!/^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$/.test(github)) {
215
+ errorEl.textContent = 'Invalid GitHub username format';
216
+ errorEl.hidden = false;
217
+ return;
218
+ }
219
+
220
+ errorEl.hidden = true;
221
+ const submitBtn = document.getElementById('pay-submit');
222
+ submitBtn.disabled = true;
223
+ submitBtn.textContent = 'Creating order...';
224
+
225
+ try {
226
+ const res = await fetch(PAY_API + '/order/create', {
227
+ method: 'POST',
228
+ headers: { 'Content-Type': 'application/json' },
229
+ body: JSON.stringify({ product: payState.product, githubUsername: github, email: email || undefined }),
230
+ });
231
+
232
+ const data = await res.json();
233
+ if (!data.success) throw new Error(data.error || 'Failed to create order');
234
+
235
+ payState.orderCode = data.orderCode;
236
+
237
+ const qrUrl = `https://img.vietqr.io/image/${BANK_ID}-${BANK_ACCOUNT}-compact.png`
238
+ + `?amount=${data.amount}&addInfo=${encodeURIComponent(data.orderCode)}`
239
+ + `&accountName=${encodeURIComponent(ACCOUNT_NAME)}`;
240
+
241
+ document.getElementById('pay-qr-img').src = qrUrl;
242
+ document.getElementById('pay-detail-amount').textContent = data.amount.toLocaleString('vi-VN') + ' VND';
243
+ document.getElementById('pay-detail-code').textContent = data.orderCode;
244
+
245
+ showPayStep(3);
246
+ startPolling(github);
247
+ } catch (err) {
248
+ errorEl.textContent = err.message;
249
+ errorEl.hidden = false;
250
+ } finally {
251
+ submitBtn.disabled = false;
252
+ submitBtn.textContent = 'Continue to Payment';
253
+ }
254
+ }
255
+
256
+ function startPolling(github) {
257
+ if (payState.pollTimer) clearInterval(payState.pollTimer);
258
+
259
+ payState.pollTimer = setInterval(async () => {
260
+ try {
261
+ const res = await fetch(PAY_API + '/order/' + payState.orderCode);
262
+ const data = await res.json();
263
+
264
+ if (data.status === 'delivered') {
265
+ clearInterval(payState.pollTimer);
266
+ payState.pollTimer = null;
267
+ document.getElementById('pay-success-user').textContent = github;
268
+ showPayStep(4);
269
+ } else if (data.status === 'underpaid') {
270
+ document.getElementById('pay-status').innerHTML =
271
+ '<span style="color:var(--loss)">&#9888; Amount too low. Please transfer the exact amount.</span>';
272
+ }
273
+ } catch (_) {
274
+ // silent retry
275
+ }
276
+ }, 5000);
277
+ }