@rune-kit/rune 2.10.0 → 2.12.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 +65 -6
- package/commands/rune.md +168 -168
- package/compiler/__tests__/detect-invariants.test.js +136 -0
- package/compiler/__tests__/doctor-mesh.test.js +229 -0
- package/compiler/__tests__/hook-dispatch.test.js +91 -0
- package/compiler/__tests__/hooks-antigravity.test.js +118 -0
- package/compiler/__tests__/hooks-cursor.test.js +139 -0
- package/compiler/__tests__/hooks-install.test.js +305 -0
- package/compiler/__tests__/hooks-merge.test.js +204 -0
- package/compiler/__tests__/hooks-tiers.test.js +519 -0
- package/compiler/__tests__/hooks-windsurf.test.js +115 -0
- package/compiler/__tests__/inject-claude-md.test.js +152 -0
- package/compiler/__tests__/load-invariants.test.js +408 -0
- package/compiler/__tests__/onboard-invariants.test.js +240 -0
- package/compiler/adapters/hooks/antigravity.js +140 -0
- package/compiler/adapters/hooks/claude.js +166 -0
- package/compiler/adapters/hooks/cursor.js +191 -0
- package/compiler/adapters/hooks/index.js +82 -0
- package/compiler/adapters/hooks/tier-emitter.js +182 -0
- package/compiler/adapters/hooks/windsurf.js +202 -0
- package/compiler/bin/rune.js +196 -6
- package/compiler/commands/hook-dispatch.js +87 -0
- package/compiler/commands/hooks/install.js +120 -0
- package/compiler/commands/hooks/merge.js +211 -0
- package/compiler/commands/hooks/presets.js +116 -0
- package/compiler/commands/hooks/status.js +112 -0
- package/compiler/commands/hooks/tiers.js +221 -0
- package/compiler/commands/hooks/uninstall.js +94 -0
- package/compiler/doctor.js +236 -0
- 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 -127
- package/extensions/ui/skills/component-patterns.md +100 -100
- 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/hooks.json +111 -111
- package/hooks/post-session-reflect/index.cjs +189 -189
- 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 -71
- 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 +147 -2
- package/skills/autopsy/SKILL.md +335 -335
- package/skills/ba/SKILL.md +85 -1
- package/skills/brainstorm/SKILL.md +380 -342
- package/skills/browser-pilot/SKILL.md +169 -168
- package/skills/constraint-check/SKILL.md +165 -165
- package/skills/context-engine/SKILL.md +408 -404
- package/skills/cook/SKILL.md +917 -863
- package/skills/db/SKILL.md +273 -273
- package/skills/debug/SKILL.md +465 -465
- 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 +590 -589
- package/skills/doc-processor/SKILL.md +254 -254
- package/skills/docs/SKILL.md +374 -374
- package/skills/docs-seeker/SKILL.md +178 -177
- package/skills/fix/SKILL.md +332 -330
- package/skills/git/SKILL.md +339 -339
- package/skills/hallucination-guard/SKILL.md +220 -219
- package/skills/incident/SKILL.md +254 -253
- package/skills/integrity-check/SKILL.md +169 -169
- package/skills/journal/SKILL.md +241 -240
- package/skills/launch/SKILL.md +344 -344
- package/skills/logic-guardian/SKILL.md +269 -251
- package/skills/marketing/SKILL.md +351 -289
- package/skills/mcp-builder/SKILL.md +425 -425
- package/skills/neural-memory/SKILL.md +359 -362
- package/skills/onboard/SKILL.md +432 -403
- package/skills/onboard/references/invariants-template.md +76 -0
- package/skills/onboard/scripts/detect-invariants.js +439 -0
- package/skills/onboard/scripts/inject-claude-md.js +150 -0
- package/skills/onboard/scripts/onboard-invariants.js +194 -0
- package/skills/perf/SKILL.md +347 -346
- package/skills/plan/SKILL.md +435 -428
- package/skills/preflight/SKILL.md +415 -415
- package/skills/problem-solver/SKILL.md +380 -284
- package/skills/rescue/SKILL.md +474 -474
- package/skills/research/SKILL.md +4 -0
- package/skills/retro/SKILL.md +3 -1
- package/skills/review/SKILL.md +614 -588
- 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 -287
- package/skills/scope-guard/SKILL.md +183 -180
- package/skills/scout/SKILL.md +269 -263
- package/skills/sentinel/SKILL.md +384 -381
- package/skills/sentinel-env/SKILL.md +254 -254
- package/skills/sequential-thinking/SKILL.md +234 -234
- package/skills/session-bridge/SKILL.md +595 -543
- package/skills/session-bridge/scripts/load-invariants.js +397 -0
- package/skills/skill-forge/SKILL.md +581 -581
- package/skills/skill-router/SKILL.md +3 -0
- package/skills/slides/SKILL.md +19 -0
- package/skills/surgeon/SKILL.md +215 -215
- package/skills/team/SKILL.md +557 -537
- package/skills/test/SKILL.md +620 -614
- package/skills/trend-scout/SKILL.md +145 -145
- package/skills/verification/SKILL.md +334 -326
- package/skills/video-creator/SKILL.md +201 -201
- package/skills/watchdog/SKILL.md +168 -168
- package/skills/worktree/SKILL.md +140 -140
package/compiler/doctor.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Doctor — Validates compiled output
|
|
3
3
|
*
|
|
4
4
|
* Checks: files exist, cross-references resolve, layer discipline, source freshness.
|
|
5
|
+
* Mesh checks: reciprocal connections, version suggestions, required sections.
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
8
|
import { existsSync } from 'node:fs';
|
|
@@ -454,6 +455,241 @@ async function checkOrgTemplates(_runeRoot, config) {
|
|
|
454
455
|
return errors;
|
|
455
456
|
}
|
|
456
457
|
|
|
458
|
+
/**
|
|
459
|
+
* Check mesh integrity: reciprocal connections, version suggestions, required sections
|
|
460
|
+
*
|
|
461
|
+
* @param {string} runeRoot - path to Rune source root
|
|
462
|
+
* @returns {Promise<object>} mesh check results
|
|
463
|
+
*/
|
|
464
|
+
export async function checkMeshIntegrity(runeRoot) {
|
|
465
|
+
const results = {
|
|
466
|
+
checks: [],
|
|
467
|
+
warnings: [],
|
|
468
|
+
errors: [],
|
|
469
|
+
stats: { skills: 0, connections: 0, missingReciprocals: 0 },
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
const skillsDir = path.join(runeRoot, 'skills');
|
|
473
|
+
if (!existsSync(skillsDir)) {
|
|
474
|
+
results.errors.push('skills/ directory not found');
|
|
475
|
+
return results;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// Step 1: Parse all skills
|
|
479
|
+
const skills = new Map(); // name → { calls: [], calledBy: [], version, sections }
|
|
480
|
+
const entries = await readdir(skillsDir, { withFileTypes: true });
|
|
481
|
+
|
|
482
|
+
for (const entry of entries) {
|
|
483
|
+
if (!entry.isDirectory()) continue;
|
|
484
|
+
const skillFile = path.join(skillsDir, entry.name, 'SKILL.md');
|
|
485
|
+
if (!existsSync(skillFile)) continue;
|
|
486
|
+
|
|
487
|
+
const content = await readFile(skillFile, 'utf-8');
|
|
488
|
+
const parsed = parseSkillConnections(content, entry.name);
|
|
489
|
+
skills.set(entry.name, parsed);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
results.stats.skills = skills.size;
|
|
493
|
+
|
|
494
|
+
// Step 2: Validate reciprocals
|
|
495
|
+
const missingReciprocals = [];
|
|
496
|
+
|
|
497
|
+
for (const [name, skill] of skills) {
|
|
498
|
+
for (const called of skill.calls) {
|
|
499
|
+
const targetSkill = skills.get(called.skill);
|
|
500
|
+
if (!targetSkill) continue; // External skill or L4 pack
|
|
501
|
+
|
|
502
|
+
// Check if target acknowledges this caller
|
|
503
|
+
const acknowledges = targetSkill.calledBy.some((c) => c.skill === name);
|
|
504
|
+
if (!acknowledges) {
|
|
505
|
+
missingReciprocals.push({
|
|
506
|
+
caller: name,
|
|
507
|
+
callee: called.skill,
|
|
508
|
+
reason: called.reason,
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
results.stats.connections += skill.calls.length;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
results.stats.missingReciprocals = missingReciprocals.length;
|
|
516
|
+
|
|
517
|
+
if (missingReciprocals.length === 0) {
|
|
518
|
+
results.checks.push({ name: 'Reciprocal connections', status: 'pass' });
|
|
519
|
+
} else {
|
|
520
|
+
results.checks.push({
|
|
521
|
+
name: 'Reciprocal connections',
|
|
522
|
+
status: 'warn',
|
|
523
|
+
detail: `${missingReciprocals.length} missing`,
|
|
524
|
+
});
|
|
525
|
+
// Group by callee for cleaner output
|
|
526
|
+
const byCallee = {};
|
|
527
|
+
for (const m of missingReciprocals) {
|
|
528
|
+
if (!byCallee[m.callee]) byCallee[m.callee] = [];
|
|
529
|
+
byCallee[m.callee].push(m.caller);
|
|
530
|
+
}
|
|
531
|
+
for (const [callee, callers] of Object.entries(byCallee)) {
|
|
532
|
+
results.warnings.push(`${callee}: missing callers in Called By: ${callers.join(', ')}`);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// Step 3: Check version maturity
|
|
537
|
+
const matureButLow = [];
|
|
538
|
+
for (const [name, skill] of skills) {
|
|
539
|
+
if (!skill.version) continue;
|
|
540
|
+
const [major, minor] = skill.version.split('.').map(Number);
|
|
541
|
+
// Suggest 1.0 if version is 0.8+ and has all required sections
|
|
542
|
+
if (major === 0 && minor >= 8 && skill.hasAllSections) {
|
|
543
|
+
matureButLow.push({ name, version: skill.version });
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
if (matureButLow.length === 0) {
|
|
548
|
+
results.checks.push({ name: 'Version maturity', status: 'pass' });
|
|
549
|
+
} else {
|
|
550
|
+
results.checks.push({
|
|
551
|
+
name: 'Version maturity',
|
|
552
|
+
status: 'warn',
|
|
553
|
+
detail: `${matureButLow.length} skills ready for 1.0`,
|
|
554
|
+
});
|
|
555
|
+
for (const s of matureButLow) {
|
|
556
|
+
results.warnings.push(`${s.name} v${s.version}: mature skill, consider promoting to 1.0`);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// Step 4: Check required sections
|
|
561
|
+
const requiredSections = ['Sharp Edges', 'Done When', 'Cost Profile'];
|
|
562
|
+
const missingSections = [];
|
|
563
|
+
|
|
564
|
+
for (const [name, skill] of skills) {
|
|
565
|
+
const missing = requiredSections.filter((s) => !skill.sections.includes(s));
|
|
566
|
+
if (missing.length > 0) {
|
|
567
|
+
missingSections.push({ name, missing });
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
if (missingSections.length === 0) {
|
|
572
|
+
results.checks.push({ name: 'Required sections', status: 'pass' });
|
|
573
|
+
} else {
|
|
574
|
+
results.checks.push({
|
|
575
|
+
name: 'Required sections',
|
|
576
|
+
status: 'warn',
|
|
577
|
+
detail: `${missingSections.length} skills incomplete`,
|
|
578
|
+
});
|
|
579
|
+
for (const s of missingSections) {
|
|
580
|
+
results.warnings.push(`${s.name}: missing sections: ${s.missing.join(', ')}`);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
return results;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* Parse skill connections from SKILL.md content
|
|
589
|
+
*/
|
|
590
|
+
function parseSkillConnections(content, skillName) {
|
|
591
|
+
const result = {
|
|
592
|
+
name: skillName,
|
|
593
|
+
calls: [],
|
|
594
|
+
calledBy: [],
|
|
595
|
+
version: null,
|
|
596
|
+
sections: [],
|
|
597
|
+
hasAllSections: false,
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
// Extract version from frontmatter
|
|
601
|
+
const versionMatch = content.match(/version:\s*["']?([\d.]+)["']?/);
|
|
602
|
+
if (versionMatch) {
|
|
603
|
+
result.version = versionMatch[1];
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
// Extract Calls section
|
|
607
|
+
const callsMatch = content.match(/## Calls \(outbound\)\s*\n([\s\S]*?)(?=\n## |\n---|Z)/);
|
|
608
|
+
if (callsMatch) {
|
|
609
|
+
const lines = callsMatch[1].split('\n');
|
|
610
|
+
for (const line of lines) {
|
|
611
|
+
// Match patterns like: - `scout` (L2): scan codebase
|
|
612
|
+
// Or: - scout (L2): scan codebase
|
|
613
|
+
const match = line.match(/^-\s*`?([a-z][\w-]*)`?\s*\(L\d\)/i);
|
|
614
|
+
if (match) {
|
|
615
|
+
const skillRef = match[1].toLowerCase();
|
|
616
|
+
const reason = line
|
|
617
|
+
.replace(match[0], '')
|
|
618
|
+
.replace(/^[:\s-]+/, '')
|
|
619
|
+
.trim();
|
|
620
|
+
result.calls.push({ skill: skillRef, reason });
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// Extract Called By section
|
|
626
|
+
const calledByMatch = content.match(/## Called By \(inbound\)\s*\n([\s\S]*?)(?=\n## |\n---|Z)/);
|
|
627
|
+
if (calledByMatch) {
|
|
628
|
+
const lines = calledByMatch[1].split('\n');
|
|
629
|
+
for (const line of lines) {
|
|
630
|
+
const match = line.match(/^-\s*`?([a-z][\w-]*)`?\s*\(L\d\)/i);
|
|
631
|
+
if (match) {
|
|
632
|
+
const skillRef = match[1].toLowerCase();
|
|
633
|
+
result.calledBy.push({ skill: skillRef });
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
// Check for required sections
|
|
639
|
+
const sectionPatterns = [
|
|
640
|
+
{ name: 'Sharp Edges', pattern: /## Sharp Edges/ },
|
|
641
|
+
{ name: 'Done When', pattern: /## Done When/ },
|
|
642
|
+
{ name: 'Cost Profile', pattern: /## Cost Profile/ },
|
|
643
|
+
{ name: 'Returns', pattern: /## Returns/ },
|
|
644
|
+
];
|
|
645
|
+
|
|
646
|
+
for (const { name, pattern } of sectionPatterns) {
|
|
647
|
+
if (pattern.test(content)) {
|
|
648
|
+
result.sections.push(name);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
result.hasAllSections = sectionPatterns.every(({ name }) => result.sections.includes(name));
|
|
653
|
+
|
|
654
|
+
return result;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Format mesh results for console output
|
|
659
|
+
*/
|
|
660
|
+
export function formatMeshResults(results) {
|
|
661
|
+
const lines = [];
|
|
662
|
+
lines.push(`\n Mesh Integrity Check`);
|
|
663
|
+
lines.push(` Skills: ${results.stats.skills} | Connections: ${results.stats.connections}`);
|
|
664
|
+
lines.push('');
|
|
665
|
+
|
|
666
|
+
for (const check of results.checks) {
|
|
667
|
+
const icon = check.status === 'pass' ? '✓' : check.status === 'warn' ? '!' : '✗';
|
|
668
|
+
const detail = check.detail ? ` (${check.detail})` : '';
|
|
669
|
+
lines.push(` [${icon}] ${check.name}${detail}`);
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
if (results.warnings.length > 0) {
|
|
673
|
+
lines.push('');
|
|
674
|
+
for (const w of results.warnings) {
|
|
675
|
+
lines.push(` ⚠ ${w}`);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
if (results.errors.length > 0) {
|
|
680
|
+
lines.push('');
|
|
681
|
+
for (const e of results.errors) {
|
|
682
|
+
lines.push(` ✗ ${e}`);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
const healthy = results.errors.length === 0 && results.warnings.length === 0;
|
|
687
|
+
lines.push('');
|
|
688
|
+
lines.push(healthy ? ' ✓ Mesh is healthy' : ` ! Mesh has ${results.warnings.length} warnings`);
|
|
689
|
+
|
|
690
|
+
return lines.join('\n');
|
|
691
|
+
}
|
|
692
|
+
|
|
457
693
|
/**
|
|
458
694
|
* Format doctor results for console output
|
|
459
695
|
*/
|
package/contexts/dev.md
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
# Development Mode
|
|
2
|
-
|
|
3
|
-
Behavioral context for active coding sessions. Prioritize action over analysis.
|
|
4
|
-
|
|
5
|
-
## Principles
|
|
6
|
-
|
|
7
|
-
- **Code first, explain after** — show working code, not paragraphs about what you'll do
|
|
8
|
-
- **Working → Right → Clean** — get it running, make it correct, then refine
|
|
9
|
-
- **Bias toward action** — if the path is 80% clear, start coding rather than analyzing further
|
|
10
|
-
|
|
11
|
-
## Tool Priority
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
HIGH: Edit, Write, Bash (run tests/build)
|
|
15
|
-
MEDIUM: Read (targeted files), Grep (specific patterns)
|
|
16
|
-
LOW: Glob (broad search), WebSearch (external docs)
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Behavioral Rules
|
|
20
|
-
|
|
21
|
-
1. Read the file BEFORE editing — never guess at existing code
|
|
22
|
-
2. Run tests after every meaningful change
|
|
23
|
-
3. If stuck for >2 iterations on the same error, switch strategy:
|
|
24
|
-
- Try a different approach rather than debugging deeper
|
|
25
|
-
- Use `rune:debug` for structured root cause analysis
|
|
26
|
-
4. Keep explanations to 1-2 sentences between code blocks
|
|
27
|
-
5. Commit working increments — don't batch everything into one giant change
|
|
28
|
-
|
|
29
|
-
## Anti-Patterns
|
|
30
|
-
|
|
31
|
-
- Lengthy analysis before writing a single line of code
|
|
32
|
-
- Reading 10+ files "for context" when 2-3 would suffice
|
|
33
|
-
- Explaining what you're about to do instead of doing it
|
|
34
|
-
- Over-engineering the first pass (violates Working → Right → Clean)
|
|
1
|
+
# Development Mode
|
|
2
|
+
|
|
3
|
+
Behavioral context for active coding sessions. Prioritize action over analysis.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- **Code first, explain after** — show working code, not paragraphs about what you'll do
|
|
8
|
+
- **Working → Right → Clean** — get it running, make it correct, then refine
|
|
9
|
+
- **Bias toward action** — if the path is 80% clear, start coding rather than analyzing further
|
|
10
|
+
|
|
11
|
+
## Tool Priority
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
HIGH: Edit, Write, Bash (run tests/build)
|
|
15
|
+
MEDIUM: Read (targeted files), Grep (specific patterns)
|
|
16
|
+
LOW: Glob (broad search), WebSearch (external docs)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Behavioral Rules
|
|
20
|
+
|
|
21
|
+
1. Read the file BEFORE editing — never guess at existing code
|
|
22
|
+
2. Run tests after every meaningful change
|
|
23
|
+
3. If stuck for >2 iterations on the same error, switch strategy:
|
|
24
|
+
- Try a different approach rather than debugging deeper
|
|
25
|
+
- Use `rune:debug` for structured root cause analysis
|
|
26
|
+
4. Keep explanations to 1-2 sentences between code blocks
|
|
27
|
+
5. Commit working increments — don't batch everything into one giant change
|
|
28
|
+
|
|
29
|
+
## Anti-Patterns
|
|
30
|
+
|
|
31
|
+
- Lengthy analysis before writing a single line of code
|
|
32
|
+
- Reading 10+ files "for context" when 2-3 would suffice
|
|
33
|
+
- Explaining what you're about to do instead of doing it
|
|
34
|
+
- Over-engineering the first pass (violates Working → Right → Clean)
|
package/contexts/research.md
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
# Research Mode
|
|
2
|
-
|
|
3
|
-
Behavioral context for investigation, exploration, and understanding. Prioritize breadth and accuracy over speed.
|
|
4
|
-
|
|
5
|
-
## Principles
|
|
6
|
-
|
|
7
|
-
- **Read widely before concluding** — check 3+ sources before forming an opinion
|
|
8
|
-
- **Map before moving** — understand the full landscape before recommending a path
|
|
9
|
-
- **Evidence over intuition** — every claim should reference a file, doc, or search result
|
|
10
|
-
|
|
11
|
-
## Tool Priority
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
HIGH: Grep, Glob, Read, WebSearch, WebFetch
|
|
15
|
-
MEDIUM: Bash (non-destructive: git log, dependency checks)
|
|
16
|
-
LOW: Edit, Write (only for saving findings)
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Investigation Framework
|
|
20
|
-
|
|
21
|
-
1. **Define the question** — what exactly are we trying to learn?
|
|
22
|
-
2. **Internal scan** — search the codebase first (Grep, Glob, Read)
|
|
23
|
-
3. **External lookup** — check docs, changelogs, GitHub issues (WebSearch, WebFetch)
|
|
24
|
-
4. **Cross-reference** — validate findings against 2+ sources
|
|
25
|
-
5. **Synthesize** — present findings with confidence levels:
|
|
26
|
-
- **Confirmed**: found in code/docs, verified
|
|
27
|
-
- **Likely**: strong evidence but not 100% confirmed
|
|
28
|
-
- **Uncertain**: limited evidence, needs more investigation
|
|
29
|
-
|
|
30
|
-
## Behavioral Rules
|
|
31
|
-
|
|
32
|
-
1. Never modify code in research mode — read-only exploration
|
|
33
|
-
2. Present findings in structured format (tables, bullet points)
|
|
34
|
-
3. Include file paths and line numbers for all code references
|
|
35
|
-
4. Flag contradictions between sources rather than picking one silently
|
|
36
|
-
5. Estimate scope/effort when the research is for planning purposes
|
|
37
|
-
|
|
38
|
-
## Anti-Patterns
|
|
39
|
-
|
|
40
|
-
- Jumping to a solution after reading one file
|
|
41
|
-
- Modifying code "while we're here" during research
|
|
42
|
-
- Presenting opinions as facts without evidence trail
|
|
43
|
-
- Stopping research early because the first answer looks plausible
|
|
1
|
+
# Research Mode
|
|
2
|
+
|
|
3
|
+
Behavioral context for investigation, exploration, and understanding. Prioritize breadth and accuracy over speed.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- **Read widely before concluding** — check 3+ sources before forming an opinion
|
|
8
|
+
- **Map before moving** — understand the full landscape before recommending a path
|
|
9
|
+
- **Evidence over intuition** — every claim should reference a file, doc, or search result
|
|
10
|
+
|
|
11
|
+
## Tool Priority
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
HIGH: Grep, Glob, Read, WebSearch, WebFetch
|
|
15
|
+
MEDIUM: Bash (non-destructive: git log, dependency checks)
|
|
16
|
+
LOW: Edit, Write (only for saving findings)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Investigation Framework
|
|
20
|
+
|
|
21
|
+
1. **Define the question** — what exactly are we trying to learn?
|
|
22
|
+
2. **Internal scan** — search the codebase first (Grep, Glob, Read)
|
|
23
|
+
3. **External lookup** — check docs, changelogs, GitHub issues (WebSearch, WebFetch)
|
|
24
|
+
4. **Cross-reference** — validate findings against 2+ sources
|
|
25
|
+
5. **Synthesize** — present findings with confidence levels:
|
|
26
|
+
- **Confirmed**: found in code/docs, verified
|
|
27
|
+
- **Likely**: strong evidence but not 100% confirmed
|
|
28
|
+
- **Uncertain**: limited evidence, needs more investigation
|
|
29
|
+
|
|
30
|
+
## Behavioral Rules
|
|
31
|
+
|
|
32
|
+
1. Never modify code in research mode — read-only exploration
|
|
33
|
+
2. Present findings in structured format (tables, bullet points)
|
|
34
|
+
3. Include file paths and line numbers for all code references
|
|
35
|
+
4. Flag contradictions between sources rather than picking one silently
|
|
36
|
+
5. Estimate scope/effort when the research is for planning purposes
|
|
37
|
+
|
|
38
|
+
## Anti-Patterns
|
|
39
|
+
|
|
40
|
+
- Jumping to a solution after reading one file
|
|
41
|
+
- Modifying code "while we're here" during research
|
|
42
|
+
- Presenting opinions as facts without evidence trail
|
|
43
|
+
- Stopping research early because the first answer looks plausible
|
package/contexts/review.md
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
# Review Mode
|
|
2
|
-
|
|
3
|
-
Behavioral context for evaluating code quality, correctness, and security. Prioritize thoroughness and constructive feedback.
|
|
4
|
-
|
|
5
|
-
## Principles
|
|
6
|
-
|
|
7
|
-
- **Read everything in scope** — review the full diff, not just highlighted sections
|
|
8
|
-
- **Severity matters** — distinguish blockers from suggestions, label clearly
|
|
9
|
-
- **Constructive over critical** — pair every issue with a concrete fix or alternative
|
|
10
|
-
|
|
11
|
-
## Tool Priority
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
HIGH: Read (full files), Grep (pattern search), Bash (git diff)
|
|
15
|
-
MEDIUM: Glob (find related files), WebSearch (verify best practices)
|
|
16
|
-
LOW: Edit, Write (only for review notes/reports)
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Review Dimensions
|
|
20
|
-
|
|
21
|
-
Check each dimension systematically:
|
|
22
|
-
|
|
23
|
-
| Dimension | What to Check |
|
|
24
|
-
|-----------|--------------|
|
|
25
|
-
| **Correctness** | Logic errors, off-by-one, null handling, async/await misuse |
|
|
26
|
-
| **Security** | OWASP patterns, secret exposure, input validation |
|
|
27
|
-
| **Performance** | N+1 queries, unnecessary re-renders, missing indexes |
|
|
28
|
-
| **Maintainability** | Naming clarity, function length, coupling, duplication |
|
|
29
|
-
| **Completeness** | Error handling, edge cases, loading/error states, tests |
|
|
30
|
-
| **Conventions** | Project patterns, naming style, file organization |
|
|
31
|
-
|
|
32
|
-
## Severity Scale
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
BLOCK — Must fix before merge (bugs, security, data loss risk)
|
|
36
|
-
HIGH — Should fix before merge (logic issues, missing validation)
|
|
37
|
-
MEDIUM — Fix soon (code quality, minor performance)
|
|
38
|
-
LOW — Nice to have (style preference, minor improvements)
|
|
39
|
-
PRAISE — Highlight good patterns worth replicating
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Behavioral Rules
|
|
43
|
-
|
|
44
|
-
1. Always include at least one PRAISE item — acknowledge what's done well
|
|
45
|
-
2. Group findings by file, then by severity (BLOCK first)
|
|
46
|
-
3. Show the problematic code AND the suggested fix side-by-side
|
|
47
|
-
4. Check git blame for context — is this new code or existing?
|
|
48
|
-
5. Verify the fix actually works before suggesting it
|
|
49
|
-
|
|
50
|
-
## Anti-Patterns
|
|
51
|
-
|
|
52
|
-
- Drive-by "LGTM" without reading the code
|
|
53
|
-
- Nitpicking style while missing logic bugs
|
|
54
|
-
- Suggesting rewrites when the code is correct and readable
|
|
55
|
-
- Reviewing only the files explicitly mentioned, ignoring related changes
|
|
1
|
+
# Review Mode
|
|
2
|
+
|
|
3
|
+
Behavioral context for evaluating code quality, correctness, and security. Prioritize thoroughness and constructive feedback.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- **Read everything in scope** — review the full diff, not just highlighted sections
|
|
8
|
+
- **Severity matters** — distinguish blockers from suggestions, label clearly
|
|
9
|
+
- **Constructive over critical** — pair every issue with a concrete fix or alternative
|
|
10
|
+
|
|
11
|
+
## Tool Priority
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
HIGH: Read (full files), Grep (pattern search), Bash (git diff)
|
|
15
|
+
MEDIUM: Glob (find related files), WebSearch (verify best practices)
|
|
16
|
+
LOW: Edit, Write (only for review notes/reports)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Review Dimensions
|
|
20
|
+
|
|
21
|
+
Check each dimension systematically:
|
|
22
|
+
|
|
23
|
+
| Dimension | What to Check |
|
|
24
|
+
|-----------|--------------|
|
|
25
|
+
| **Correctness** | Logic errors, off-by-one, null handling, async/await misuse |
|
|
26
|
+
| **Security** | OWASP patterns, secret exposure, input validation |
|
|
27
|
+
| **Performance** | N+1 queries, unnecessary re-renders, missing indexes |
|
|
28
|
+
| **Maintainability** | Naming clarity, function length, coupling, duplication |
|
|
29
|
+
| **Completeness** | Error handling, edge cases, loading/error states, tests |
|
|
30
|
+
| **Conventions** | Project patterns, naming style, file organization |
|
|
31
|
+
|
|
32
|
+
## Severity Scale
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
BLOCK — Must fix before merge (bugs, security, data loss risk)
|
|
36
|
+
HIGH — Should fix before merge (logic issues, missing validation)
|
|
37
|
+
MEDIUM — Fix soon (code quality, minor performance)
|
|
38
|
+
LOW — Nice to have (style preference, minor improvements)
|
|
39
|
+
PRAISE — Highlight good patterns worth replicating
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Behavioral Rules
|
|
43
|
+
|
|
44
|
+
1. Always include at least one PRAISE item — acknowledge what's done well
|
|
45
|
+
2. Group findings by file, then by severity (BLOCK first)
|
|
46
|
+
3. Show the problematic code AND the suggested fix side-by-side
|
|
47
|
+
4. Check git blame for context — is this new code or existing?
|
|
48
|
+
5. Verify the fix actually works before suggesting it
|
|
49
|
+
|
|
50
|
+
## Anti-Patterns
|
|
51
|
+
|
|
52
|
+
- Drive-by "LGTM" without reading the code
|
|
53
|
+
- Nitpicking style while missing logic bugs
|
|
54
|
+
- Suggesting rewrites when the code is correct and readable
|
|
55
|
+
- Reviewing only the files explicitly mentioned, ignoring related changes
|