@rune-kit/rune 2.8.0 → 2.11.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.
Files changed (287) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +68 -34
  3. package/agents/adversary.md +27 -0
  4. package/agents/architect.md +19 -29
  5. package/agents/asset-creator.md +18 -4
  6. package/agents/audit.md +25 -4
  7. package/agents/autopsy.md +19 -4
  8. package/agents/ba.md +35 -0
  9. package/agents/brainstorm.md +31 -4
  10. package/agents/browser-pilot.md +21 -4
  11. package/agents/coder.md +21 -29
  12. package/agents/completion-gate.md +20 -4
  13. package/agents/constraint-check.md +18 -4
  14. package/agents/context-engine.md +22 -4
  15. package/agents/context-pack.md +32 -0
  16. package/agents/cook.md +41 -4
  17. package/agents/db.md +19 -4
  18. package/agents/debug.md +33 -4
  19. package/agents/dependency-doctor.md +20 -4
  20. package/agents/deploy.md +27 -4
  21. package/agents/design.md +22 -4
  22. package/agents/doc-processor.md +27 -0
  23. package/agents/docs-seeker.md +19 -4
  24. package/agents/docs.md +31 -0
  25. package/agents/fix.md +37 -4
  26. package/agents/git.md +29 -0
  27. package/agents/hallucination-guard.md +20 -4
  28. package/agents/incident.md +21 -4
  29. package/agents/integrity-check.md +18 -4
  30. package/agents/journal.md +19 -4
  31. package/agents/launch.md +32 -4
  32. package/agents/logic-guardian.md +26 -11
  33. package/agents/marketing.md +23 -4
  34. package/agents/mcp-builder.md +26 -0
  35. package/agents/neural-memory.md +30 -0
  36. package/agents/onboard.md +22 -4
  37. package/agents/perf.md +21 -4
  38. package/agents/plan.md +29 -4
  39. package/agents/preflight.md +22 -4
  40. package/agents/problem-solver.md +20 -4
  41. package/agents/rescue.md +23 -4
  42. package/agents/research.md +19 -4
  43. package/agents/researcher.md +19 -29
  44. package/agents/retro.md +32 -0
  45. package/agents/review-intake.md +20 -4
  46. package/agents/review.md +32 -4
  47. package/agents/reviewer.md +20 -28
  48. package/agents/safeguard.md +19 -4
  49. package/agents/sast.md +18 -4
  50. package/agents/scaffold.md +41 -0
  51. package/agents/scanner.md +19 -28
  52. package/agents/scope-guard.md +18 -4
  53. package/agents/scout.md +23 -4
  54. package/agents/sentinel-env.md +26 -0
  55. package/agents/sentinel.md +33 -4
  56. package/agents/sequential-thinking.md +20 -4
  57. package/agents/session-bridge.md +24 -4
  58. package/agents/skill-forge.md +22 -4
  59. package/agents/skill-router.md +26 -4
  60. package/agents/slides.md +24 -0
  61. package/agents/surgeon.md +19 -4
  62. package/agents/team.md +30 -4
  63. package/agents/test.md +36 -4
  64. package/agents/trend-scout.md +17 -4
  65. package/agents/verification.md +20 -4
  66. package/agents/video-creator.md +20 -4
  67. package/agents/watchdog.md +19 -4
  68. package/agents/worktree.md +17 -4
  69. package/commands/rune.md +168 -168
  70. package/compiler/__tests__/analytics.test.js +370 -0
  71. package/compiler/adapters/openclaw.js +2 -2
  72. package/compiler/analytics.js +385 -0
  73. package/compiler/bin/rune.js +68 -2
  74. package/compiler/dashboard.js +883 -0
  75. package/compiler/transforms/branding.js +1 -1
  76. package/contexts/dev.md +34 -34
  77. package/contexts/research.md +43 -43
  78. package/contexts/review.md +55 -55
  79. package/extensions/ai-ml/PACK.md +88 -88
  80. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  81. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  82. package/extensions/ai-ml/skills/deep-research.md +146 -146
  83. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  84. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  85. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  86. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  87. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  88. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  89. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  90. package/extensions/analytics/PACK.md +92 -92
  91. package/extensions/analytics/skills/ab-testing.md +72 -72
  92. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  93. package/extensions/analytics/skills/data-validation.md +68 -68
  94. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  95. package/extensions/analytics/skills/sql-patterns.md +57 -57
  96. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  97. package/extensions/analytics/skills/tracking-setup.md +71 -71
  98. package/extensions/backend/PACK.md +104 -104
  99. package/extensions/backend/skills/api-patterns.md +84 -84
  100. package/extensions/backend/skills/async-pipeline.md +193 -193
  101. package/extensions/backend/skills/auth-patterns.md +97 -97
  102. package/extensions/backend/skills/background-jobs.md +133 -133
  103. package/extensions/backend/skills/caching-patterns.md +108 -108
  104. package/extensions/backend/skills/cli-generation.md +133 -133
  105. package/extensions/backend/skills/database-patterns.md +87 -87
  106. package/extensions/backend/skills/middleware-patterns.md +104 -104
  107. package/extensions/chrome-ext/PACK.md +93 -93
  108. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  109. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  110. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  111. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  112. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  113. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  114. package/extensions/content/PACK.md +96 -96
  115. package/extensions/content/skills/blog-patterns.md +88 -88
  116. package/extensions/content/skills/cms-integration.md +131 -131
  117. package/extensions/content/skills/content-scoring.md +107 -107
  118. package/extensions/content/skills/i18n.md +83 -83
  119. package/extensions/content/skills/mdx-authoring.md +137 -137
  120. package/extensions/content/skills/reference.md +1014 -1014
  121. package/extensions/content/skills/seo-patterns.md +67 -67
  122. package/extensions/content/skills/video-repurpose.md +153 -153
  123. package/extensions/devops/PACK.md +101 -101
  124. package/extensions/devops/skills/chaos-testing.md +67 -67
  125. package/extensions/devops/skills/ci-cd.md +75 -75
  126. package/extensions/devops/skills/docker.md +58 -58
  127. package/extensions/devops/skills/edge-serverless.md +163 -163
  128. package/extensions/devops/skills/infra-as-code.md +158 -158
  129. package/extensions/devops/skills/kubernetes.md +110 -110
  130. package/extensions/devops/skills/monitoring.md +57 -57
  131. package/extensions/devops/skills/server-setup.md +64 -64
  132. package/extensions/devops/skills/ssl-domain.md +42 -42
  133. package/extensions/ecommerce/PACK.md +116 -116
  134. package/extensions/ecommerce/skills/cart-system.md +79 -79
  135. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  136. package/extensions/ecommerce/skills/order-management.md +126 -126
  137. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  138. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  139. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  140. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  141. package/extensions/gamedev/PACK.md +142 -142
  142. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  143. package/extensions/gamedev/skills/audio-system.md +129 -129
  144. package/extensions/gamedev/skills/camera-system.md +87 -87
  145. package/extensions/gamedev/skills/ecs.md +98 -98
  146. package/extensions/gamedev/skills/game-loops.md +72 -72
  147. package/extensions/gamedev/skills/input-system.md +199 -199
  148. package/extensions/gamedev/skills/multiplayer.md +180 -180
  149. package/extensions/gamedev/skills/particles.md +105 -105
  150. package/extensions/gamedev/skills/physics-engine.md +89 -89
  151. package/extensions/gamedev/skills/scene-management.md +146 -146
  152. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  153. package/extensions/gamedev/skills/webgl.md +71 -71
  154. package/extensions/mobile/PACK.md +106 -106
  155. package/extensions/mobile/skills/app-store-connect.md +152 -152
  156. package/extensions/mobile/skills/app-store-prep.md +66 -66
  157. package/extensions/mobile/skills/deep-linking.md +109 -109
  158. package/extensions/mobile/skills/flutter.md +60 -60
  159. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  160. package/extensions/mobile/skills/native-bridge.md +66 -66
  161. package/extensions/mobile/skills/ota-updates.md +97 -97
  162. package/extensions/mobile/skills/push-notifications.md +111 -111
  163. package/extensions/mobile/skills/react-native.md +82 -82
  164. package/extensions/saas/PACK.md +116 -116
  165. package/extensions/saas/skills/billing-integration.md +200 -200
  166. package/extensions/saas/skills/feature-flags.md +130 -130
  167. package/extensions/saas/skills/multi-tenant.md +103 -103
  168. package/extensions/saas/skills/onboarding-flow.md +139 -139
  169. package/extensions/saas/skills/subscription-flow.md +95 -95
  170. package/extensions/saas/skills/team-management.md +144 -144
  171. package/extensions/security/PACK.md +99 -99
  172. package/extensions/security/skills/api-security.md +140 -140
  173. package/extensions/security/skills/compliance.md +68 -68
  174. package/extensions/security/skills/owasp-audit.md +64 -64
  175. package/extensions/security/skills/pentest-patterns.md +77 -77
  176. package/extensions/security/skills/secret-mgmt.md +65 -65
  177. package/extensions/security/skills/supply-chain.md +65 -65
  178. package/extensions/trading/PACK.md +80 -80
  179. package/extensions/trading/skills/chart-components.md +55 -55
  180. package/extensions/trading/skills/experiment-loop.md +125 -125
  181. package/extensions/trading/skills/fintech-patterns.md +47 -47
  182. package/extensions/trading/skills/indicator-library.md +58 -58
  183. package/extensions/trading/skills/quant-analysis.md +111 -111
  184. package/extensions/trading/skills/realtime-data.md +58 -58
  185. package/extensions/trading/skills/trade-logic.md +104 -104
  186. package/extensions/ui/PACK.md +130 -130
  187. package/extensions/ui/skills/a11y-audit.md +91 -91
  188. package/extensions/ui/skills/animation-patterns.md +127 -106
  189. package/extensions/ui/skills/component-patterns.md +100 -75
  190. package/extensions/ui/skills/design-decision.md +108 -108
  191. package/extensions/ui/skills/design-system.md +68 -68
  192. package/extensions/ui/skills/landing-patterns.md +155 -155
  193. package/extensions/ui/skills/palette-picker.md +173 -173
  194. package/extensions/ui/skills/react-health.md +90 -90
  195. package/extensions/ui/skills/type-system.md +125 -125
  196. package/extensions/ui/skills/web-vitals.md +153 -153
  197. package/extensions/zalo/PACK.md +145 -145
  198. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  199. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  200. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  201. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  202. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  203. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  204. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  205. package/hooks/auto-format/index.cjs +48 -48
  206. package/hooks/context-watch/index.cjs +95 -68
  207. package/hooks/hooks.json +111 -111
  208. package/hooks/metrics-collector/index.cjs +86 -42
  209. package/hooks/post-session-reflect/index.cjs +189 -153
  210. package/hooks/pre-compact/index.cjs +95 -95
  211. package/hooks/run-hook.cmd +1 -1
  212. package/hooks/secrets-scan/index.cjs +100 -100
  213. package/hooks/session-start/index.cjs +71 -65
  214. package/hooks/typecheck/index.cjs +65 -65
  215. package/package.json +63 -63
  216. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  217. package/references/ui-pro-max-data/charts.csv +26 -26
  218. package/references/ui-pro-max-data/colors.csv +161 -161
  219. package/references/ui-pro-max-data/styles.csv +68 -68
  220. package/references/ui-pro-max-data/typography.csv +74 -74
  221. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  222. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  223. package/skills/adversary/SKILL.md +283 -283
  224. package/skills/asset-creator/SKILL.md +157 -157
  225. package/skills/audit/SKILL.md +148 -2
  226. package/skills/autopsy/SKILL.md +335 -259
  227. package/skills/autopsy/references/repo-analysis-patterns.md +113 -0
  228. package/skills/ba/SKILL.md +72 -2
  229. package/skills/brainstorm/SKILL.md +342 -341
  230. package/skills/browser-pilot/SKILL.md +168 -168
  231. package/skills/constraint-check/SKILL.md +165 -165
  232. package/skills/context-engine/SKILL.md +404 -404
  233. package/skills/cook/SKILL.md +917 -834
  234. package/skills/cook/references/output-format.md +33 -0
  235. package/skills/db/SKILL.md +273 -272
  236. package/skills/debug/SKILL.md +465 -443
  237. package/skills/dependency-doctor/SKILL.md +265 -235
  238. package/skills/deploy/SKILL.md +274 -231
  239. package/skills/design/DESIGN-REFERENCE.md +365 -365
  240. package/skills/design/SKILL.md +589 -482
  241. package/skills/doc-processor/SKILL.md +254 -254
  242. package/skills/docs/SKILL.md +374 -373
  243. package/skills/docs-seeker/SKILL.md +177 -177
  244. package/skills/fix/SKILL.md +330 -308
  245. package/skills/git/SKILL.md +339 -339
  246. package/skills/graft/SKILL.md +352 -0
  247. package/skills/graft/references/challenge-framework.md +98 -0
  248. package/skills/graft/references/mode-decision.md +44 -0
  249. package/skills/hallucination-guard/SKILL.md +219 -219
  250. package/skills/incident/SKILL.md +254 -251
  251. package/skills/integrity-check/SKILL.md +169 -169
  252. package/skills/journal/SKILL.md +240 -238
  253. package/skills/launch/SKILL.md +344 -342
  254. package/skills/logic-guardian/SKILL.md +251 -251
  255. package/skills/marketing/SKILL.md +290 -245
  256. package/skills/mcp-builder/SKILL.md +425 -423
  257. package/skills/mcp-builder/references/auto-discovery-pattern.md +169 -0
  258. package/skills/neural-memory/SKILL.md +362 -362
  259. package/skills/onboard/SKILL.md +404 -403
  260. package/skills/perf/SKILL.md +346 -346
  261. package/skills/plan/SKILL.md +433 -370
  262. package/skills/plan/references/feature-map.md +84 -0
  263. package/skills/preflight/SKILL.md +415 -396
  264. package/skills/problem-solver/SKILL.md +380 -284
  265. package/skills/rescue/SKILL.md +474 -450
  266. package/skills/retro/SKILL.md +5 -1
  267. package/skills/review/SKILL.md +612 -535
  268. package/skills/review-intake/SKILL.md +249 -249
  269. package/skills/safeguard/SKILL.md +200 -200
  270. package/skills/sast/SKILL.md +190 -190
  271. package/skills/scaffold/SKILL.md +328 -286
  272. package/skills/scope-guard/SKILL.md +180 -162
  273. package/skills/scout/SKILL.md +263 -263
  274. package/skills/sentinel/SKILL.md +382 -353
  275. package/skills/sentinel-env/SKILL.md +254 -254
  276. package/skills/sequential-thinking/SKILL.md +234 -234
  277. package/skills/session-bridge/SKILL.md +543 -397
  278. package/skills/skill-forge/SKILL.md +581 -539
  279. package/skills/skill-router/{skill.md → SKILL.md} +30 -2
  280. package/skills/surgeon/SKILL.md +215 -215
  281. package/skills/team/SKILL.md +556 -514
  282. package/skills/test/SKILL.md +614 -587
  283. package/skills/trend-scout/SKILL.md +145 -145
  284. package/skills/verification/SKILL.md +326 -325
  285. package/skills/video-creator/SKILL.md +201 -201
  286. package/skills/watchdog/SKILL.md +168 -168
  287. package/skills/worktree/SKILL.md +140 -140
@@ -1,77 +1,77 @@
1
- ---
2
- name: "pentest-patterns"
3
- pack: "@rune/security"
4
- description: "Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification."
5
- model: opus
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # pentest-patterns
10
-
11
- Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification. Outputs actionable PoC code, not just advisories.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Map Attack Surface**
16
- Use Grep to enumerate all HTTP endpoints, WebSocket handlers, file upload paths, and external-facing inputs. List trust boundaries: what data crosses from client to server without validation? Identify highest-value targets (auth endpoints, admin APIs, payment flows). Note GraphQL endpoints — they require separate analysis.
17
-
18
- **Step 2 — Identify and Construct PoC**
19
- For each attack vector, use Read to inspect input handling. Write minimal PoC code (curl command, script, or payload) that demonstrates the vulnerability — SSRF via URL parameter, SQL injection via unsanitized filter, IDOR via predictable ID enumeration. Keep PoCs minimal and clearly scoped to the finding.
20
-
21
- **Step 3 — JWT Attack Pattern Review**
22
- Inspect all JWT creation and validation code. Check for:
23
- - **Algorithm confusion (alg:none)** — does the validator accept `"alg":"none"` tokens?
24
- - **Key confusion (RS256 → HS256)** — if the public key is accessible, can an attacker sign HS256 tokens with it?
25
- - **Token replay** — is `jti` (JWT ID) tracked and blacklisted on logout? Is token expiry enforced server-side, not just client-side?
26
- - **Audience/issuer validation** — are `aud` and `iss` claims verified to prevent cross-service token reuse?
27
-
28
- **Step 4 — Automated Fuzzing Setup**
29
- Use property-based testing to fuzz input boundaries. Set up `fast-check` (TypeScript) or `hypothesis` (Python) to generate adversarial inputs for parsers, validators, and business logic. Focus on: integer overflows in numeric fields, Unicode normalization in string comparisons, path traversal in file name parameters, prototype pollution in object merge operations.
30
-
31
- **Step 5 — GraphQL Security Review**
32
- If a GraphQL endpoint exists: Is introspection disabled in production? Are deeply nested queries limited (max depth/complexity)? Are batch queries rate-limited independently? Check for field-level authorization — a resolver that returns user data must enforce the same ownership checks as a REST equivalent.
33
-
34
- **Step 6 — Suggest Remediation and Verify Fix**
35
- Pair each PoC with a concrete fix. After fix is applied, use Bash to re-run the PoC and confirm it no longer succeeds. Document the before/after in the security report.
36
-
37
- #### Example
38
-
39
- ```typescript
40
- // FINDING: SSRF — user-supplied URL fetched server-side without allowlist
41
- // File: src/api/webhook.ts, Line: 34
42
-
43
- // VULNERABLE: attacker can probe internal services
44
- const response = await fetch(req.body.callbackUrl)
45
- // POC: curl -X POST /api/webhook -d '{"callbackUrl":"http://169.254.169.254/latest/meta-data/"}'
46
-
47
- // REMEDIATION: validate against allowlist before fetching
48
- const ALLOWED_HOSTS = new Set(['api.partner.com', 'hooks.stripe.com'])
49
- const parsed = new URL(req.body.callbackUrl)
50
- if (!ALLOWED_HOSTS.has(parsed.hostname)) {
51
- throw new ForbiddenError('callbackUrl host not in allowlist')
52
- }
53
-
54
- // FINDING: JWT algorithm confusion
55
- // File: src/middleware/auth.ts, Line: 19
56
- // VULNERABLE: accepts any algorithm the token declares
57
- import jwt from 'jsonwebtoken'
58
- const payload = jwt.verify(token, secret) // no algorithm pin
59
-
60
- // REMEDIATION: pin algorithm explicitly
61
- const payload = jwt.verify(token, secret, { algorithms: ['HS256'] })
62
-
63
- // FUZZING SETUP: fast-check for path traversal in file name param
64
- import * as fc from 'fast-check'
65
- fc.assert(
66
- fc.property(fc.string(), (filename) => {
67
- const result = sanitizeFilename(filename)
68
- return !result.includes('..') && !result.includes('/')
69
- })
70
- )
71
-
72
- // GRAPHQL: max depth guard (graphql-depth-limit)
73
- import depthLimit from 'graphql-depth-limit'
74
- const server = new ApolloServer({
75
- validationRules: [depthLimit(5)],
76
- })
77
- ```
1
+ ---
2
+ name: "pentest-patterns"
3
+ pack: "@rune/security"
4
+ description: "Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification."
5
+ model: opus
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # pentest-patterns
10
+
11
+ Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification. Outputs actionable PoC code, not just advisories.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Map Attack Surface**
16
+ Use Grep to enumerate all HTTP endpoints, WebSocket handlers, file upload paths, and external-facing inputs. List trust boundaries: what data crosses from client to server without validation? Identify highest-value targets (auth endpoints, admin APIs, payment flows). Note GraphQL endpoints — they require separate analysis.
17
+
18
+ **Step 2 — Identify and Construct PoC**
19
+ For each attack vector, use Read to inspect input handling. Write minimal PoC code (curl command, script, or payload) that demonstrates the vulnerability — SSRF via URL parameter, SQL injection via unsanitized filter, IDOR via predictable ID enumeration. Keep PoCs minimal and clearly scoped to the finding.
20
+
21
+ **Step 3 — JWT Attack Pattern Review**
22
+ Inspect all JWT creation and validation code. Check for:
23
+ - **Algorithm confusion (alg:none)** — does the validator accept `"alg":"none"` tokens?
24
+ - **Key confusion (RS256 → HS256)** — if the public key is accessible, can an attacker sign HS256 tokens with it?
25
+ - **Token replay** — is `jti` (JWT ID) tracked and blacklisted on logout? Is token expiry enforced server-side, not just client-side?
26
+ - **Audience/issuer validation** — are `aud` and `iss` claims verified to prevent cross-service token reuse?
27
+
28
+ **Step 4 — Automated Fuzzing Setup**
29
+ Use property-based testing to fuzz input boundaries. Set up `fast-check` (TypeScript) or `hypothesis` (Python) to generate adversarial inputs for parsers, validators, and business logic. Focus on: integer overflows in numeric fields, Unicode normalization in string comparisons, path traversal in file name parameters, prototype pollution in object merge operations.
30
+
31
+ **Step 5 — GraphQL Security Review**
32
+ If a GraphQL endpoint exists: Is introspection disabled in production? Are deeply nested queries limited (max depth/complexity)? Are batch queries rate-limited independently? Check for field-level authorization — a resolver that returns user data must enforce the same ownership checks as a REST equivalent.
33
+
34
+ **Step 6 — Suggest Remediation and Verify Fix**
35
+ Pair each PoC with a concrete fix. After fix is applied, use Bash to re-run the PoC and confirm it no longer succeeds. Document the before/after in the security report.
36
+
37
+ #### Example
38
+
39
+ ```typescript
40
+ // FINDING: SSRF — user-supplied URL fetched server-side without allowlist
41
+ // File: src/api/webhook.ts, Line: 34
42
+
43
+ // VULNERABLE: attacker can probe internal services
44
+ const response = await fetch(req.body.callbackUrl)
45
+ // POC: curl -X POST /api/webhook -d '{"callbackUrl":"http://169.254.169.254/latest/meta-data/"}'
46
+
47
+ // REMEDIATION: validate against allowlist before fetching
48
+ const ALLOWED_HOSTS = new Set(['api.partner.com', 'hooks.stripe.com'])
49
+ const parsed = new URL(req.body.callbackUrl)
50
+ if (!ALLOWED_HOSTS.has(parsed.hostname)) {
51
+ throw new ForbiddenError('callbackUrl host not in allowlist')
52
+ }
53
+
54
+ // FINDING: JWT algorithm confusion
55
+ // File: src/middleware/auth.ts, Line: 19
56
+ // VULNERABLE: accepts any algorithm the token declares
57
+ import jwt from 'jsonwebtoken'
58
+ const payload = jwt.verify(token, secret) // no algorithm pin
59
+
60
+ // REMEDIATION: pin algorithm explicitly
61
+ const payload = jwt.verify(token, secret, { algorithms: ['HS256'] })
62
+
63
+ // FUZZING SETUP: fast-check for path traversal in file name param
64
+ import * as fc from 'fast-check'
65
+ fc.assert(
66
+ fc.property(fc.string(), (filename) => {
67
+ const result = sanitizeFilename(filename)
68
+ return !result.includes('..') && !result.includes('/')
69
+ })
70
+ )
71
+
72
+ // GRAPHQL: max depth guard (graphql-depth-limit)
73
+ import depthLimit from 'graphql-depth-limit'
74
+ const server = new ApolloServer({
75
+ validationRules: [depthLimit(5)],
76
+ })
77
+ ```
@@ -1,65 +1,65 @@
1
- ---
2
- name: "secret-mgmt"
3
- pack: "@rune/security"
4
- description: "Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # secret-mgmt
10
-
11
- Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Scan Current Secret Handling**
16
- Use Grep to search for hardcoded credentials, API keys, connection strings, and JWT secrets across all source files and config files. Check git history with Bash (`git log -S 'password' --source --all`) to surface secrets ever committed. Catalog every secret by type and location. Check for base64-encoded secrets (`grep -r 'base64' | grep -i 'key\|secret\|pass'`).
17
-
18
- **Step 2 — Design Vault or Env Strategy**
19
- Based on project type (serverless, container, bare metal), prescribe a secret backend: AWS Secrets Manager, HashiCorp Vault, Doppler, or `.env` + CI/CD injection. Define which secrets are per-environment vs per-service. Write the access pattern (IAM role, token scope, least privilege).
20
-
21
- **Step 3 — .env File Safety Audit**
22
- Verify `.env` and `.env.*` files are in `.gitignore`. Check that a `.env.example` exists with placeholder values (not real secrets). Audit CI/CD environment variable lists — flag any variable that contains `SECRET`, `KEY`, `TOKEN`, or `PASSWORD` that is not masked. Verify `.env.example` is kept in sync with application startup validation schema.
23
-
24
- **Step 4 — Secret Rotation Automation**
25
- Document rotation schedule per secret type. For AWS: use Secrets Manager rotation Lambda triggered on schedule. For GitHub Actions: document secret rotation runbook (rotate in provider → update in repo Settings → verify deployment). Add startup validation that fails fast if any required env var is absent or malformed. Set up gitleaks or trufflehog as pre-commit hook to catch accidental commits before they hit remote.
26
-
27
- **Step 5 — Verify No Leaks in Runtime**
28
- Use Grep to confirm secrets never appear in log statements, error responses, or exception stack traces. Check error serialization — does the global error handler accidentally serialize `process.env` or full request headers into the response body?
29
-
30
- #### Example
31
-
32
- ```typescript
33
- // PATTERN: startup validation — fail fast on missing secrets
34
- import { z } from 'zod'
35
-
36
- const SecretsSchema = z.object({
37
- DATABASE_URL: z.string().url(),
38
- JWT_SECRET: z.string().min(32),
39
- STRIPE_SECRET: z.string().startsWith('sk_'),
40
- OPENAI_API_KEY: z.string().startsWith('sk-'),
41
- })
42
-
43
- export const secrets = SecretsSchema.parse(process.env) // throws at boot if absent/malformed
44
-
45
- // NEVER log secrets — use masked representation
46
- logger.info(`DB connected to ${new URL(secrets.DATABASE_URL).hostname}`)
47
-
48
- // PRE-COMMIT: .gitleaks.toml — scan for secrets before commit
49
- // [[rules]]
50
- // id = "generic-api-key"
51
- // description = "Generic API Key"
52
- // regex = '''(?i)(api_key|apikey|secret)[^\w]*[=:]\s*['"]?[0-9a-zA-Z\-_]{16,}'''
53
- // entropy = 3.5
54
-
55
- // ROTATION LAMBDA: AWS Secrets Manager rotation handler skeleton
56
- export async function handler(event: SecretsManagerRotationEvent) {
57
- const { SecretId, ClientRequestToken, Step } = event
58
- switch (Step) {
59
- case 'createSecret': await createNewVersion(SecretId, ClientRequestToken); break
60
- case 'setSecret': await updateDownstreamService(SecretId, ClientRequestToken); break
61
- case 'testSecret': await validateNewSecret(SecretId, ClientRequestToken); break
62
- case 'finishSecret': await finalizeRotation(SecretId, ClientRequestToken); break
63
- }
64
- }
65
- ```
1
+ ---
2
+ name: "secret-mgmt"
3
+ pack: "@rune/security"
4
+ description: "Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # secret-mgmt
10
+
11
+ Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Scan Current Secret Handling**
16
+ Use Grep to search for hardcoded credentials, API keys, connection strings, and JWT secrets across all source files and config files. Check git history with Bash (`git log -S 'password' --source --all`) to surface secrets ever committed. Catalog every secret by type and location. Check for base64-encoded secrets (`grep -r 'base64' | grep -i 'key\|secret\|pass'`).
17
+
18
+ **Step 2 — Design Vault or Env Strategy**
19
+ Based on project type (serverless, container, bare metal), prescribe a secret backend: AWS Secrets Manager, HashiCorp Vault, Doppler, or `.env` + CI/CD injection. Define which secrets are per-environment vs per-service. Write the access pattern (IAM role, token scope, least privilege).
20
+
21
+ **Step 3 — .env File Safety Audit**
22
+ Verify `.env` and `.env.*` files are in `.gitignore`. Check that a `.env.example` exists with placeholder values (not real secrets). Audit CI/CD environment variable lists — flag any variable that contains `SECRET`, `KEY`, `TOKEN`, or `PASSWORD` that is not masked. Verify `.env.example` is kept in sync with application startup validation schema.
23
+
24
+ **Step 4 — Secret Rotation Automation**
25
+ Document rotation schedule per secret type. For AWS: use Secrets Manager rotation Lambda triggered on schedule. For GitHub Actions: document secret rotation runbook (rotate in provider → update in repo Settings → verify deployment). Add startup validation that fails fast if any required env var is absent or malformed. Set up gitleaks or trufflehog as pre-commit hook to catch accidental commits before they hit remote.
26
+
27
+ **Step 5 — Verify No Leaks in Runtime**
28
+ Use Grep to confirm secrets never appear in log statements, error responses, or exception stack traces. Check error serialization — does the global error handler accidentally serialize `process.env` or full request headers into the response body?
29
+
30
+ #### Example
31
+
32
+ ```typescript
33
+ // PATTERN: startup validation — fail fast on missing secrets
34
+ import { z } from 'zod'
35
+
36
+ const SecretsSchema = z.object({
37
+ DATABASE_URL: z.string().url(),
38
+ JWT_SECRET: z.string().min(32),
39
+ STRIPE_SECRET: z.string().startsWith('sk_'),
40
+ OPENAI_API_KEY: z.string().startsWith('sk-'),
41
+ })
42
+
43
+ export const secrets = SecretsSchema.parse(process.env) // throws at boot if absent/malformed
44
+
45
+ // NEVER log secrets — use masked representation
46
+ logger.info(`DB connected to ${new URL(secrets.DATABASE_URL).hostname}`)
47
+
48
+ // PRE-COMMIT: .gitleaks.toml — scan for secrets before commit
49
+ // [[rules]]
50
+ // id = "generic-api-key"
51
+ // description = "Generic API Key"
52
+ // regex = '''(?i)(api_key|apikey|secret)[^\w]*[=:]\s*['"]?[0-9a-zA-Z\-_]{16,}'''
53
+ // entropy = 3.5
54
+
55
+ // ROTATION LAMBDA: AWS Secrets Manager rotation handler skeleton
56
+ export async function handler(event: SecretsManagerRotationEvent) {
57
+ const { SecretId, ClientRequestToken, Step } = event
58
+ switch (Step) {
59
+ case 'createSecret': await createNewVersion(SecretId, ClientRequestToken); break
60
+ case 'setSecret': await updateDownstreamService(SecretId, ClientRequestToken); break
61
+ case 'testSecret': await validateNewSecret(SecretId, ClientRequestToken); break
62
+ case 'finishSecret': await finalizeRotation(SecretId, ClientRequestToken); break
63
+ }
64
+ }
65
+ ```
@@ -1,65 +1,65 @@
1
- ---
2
- name: "supply-chain"
3
- pack: "@rune/security"
4
- description: "Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # supply-chain
10
-
11
- Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Inventory Dependencies**
16
- Use Read on `package.json` / `requirements.txt` / `go.mod` / `Cargo.toml`. Build a complete dependency graph including devDependencies and indirect (transitive) dependencies via `npm ls --all --json` or `pip-audit --format json`. Flag phantom dependencies — packages used in source code (via import) but not declared in the manifest.
17
-
18
- **Step 2 — Check Naming Collisions (Dependency Confusion)**
19
- For any private/internal package names (scoped like `@company/internal-lib` OR unscoped names that look internal), verify they also exist on the public registry (npm, PyPI, RubyGems). If a package name is registered internally but NOT on the public registry, an attacker can register it there — package managers may prefer the public version depending on configuration. Flag all such packages for private registry enforcement.
20
-
21
- **Step 3 — Typosquatting Detection**
22
- Compare each dependency name against a known-popular packages list. Flag names with edit distance ≤ 2 from a popular package: `lodas` (lodash), `requets` (requests), `coloers` (colors), `expres` (express). Also flag: packages with unusual character substitution (zero vs letter o, l vs 1), recently published packages with very high download counts but no GitHub stars, and packages with install scripts that execute shell commands.
23
-
24
- **Step 4 — Verify Lockfile Integrity**
25
- Check that `package-lock.json` / `yarn.lock` / `pnpm-lock.yaml` exists and is committed. Verify resolved hashes match between manifest and lockfile. Detect lockfile injection: compare resolved URLs — any `file:`, `git+`, or non-registry URL in the lockfile for a package expected to come from the registry is a red flag. Run `npm audit signatures` (npm ≥ 9.5) to verify package signatures against the registry's public key.
26
-
27
- **Step 5 — Audit Transitive Dependencies and Known Malicious Packages**
28
- Run `npm audit --all` / `pip-audit` / `cargo audit`. Cross-reference against OSV (Open Source Vulnerabilities) database. Check install scripts: `cat node_modules/<pkg>/package.json | jq '.scripts.install,.scripts.postinstall'` — any install script running `curl | sh` or spawning child processes is HIGH severity.
29
-
30
- **Step 6 — SLSA Provenance and Report**
31
- For critical dependencies, check if SLSA provenance attestations are available (`npm install @sigstore/bundle` / cosign verify-attestation). Emit `.rune/security/supply-chain-report.md` with: dependency inventory, collision risks, typosquatting flags, lockfile anomalies, install script warnings, and remediation steps.
32
-
33
- #### Example
34
-
35
- ```bash
36
- # STEP 1: Full dependency inventory with phantom dep check
37
- npm ls --all --json 2>/dev/null | jq '[.. | objects | select(.version) | {name: .name, version: .version}]' > deps-inventory.json
38
-
39
- # STEP 2: Check if internal package exists on public registry
40
- # VULNERABLE: @company/utils exists internally but NOT on npm → dependency confusion risk
41
- curl -s https://registry.npmjs.org/@company/utils | jq '.error'
42
- # If returns null (package exists publicly) → verify it's YOUR package, not an attacker's
43
-
44
- # STEP 3: Detect install scripts in dependencies
45
- for pkg in node_modules/*/package.json; do
46
- scripts=$(jq -r '(.scripts.install // "") + " " + (.scripts.postinstall // "")' "$pkg")
47
- if echo "$scripts" | grep -qE 'curl|wget|exec|spawn|child_process'; then
48
- echo "WARN: install script in $pkg: $scripts"
49
- fi
50
- done
51
-
52
- # STEP 4: Verify lockfile integrity (npm ≥ 9.5)
53
- npm audit signatures
54
- # Expected: "audited X packages, 0 packages have invalid signatures"
55
- ```
56
-
57
- ```typescript
58
- // PATTERN: enforce private registry for scoped packages (.npmrc)
59
- // @company:registry=https://npm.company.internal
60
- // //npm.company.internal/:_authToken=${NPM_INTERNAL_TOKEN}
61
-
62
- // PATTERN: detect phantom dependencies in TypeScript
63
- // Any import from a package not in dependencies/devDependencies = phantom dep
64
- // Tool: depcheck → npx depcheck --json | jq '.missing'
65
- ```
1
+ ---
2
+ name: "supply-chain"
3
+ pack: "@rune/security"
4
+ description: "Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # supply-chain
10
+
11
+ Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Inventory Dependencies**
16
+ Use Read on `package.json` / `requirements.txt` / `go.mod` / `Cargo.toml`. Build a complete dependency graph including devDependencies and indirect (transitive) dependencies via `npm ls --all --json` or `pip-audit --format json`. Flag phantom dependencies — packages used in source code (via import) but not declared in the manifest.
17
+
18
+ **Step 2 — Check Naming Collisions (Dependency Confusion)**
19
+ For any private/internal package names (scoped like `@company/internal-lib` OR unscoped names that look internal), verify they also exist on the public registry (npm, PyPI, RubyGems). If a package name is registered internally but NOT on the public registry, an attacker can register it there — package managers may prefer the public version depending on configuration. Flag all such packages for private registry enforcement.
20
+
21
+ **Step 3 — Typosquatting Detection**
22
+ Compare each dependency name against a known-popular packages list. Flag names with edit distance ≤ 2 from a popular package: `lodas` (lodash), `requets` (requests), `coloers` (colors), `expres` (express). Also flag: packages with unusual character substitution (zero vs letter o, l vs 1), recently published packages with very high download counts but no GitHub stars, and packages with install scripts that execute shell commands.
23
+
24
+ **Step 4 — Verify Lockfile Integrity**
25
+ Check that `package-lock.json` / `yarn.lock` / `pnpm-lock.yaml` exists and is committed. Verify resolved hashes match between manifest and lockfile. Detect lockfile injection: compare resolved URLs — any `file:`, `git+`, or non-registry URL in the lockfile for a package expected to come from the registry is a red flag. Run `npm audit signatures` (npm ≥ 9.5) to verify package signatures against the registry's public key.
26
+
27
+ **Step 5 — Audit Transitive Dependencies and Known Malicious Packages**
28
+ Run `npm audit --all` / `pip-audit` / `cargo audit`. Cross-reference against OSV (Open Source Vulnerabilities) database. Check install scripts: `cat node_modules/<pkg>/package.json | jq '.scripts.install,.scripts.postinstall'` — any install script running `curl | sh` or spawning child processes is HIGH severity.
29
+
30
+ **Step 6 — SLSA Provenance and Report**
31
+ For critical dependencies, check if SLSA provenance attestations are available (`npm install @sigstore/bundle` / cosign verify-attestation). Emit `.rune/security/supply-chain-report.md` with: dependency inventory, collision risks, typosquatting flags, lockfile anomalies, install script warnings, and remediation steps.
32
+
33
+ #### Example
34
+
35
+ ```bash
36
+ # STEP 1: Full dependency inventory with phantom dep check
37
+ npm ls --all --json 2>/dev/null | jq '[.. | objects | select(.version) | {name: .name, version: .version}]' > deps-inventory.json
38
+
39
+ # STEP 2: Check if internal package exists on public registry
40
+ # VULNERABLE: @company/utils exists internally but NOT on npm → dependency confusion risk
41
+ curl -s https://registry.npmjs.org/@company/utils | jq '.error'
42
+ # If returns null (package exists publicly) → verify it's YOUR package, not an attacker's
43
+
44
+ # STEP 3: Detect install scripts in dependencies
45
+ for pkg in node_modules/*/package.json; do
46
+ scripts=$(jq -r '(.scripts.install // "") + " " + (.scripts.postinstall // "")' "$pkg")
47
+ if echo "$scripts" | grep -qE 'curl|wget|exec|spawn|child_process'; then
48
+ echo "WARN: install script in $pkg: $scripts"
49
+ fi
50
+ done
51
+
52
+ # STEP 4: Verify lockfile integrity (npm ≥ 9.5)
53
+ npm audit signatures
54
+ # Expected: "audited X packages, 0 packages have invalid signatures"
55
+ ```
56
+
57
+ ```typescript
58
+ // PATTERN: enforce private registry for scoped packages (.npmrc)
59
+ // @company:registry=https://npm.company.internal
60
+ // //npm.company.internal/:_authToken=${NPM_INTERNAL_TOKEN}
61
+
62
+ // PATTERN: detect phantom dependencies in TypeScript
63
+ // Any import from a package not in dependencies/devDependencies = phantom dep
64
+ // Tool: depcheck → npx depcheck --json | jq '.missing'
65
+ ```
@@ -1,80 +1,80 @@
1
- ---
2
- name: "@rune/trading"
3
- description: Fintech and trading patterns — real-time data, financial dashboards, technical indicators, WebSocket architecture, and experiment-driven strategy development.
4
- metadata:
5
- author: runedev
6
- version: "0.3.0"
7
- layer: L4
8
- price: "$15"
9
- target: Fintech developers
10
- format: split
11
- ---
12
-
13
- # @rune/trading
14
-
15
- ## Purpose
16
-
17
- Fintech applications demand precision that general-purpose patterns cannot guarantee. This pack groups five tightly-coupled concerns — safe money arithmetic, WebSocket reliability, financial chart rendering, streaming indicator computation, and experiment-driven strategy development — because a gap in any one layer breaks the entire trading surface. It solves the recurring problem of developers accidentally using JavaScript floats for currency, missing auto-reconnect logic, or computing indicators on stale snapshots. Activates automatically when trading or financial project signals are detected.
18
-
19
- ## Triggers
20
-
21
- - Auto-trigger: when `TradingView`, `Lightweight Charts`, `decimal.js`, `ccxt`, or `ws` detected in `package.json`
22
- - Auto-trigger: when files matching `**/price*.ts`, `**/ticker*.ts`, `**/orderbook*.ts` exist in project
23
- - `/rune trading` — manual invocation
24
- - Called by `cook` (L1) when fintech or trading project context detected
25
-
26
- ## Skills Included
27
-
28
- | Skill | Model | Description |
29
- |-------|-------|-------------|
30
- | [fintech-patterns](skills/fintech-patterns.md) | sonnet | Safe money handling with Decimal/BigInt, transaction processing, audit trails, regulatory compliance, and PnL calculations. |
31
- | [realtime-data](skills/realtime-data.md) | sonnet | WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation. |
32
- | [chart-components](skills/chart-components.md) | sonnet | Candlestick, line, and area charts using TradingView Lightweight Charts with real-time updates, crosshair sync, indicator overlays, and reduced-motion support. |
33
- | [indicator-library](skills/indicator-library.md) | sonnet | SMA, EMA, RSI, MACD, Bollinger Bands, VWAP — streaming calculation patterns that update incrementally on each new tick. |
34
- | [trade-logic](skills/trade-logic.md) | sonnet | Entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. |
35
- | [experiment-loop](skills/experiment-loop.md) | sonnet | Scientific method for strategy development — hypothesize → implement → backtest → analyze → refine. |
36
- | [quant-analysis](skills/quant-analysis.md) | sonnet | Portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models. |
37
-
38
- ## Tech Stack Support
39
-
40
- | Framework | Library | Notes |
41
- |-----------|---------|-------|
42
- | React 19 / Vite | Lightweight Charts 5.x | Preferred for custom dashboards |
43
- | React 19 / Next.js | TradingView Charting Library | For advanced trading terminals |
44
- | Any | Decimal.js 10.x | Required for all money arithmetic |
45
- | Any | ws / native WebSocket | Auto-reconnect via `realtime-data` skill |
46
- | React 19 | TanStack Query v5 | WebSocket → cache invalidation bridge |
47
- | Any | date-fns-tz | Timezone-safe candle timestamp handling |
48
-
49
- ## Connections
50
-
51
- ```
52
- Calls → @rune/ui (L4): chart component styling, color tokens, responsive layout
53
- Called By ← cook (L1): when trading project detected
54
- Called By ← launch (L1): pre-flight check for financial dashboards
55
- Called By ← logic-guardian (L2): when project is classified as trading domain
56
- ```
57
-
58
- ## Sharp Edges
59
-
60
- | Failure Mode | Severity | Mitigation |
61
- |---|---|---|
62
- | Float arithmetic on price (`0.1 + 0.2 !== 0.3`) silently corrupts PnL | HIGH | Enforce Decimal.js at parse boundary; lint rule banning `*`, `+`, `-` on raw number price fields |
63
- | WebSocket silently stops receiving after network blip with no reconnect | HIGH | Always attach `onclose` handler; test disconnect/reconnect in CI with a mock server |
64
- | Chart series not removed on symbol change causes memory leak and ghost lines | HIGH | Track series refs; call `chart.removeSeries(s)` in cleanup / `useEffect` return |
65
- | Indicator computed on float prices accumulates rounding drift over 1000+ ticks | MEDIUM | Feed Decimal-converted `toNumber()` only at the indicator boundary; document precision loss |
66
- | `localStorage` used for auth token or balance cache exposes data to XSS | HIGH | Use `httpOnly` cookies or in-memory store; audit with `Grep pattern="localStorage" glob="**/*.ts"` |
67
- | Candlestick timestamps in local timezone cause gaps on DST transitions | MEDIUM | Normalize all timestamps to UTC unix seconds at the WebSocket boundary |
68
-
69
- ## Done When
70
-
71
- - All price/quantity/fee fields are wrapped in `Decimal` with no raw float arithmetic reachable by Grep
72
- - WebSocket reconnects automatically after 5-second disconnect in manual or automated test
73
- - Chart renders candlesticks and at least one indicator overlay without layout shift on resize
74
- - Streaming indicator values match reference batch output within floating-point display tolerance
75
- - `prefers-reduced-motion` disables chart animations (verified via browser devtools emulation)
76
- - No `localStorage` usage for financial data (confirmed by Grep audit)
77
-
78
- ## Cost Profile
79
-
80
- ~2,000–4,000 tokens per skill activation. `sonnet` default for code generation; `haiku` for Grep/file-scan steps; `opus` if regulatory compliance or security audit context is detected. Full pack activation (all 7 skills) runs ~14,000–28,000 tokens end-to-end.
1
+ ---
2
+ name: "@rune/trading"
3
+ description: Fintech and trading patterns — real-time data, financial dashboards, technical indicators, WebSocket architecture, and experiment-driven strategy development.
4
+ metadata:
5
+ author: runedev
6
+ version: "0.3.0"
7
+ layer: L4
8
+ price: "$15"
9
+ target: Fintech developers
10
+ format: split
11
+ ---
12
+
13
+ # @rune/trading
14
+
15
+ ## Purpose
16
+
17
+ Fintech applications demand precision that general-purpose patterns cannot guarantee. This pack groups five tightly-coupled concerns — safe money arithmetic, WebSocket reliability, financial chart rendering, streaming indicator computation, and experiment-driven strategy development — because a gap in any one layer breaks the entire trading surface. It solves the recurring problem of developers accidentally using JavaScript floats for currency, missing auto-reconnect logic, or computing indicators on stale snapshots. Activates automatically when trading or financial project signals are detected.
18
+
19
+ ## Triggers
20
+
21
+ - Auto-trigger: when `TradingView`, `Lightweight Charts`, `decimal.js`, `ccxt`, or `ws` detected in `package.json`
22
+ - Auto-trigger: when files matching `**/price*.ts`, `**/ticker*.ts`, `**/orderbook*.ts` exist in project
23
+ - `/rune trading` — manual invocation
24
+ - Called by `cook` (L1) when fintech or trading project context detected
25
+
26
+ ## Skills Included
27
+
28
+ | Skill | Model | Description |
29
+ |-------|-------|-------------|
30
+ | [fintech-patterns](skills/fintech-patterns.md) | sonnet | Safe money handling with Decimal/BigInt, transaction processing, audit trails, regulatory compliance, and PnL calculations. |
31
+ | [realtime-data](skills/realtime-data.md) | sonnet | WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation. |
32
+ | [chart-components](skills/chart-components.md) | sonnet | Candlestick, line, and area charts using TradingView Lightweight Charts with real-time updates, crosshair sync, indicator overlays, and reduced-motion support. |
33
+ | [indicator-library](skills/indicator-library.md) | sonnet | SMA, EMA, RSI, MACD, Bollinger Bands, VWAP — streaming calculation patterns that update incrementally on each new tick. |
34
+ | [trade-logic](skills/trade-logic.md) | sonnet | Entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. |
35
+ | [experiment-loop](skills/experiment-loop.md) | sonnet | Scientific method for strategy development — hypothesize → implement → backtest → analyze → refine. |
36
+ | [quant-analysis](skills/quant-analysis.md) | sonnet | Portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models. |
37
+
38
+ ## Tech Stack Support
39
+
40
+ | Framework | Library | Notes |
41
+ |-----------|---------|-------|
42
+ | React 19 / Vite | Lightweight Charts 5.x | Preferred for custom dashboards |
43
+ | React 19 / Next.js | TradingView Charting Library | For advanced trading terminals |
44
+ | Any | Decimal.js 10.x | Required for all money arithmetic |
45
+ | Any | ws / native WebSocket | Auto-reconnect via `realtime-data` skill |
46
+ | React 19 | TanStack Query v5 | WebSocket → cache invalidation bridge |
47
+ | Any | date-fns-tz | Timezone-safe candle timestamp handling |
48
+
49
+ ## Connections
50
+
51
+ ```
52
+ Calls → @rune/ui (L4): chart component styling, color tokens, responsive layout
53
+ Called By ← cook (L1): when trading project detected
54
+ Called By ← launch (L1): pre-flight check for financial dashboards
55
+ Called By ← logic-guardian (L2): when project is classified as trading domain
56
+ ```
57
+
58
+ ## Sharp Edges
59
+
60
+ | Failure Mode | Severity | Mitigation |
61
+ |---|---|---|
62
+ | Float arithmetic on price (`0.1 + 0.2 !== 0.3`) silently corrupts PnL | HIGH | Enforce Decimal.js at parse boundary; lint rule banning `*`, `+`, `-` on raw number price fields |
63
+ | WebSocket silently stops receiving after network blip with no reconnect | HIGH | Always attach `onclose` handler; test disconnect/reconnect in CI with a mock server |
64
+ | Chart series not removed on symbol change causes memory leak and ghost lines | HIGH | Track series refs; call `chart.removeSeries(s)` in cleanup / `useEffect` return |
65
+ | Indicator computed on float prices accumulates rounding drift over 1000+ ticks | MEDIUM | Feed Decimal-converted `toNumber()` only at the indicator boundary; document precision loss |
66
+ | `localStorage` used for auth token or balance cache exposes data to XSS | HIGH | Use `httpOnly` cookies or in-memory store; audit with `Grep pattern="localStorage" glob="**/*.ts"` |
67
+ | Candlestick timestamps in local timezone cause gaps on DST transitions | MEDIUM | Normalize all timestamps to UTC unix seconds at the WebSocket boundary |
68
+
69
+ ## Done When
70
+
71
+ - All price/quantity/fee fields are wrapped in `Decimal` with no raw float arithmetic reachable by Grep
72
+ - WebSocket reconnects automatically after 5-second disconnect in manual or automated test
73
+ - Chart renders candlesticks and at least one indicator overlay without layout shift on resize
74
+ - Streaming indicator values match reference batch output within floating-point display tolerance
75
+ - `prefers-reduced-motion` disables chart animations (verified via browser devtools emulation)
76
+ - No `localStorage` usage for financial data (confirmed by Grep audit)
77
+
78
+ ## Cost Profile
79
+
80
+ ~2,000–4,000 tokens per skill activation. `sonnet` default for code generation; `haiku` for Grep/file-scan steps; `opus` if regulatory compliance or security audit context is detected. Full pack activation (all 7 skills) runs ~14,000–28,000 tokens end-to-end.