@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.
- package/LICENSE +21 -21
- package/README.md +68 -34
- package/agents/adversary.md +27 -0
- package/agents/architect.md +19 -29
- package/agents/asset-creator.md +18 -4
- package/agents/audit.md +25 -4
- package/agents/autopsy.md +19 -4
- package/agents/ba.md +35 -0
- package/agents/brainstorm.md +31 -4
- package/agents/browser-pilot.md +21 -4
- package/agents/coder.md +21 -29
- package/agents/completion-gate.md +20 -4
- package/agents/constraint-check.md +18 -4
- package/agents/context-engine.md +22 -4
- package/agents/context-pack.md +32 -0
- package/agents/cook.md +41 -4
- package/agents/db.md +19 -4
- package/agents/debug.md +33 -4
- package/agents/dependency-doctor.md +20 -4
- package/agents/deploy.md +27 -4
- package/agents/design.md +22 -4
- package/agents/doc-processor.md +27 -0
- package/agents/docs-seeker.md +19 -4
- package/agents/docs.md +31 -0
- package/agents/fix.md +37 -4
- package/agents/git.md +29 -0
- package/agents/hallucination-guard.md +20 -4
- package/agents/incident.md +21 -4
- package/agents/integrity-check.md +18 -4
- package/agents/journal.md +19 -4
- package/agents/launch.md +32 -4
- package/agents/logic-guardian.md +26 -11
- package/agents/marketing.md +23 -4
- package/agents/mcp-builder.md +26 -0
- package/agents/neural-memory.md +30 -0
- package/agents/onboard.md +22 -4
- package/agents/perf.md +21 -4
- package/agents/plan.md +29 -4
- package/agents/preflight.md +22 -4
- package/agents/problem-solver.md +20 -4
- package/agents/rescue.md +23 -4
- package/agents/research.md +19 -4
- package/agents/researcher.md +19 -29
- package/agents/retro.md +32 -0
- package/agents/review-intake.md +20 -4
- package/agents/review.md +32 -4
- package/agents/reviewer.md +20 -28
- package/agents/safeguard.md +19 -4
- package/agents/sast.md +18 -4
- package/agents/scaffold.md +41 -0
- package/agents/scanner.md +19 -28
- package/agents/scope-guard.md +18 -4
- package/agents/scout.md +23 -4
- package/agents/sentinel-env.md +26 -0
- package/agents/sentinel.md +33 -4
- package/agents/sequential-thinking.md +20 -4
- package/agents/session-bridge.md +24 -4
- package/agents/skill-forge.md +22 -4
- package/agents/skill-router.md +26 -4
- package/agents/slides.md +24 -0
- package/agents/surgeon.md +19 -4
- package/agents/team.md +30 -4
- package/agents/test.md +36 -4
- package/agents/trend-scout.md +17 -4
- package/agents/verification.md +20 -4
- package/agents/video-creator.md +20 -4
- package/agents/watchdog.md +19 -4
- package/agents/worktree.md +17 -4
- package/commands/rune.md +168 -168
- package/compiler/__tests__/analytics.test.js +370 -0
- package/compiler/adapters/openclaw.js +2 -2
- package/compiler/analytics.js +385 -0
- package/compiler/bin/rune.js +68 -2
- package/compiler/dashboard.js +883 -0
- package/compiler/transforms/branding.js +1 -1
- package/contexts/dev.md +34 -34
- package/contexts/research.md +43 -43
- package/contexts/review.md +55 -55
- package/extensions/ai-ml/PACK.md +88 -88
- package/extensions/ai-ml/skills/ai-agents.md +172 -172
- package/extensions/ai-ml/skills/code-sandbox.md +187 -187
- package/extensions/ai-ml/skills/deep-research.md +146 -146
- package/extensions/ai-ml/skills/embedding-search.md +66 -66
- package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
- package/extensions/ai-ml/skills/llm-architect.md +125 -125
- package/extensions/ai-ml/skills/llm-integration.md +64 -64
- package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
- package/extensions/ai-ml/skills/rag-patterns.md +66 -66
- package/extensions/ai-ml/skills/web-extraction.md +114 -114
- package/extensions/analytics/PACK.md +92 -92
- package/extensions/analytics/skills/ab-testing.md +72 -72
- package/extensions/analytics/skills/dashboard-patterns.md +83 -83
- package/extensions/analytics/skills/data-validation.md +68 -68
- package/extensions/analytics/skills/funnel-analysis.md +81 -81
- package/extensions/analytics/skills/sql-patterns.md +57 -57
- package/extensions/analytics/skills/statistical-analysis.md +79 -79
- package/extensions/analytics/skills/tracking-setup.md +71 -71
- package/extensions/backend/PACK.md +104 -104
- package/extensions/backend/skills/api-patterns.md +84 -84
- package/extensions/backend/skills/async-pipeline.md +193 -193
- package/extensions/backend/skills/auth-patterns.md +97 -97
- package/extensions/backend/skills/background-jobs.md +133 -133
- package/extensions/backend/skills/caching-patterns.md +108 -108
- package/extensions/backend/skills/cli-generation.md +133 -133
- package/extensions/backend/skills/database-patterns.md +87 -87
- package/extensions/backend/skills/middleware-patterns.md +104 -104
- package/extensions/chrome-ext/PACK.md +93 -93
- package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
- package/extensions/chrome-ext/skills/cws-publish.md +104 -104
- package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
- package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
- package/extensions/chrome-ext/skills/ext-storage.md +133 -133
- package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
- package/extensions/content/PACK.md +96 -96
- package/extensions/content/skills/blog-patterns.md +88 -88
- package/extensions/content/skills/cms-integration.md +131 -131
- package/extensions/content/skills/content-scoring.md +107 -107
- package/extensions/content/skills/i18n.md +83 -83
- package/extensions/content/skills/mdx-authoring.md +137 -137
- package/extensions/content/skills/reference.md +1014 -1014
- package/extensions/content/skills/seo-patterns.md +67 -67
- package/extensions/content/skills/video-repurpose.md +153 -153
- package/extensions/devops/PACK.md +101 -101
- package/extensions/devops/skills/chaos-testing.md +67 -67
- package/extensions/devops/skills/ci-cd.md +75 -75
- package/extensions/devops/skills/docker.md +58 -58
- package/extensions/devops/skills/edge-serverless.md +163 -163
- package/extensions/devops/skills/infra-as-code.md +158 -158
- package/extensions/devops/skills/kubernetes.md +110 -110
- package/extensions/devops/skills/monitoring.md +57 -57
- package/extensions/devops/skills/server-setup.md +64 -64
- package/extensions/devops/skills/ssl-domain.md +42 -42
- package/extensions/ecommerce/PACK.md +116 -116
- package/extensions/ecommerce/skills/cart-system.md +79 -79
- package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
- package/extensions/ecommerce/skills/order-management.md +126 -126
- package/extensions/ecommerce/skills/payment-integration.md +472 -472
- package/extensions/ecommerce/skills/shopify-dev.md +69 -69
- package/extensions/ecommerce/skills/subscription-billing.md +93 -93
- package/extensions/ecommerce/skills/tax-compliance.md +117 -117
- package/extensions/gamedev/PACK.md +142 -142
- package/extensions/gamedev/skills/asset-pipeline.md +74 -74
- package/extensions/gamedev/skills/audio-system.md +129 -129
- package/extensions/gamedev/skills/camera-system.md +87 -87
- package/extensions/gamedev/skills/ecs.md +98 -98
- package/extensions/gamedev/skills/game-loops.md +72 -72
- package/extensions/gamedev/skills/input-system.md +199 -199
- package/extensions/gamedev/skills/multiplayer.md +180 -180
- package/extensions/gamedev/skills/particles.md +105 -105
- package/extensions/gamedev/skills/physics-engine.md +89 -89
- package/extensions/gamedev/skills/scene-management.md +146 -146
- package/extensions/gamedev/skills/threejs-patterns.md +90 -90
- package/extensions/gamedev/skills/webgl.md +71 -71
- package/extensions/mobile/PACK.md +106 -106
- package/extensions/mobile/skills/app-store-connect.md +152 -152
- package/extensions/mobile/skills/app-store-prep.md +66 -66
- package/extensions/mobile/skills/deep-linking.md +109 -109
- package/extensions/mobile/skills/flutter.md +60 -60
- package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
- package/extensions/mobile/skills/native-bridge.md +66 -66
- package/extensions/mobile/skills/ota-updates.md +97 -97
- package/extensions/mobile/skills/push-notifications.md +111 -111
- package/extensions/mobile/skills/react-native.md +82 -82
- package/extensions/saas/PACK.md +116 -116
- package/extensions/saas/skills/billing-integration.md +200 -200
- package/extensions/saas/skills/feature-flags.md +130 -130
- package/extensions/saas/skills/multi-tenant.md +103 -103
- package/extensions/saas/skills/onboarding-flow.md +139 -139
- package/extensions/saas/skills/subscription-flow.md +95 -95
- package/extensions/saas/skills/team-management.md +144 -144
- package/extensions/security/PACK.md +99 -99
- package/extensions/security/skills/api-security.md +140 -140
- package/extensions/security/skills/compliance.md +68 -68
- package/extensions/security/skills/owasp-audit.md +64 -64
- package/extensions/security/skills/pentest-patterns.md +77 -77
- package/extensions/security/skills/secret-mgmt.md +65 -65
- package/extensions/security/skills/supply-chain.md +65 -65
- package/extensions/trading/PACK.md +80 -80
- package/extensions/trading/skills/chart-components.md +55 -55
- package/extensions/trading/skills/experiment-loop.md +125 -125
- package/extensions/trading/skills/fintech-patterns.md +47 -47
- package/extensions/trading/skills/indicator-library.md +58 -58
- package/extensions/trading/skills/quant-analysis.md +111 -111
- package/extensions/trading/skills/realtime-data.md +58 -58
- package/extensions/trading/skills/trade-logic.md +104 -104
- package/extensions/ui/PACK.md +130 -130
- package/extensions/ui/skills/a11y-audit.md +91 -91
- package/extensions/ui/skills/animation-patterns.md +127 -106
- package/extensions/ui/skills/component-patterns.md +100 -75
- package/extensions/ui/skills/design-decision.md +108 -108
- package/extensions/ui/skills/design-system.md +68 -68
- package/extensions/ui/skills/landing-patterns.md +155 -155
- package/extensions/ui/skills/palette-picker.md +173 -173
- package/extensions/ui/skills/react-health.md +90 -90
- package/extensions/ui/skills/type-system.md +125 -125
- package/extensions/ui/skills/web-vitals.md +153 -153
- package/extensions/zalo/PACK.md +145 -145
- package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
- package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
- package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
- package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
- package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
- package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
- package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
- package/hooks/auto-format/index.cjs +48 -48
- package/hooks/context-watch/index.cjs +95 -68
- package/hooks/hooks.json +111 -111
- package/hooks/metrics-collector/index.cjs +86 -42
- package/hooks/post-session-reflect/index.cjs +189 -153
- package/hooks/pre-compact/index.cjs +95 -95
- package/hooks/run-hook.cmd +1 -1
- package/hooks/secrets-scan/index.cjs +100 -100
- package/hooks/session-start/index.cjs +71 -65
- package/hooks/typecheck/index.cjs +65 -65
- package/package.json +63 -63
- package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
- package/references/ui-pro-max-data/charts.csv +26 -26
- package/references/ui-pro-max-data/colors.csv +161 -161
- package/references/ui-pro-max-data/styles.csv +68 -68
- package/references/ui-pro-max-data/typography.csv +74 -74
- package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
- package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
- package/skills/adversary/SKILL.md +283 -283
- package/skills/asset-creator/SKILL.md +157 -157
- package/skills/audit/SKILL.md +148 -2
- package/skills/autopsy/SKILL.md +335 -259
- package/skills/autopsy/references/repo-analysis-patterns.md +113 -0
- package/skills/ba/SKILL.md +72 -2
- package/skills/brainstorm/SKILL.md +342 -341
- package/skills/browser-pilot/SKILL.md +168 -168
- package/skills/constraint-check/SKILL.md +165 -165
- package/skills/context-engine/SKILL.md +404 -404
- package/skills/cook/SKILL.md +917 -834
- package/skills/cook/references/output-format.md +33 -0
- package/skills/db/SKILL.md +273 -272
- package/skills/debug/SKILL.md +465 -443
- package/skills/dependency-doctor/SKILL.md +265 -235
- package/skills/deploy/SKILL.md +274 -231
- package/skills/design/DESIGN-REFERENCE.md +365 -365
- package/skills/design/SKILL.md +589 -482
- package/skills/doc-processor/SKILL.md +254 -254
- package/skills/docs/SKILL.md +374 -373
- package/skills/docs-seeker/SKILL.md +177 -177
- package/skills/fix/SKILL.md +330 -308
- package/skills/git/SKILL.md +339 -339
- package/skills/graft/SKILL.md +352 -0
- package/skills/graft/references/challenge-framework.md +98 -0
- package/skills/graft/references/mode-decision.md +44 -0
- package/skills/hallucination-guard/SKILL.md +219 -219
- package/skills/incident/SKILL.md +254 -251
- package/skills/integrity-check/SKILL.md +169 -169
- package/skills/journal/SKILL.md +240 -238
- package/skills/launch/SKILL.md +344 -342
- package/skills/logic-guardian/SKILL.md +251 -251
- package/skills/marketing/SKILL.md +290 -245
- package/skills/mcp-builder/SKILL.md +425 -423
- package/skills/mcp-builder/references/auto-discovery-pattern.md +169 -0
- package/skills/neural-memory/SKILL.md +362 -362
- package/skills/onboard/SKILL.md +404 -403
- package/skills/perf/SKILL.md +346 -346
- package/skills/plan/SKILL.md +433 -370
- package/skills/plan/references/feature-map.md +84 -0
- package/skills/preflight/SKILL.md +415 -396
- package/skills/problem-solver/SKILL.md +380 -284
- package/skills/rescue/SKILL.md +474 -450
- package/skills/retro/SKILL.md +5 -1
- package/skills/review/SKILL.md +612 -535
- package/skills/review-intake/SKILL.md +249 -249
- package/skills/safeguard/SKILL.md +200 -200
- package/skills/sast/SKILL.md +190 -190
- package/skills/scaffold/SKILL.md +328 -286
- package/skills/scope-guard/SKILL.md +180 -162
- package/skills/scout/SKILL.md +263 -263
- package/skills/sentinel/SKILL.md +382 -353
- package/skills/sentinel-env/SKILL.md +254 -254
- package/skills/sequential-thinking/SKILL.md +234 -234
- package/skills/session-bridge/SKILL.md +543 -397
- package/skills/skill-forge/SKILL.md +581 -539
- package/skills/skill-router/{skill.md → SKILL.md} +30 -2
- package/skills/surgeon/SKILL.md +215 -215
- package/skills/team/SKILL.md +556 -514
- package/skills/test/SKILL.md +614 -587
- package/skills/trend-scout/SKILL.md +145 -145
- package/skills/verification/SKILL.md +326 -325
- package/skills/video-creator/SKILL.md +201 -201
- package/skills/watchdog/SKILL.md +168 -168
- 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.
|