tribunal-kit 4.2.0 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/ARCHITECTURE.md +21 -14
- package/.agent/agents/swarm-worker-contracts.md +5 -5
- package/.agent/agents/ui-ux-auditor.md +292 -0
- package/.agent/rules/GEMINI.md +8 -8
- package/.agent/scripts/__pycache__/_colors.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/_utils.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/case_law_manager.cpython-311.pyc +0 -0
- package/.agent/scripts/_colors.js +18 -0
- package/.agent/scripts/_utils.js +42 -0
- package/.agent/scripts/auto_preview.js +197 -0
- package/.agent/scripts/bundle_analyzer.js +290 -0
- package/.agent/scripts/case_law_manager.js +684 -0
- package/.agent/scripts/checklist.js +266 -0
- package/.agent/scripts/colors.js +17 -0
- package/.agent/scripts/compress_skills.js +141 -0
- package/.agent/scripts/consolidate_skills.js +149 -0
- package/.agent/scripts/context_broker.js +609 -0
- package/.agent/scripts/deep_compress.js +150 -0
- package/.agent/scripts/dependency_analyzer.js +272 -0
- package/.agent/scripts/graph_builder.js +199 -0
- package/.agent/scripts/graph_zoom.js +154 -0
- package/.agent/scripts/inner_loop_validator.js +465 -0
- package/.agent/scripts/lint_runner.js +187 -0
- package/.agent/scripts/minify_context.js +100 -0
- package/.agent/scripts/patch_skills_meta.js +156 -0
- package/.agent/scripts/patch_skills_output.js +244 -0
- package/.agent/scripts/schema_validator.js +297 -0
- package/.agent/scripts/security_scan.js +303 -0
- package/.agent/scripts/session_manager.js +276 -0
- package/.agent/scripts/skill_evolution.js +644 -0
- package/.agent/scripts/skill_integrator.js +313 -0
- package/.agent/scripts/strengthen_skills.js +193 -0
- package/.agent/scripts/strip_tribunal.js +47 -0
- package/.agent/scripts/swarm_dispatcher.js +360 -0
- package/.agent/scripts/test_runner.js +193 -0
- package/.agent/scripts/utils.js +32 -0
- package/.agent/scripts/verify_all.js +256 -0
- package/.agent/skills/agent-organizer/SKILL.md +12 -4
- package/.agent/skills/agentic-patterns/SKILL.md +12 -4
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +12 -4
- package/.agent/skills/api-patterns/SKILL.md +209 -201
- package/.agent/skills/api-security-auditor/SKILL.md +12 -4
- package/.agent/skills/app-builder/SKILL.md +12 -4
- package/.agent/skills/app-builder/templates/SKILL.md +76 -68
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +1 -1
- package/.agent/skills/appflow-wireframe/SKILL.md +12 -4
- package/.agent/skills/architecture/SKILL.md +12 -4
- package/.agent/skills/authentication-best-practices/SKILL.md +12 -4
- package/.agent/skills/bash-linux/SKILL.md +12 -4
- package/.agent/skills/behavioral-modes/SKILL.md +12 -4
- package/.agent/skills/brainstorming/SKILL.md +12 -4
- package/.agent/skills/building-native-ui/SKILL.md +12 -4
- package/.agent/skills/clean-code/SKILL.md +12 -4
- package/.agent/skills/code-review-checklist/SKILL.md +12 -4
- package/.agent/skills/config-validator/SKILL.md +12 -4
- package/.agent/skills/csharp-developer/SKILL.md +12 -4
- package/.agent/skills/data-validation-schemas/SKILL.md +290 -282
- package/.agent/skills/database-design/SKILL.md +202 -194
- package/.agent/skills/deployment-procedures/SKILL.md +12 -4
- package/.agent/skills/devops-engineer/SKILL.md +12 -4
- package/.agent/skills/devops-incident-responder/SKILL.md +12 -4
- package/.agent/skills/doc.md +1 -1
- package/.agent/skills/documentation-templates/SKILL.md +12 -4
- package/.agent/skills/edge-computing/SKILL.md +12 -4
- package/.agent/skills/error-resilience/SKILL.md +390 -382
- package/.agent/skills/extract-design-system/SKILL.md +12 -4
- package/.agent/skills/framer-motion-expert/SKILL.md +206 -199
- package/.agent/skills/frontend-design/SKILL.md +163 -155
- package/.agent/skills/game-design-expert/SKILL.md +12 -4
- package/.agent/skills/game-engineering-expert/SKILL.md +12 -4
- package/.agent/skills/geo-fundamentals/SKILL.md +12 -4
- package/.agent/skills/github-operations/SKILL.md +12 -4
- package/.agent/skills/gsap-core/SKILL.md +54 -48
- package/.agent/skills/gsap-frameworks/SKILL.md +54 -48
- package/.agent/skills/gsap-performance/SKILL.md +54 -48
- package/.agent/skills/gsap-plugins/SKILL.md +54 -48
- package/.agent/skills/gsap-react/SKILL.md +54 -48
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +54 -48
- package/.agent/skills/gsap-timeline/SKILL.md +54 -48
- package/.agent/skills/gsap-utils/SKILL.md +54 -48
- package/.agent/skills/i18n-localization/SKILL.md +12 -4
- package/.agent/skills/intelligent-routing/SKILL.md +41 -33
- package/.agent/skills/knowledge-graph/SKILL.md +36 -0
- package/.agent/skills/lint-and-validate/SKILL.md +12 -4
- package/.agent/skills/llm-engineering/SKILL.md +12 -4
- package/.agent/skills/local-first/SKILL.md +12 -4
- package/.agent/skills/mcp-builder/SKILL.md +12 -4
- package/.agent/skills/mobile-design/SKILL.md +225 -217
- package/.agent/skills/monorepo-management/SKILL.md +296 -288
- package/.agent/skills/motion-engineering/SKILL.md +195 -187
- package/.agent/skills/nextjs-react-expert/SKILL.md +196 -188
- package/.agent/skills/nodejs-best-practices/SKILL.md +12 -4
- package/.agent/skills/observability/SKILL.md +12 -4
- package/.agent/skills/parallel-agents/SKILL.md +12 -4
- package/.agent/skills/performance-profiling/SKILL.md +12 -4
- package/.agent/skills/plan-writing/SKILL.md +12 -4
- package/.agent/skills/platform-engineer/SKILL.md +12 -4
- package/.agent/skills/playwright-best-practices/SKILL.md +12 -4
- package/.agent/skills/powershell-windows/SKILL.md +12 -4
- package/.agent/skills/project-idioms/SKILL.md +12 -4
- package/.agent/skills/python-patterns/SKILL.md +12 -4
- package/.agent/skills/python-pro/SKILL.md +285 -277
- package/.agent/skills/react-specialist/SKILL.md +239 -231
- package/.agent/skills/readme-builder/SKILL.md +12 -4
- package/.agent/skills/realtime-patterns/SKILL.md +12 -4
- package/.agent/skills/red-team-tactics/SKILL.md +12 -4
- package/.agent/skills/rust-pro/SKILL.md +12 -4
- package/.agent/skills/seo-fundamentals/SKILL.md +12 -4
- package/.agent/skills/server-management/SKILL.md +12 -4
- package/.agent/skills/shadcn-ui-expert/SKILL.md +12 -4
- package/.agent/skills/skill-creator/SKILL.md +12 -4
- package/.agent/skills/sql-pro/SKILL.md +12 -4
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +12 -4
- package/.agent/skills/swiftui-expert/SKILL.md +12 -4
- package/.agent/skills/systematic-debugging/SKILL.md +12 -4
- package/.agent/skills/tailwind-patterns/SKILL.md +12 -4
- package/.agent/skills/tdd-workflow/SKILL.md +12 -4
- package/.agent/skills/test-result-analyzer/SKILL.md +12 -4
- package/.agent/skills/testing-patterns/SKILL.md +12 -4
- package/.agent/skills/trend-researcher/SKILL.md +12 -4
- package/.agent/skills/typescript-advanced/SKILL.md +297 -289
- package/.agent/skills/ui-ux-pro-max/SKILL.md +12 -4
- package/.agent/skills/ui-ux-researcher/SKILL.md +12 -4
- package/.agent/skills/vue-expert/SKILL.md +237 -229
- package/.agent/skills/vulnerability-scanner/SKILL.md +12 -4
- package/.agent/skills/web-accessibility-auditor/SKILL.md +12 -4
- package/.agent/skills/web-design-guidelines/SKILL.md +12 -4
- package/.agent/skills/webapp-testing/SKILL.md +12 -4
- package/.agent/skills/whimsy-injector/SKILL.md +12 -4
- package/.agent/skills/workflow-optimizer/SKILL.md +12 -4
- package/.agent/workflows/audit.md +6 -6
- package/.agent/workflows/deploy.md +1 -1
- package/.agent/workflows/generate.md +23 -6
- package/.agent/workflows/session.md +5 -5
- package/.agent/workflows/swarm.md +2 -2
- package/README.md +242 -186
- package/bin/tribunal-kit.js +297 -57
- package/package.json +81 -77
- package/scripts/changelog.js +167 -0
- package/scripts/sync-version.js +81 -0
- package/scripts/validate-payload.js +73 -0
- package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
- package/.agent/scripts/auto_preview.py +0 -180
- package/.agent/scripts/bundle_analyzer.py +0 -259
- package/.agent/scripts/case_law_manager.py +0 -755
- package/.agent/scripts/checklist.py +0 -209
- package/.agent/scripts/compress_skills.py +0 -167
- package/.agent/scripts/consolidate_skills.py +0 -173
- package/.agent/scripts/deep_compress.py +0 -202
- package/.agent/scripts/dependency_analyzer.py +0 -247
- package/.agent/scripts/lint_runner.py +0 -188
- package/.agent/scripts/minify_context.py +0 -80
- package/.agent/scripts/patch_skills_meta.py +0 -177
- package/.agent/scripts/patch_skills_output.py +0 -285
- package/.agent/scripts/schema_validator.py +0 -279
- package/.agent/scripts/security_scan.py +0 -224
- package/.agent/scripts/session_manager.py +0 -261
- package/.agent/scripts/skill_evolution.py +0 -563
- package/.agent/scripts/skill_integrator.py +0 -234
- package/.agent/scripts/strengthen_skills.py +0 -220
- package/.agent/scripts/strip_tribunal.py +0 -41
- package/.agent/scripts/swarm_dispatcher.py +0 -350
- package/.agent/scripts/test_runner.py +0 -192
- package/.agent/scripts/test_swarm_dispatcher.py +0 -163
- package/.agent/scripts/verify_all.py +0 -195
package/package.json
CHANGED
|
@@ -1,77 +1,81 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "tribunal-kit",
|
|
3
|
-
"version": "4.
|
|
4
|
-
"description": "Anti-Hallucination AI Agent Kit —
|
|
5
|
-
"keywords": [
|
|
6
|
-
"ai",
|
|
7
|
-
"ai-agent",
|
|
8
|
-
"agent",
|
|
9
|
-
"agents",
|
|
10
|
-
"multi-agent",
|
|
11
|
-
"agentic",
|
|
12
|
-
"swarm",
|
|
13
|
-
"orchestration",
|
|
14
|
-
"llm",
|
|
15
|
-
"anti-hallucination",
|
|
16
|
-
"hallucination",
|
|
17
|
-
"code-review",
|
|
18
|
-
"code-quality",
|
|
19
|
-
"cursor",
|
|
20
|
-
"cursor-rules",
|
|
21
|
-
"cursorrules",
|
|
22
|
-
"windsurf",
|
|
23
|
-
"copilot",
|
|
24
|
-
"cline",
|
|
25
|
-
"gemini",
|
|
26
|
-
"antigravity",
|
|
27
|
-
"tribunal",
|
|
28
|
-
"mcp",
|
|
29
|
-
"model-context-protocol",
|
|
30
|
-
"cli",
|
|
31
|
-
"devtools",
|
|
32
|
-
"ai-coding",
|
|
33
|
-
"autonomous-agents",
|
|
34
|
-
"coding-assistant",
|
|
35
|
-
"automation"
|
|
36
|
-
],
|
|
37
|
-
"homepage": "https://github.com/Harmitx7/tribunal-kit",
|
|
38
|
-
"repository": {
|
|
39
|
-
"type": "git",
|
|
40
|
-
"url": "git+https://github.com/Harmitx7/tribunal-kit.git"
|
|
41
|
-
},
|
|
42
|
-
"license": "MIT",
|
|
43
|
-
"bin": {
|
|
44
|
-
"tribunal-kit": "bin/tribunal-kit.js",
|
|
45
|
-
"tk": "bin/tribunal-kit.js"
|
|
46
|
-
},
|
|
47
|
-
"files": [
|
|
48
|
-
"bin/",
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"test
|
|
59
|
-
"test:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "tribunal-kit",
|
|
3
|
+
"version": "4.3.1",
|
|
4
|
+
"description": "Anti-Hallucination AI Agent Kit — 40 specialist agents, 31 slash commands, 16 parallel Tribunal reviewers, Performance Swarm engine, and Supreme Court case law pipeline.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"ai-agent",
|
|
8
|
+
"agent",
|
|
9
|
+
"agents",
|
|
10
|
+
"multi-agent",
|
|
11
|
+
"agentic",
|
|
12
|
+
"swarm",
|
|
13
|
+
"orchestration",
|
|
14
|
+
"llm",
|
|
15
|
+
"anti-hallucination",
|
|
16
|
+
"hallucination",
|
|
17
|
+
"code-review",
|
|
18
|
+
"code-quality",
|
|
19
|
+
"cursor",
|
|
20
|
+
"cursor-rules",
|
|
21
|
+
"cursorrules",
|
|
22
|
+
"windsurf",
|
|
23
|
+
"copilot",
|
|
24
|
+
"cline",
|
|
25
|
+
"gemini",
|
|
26
|
+
"antigravity",
|
|
27
|
+
"tribunal",
|
|
28
|
+
"mcp",
|
|
29
|
+
"model-context-protocol",
|
|
30
|
+
"cli",
|
|
31
|
+
"devtools",
|
|
32
|
+
"ai-coding",
|
|
33
|
+
"autonomous-agents",
|
|
34
|
+
"coding-assistant",
|
|
35
|
+
"automation"
|
|
36
|
+
],
|
|
37
|
+
"homepage": "https://github.com/Harmitx7/tribunal-kit",
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "git+https://github.com/Harmitx7/tribunal-kit.git"
|
|
41
|
+
},
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"bin": {
|
|
44
|
+
"tribunal-kit": "bin/tribunal-kit.js",
|
|
45
|
+
"tk": "bin/tribunal-kit.js"
|
|
46
|
+
},
|
|
47
|
+
"files": [
|
|
48
|
+
"bin/",
|
|
49
|
+
"scripts/",
|
|
50
|
+
".agent/",
|
|
51
|
+
"README.md",
|
|
52
|
+
"LICENSE"
|
|
53
|
+
],
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=18.0.0"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"test": "npm run validate-payload && jest --coverage",
|
|
59
|
+
"test:unit": "jest test/unit --coverage",
|
|
60
|
+
"test:integration": "jest test/integration --coverage",
|
|
61
|
+
"preversion": "node scripts/sync-version.js",
|
|
62
|
+
"version": "node scripts/changelog.js && git add CHANGELOG.md",
|
|
63
|
+
"changelog": "node scripts/changelog.js",
|
|
64
|
+
"changelog:preview": "node scripts/changelog.js --preview",
|
|
65
|
+
"sync": "node scripts/sync-version.js",
|
|
66
|
+
"validate-payload": "node scripts/validate-payload.js"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"jest": "^29.7.0"
|
|
70
|
+
},
|
|
71
|
+
"jest": {
|
|
72
|
+
"testMatch": [
|
|
73
|
+
"**/test/**/*.test.js"
|
|
74
|
+
],
|
|
75
|
+
"testEnvironment": "node",
|
|
76
|
+
"coverageDirectory": "coverage",
|
|
77
|
+
"collectCoverageFrom": [
|
|
78
|
+
"bin/**/*.js"
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* changelog.js — Auto-generate CHANGELOG from git history
|
|
4
|
+
*
|
|
5
|
+
* Categorizes commits by conventional commit type:
|
|
6
|
+
* feat: → ✨ Features
|
|
7
|
+
* fix: → 🐛 Bug Fixes
|
|
8
|
+
* perf: → ⚡ Performance
|
|
9
|
+
* docs: → 📝 Documentation
|
|
10
|
+
* test: → ✅ Tests
|
|
11
|
+
* refactor: → ♻️ Refactors
|
|
12
|
+
* chore: → 🔧 Chores
|
|
13
|
+
* BREAKING: → 💥 Breaking Changes
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* node scripts/changelog.js → Generate full changelog
|
|
17
|
+
* node scripts/changelog.js --preview → Preview unreleased changes
|
|
18
|
+
* node scripts/changelog.js --since v4.1.0 → Changes since a specific tag
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
'use strict';
|
|
22
|
+
|
|
23
|
+
const { execSync } = require('child_process');
|
|
24
|
+
const fs = require('fs');
|
|
25
|
+
const path = require('path');
|
|
26
|
+
|
|
27
|
+
const PKG = require(path.resolve(__dirname, '..', 'package.json'));
|
|
28
|
+
const CHANGELOG_PATH = path.resolve(__dirname, '..', 'CHANGELOG.md');
|
|
29
|
+
|
|
30
|
+
// ── Commit Categories ────────────────────────────────────
|
|
31
|
+
const CATEGORIES = {
|
|
32
|
+
feat: { emoji: '✨', title: 'Features' },
|
|
33
|
+
fix: { emoji: '🐛', title: 'Bug Fixes' },
|
|
34
|
+
perf: { emoji: '⚡', title: 'Performance' },
|
|
35
|
+
docs: { emoji: '📝', title: 'Documentation' },
|
|
36
|
+
test: { emoji: '✅', title: 'Tests' },
|
|
37
|
+
refactor: { emoji: '♻️', title: 'Refactors' },
|
|
38
|
+
chore: { emoji: '🔧', title: 'Chores' },
|
|
39
|
+
ci: { emoji: '🏗️', title: 'CI/CD' },
|
|
40
|
+
style: { emoji: '🎨', title: 'Style' },
|
|
41
|
+
breaking: { emoji: '💥', title: 'Breaking Changes' },
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// ── Git Helpers ──────────────────────────────────────────
|
|
45
|
+
function git(cmd) {
|
|
46
|
+
try {
|
|
47
|
+
return execSync(`git ${cmd}`, { encoding: 'utf8', timeout: 10000 }).trim();
|
|
48
|
+
} catch {
|
|
49
|
+
return '';
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function getLatestTag() {
|
|
54
|
+
return git('describe --tags --abbrev=0 2>nul') || git('describe --tags --abbrev=0 2>/dev/null') || '';
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function getCommits(since) {
|
|
58
|
+
const range = since ? `${since}..HEAD` : 'HEAD';
|
|
59
|
+
const format = '--format="%H||%s||%an||%ai"';
|
|
60
|
+
const raw = git(`log ${range} ${format} --no-merges`);
|
|
61
|
+
if (!raw) return [];
|
|
62
|
+
|
|
63
|
+
return raw.split('\n').filter(Boolean).map(line => {
|
|
64
|
+
const [hash, subject, author, date] = line.split('||');
|
|
65
|
+
return { hash: hash?.slice(0, 7), subject, author, date: date?.slice(0, 10) };
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function categorize(subject) {
|
|
70
|
+
const lower = subject.toLowerCase();
|
|
71
|
+
|
|
72
|
+
// Check for BREAKING CHANGE
|
|
73
|
+
if (lower.includes('breaking') || lower.includes('!:')) {
|
|
74
|
+
return 'breaking';
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Match conventional commit prefix
|
|
78
|
+
const match = subject.match(/^(\w+)(?:\(.+?\))?:\s*/);
|
|
79
|
+
if (match) {
|
|
80
|
+
const type = match[1].toLowerCase();
|
|
81
|
+
if (CATEGORIES[type]) return type;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Heuristic fallback
|
|
85
|
+
if (lower.includes('fix') || lower.includes('bug')) return 'fix';
|
|
86
|
+
if (lower.includes('add') || lower.includes('new') || lower.includes('feat')) return 'feat';
|
|
87
|
+
if (lower.includes('doc') || lower.includes('readme')) return 'docs';
|
|
88
|
+
if (lower.includes('test')) return 'test';
|
|
89
|
+
if (lower.includes('refactor') || lower.includes('clean')) return 'refactor';
|
|
90
|
+
if (lower.includes('perf') || lower.includes('optim')) return 'perf';
|
|
91
|
+
if (lower.includes('ci') || lower.includes('workflow')) return 'ci';
|
|
92
|
+
|
|
93
|
+
return 'chore';
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ── Changelog Generation ─────────────────────────────────
|
|
97
|
+
function generateChangelog(commits, version, date) {
|
|
98
|
+
const grouped = {};
|
|
99
|
+
for (const commit of commits) {
|
|
100
|
+
const cat = categorize(commit.subject);
|
|
101
|
+
if (!grouped[cat]) grouped[cat] = [];
|
|
102
|
+
// Strip conventional prefix for cleaner display
|
|
103
|
+
const clean = commit.subject.replace(/^\w+(\(.+?\))?:\s*/, '');
|
|
104
|
+
grouped[cat].push({ ...commit, clean });
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
let md = `## [${version}] — ${date}\n\n`;
|
|
108
|
+
|
|
109
|
+
// Breaking changes first
|
|
110
|
+
const order = ['breaking', 'feat', 'fix', 'perf', 'refactor', 'docs', 'test', 'ci', 'style', 'chore'];
|
|
111
|
+
for (const cat of order) {
|
|
112
|
+
if (!grouped[cat] || grouped[cat].length === 0) continue;
|
|
113
|
+
const { emoji, title } = CATEGORIES[cat];
|
|
114
|
+
md += `### ${emoji} ${title}\n\n`;
|
|
115
|
+
for (const c of grouped[cat]) {
|
|
116
|
+
md += `- ${c.clean} (\`${c.hash}\`)\n`;
|
|
117
|
+
}
|
|
118
|
+
md += '\n';
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return md;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ── Main ─────────────────────────────────────────────────
|
|
125
|
+
function main() {
|
|
126
|
+
const args = process.argv.slice(2);
|
|
127
|
+
const isPreview = args.includes('--preview');
|
|
128
|
+
const sinceIdx = args.indexOf('--since');
|
|
129
|
+
const sinceTag = sinceIdx !== -1 ? args[sinceIdx + 1] : null;
|
|
130
|
+
|
|
131
|
+
const since = sinceTag || getLatestTag();
|
|
132
|
+
const commits = getCommits(since);
|
|
133
|
+
|
|
134
|
+
if (commits.length === 0) {
|
|
135
|
+
console.log(' ℹ️ No new commits found since', since || 'beginning');
|
|
136
|
+
process.exit(0);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
140
|
+
const version = isPreview ? 'Unreleased' : PKG.version;
|
|
141
|
+
|
|
142
|
+
const changelog = generateChangelog(commits, version, today);
|
|
143
|
+
|
|
144
|
+
if (isPreview) {
|
|
145
|
+
console.log('\n 📋 Changelog Preview\n ' + '─'.repeat(40) + '\n');
|
|
146
|
+
console.log(changelog);
|
|
147
|
+
console.log(` 📊 ${commits.length} commits since ${since || 'initial commit'}`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Write or prepend to CHANGELOG.md
|
|
152
|
+
const header = `# Changelog\n\nAll notable changes to Tribunal Kit are documented here.\nFormat follows [Keep a Changelog](https://keepachangelog.com/).\n\n`;
|
|
153
|
+
|
|
154
|
+
let existing = '';
|
|
155
|
+
if (fs.existsSync(CHANGELOG_PATH)) {
|
|
156
|
+
existing = fs.readFileSync(CHANGELOG_PATH, 'utf8');
|
|
157
|
+
// Remove existing header
|
|
158
|
+
existing = existing.replace(/^# Changelog[\s\S]*?(?=## )/, '');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const full = header + changelog + existing;
|
|
162
|
+
fs.writeFileSync(CHANGELOG_PATH, full, 'utf8');
|
|
163
|
+
|
|
164
|
+
console.log(` ✔ CHANGELOG.md updated — v${version} (${commits.length} commits)`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
main();
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* sync-version.js — Version Sync for Tribunal Kit
|
|
4
|
+
*
|
|
5
|
+
* Reads the version and counts from package.json and the .agent/ directory,
|
|
6
|
+
* then updates all stale references across documentation files.
|
|
7
|
+
*
|
|
8
|
+
* Run manually or as a preversion npm script:
|
|
9
|
+
* node scripts/sync-version.js
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
|
|
15
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
16
|
+
const PKG = JSON.parse(fs.readFileSync(path.join(ROOT, 'package.json'), 'utf8'));
|
|
17
|
+
|
|
18
|
+
// Count actual installed items
|
|
19
|
+
function countItems(dir) {
|
|
20
|
+
const fullPath = path.join(ROOT, '.agent', dir);
|
|
21
|
+
if (!fs.existsSync(fullPath)) return '?';
|
|
22
|
+
return fs.readdirSync(fullPath).filter(f => !f.startsWith('.')).length;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const version = PKG.version;
|
|
26
|
+
const agents = countItems('agents');
|
|
27
|
+
const skills = countItems('skills');
|
|
28
|
+
const workflows = countItems('workflows');
|
|
29
|
+
const scripts = countItems('scripts');
|
|
30
|
+
|
|
31
|
+
console.log(`\n 📊 Tribunal Kit v${version} — Actual Counts`);
|
|
32
|
+
console.log(` ──────────────────────────────────────`);
|
|
33
|
+
console.log(` Agents: ${agents}`);
|
|
34
|
+
console.log(` Skills: ${skills}`);
|
|
35
|
+
console.log(` Workflows: ${workflows}`);
|
|
36
|
+
console.log(` Scripts: ${scripts}`);
|
|
37
|
+
console.log();
|
|
38
|
+
|
|
39
|
+
// Files to check for stale numbers
|
|
40
|
+
const FILES_TO_CHECK = [
|
|
41
|
+
'README.md',
|
|
42
|
+
'AGENT_FLOW.md',
|
|
43
|
+
'.agent/ARCHITECTURE.md',
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
let staleFound = 0;
|
|
47
|
+
|
|
48
|
+
for (const relPath of FILES_TO_CHECK) {
|
|
49
|
+
const filePath = path.join(ROOT, relPath);
|
|
50
|
+
if (!fs.existsSync(filePath)) continue;
|
|
51
|
+
|
|
52
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
53
|
+
|
|
54
|
+
// Check for common stale patterns
|
|
55
|
+
const checks = [
|
|
56
|
+
{ regex: /(\d+)\s*(specialist\s+)?agents/gi, expected: agents, label: 'agents' },
|
|
57
|
+
{ regex: /(\d+)\s*skill\s*modules/gi, expected: skills, label: 'skills' },
|
|
58
|
+
{ regex: /(\d+)\s*slash\s*command/gi, expected: workflows, label: 'workflows' },
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
for (const check of checks) {
|
|
62
|
+
let match;
|
|
63
|
+
while ((match = check.regex.exec(content)) !== null) {
|
|
64
|
+
const found = parseInt(match[1]);
|
|
65
|
+
if (found !== check.expected && found > 5) { // ignore tiny numbers
|
|
66
|
+
staleFound++;
|
|
67
|
+
const line = content.substring(0, match.index).split('\n').length;
|
|
68
|
+
console.log(` ⚠️ ${relPath}:${line} — says ${found} ${check.label}, actual is ${check.expected}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (staleFound === 0) {
|
|
75
|
+
console.log(` ✅ All counts are in sync across ${FILES_TO_CHECK.length} files.`);
|
|
76
|
+
} else {
|
|
77
|
+
console.log(`\n ❌ Found ${staleFound} stale reference(s). Update manually or run the sync tool.`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
console.log();
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
// Simple Markdown frontmatter and Tribunal header validator
|
|
5
|
+
function validateMarkdownFile(filePath) {
|
|
6
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
7
|
+
let errors = [];
|
|
8
|
+
|
|
9
|
+
// Check for frontmatter
|
|
10
|
+
if (content.startsWith('---')) {
|
|
11
|
+
const parts = content.split('---');
|
|
12
|
+
if (parts.length < 3) {
|
|
13
|
+
errors.push('Malformed YAML frontmatter (missing closing ---)');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// If it's a skill, check for mandatory headers
|
|
18
|
+
if (filePath.includes('/skills/') || filePath.includes('\\skills\\')) {
|
|
19
|
+
// Exclude templates and documentation that aren't strict skills
|
|
20
|
+
if (!filePath.includes('SKILL.md')) return errors;
|
|
21
|
+
|
|
22
|
+
if (!content.includes('Pre-Flight Checklist') && !content.includes('Pre-Flight')) {
|
|
23
|
+
errors.push('Missing mandatory header/section: Pre-Flight Checklist');
|
|
24
|
+
}
|
|
25
|
+
if (!content.includes('VBC Protocol') && !content.includes('VBC')) {
|
|
26
|
+
errors.push('Missing mandatory header/section: VBC Protocol');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return errors;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function walkDir(dir, callback) {
|
|
34
|
+
fs.readdirSync(dir).forEach(f => {
|
|
35
|
+
let dirPath = path.join(dir, f);
|
|
36
|
+
let isDirectory = fs.statSync(dirPath).isDirectory();
|
|
37
|
+
isDirectory ? walkDir(dirPath, callback) : callback(path.join(dir, f));
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function run() {
|
|
42
|
+
const agentDir = path.join(__dirname, '..', '.agent');
|
|
43
|
+
if (!fs.existsSync(agentDir)) {
|
|
44
|
+
console.error('No .agent directory found.');
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let hasErrors = false;
|
|
49
|
+
let checkedCount = 0;
|
|
50
|
+
|
|
51
|
+
console.log('Validating .agent payload...');
|
|
52
|
+
|
|
53
|
+
walkDir(agentDir, function(filePath) {
|
|
54
|
+
if (filePath.endsWith('.md')) {
|
|
55
|
+
checkedCount++;
|
|
56
|
+
const errors = validateMarkdownFile(filePath);
|
|
57
|
+
if (errors.length > 0) {
|
|
58
|
+
console.error(`\x1b[31m[FAIL]\x1b[0m ${filePath}`);
|
|
59
|
+
errors.forEach(e => console.error(` - ${e}`));
|
|
60
|
+
hasErrors = true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
if (hasErrors) {
|
|
66
|
+
console.error(`\nPayload validation failed. Checked ${checkedCount} files.`);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
} else {
|
|
69
|
+
console.log(`\x1b[32mPayload validation passed.\x1b[0m Checked ${checkedCount} files.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
run();
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|