tribunal-kit 4.4.0 → 4.4.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.
Files changed (85) hide show
  1. package/.agent/agents/api-architect.md +66 -66
  2. package/.agent/agents/db-latency-auditor.md +216 -216
  3. package/.agent/agents/precedence-reviewer.md +250 -250
  4. package/.agent/agents/resilience-reviewer.md +88 -88
  5. package/.agent/agents/schema-reviewer.md +67 -67
  6. package/.agent/agents/throughput-optimizer.md +299 -299
  7. package/.agent/agents/ui-ux-auditor.md +292 -292
  8. package/.agent/agents/vitals-reviewer.md +223 -223
  9. package/.agent/scripts/_colors.js +18 -18
  10. package/.agent/scripts/_utils.js +42 -42
  11. package/.agent/scripts/append_flow.js +72 -72
  12. package/.agent/scripts/auto_preview.js +197 -197
  13. package/.agent/scripts/bundle_analyzer.js +290 -290
  14. package/.agent/scripts/case_law_manager.js +17 -6
  15. package/.agent/scripts/checklist.js +266 -266
  16. package/.agent/scripts/colors.js +17 -17
  17. package/.agent/scripts/compress_skills.js +141 -141
  18. package/.agent/scripts/consolidate_skills.js +149 -149
  19. package/.agent/scripts/context_broker.js +611 -609
  20. package/.agent/scripts/deep_compress.js +150 -150
  21. package/.agent/scripts/dependency_analyzer.js +272 -272
  22. package/.agent/scripts/graph_builder.js +313 -311
  23. package/.agent/scripts/graph_visualizer.js +384 -384
  24. package/.agent/scripts/inner_loop_validator.js +451 -465
  25. package/.agent/scripts/lint_runner.js +187 -187
  26. package/.agent/scripts/minify_context.js +100 -100
  27. package/.agent/scripts/mutation_runner.js +280 -280
  28. package/.agent/scripts/patch_skills_meta.js +156 -156
  29. package/.agent/scripts/patch_skills_output.js +244 -244
  30. package/.agent/scripts/schema_validator.js +297 -297
  31. package/.agent/scripts/security_scan.js +303 -303
  32. package/.agent/scripts/session_manager.js +276 -276
  33. package/.agent/scripts/skill_evolution.js +644 -644
  34. package/.agent/scripts/skill_integrator.js +313 -313
  35. package/.agent/scripts/strengthen_skills.js +193 -193
  36. package/.agent/scripts/strip_tribunal.js +47 -47
  37. package/.agent/scripts/swarm_dispatcher.js +360 -360
  38. package/.agent/scripts/test_runner.js +193 -193
  39. package/.agent/scripts/utils.js +32 -32
  40. package/.agent/scripts/verify_all.js +257 -256
  41. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +1 -1
  42. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
  43. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +1 -1
  44. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
  45. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +1 -1
  46. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +1 -1
  47. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +1 -1
  48. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +1 -1
  49. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
  50. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +1 -1
  51. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +1 -1
  52. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +1 -1
  53. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +1 -1
  54. package/.agent/skills/doc.md +1 -1
  55. package/.agent/skills/knowledge-graph/SKILL.md +52 -52
  56. package/.agent/skills/ui-ux-pro-max/SKILL.md +562 -562
  57. package/.agent/workflows/generate.md +183 -183
  58. package/.agent/workflows/tribunal-speed.md +183 -183
  59. package/README.md +1 -1
  60. package/bin/tribunal-kit.js +76 -87
  61. package/package.json +6 -3
  62. package/scripts/changelog.js +167 -167
  63. package/scripts/sync-version.js +81 -81
  64. package/.agent/history/architecture-explorer.html +0 -352
  65. package/.agent/history/architecture-graph.yaml +0 -109
  66. package/.agent/history/graph-cache.json +0 -215
  67. package/.agent/history/snapshots/migrate_refs.js.json +0 -11
  68. package/.agent/history/snapshots/scripts__changelog.js.json +0 -12
  69. package/.agent/history/snapshots/scripts__sync-version.js.json +0 -11
  70. package/.agent/history/snapshots/scripts__validate-payload.js.json +0 -11
  71. package/.agent/history/snapshots/test__integration__bridges.test.js.json +0 -13
  72. package/.agent/history/snapshots/test__integration__init.test.js.json +0 -13
  73. package/.agent/history/snapshots/test__integration__routing.test.js.json +0 -11
  74. package/.agent/history/snapshots/test__integration__swarm_dispatcher.test.js.json +0 -13
  75. package/.agent/history/snapshots/test__integration__wave2.test.js.json +0 -13
  76. package/.agent/history/snapshots/test__unit__args.test.js.json +0 -10
  77. package/.agent/history/snapshots/test__unit__case_law_manager.test.js.json +0 -10
  78. package/.agent/history/snapshots/test__unit__copyDir.test.js.json +0 -13
  79. package/.agent/history/snapshots/test__unit__graph_tools.test.js.json +0 -11
  80. package/.agent/history/snapshots/test__unit__selfInstall.test.js.json +0 -13
  81. package/.agent/history/snapshots/test__unit__semver.test.js.json +0 -10
  82. package/.agent/history/snapshots/test__unit__swarm_dispatcher.test.js.json +0 -11
  83. package/.agent/scripts/__pycache__/_colors.cpython-311.pyc +0 -0
  84. package/.agent/scripts/__pycache__/_utils.cpython-311.pyc +0 -0
  85. package/.agent/scripts/__pycache__/case_law_manager.cpython-311.pyc +0 -0
@@ -1,150 +1,150 @@
1
- #!/usr/bin/env node
2
- /**
3
- * deep_compress.js - Deep surgical compression for .agent/ markdown files (skills, agents, workflows).
4
- */
5
-
6
- 'use strict';
7
-
8
- const fs = require('fs');
9
- const path = require('path');
10
-
11
- const BASE_DIRS = ['.agent/skills', '.agent/agents', '.agent/workflows'];
12
-
13
- const REMOVE_SECTIONS = [
14
- /^## 🏛️ Tribunal Integration[\s\S]*?(?=\n## |$)/gm,
15
- /^## Tribunal Integration[\s\S]*?(?=\n## |$)/gm,
16
- /^### ✅ Pre-Flight Self-Audit[\s\S]*?(?=\n### |\n## |$)/gm,
17
- /^## Pre-Flight Self-Audit[\s\S]*?(?=\n## |$)/gm,
18
- /^## Cross-Workflow Navigation[\s\S]*?(?=\n## |$)/gm,
19
- /^## LLM Traps[\s\S]*?(?=\n## |$)/gm,
20
- /^## VBC Protocol[\s\S]*?(?=\n## |$)/gm,
21
- /^## Output Format\n```[\s\S]*?```\n/gm,
22
- /^## 🤖 LLM-Specific Traps[\s\S]*?(?=\n## |$)/gm,
23
- ];
24
-
25
- const VERBOSE_COMMENT_PATTERNS = [
26
- /^(\s*)\/\/\s*(?:Any HTML or SVG element|motion\.div, motion\.span|The MAGIC of|This is the key performance|The pattern that|Compound components share|Note that children|The action receives|Children inherit the|Import first|Parent controls when|It's always motion)\b[^\n]*\n/gm,
27
- /^(\s*)#\s*(?:TypedDict gives you|Usage:|Note:|Return user|Return None|Automatically)\b[^\n]*\n/gm,
28
- /^\s*\/\/\s*Usage:\s*\n(?=\s*[<{])/gm,
29
- /^\s*#\s*Usage:\s*\n(?=\s*[{])/gm,
30
- /^\s*\/\/\s*When (?:server responds|a component|React can interrupt|the React Compiler)[^\n]*\n/gm,
31
- ];
32
-
33
- function stripChattyOpeners(content) {
34
- return content.replace(/(^# .+\n)\n.{60,}\n.{30,}\n(?:\n---)/gm, '$1\n---');
35
- }
36
-
37
- function compressLegacyModernBlocks(content) {
38
- const pattern = /```(\w+)\n((?:.*\n)*?.*(?:\/\/|#) ❌ LEGACY[^\n]*\n(?:.*\n)*?)```\n\n```\w+\n((?:.*\n)*?.*(?:\/\/|#) ✅ MODERN[^\n]*\n(?:.*\n)*?)```/gm;
39
- return content.replace(pattern, (match, lang, legacy, modern) => {
40
- const totalLines = (legacy.match(/\n/g) || []).length + (modern.match(/\n/g) || []).length;
41
- if (totalLines > 28) return match;
42
- return `\`\`\`${lang}\n// ❌ LEGACY\n${legacy.trim()}\n\n// ✅ MODERN\n${modern.trim()}\n\`\`\``;
43
- });
44
- }
45
-
46
- function stripEmptyComments(content) {
47
- content = content.replace(/^\s*\/\/\s*$\n/gm, '');
48
- content = content.replace(/^\s*#\s*$\n/gm, '');
49
- return content;
50
- }
51
-
52
- function dedupBulletPoints(content) {
53
- const lines = content.split('\n');
54
- const seenBullets = {};
55
- const output = [];
56
- for (let i = 0; i < lines.length; i++) {
57
- const line = lines[i];
58
- const stripped = line.trim();
59
- if (/^(✅|❌|- ✅|- ❌)/.test(stripped)) {
60
- if (seenBullets[stripped] !== undefined && (i - seenBullets[stripped]) < 80) {
61
- continue;
62
- }
63
- seenBullets[stripped] = i;
64
- }
65
- output.push(line);
66
- }
67
- return output.join('\n');
68
- }
69
-
70
- function collapseBlanks(content) {
71
- return content.replace(/\n{3,}/g, '\n\n');
72
- }
73
-
74
- function compressFile(filePath) {
75
- const original = fs.readFileSync(filePath, 'utf8');
76
- let content = original;
77
-
78
- for (const pattern of REMOVE_SECTIONS) {
79
- content = content.replace(pattern, '');
80
- }
81
-
82
- content = stripChattyOpeners(content);
83
- content = compressLegacyModernBlocks(content);
84
-
85
- for (const pattern of VERBOSE_COMMENT_PATTERNS) {
86
- content = content.replace(pattern, '');
87
- }
88
-
89
- content = stripEmptyComments(content);
90
- content = dedupBulletPoints(content);
91
- content = collapseBlanks(content);
92
-
93
- if (content.trim() !== original.trim()) {
94
- fs.writeFileSync(filePath, content.trim() + '\n', 'utf8');
95
- }
96
-
97
- return [Buffer.byteLength(original, 'utf8'), Buffer.byteLength(content, 'utf8')];
98
- }
99
-
100
- function main() {
101
- let totalOrig = 0;
102
- let totalNew = 0;
103
- const fileResults = [];
104
-
105
- function walkDir(dir) {
106
- let items;
107
- try { items = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }
108
- for (const item of items) {
109
- const fpath = path.join(dir, item.name);
110
- if (item.isDirectory()) walkDir(fpath);
111
- else if (item.name.endsWith('.md')) {
112
- const [orig, newL] = compressFile(fpath);
113
- totalOrig += orig;
114
- totalNew += newL;
115
- const saved = orig - newL;
116
- if (saved > 200) {
117
- fileResults.push([saved, fpath]);
118
- }
119
- }
120
- }
121
- }
122
-
123
- for (const base of BASE_DIRS) {
124
- if (fs.existsSync(base)) walkDir(base);
125
- }
126
-
127
- fileResults.sort((a, b) => b[0] - a[0]);
128
-
129
- const savedTotal = totalOrig - totalNew;
130
- const pct = totalOrig ? (savedTotal / totalOrig * 100) : 0;
131
-
132
- console.log(`\n${'='.repeat(58)}`);
133
- console.log(` Deep Compression Complete`);
134
- console.log(`${'='.repeat(58)}`);
135
- console.log(` Original : ${totalOrig} bytes (${Math.floor(totalOrig / 1024)}KB)`);
136
- console.log(` After : ${totalNew} bytes (${Math.floor(totalNew / 1024)}KB)`);
137
- console.log(` Saved : ${savedTotal} bytes (${Math.floor(savedTotal / 1024)}KB) — ${pct.toFixed(1)}%`);
138
- console.log(`\n Top savings:`);
139
-
140
- for (const [saved, filePath] of fileResults.slice(0, 20)) {
141
- const parts = filePath.split(path.sep);
142
- const skill = parts.length >= 2 ? `${parts[parts.length - 2]}/${parts[parts.length - 1]}` : filePath;
143
- console.log(` -${Math.floor(saved / 1024).toString().padStart(2, ' ')}KB ${skill}`);
144
- }
145
- console.log();
146
- }
147
-
148
- if (require.main === module) {
149
- main();
150
- }
1
+ #!/usr/bin/env node
2
+ /**
3
+ * deep_compress.js - Deep surgical compression for .agent/ markdown files (skills, agents, workflows).
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+
11
+ const BASE_DIRS = ['.agent/skills', '.agent/agents', '.agent/workflows'];
12
+
13
+ const REMOVE_SECTIONS = [
14
+ /^## 🏛️ Tribunal Integration[\s\S]*?(?=\n## |$)/gm,
15
+ /^## Tribunal Integration[\s\S]*?(?=\n## |$)/gm,
16
+ /^### ✅ Pre-Flight Self-Audit[\s\S]*?(?=\n### |\n## |$)/gm,
17
+ /^## Pre-Flight Self-Audit[\s\S]*?(?=\n## |$)/gm,
18
+ /^## Cross-Workflow Navigation[\s\S]*?(?=\n## |$)/gm,
19
+ /^## LLM Traps[\s\S]*?(?=\n## |$)/gm,
20
+ /^## VBC Protocol[\s\S]*?(?=\n## |$)/gm,
21
+ /^## Output Format\n```[\s\S]*?```\n/gm,
22
+ /^## 🤖 LLM-Specific Traps[\s\S]*?(?=\n## |$)/gm,
23
+ ];
24
+
25
+ const VERBOSE_COMMENT_PATTERNS = [
26
+ /^(\s*)\/\/\s*(?:Any HTML or SVG element|motion\.div, motion\.span|The MAGIC of|This is the key performance|The pattern that|Compound components share|Note that children|The action receives|Children inherit the|Import first|Parent controls when|It's always motion)\b[^\n]*\n/gm,
27
+ /^(\s*)#\s*(?:TypedDict gives you|Usage:|Note:|Return user|Return None|Automatically)\b[^\n]*\n/gm,
28
+ /^\s*\/\/\s*Usage:\s*\n(?=\s*[<{])/gm,
29
+ /^\s*#\s*Usage:\s*\n(?=\s*[{])/gm,
30
+ /^\s*\/\/\s*When (?:server responds|a component|React can interrupt|the React Compiler)[^\n]*\n/gm,
31
+ ];
32
+
33
+ function stripChattyOpeners(content) {
34
+ return content.replace(/(^# .+\n)\n.{60,}\n.{30,}\n(?:\n---)/gm, '$1\n---');
35
+ }
36
+
37
+ function compressLegacyModernBlocks(content) {
38
+ const pattern = /```(\w+)\n((?:.*\n)*?.*(?:\/\/|#) ❌ LEGACY[^\n]*\n(?:.*\n)*?)```\n\n```\w+\n((?:.*\n)*?.*(?:\/\/|#) ✅ MODERN[^\n]*\n(?:.*\n)*?)```/gm;
39
+ return content.replace(pattern, (match, lang, legacy, modern) => {
40
+ const totalLines = (legacy.match(/\n/g) || []).length + (modern.match(/\n/g) || []).length;
41
+ if (totalLines > 28) return match;
42
+ return `\`\`\`${lang}\n// ❌ LEGACY\n${legacy.trim()}\n\n// ✅ MODERN\n${modern.trim()}\n\`\`\``;
43
+ });
44
+ }
45
+
46
+ function stripEmptyComments(content) {
47
+ content = content.replace(/^\s*\/\/\s*$\n/gm, '');
48
+ content = content.replace(/^\s*#\s*$\n/gm, '');
49
+ return content;
50
+ }
51
+
52
+ function dedupBulletPoints(content) {
53
+ const lines = content.split('\n');
54
+ const seenBullets = {};
55
+ const output = [];
56
+ for (let i = 0; i < lines.length; i++) {
57
+ const line = lines[i];
58
+ const stripped = line.trim();
59
+ if (/^(✅|❌|- ✅|- ❌)/.test(stripped)) {
60
+ if (seenBullets[stripped] !== undefined && (i - seenBullets[stripped]) < 80) {
61
+ continue;
62
+ }
63
+ seenBullets[stripped] = i;
64
+ }
65
+ output.push(line);
66
+ }
67
+ return output.join('\n');
68
+ }
69
+
70
+ function collapseBlanks(content) {
71
+ return content.replace(/\n{3,}/g, '\n\n');
72
+ }
73
+
74
+ function compressFile(filePath) {
75
+ const original = fs.readFileSync(filePath, 'utf8');
76
+ let content = original;
77
+
78
+ for (const pattern of REMOVE_SECTIONS) {
79
+ content = content.replace(pattern, '');
80
+ }
81
+
82
+ content = stripChattyOpeners(content);
83
+ content = compressLegacyModernBlocks(content);
84
+
85
+ for (const pattern of VERBOSE_COMMENT_PATTERNS) {
86
+ content = content.replace(pattern, '');
87
+ }
88
+
89
+ content = stripEmptyComments(content);
90
+ content = dedupBulletPoints(content);
91
+ content = collapseBlanks(content);
92
+
93
+ if (content.trim() !== original.trim()) {
94
+ fs.writeFileSync(filePath, content.trim() + '\n', 'utf8');
95
+ }
96
+
97
+ return [Buffer.byteLength(original, 'utf8'), Buffer.byteLength(content, 'utf8')];
98
+ }
99
+
100
+ function main() {
101
+ let totalOrig = 0;
102
+ let totalNew = 0;
103
+ const fileResults = [];
104
+
105
+ function walkDir(dir) {
106
+ let items;
107
+ try { items = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }
108
+ for (const item of items) {
109
+ const fpath = path.join(dir, item.name);
110
+ if (item.isDirectory()) walkDir(fpath);
111
+ else if (item.name.endsWith('.md')) {
112
+ const [orig, newL] = compressFile(fpath);
113
+ totalOrig += orig;
114
+ totalNew += newL;
115
+ const saved = orig - newL;
116
+ if (saved > 200) {
117
+ fileResults.push([saved, fpath]);
118
+ }
119
+ }
120
+ }
121
+ }
122
+
123
+ for (const base of BASE_DIRS) {
124
+ if (fs.existsSync(base)) walkDir(base);
125
+ }
126
+
127
+ fileResults.sort((a, b) => b[0] - a[0]);
128
+
129
+ const savedTotal = totalOrig - totalNew;
130
+ const pct = totalOrig ? (savedTotal / totalOrig * 100) : 0;
131
+
132
+ console.log(`\n${'='.repeat(58)}`);
133
+ console.log(` Deep Compression Complete`);
134
+ console.log(`${'='.repeat(58)}`);
135
+ console.log(` Original : ${totalOrig} bytes (${Math.floor(totalOrig / 1024)}KB)`);
136
+ console.log(` After : ${totalNew} bytes (${Math.floor(totalNew / 1024)}KB)`);
137
+ console.log(` Saved : ${savedTotal} bytes (${Math.floor(savedTotal / 1024)}KB) — ${pct.toFixed(1)}%`);
138
+ console.log(`\n Top savings:`);
139
+
140
+ for (const [saved, filePath] of fileResults.slice(0, 20)) {
141
+ const parts = filePath.split(path.sep);
142
+ const skill = parts.length >= 2 ? `${parts[parts.length - 2]}/${parts[parts.length - 1]}` : filePath;
143
+ console.log(` -${Math.floor(saved / 1024).toString().padStart(2, ' ')}KB ${skill}`);
144
+ }
145
+ console.log();
146
+ }
147
+
148
+ if (require.main === module) {
149
+ main();
150
+ }