tribunal-kit 1.0.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/.agent/.shared/ui-ux-pro-max/README.md +4 -0
- package/.agent/ARCHITECTURE.md +75 -0
- package/.agent/GEMINI.md +89 -0
- package/.agent/agents/backend-specialist.md +178 -0
- package/.agent/agents/code-archaeologist.md +119 -0
- package/.agent/agents/database-architect.md +164 -0
- package/.agent/agents/debugger.md +151 -0
- package/.agent/agents/dependency-reviewer.md +55 -0
- package/.agent/agents/devops-engineer.md +175 -0
- package/.agent/agents/documentation-writer.md +137 -0
- package/.agent/agents/explorer-agent.md +142 -0
- package/.agent/agents/frontend-reviewer.md +80 -0
- package/.agent/agents/frontend-specialist.md +185 -0
- package/.agent/agents/game-developer.md +184 -0
- package/.agent/agents/logic-reviewer.md +66 -0
- package/.agent/agents/mobile-developer.md +152 -0
- package/.agent/agents/orchestrator.md +140 -0
- package/.agent/agents/penetration-tester.md +131 -0
- package/.agent/agents/performance-optimizer.md +139 -0
- package/.agent/agents/performance-reviewer.md +72 -0
- package/.agent/agents/product-manager.md +108 -0
- package/.agent/agents/product-owner.md +99 -0
- package/.agent/agents/project-planner.md +142 -0
- package/.agent/agents/qa-automation-engineer.md +138 -0
- package/.agent/agents/security-auditor.md +170 -0
- package/.agent/agents/seo-specialist.md +132 -0
- package/.agent/agents/sql-reviewer.md +73 -0
- package/.agent/agents/test-coverage-reviewer.md +81 -0
- package/.agent/agents/test-engineer.md +139 -0
- package/.agent/agents/type-safety-reviewer.md +65 -0
- package/.agent/mcp_config.json +40 -0
- package/.agent/rules/GEMINI.md +206 -0
- package/.agent/scripts/auto_preview.py +180 -0
- package/.agent/scripts/checklist.py +209 -0
- package/.agent/scripts/session_manager.py +120 -0
- package/.agent/scripts/verify_all.py +195 -0
- package/.agent/skills/api-patterns/SKILL.md +81 -0
- package/.agent/skills/api-patterns/api-style.md +42 -0
- package/.agent/skills/api-patterns/auth.md +24 -0
- package/.agent/skills/api-patterns/documentation.md +26 -0
- package/.agent/skills/api-patterns/graphql.md +41 -0
- package/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/.agent/skills/api-patterns/response.md +37 -0
- package/.agent/skills/api-patterns/rest.md +40 -0
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/.agent/skills/api-patterns/security-testing.md +122 -0
- package/.agent/skills/api-patterns/trpc.md +41 -0
- package/.agent/skills/api-patterns/versioning.md +22 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +40 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/architecture/SKILL.md +55 -0
- package/.agent/skills/architecture/context-discovery.md +43 -0
- package/.agent/skills/architecture/examples.md +94 -0
- package/.agent/skills/architecture/pattern-selection.md +68 -0
- package/.agent/skills/architecture/patterns-reference.md +50 -0
- package/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/.agent/skills/bash-linux/SKILL.md +199 -0
- package/.agent/skills/behavioral-modes/SKILL.md +242 -0
- package/.agent/skills/brainstorming/SKILL.md +163 -0
- package/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
- package/.agent/skills/clean-code/SKILL.md +201 -0
- package/.agent/skills/code-review-checklist/SKILL.md +109 -0
- package/.agent/skills/database-design/SKILL.md +52 -0
- package/.agent/skills/database-design/database-selection.md +43 -0
- package/.agent/skills/database-design/indexing.md +39 -0
- package/.agent/skills/database-design/migrations.md +48 -0
- package/.agent/skills/database-design/optimization.md +36 -0
- package/.agent/skills/database-design/orm-selection.md +30 -0
- package/.agent/skills/database-design/schema-design.md +56 -0
- package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/.agent/skills/doc.md +177 -0
- package/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/.agent/skills/frontend-design/SKILL.md +418 -0
- package/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/.agent/skills/frontend-design/color-system.md +311 -0
- package/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/.agent/skills/frontend-design/typography-system.md +345 -0
- package/.agent/skills/frontend-design/ux-psychology.md +1116 -0
- package/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +156 -0
- package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/.agent/skills/intelligent-routing/SKILL.md +335 -0
- package/.agent/skills/lint-and-validate/SKILL.md +45 -0
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/.agent/skills/mobile-design/SKILL.md +394 -0
- package/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/.agent/skills/mobile-design/mobile-typography.md +433 -0
- package/.agent/skills/mobile-design/platform-android.md +666 -0
- package/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/.agent/skills/parallel-agents/SKILL.md +175 -0
- package/.agent/skills/performance-profiling/SKILL.md +143 -0
- package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/.agent/skills/plan-writing/SKILL.md +152 -0
- package/.agent/skills/powershell-windows/SKILL.md +167 -0
- package/.agent/skills/python-patterns/SKILL.md +441 -0
- package/.agent/skills/red-team-tactics/SKILL.md +199 -0
- package/.agent/skills/rust-pro/SKILL.md +176 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +129 -0
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/.agent/skills/server-management/SKILL.md +161 -0
- package/.agent/skills/systematic-debugging/SKILL.md +109 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
- package/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/.agent/skills/vulnerability-scanner/checklists.md +121 -0
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
- package/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/.agent/workflows/brainstorm.md +100 -0
- package/.agent/workflows/create.md +86 -0
- package/.agent/workflows/debug.md +104 -0
- package/.agent/workflows/deploy.md +102 -0
- package/.agent/workflows/enhance.md +107 -0
- package/.agent/workflows/generate.md +100 -0
- package/.agent/workflows/orchestrate.md +102 -0
- package/.agent/workflows/plan.md +108 -0
- package/.agent/workflows/preview.md +81 -0
- package/.agent/workflows/review.md +88 -0
- package/.agent/workflows/status.md +69 -0
- package/.agent/workflows/test.md +117 -0
- package/.agent/workflows/tribunal-backend.md +69 -0
- package/.agent/workflows/tribunal-database.md +88 -0
- package/.agent/workflows/tribunal-frontend.md +69 -0
- package/.agent/workflows/tribunal-full.md +77 -0
- package/.agent/workflows/ui-ux-pro-max.md +153 -0
- package/LICENSE +21 -0
- package/README.md +136 -0
- package/bin/tribunal-kit.js +289 -0
- package/package.json +34 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* tribunal-kit CLI
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* init — Install .agent/ into target project
|
|
7
|
+
* update — Re-install to get latest changes
|
|
8
|
+
* status — Check if .agent/ is installed
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* npx tribunal-kit init
|
|
12
|
+
* npx tribunal-kit init --force
|
|
13
|
+
* npx tribunal-kit init --path ./myapp
|
|
14
|
+
* npx tribunal-kit init --quiet
|
|
15
|
+
* npx tribunal-kit init --dry-run
|
|
16
|
+
* tribunal-kit update
|
|
17
|
+
* tribunal-kit status
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const fs = require('fs');
|
|
21
|
+
const path = require('path');
|
|
22
|
+
|
|
23
|
+
// ── Colors ───────────────────────────────────────────────
|
|
24
|
+
const C = {
|
|
25
|
+
reset: '\x1b[0m',
|
|
26
|
+
bold: '\x1b[1m',
|
|
27
|
+
red: '\x1b[91m',
|
|
28
|
+
green: '\x1b[92m',
|
|
29
|
+
yellow: '\x1b[93m',
|
|
30
|
+
cyan: '\x1b[96m',
|
|
31
|
+
gray: '\x1b[90m',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
function colorize(color, text) {
|
|
35
|
+
return `${C[color]}${text}${C.reset}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ── Logging ──────────────────────────────────────────────
|
|
39
|
+
let quiet = false;
|
|
40
|
+
|
|
41
|
+
function log(msg) { if (!quiet) console.log(msg); }
|
|
42
|
+
function ok(msg) { if (!quiet) console.log(` ${colorize('green', '✅')} ${msg}`); }
|
|
43
|
+
function warn(msg) { if (!quiet) console.log(` ${colorize('yellow', '⚠️ ')} ${msg}`); }
|
|
44
|
+
function err(msg) { console.error(` ${colorize('red', '❌')} ${msg}`); }
|
|
45
|
+
function dim(msg) { if (!quiet) console.log(` ${colorize('gray', msg)}`); }
|
|
46
|
+
|
|
47
|
+
// ── Arg Parser ───────────────────────────────────────────
|
|
48
|
+
function parseArgs(argv) {
|
|
49
|
+
const args = { command: null, flags: {} };
|
|
50
|
+
const raw = argv.slice(2);
|
|
51
|
+
|
|
52
|
+
// First non-flag arg is the command
|
|
53
|
+
for (const arg of raw) {
|
|
54
|
+
if (!arg.startsWith('--') && !args.command) {
|
|
55
|
+
args.command = arg;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (arg === '--force') { args.flags.force = true; continue; }
|
|
59
|
+
if (arg === '--quiet') { args.flags.quiet = true; continue; }
|
|
60
|
+
if (arg === '--dry-run') { args.flags.dryRun = true; continue; }
|
|
61
|
+
if (arg.startsWith('--path=')) {
|
|
62
|
+
args.flags.path = arg.split('=').slice(1).join('=');
|
|
63
|
+
}
|
|
64
|
+
if (arg === '--path') {
|
|
65
|
+
const idx = raw.indexOf('--path');
|
|
66
|
+
args.flags.path = raw[idx + 1] || null;
|
|
67
|
+
}
|
|
68
|
+
if (arg.startsWith('--branch=')) {
|
|
69
|
+
args.flags.branch = arg.split('=').slice(1).join('=');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return args;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// ── File Utilities ────────────────────────────────────────
|
|
77
|
+
function copyDir(src, dest, dryRun = false) {
|
|
78
|
+
if (!dryRun) {
|
|
79
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
83
|
+
let count = 0;
|
|
84
|
+
|
|
85
|
+
for (const entry of entries) {
|
|
86
|
+
const srcPath = path.join(src, entry.name);
|
|
87
|
+
const destPath = path.join(dest, entry.name);
|
|
88
|
+
|
|
89
|
+
if (entry.isDirectory()) {
|
|
90
|
+
count += copyDir(srcPath, destPath, dryRun);
|
|
91
|
+
} else {
|
|
92
|
+
if (!dryRun) {
|
|
93
|
+
fs.cpSync(srcPath, destPath, { force: true });
|
|
94
|
+
}
|
|
95
|
+
count++;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return count;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function countDir(dir) {
|
|
103
|
+
let count = 0;
|
|
104
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
105
|
+
for (const e of entries) {
|
|
106
|
+
if (e.isDirectory()) count += countDir(path.join(dir, e.name));
|
|
107
|
+
else count++;
|
|
108
|
+
}
|
|
109
|
+
return count;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// ── Kit Source Location ───────────────────────────────────
|
|
113
|
+
function getKitAgent() {
|
|
114
|
+
// When installed via npm, the .agent/ folder is next to this script's package
|
|
115
|
+
const kitRoot = path.resolve(__dirname, '..');
|
|
116
|
+
const agentDir = path.join(kitRoot, '.agent');
|
|
117
|
+
|
|
118
|
+
if (!fs.existsSync(agentDir)) {
|
|
119
|
+
err(`Kit .agent/ folder not found at: ${agentDir}`);
|
|
120
|
+
err('The package may be corrupted. Try: npm install -g tribunal-kit');
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return agentDir;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ── Banner ────────────────────────────────────────────────
|
|
128
|
+
function banner() {
|
|
129
|
+
if (quiet) return;
|
|
130
|
+
console.log();
|
|
131
|
+
console.log(colorize('cyan', colorize('bold', ' Tribunal Anti-Hallucination Agent Kit')));
|
|
132
|
+
console.log(colorize('gray', ' ──────────────────────────────────────'));
|
|
133
|
+
console.log();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// ── Commands ──────────────────────────────────────────────
|
|
137
|
+
function cmdInit(flags) {
|
|
138
|
+
const agentSrc = getKitAgent();
|
|
139
|
+
const targetDir = flags.path ? path.resolve(flags.path) : process.cwd();
|
|
140
|
+
const agentDest = path.join(targetDir, '.agent');
|
|
141
|
+
const dryRun = flags.dryRun || false;
|
|
142
|
+
|
|
143
|
+
banner();
|
|
144
|
+
|
|
145
|
+
if (dryRun) {
|
|
146
|
+
log(colorize('yellow', ' DRY RUN — no files will be written'));
|
|
147
|
+
console.log();
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Check target exists
|
|
151
|
+
if (!fs.existsSync(targetDir)) {
|
|
152
|
+
err(`Target directory not found: ${targetDir}`);
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Check if .agent already exists
|
|
157
|
+
if (fs.existsSync(agentDest) && !flags.force) {
|
|
158
|
+
warn('.agent/ already exists in this project.');
|
|
159
|
+
dim('Use --force to overwrite: tribunal-kit init --force');
|
|
160
|
+
console.log();
|
|
161
|
+
process.exit(0);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Count what we're installing
|
|
165
|
+
const totalFiles = countDir(agentSrc);
|
|
166
|
+
dim(`Installing ${totalFiles} files → ${agentDest}`);
|
|
167
|
+
|
|
168
|
+
try {
|
|
169
|
+
const copied = copyDir(agentSrc, agentDest, dryRun);
|
|
170
|
+
|
|
171
|
+
console.log();
|
|
172
|
+
if (dryRun) {
|
|
173
|
+
ok(`DRY RUN complete — would install ${copied} files`);
|
|
174
|
+
dim(`Target: ${agentDest}`);
|
|
175
|
+
} else {
|
|
176
|
+
ok(`Installation complete — ${copied} files installed`);
|
|
177
|
+
dim(`Location: ${agentDest}`);
|
|
178
|
+
}
|
|
179
|
+
console.log();
|
|
180
|
+
|
|
181
|
+
if (!dryRun) {
|
|
182
|
+
log(colorize('bold', ' What was installed:'));
|
|
183
|
+
dim(` Agents: ${fs.readdirSync(path.join(agentDest, 'agents')).length} specialist agents`);
|
|
184
|
+
dim(` Workflows: ${fs.readdirSync(path.join(agentDest, 'workflows')).length} slash commands`);
|
|
185
|
+
dim(` Skills: ${fs.readdirSync(path.join(agentDest, 'skills')).length} skill modules`);
|
|
186
|
+
dim(` Scripts: ${fs.readdirSync(path.join(agentDest, 'scripts')).length} utility scripts`);
|
|
187
|
+
console.log();
|
|
188
|
+
log(colorize('gray', ' Your AI IDE will pick this up automatically.'));
|
|
189
|
+
log(colorize('gray', ' Type /generate, /review, /tribunal-full in the chat.'));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
console.log();
|
|
193
|
+
} catch (e) {
|
|
194
|
+
err(`Failed to install: ${e.message}`);
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function cmdUpdate(flags) {
|
|
200
|
+
// Update = init with --force
|
|
201
|
+
flags.force = true;
|
|
202
|
+
if (!quiet) {
|
|
203
|
+
log(colorize('cyan', ' Updating .agent/ to latest version...'));
|
|
204
|
+
console.log();
|
|
205
|
+
}
|
|
206
|
+
cmdInit(flags);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function cmdStatus(flags) {
|
|
210
|
+
const targetDir = flags.path ? path.resolve(flags.path) : process.cwd();
|
|
211
|
+
const agentDest = path.join(targetDir, '.agent');
|
|
212
|
+
|
|
213
|
+
banner();
|
|
214
|
+
|
|
215
|
+
if (!fs.existsSync(agentDest)) {
|
|
216
|
+
log(` ${colorize('red', '🔴')} Not installed in: ${targetDir}`);
|
|
217
|
+
console.log();
|
|
218
|
+
dim('Run: tribunal-kit init');
|
|
219
|
+
console.log();
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
log(` ${colorize('green', '🟢')} Installed at: ${agentDest}`);
|
|
224
|
+
console.log();
|
|
225
|
+
|
|
226
|
+
const subdirs = ['agents', 'workflows', 'skills', 'scripts'];
|
|
227
|
+
for (const sub of subdirs) {
|
|
228
|
+
const subPath = path.join(agentDest, sub);
|
|
229
|
+
if (fs.existsSync(subPath)) {
|
|
230
|
+
const count = fs.readdirSync(subPath).filter(f => !fs.statSync(path.join(subPath, f)).isDirectory()).length;
|
|
231
|
+
dim(` ${sub.padEnd(12)} ${count} files`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
console.log();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function cmdHelp() {
|
|
238
|
+
banner();
|
|
239
|
+
console.log(colorize('bold', ' Commands:'));
|
|
240
|
+
console.log();
|
|
241
|
+
console.log(` ${colorize('cyan', 'init')} Install .agent/ into current project`);
|
|
242
|
+
console.log(` ${colorize('cyan', 'update')} Re-install to get latest version`);
|
|
243
|
+
console.log(` ${colorize('cyan', 'status')} Check if .agent/ is installed`);
|
|
244
|
+
console.log();
|
|
245
|
+
console.log(colorize('bold', ' Options:'));
|
|
246
|
+
console.log();
|
|
247
|
+
console.log(` ${colorize('gray', '--force')} Overwrite existing .agent/ folder`);
|
|
248
|
+
console.log(` ${colorize('gray', '--path <dir>')} Install in specific directory`);
|
|
249
|
+
console.log(` ${colorize('gray', '--quiet')} Suppress all output`);
|
|
250
|
+
console.log(` ${colorize('gray', '--dry-run')} Preview actions without executing`);
|
|
251
|
+
console.log();
|
|
252
|
+
console.log(colorize('bold', ' Examples:'));
|
|
253
|
+
console.log();
|
|
254
|
+
console.log(` ${colorize('gray', 'npx tribunal-kit init')}`);
|
|
255
|
+
console.log(` ${colorize('gray', 'npx tribunal-kit init --force')}`);
|
|
256
|
+
console.log(` ${colorize('gray', 'npx tribunal-kit init --path ./my-app')}`);
|
|
257
|
+
console.log(` ${colorize('gray', 'npx tribunal-kit init --dry-run')}`);
|
|
258
|
+
console.log(` ${colorize('gray', 'npx tribunal-kit update')}`);
|
|
259
|
+
console.log(` ${colorize('gray', 'npx tribunal-kit status')}`);
|
|
260
|
+
console.log();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// ── Main ──────────────────────────────────────────────────
|
|
264
|
+
const { command, flags } = parseArgs(process.argv);
|
|
265
|
+
|
|
266
|
+
if (flags.quiet) quiet = true;
|
|
267
|
+
|
|
268
|
+
switch (command) {
|
|
269
|
+
case 'init':
|
|
270
|
+
cmdInit(flags);
|
|
271
|
+
break;
|
|
272
|
+
case 'update':
|
|
273
|
+
cmdUpdate(flags);
|
|
274
|
+
break;
|
|
275
|
+
case 'status':
|
|
276
|
+
cmdStatus(flags);
|
|
277
|
+
break;
|
|
278
|
+
case 'help':
|
|
279
|
+
case '--help':
|
|
280
|
+
case '-h':
|
|
281
|
+
case null:
|
|
282
|
+
cmdHelp();
|
|
283
|
+
break;
|
|
284
|
+
default:
|
|
285
|
+
err(`Unknown command: "${command}"`);
|
|
286
|
+
console.log();
|
|
287
|
+
dim('Run tribunal-kit --help for usage');
|
|
288
|
+
process.exit(1);
|
|
289
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tribunal-kit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Anti-Hallucination AI Agent Kit — 27 specialist agents, 17 slash commands, and Tribunal review pipeline for Cursor, Windsurf, and Antigravity.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"agent",
|
|
8
|
+
"hallucination",
|
|
9
|
+
"cursor",
|
|
10
|
+
"windsurf",
|
|
11
|
+
"antigravity",
|
|
12
|
+
"tribunal",
|
|
13
|
+
"code-review",
|
|
14
|
+
"llm"
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://github.com/your-username/tribunal-kit",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"bin": {
|
|
19
|
+
"tribunal-kit": "./bin/tribunal-kit.js",
|
|
20
|
+
"tk": "./bin/tribunal-kit.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"bin/",
|
|
24
|
+
".agent/",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"test": "echo \"No tests for CLI\" && exit 0"
|
|
33
|
+
}
|
|
34
|
+
}
|