tribunal-kit 5.8.3 → 5.8.5

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 (121) hide show
  1. package/.agent/ARCHITECTURE.md +5 -5
  2. package/.agent/history/integrity_manifest.json +1026 -0
  3. package/.agent/history/memory/.memory.idx +1217 -1
  4. package/.agent/history/memory/MEMORY.md +81 -1
  5. package/.agent/rules/GEMINI.md +1 -1
  6. package/.agent/scripts/_utils.js +28 -7
  7. package/.agent/scripts/case_law_manager.js +3 -15
  8. package/.agent/scripts/context_broker.js +3 -20
  9. package/.agent/scripts/guardrail_engine.js +643 -0
  10. package/.agent/scripts/integrity_manifest.js +492 -0
  11. package/.agent/scripts/marathon_harness.js +10 -1
  12. package/.agent/scripts/signal_detector.js +1 -1
  13. package/.agent/scripts/skill_evolution.js +39 -36
  14. package/.agent/scripts/skill_integrator.js +2 -12
  15. package/.agent/scripts/swarm_dispatcher.js +54 -5
  16. package/.agent/skills/12-principles-of-animation/SKILL.md +69 -0
  17. package/.agent/skills/60fps-animation/SKILL.md +78 -0
  18. package/.agent/skills/accessible-animation/SKILL.md +86 -0
  19. package/.agent/skills/adapt/SKILL.md +75 -0
  20. package/.agent/skills/animation-on-scroll/SKILL.md +110 -0
  21. package/.agent/skills/animation-systems/SKILL.md +69 -0
  22. package/.agent/skills/antfu-conventions/SKILL.md +74 -0
  23. package/.agent/skills/api-patterns/scripts/__pycache__/api_validator.cpython-311.pyc +0 -0
  24. package/.agent/skills/apple-design/SKILL.md +108 -0
  25. package/.agent/skills/audit-and-fix/SKILL.md +83 -0
  26. package/.agent/skills/baseline-ui/SKILL.md +74 -0
  27. package/.agent/skills/better-colors/SKILL.md +132 -0
  28. package/.agent/skills/better-typography/SKILL.md +111 -0
  29. package/.agent/skills/better-ui/SKILL.md +102 -0
  30. package/.agent/skills/bolder/SKILL.md +68 -0
  31. package/.agent/skills/build-primitive/SKILL.md +70 -0
  32. package/.agent/skills/clarify/SKILL.md +75 -0
  33. package/.agent/skills/cobejs/SKILL.md +96 -0
  34. package/.agent/skills/codebase-design/SKILL.md +84 -0
  35. package/.agent/skills/colorize/SKILL.md +77 -0
  36. package/.agent/skills/compact-landing/SKILL.md +70 -0
  37. package/.agent/skills/company-logos/SKILL.md +73 -0
  38. package/.agent/skills/create-design-md/SKILL.md +104 -0
  39. package/.agent/skills/critique/SKILL.md +95 -0
  40. package/.agent/skills/database-design/scripts/__pycache__/schema_validator.cpython-311.pyc +0 -0
  41. package/.agent/skills/delight/SKILL.md +65 -0
  42. package/.agent/skills/design-lab/SKILL.md +59 -0
  43. package/.agent/skills/diagnosing-bugs/SKILL.md +190 -0
  44. package/.agent/skills/distill/SKILL.md +65 -0
  45. package/.agent/skills/domain-modeling/SKILL.md +78 -0
  46. package/.agent/skills/fixing-accessibility/SKILL.md +100 -0
  47. package/.agent/skills/fixing-metadata/SKILL.md +97 -0
  48. package/.agent/skills/fixing-motion-performance/SKILL.md +96 -0
  49. package/.agent/skills/frontend-design/SKILL.md +80 -81
  50. package/.agent/skills/frontend-design/scripts/__pycache__/accessibility_checker.cpython-311.pyc +0 -0
  51. package/.agent/skills/frontend-design/scripts/__pycache__/ux_audit.cpython-311.pyc +0 -0
  52. package/.agent/skills/geo-fundamentals/scripts/__pycache__/geo_checker.cpython-311.pyc +0 -0
  53. package/.agent/skills/gpt-taste/SKILL.md +68 -0
  54. package/.agent/skills/harden/SKILL.md +74 -0
  55. package/.agent/skills/i18n-localization/scripts/__pycache__/i18n_checker.cpython-311.pyc +0 -0
  56. package/.agent/skills/impeccable/SKILL.md +74 -0
  57. package/.agent/skills/improve-codebase-architecture/SKILL.md +67 -0
  58. package/.agent/skills/improve-ui/SKILL.md +83 -0
  59. package/.agent/skills/landing-page/SKILL.md +88 -0
  60. package/.agent/skills/lint-and-validate/SKILL.md +0 -1
  61. package/.agent/skills/lint-and-validate/scripts/__pycache__/lint_runner.cpython-311.pyc +0 -0
  62. package/.agent/skills/lint-and-validate/scripts/__pycache__/type_coverage.cpython-311.pyc +0 -0
  63. package/.agent/skills/local-first-architecture/SKILL.md +66 -0
  64. package/.agent/skills/lottie-animation/SKILL.md +82 -0
  65. package/.agent/skills/marquee-loop/SKILL.md +96 -0
  66. package/.agent/skills/masked-reveal/SKILL.md +88 -0
  67. package/.agent/skills/micro-interaction/SKILL.md +100 -0
  68. package/.agent/skills/mobile-design/scripts/__pycache__/mobile_audit.cpython-311.pyc +0 -0
  69. package/.agent/skills/morphing-icons/SKILL.md +85 -0
  70. package/.agent/skills/motion-engineering/SKILL.md +66 -164
  71. package/.agent/skills/nextjs-react-expert/scripts/__pycache__/convert_rules.cpython-311.pyc +0 -0
  72. package/.agent/skills/nextjs-react-expert/scripts/__pycache__/react_performance_checker.cpython-311.pyc +0 -0
  73. package/.agent/skills/page-transition-animation/SKILL.md +108 -0
  74. package/.agent/skills/parallel-agents/SKILL.md +5 -5
  75. package/.agent/skills/performance-profiling/scripts/__pycache__/lighthouse_audit.cpython-311.pyc +0 -0
  76. package/.agent/skills/polish/SKILL.md +63 -0
  77. package/.agent/skills/pricing-page/SKILL.md +68 -0
  78. package/.agent/skills/progressive-blur/SKILL.md +100 -0
  79. package/.agent/skills/quieter/SKILL.md +68 -0
  80. package/.agent/skills/react-doctor/SKILL.md +70 -0
  81. package/.agent/skills/redesign-skill/SKILL.md +65 -0
  82. package/.agent/skills/seo-fundamentals/scripts/__pycache__/seo_checker.cpython-311.pyc +0 -0
  83. package/.agent/skills/shape/SKILL.md +73 -0
  84. package/.agent/skills/soft-skill/SKILL.md +72 -0
  85. package/.agent/skills/sounds-on-the-web/SKILL.md +100 -0
  86. package/.agent/skills/svg-animation/SKILL.md +91 -0
  87. package/.agent/skills/swiss-design/SKILL.md +64 -0
  88. package/.agent/skills/taste-skill/SKILL.md +71 -0
  89. package/.agent/skills/tdd-workflow/SKILL.md +36 -165
  90. package/.agent/skills/testing-patterns/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  91. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +82 -0
  92. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +66 -0
  93. package/.agent/skills/transitions-dev/SKILL.md +101 -0
  94. package/.agent/skills/typeset/SKILL.md +76 -0
  95. package/.agent/skills/ui-skills-root/SKILL.md +85 -0
  96. package/.agent/skills/vulnerability-scanner/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  97. package/.agent/skills/web-quality-audit/SKILL.md +67 -0
  98. package/.agent/skills/webapp-testing/scripts/__pycache__/playwright_runner.cpython-311.pyc +0 -0
  99. package/.agent/workflows/generate.md +1 -1
  100. package/.agent/workflows/tribunal-full.md +2 -2
  101. package/.agent/workflows/tribunal-speed.md +2 -2
  102. package/CONTRIBUTING.md +1 -1
  103. package/README.md +349 -239
  104. package/bin/mcp-server.js +45 -45
  105. package/bin/tribunal-kit.js +62 -1482
  106. package/bin/wrapper.js +50 -25
  107. package/dist/cli.js +43 -0
  108. package/dist/commands/align.js +1 -1
  109. package/dist/commands/compile.js +1 -1
  110. package/dist/commands/guardrail.js +275 -0
  111. package/dist/commands/init.js +35 -10
  112. package/dist/commands/native.js +228 -0
  113. package/dist/commands/optimize.js +318 -0
  114. package/dist/commands/validate.js +67 -0
  115. package/dist/mcp/server.js +4 -138
  116. package/dist/utils/version.js +1 -1
  117. package/package.json +13 -10
  118. package/scripts/benchmark.js +42 -0
  119. package/scripts/fix-vbc.js +98 -0
  120. package/scripts/fix-vbc.ps1 +119 -0
  121. package/scripts/sync-version.js +129 -76
@@ -1,6 +1,6 @@
1
1
  # 🧠 Tribunal Memory Index
2
2
  > Auto-generated by `tribunal-kit memory export`. Do not edit manually.
3
- > Entries: 141 | Semantic: 113 | Procedural: 28 | Episodic: 0 | Working: 0
3
+ > Entries: 221 | Semantic: 177 | Procedural: 44 | Episodic: 0 | Working: 0
4
4
 
5
5
  ## SEMANTIC (Permanent Facts)
6
6
  | ID | Content | Tags | Source | Created |
@@ -118,6 +118,70 @@
118
118
  | 137 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1784396209Z |
119
119
  | 138 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784396209Z |
120
120
  | 139 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784396209Z |
121
+ | 142 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1784618632Z |
122
+ | 143 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1784618632Z |
123
+ | 144 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784618632Z |
124
+ | 145 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784618632Z |
125
+ | 146 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1784618632Z |
126
+ | 147 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1784618632Z |
127
+ | 148 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784618632Z |
128
+ | 149 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784618632Z |
129
+ | 152 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1784705972Z |
130
+ | 153 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1784705972Z |
131
+ | 154 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784705972Z |
132
+ | 155 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784705972Z |
133
+ | 156 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1784705972Z |
134
+ | 157 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1784705972Z |
135
+ | 158 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784705972Z |
136
+ | 159 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784705972Z |
137
+ | 162 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1784706426Z |
138
+ | 163 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1784706426Z |
139
+ | 164 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706426Z |
140
+ | 165 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706426Z |
141
+ | 166 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1784706426Z |
142
+ | 167 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1784706426Z |
143
+ | 168 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706426Z |
144
+ | 169 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706426Z |
145
+ | 172 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1784706433Z |
146
+ | 173 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1784706433Z |
147
+ | 174 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706433Z |
148
+ | 175 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706433Z |
149
+ | 176 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1784706433Z |
150
+ | 177 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1784706433Z |
151
+ | 178 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706433Z |
152
+ | 179 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706433Z |
153
+ | 182 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1784706809Z |
154
+ | 183 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1784706809Z |
155
+ | 184 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706809Z |
156
+ | 185 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706809Z |
157
+ | 186 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1784706809Z |
158
+ | 187 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1784706809Z |
159
+ | 188 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706809Z |
160
+ | 189 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706809Z |
161
+ | 192 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1784706814Z |
162
+ | 193 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1784706814Z |
163
+ | 194 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706814Z |
164
+ | 195 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706814Z |
165
+ | 196 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1784706814Z |
166
+ | 197 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1784706814Z |
167
+ | 198 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1784706814Z |
168
+ | 199 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1784706814Z |
169
+ | 202 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1785138690Z |
170
+ | 203 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1785138690Z |
171
+ | 204 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1785138690Z |
172
+ | 205 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1785138690Z |
173
+ | 206 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1785138690Z |
174
+ | 207 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1785138690Z |
175
+ | 208 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1785138690Z |
176
+ | 209 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1785138690Z |
177
+ | 212 | ❌ Overriding project idioms without explicit justification -> ✅ Idioms represent team decisions; flag deviations with reasoning | project-idiom, auto-learned | manual | 1785138695Z |
178
+ | 213 | ❌ Applying idioms from one project to a different project -> ✅ Idioms are project-specific; verify they apply to the current codebase | project-idiom, auto-learned | manual | 1785138695Z |
179
+ | 214 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1785138695Z |
180
+ | 215 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1785138695Z |
181
+ | 216 | [ ] Have I reviewed the user's specific constraints and requests? | project-idiom, auto-learned | manual | 1785138695Z |
182
+ | 217 | [ ] Have I checked the environment for relevant existing implementations? | project-idiom, auto-learned | manual | 1785138695Z |
183
+ | 218 | ❌ **Forbidden:** Declaring a task complete because the output "looks correct." | project-idiom, auto-learned | manual | 1785138695Z |
184
+ | 219 | ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended. | project-idiom, auto-learned | manual | 1785138696Z |
121
185
 
122
186
  ## PROCEDURAL (How-To Recipes)
123
187
  | ID | Content | Tags | Source | Created |
@@ -150,4 +214,20 @@
150
214
  | 131 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784187808Z |
151
215
  | 140 | Run `echo 'No build step required for this project'` to build the project | build-script, build, auto-learned | manual | 1784396209Z |
152
216
  | 141 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784396209Z |
217
+ | 150 | Run `echo 'No build step required for this project'` to build the project | build-script, build, auto-learned | manual | 1784618632Z |
218
+ | 151 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784618632Z |
219
+ | 160 | Run `echo 'No build step required for this project'` to build the project | build-script, build, auto-learned | manual | 1784705972Z |
220
+ | 161 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784705972Z |
221
+ | 170 | Run `echo 'No build step required for this project'` to build the project | build-script, build, auto-learned | manual | 1784706426Z |
222
+ | 171 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784706426Z |
223
+ | 180 | Run `echo 'No build step required for this project'` to build the project | build-script, build, auto-learned | manual | 1784706433Z |
224
+ | 181 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784706433Z |
225
+ | 190 | Run `echo 'No build step required for this project'` to build the project | build-script, build, auto-learned | manual | 1784706809Z |
226
+ | 191 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784706809Z |
227
+ | 200 | Run `echo 'No build step required for this project'` to build the project | build-script, build, auto-learned | manual | 1784706814Z |
228
+ | 201 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1784706814Z |
229
+ | 210 | Run `npm run build:rust` to build the project | build-script, build, auto-learned | manual | 1785138690Z |
230
+ | 211 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1785138690Z |
231
+ | 220 | Run `npm run build:rust` to build the project | build-script, build, auto-learned | manual | 1785138696Z |
232
+ | 221 | Run `npm run validate-payload && jest --coverage` to test the project | build-script, test, auto-learned | manual | 1785138696Z |
153
233
 
@@ -222,7 +222,7 @@ The Human Gate is never skipped. No code is written to a file without explicit u
222
222
  | Database/SQL | logic + security + sql + schema + complexity-reviewer |
223
223
  | Mobile/Cross-platform | logic + security + mobile-reviewer + type-safety + complexity-reviewer |
224
224
  | Any domain | + performance (if optimization) |
225
- | Before merge | /tribunal-full (all 20) |
225
+ | Before merge | /tribunal-full (all 19 reviewers) |
226
226
 
227
227
  ---
228
228
 
@@ -226,9 +226,34 @@ function parseArgs(argv, schema = {}) {
226
226
 
227
227
  // ── Command Runner ──────────────────────────────────────────────────────────
228
228
 
229
+ const WINDOWS_CMD_SHIMS = new Set(["npm", "npx", "pnpm", "yarn", "bun", "bunx"]);
230
+
231
+ /**
232
+ * Select the executable that should be passed to spawnSync.
233
+ * Only package-manager shims need a .cmd suffix on Windows; native executables
234
+ * such as node, cargo, and git must retain their original names.
235
+ *
236
+ * @param {string} cmd - Command to run
237
+ * @param {string} [platform] - Platform override for deterministic testing
238
+ * @returns {string}
239
+ */
240
+ function normalizeCommand(cmd, platform = process.platform) {
241
+ const lowerCaseCommand = cmd.toLowerCase();
242
+ const hasPath = cmd.includes("/") || cmd.includes("\\\\");
243
+ if (
244
+ platform === "win32" &&
245
+ !hasPath &&
246
+ !lowerCaseCommand.endsWith(".cmd") &&
247
+ WINDOWS_CMD_SHIMS.has(lowerCaseCommand)
248
+ ) {
249
+ return `${cmd}.cmd`;
250
+ }
251
+ return cmd;
252
+ }
253
+
229
254
  /**
230
255
  * Run a command synchronously and return a structured result.
231
- * Handles Windows .cmd shims automatically.
256
+ * Handles known Windows package-manager shims without rewriting native tools.
232
257
  *
233
258
  * @param {string} cmd - Command to run
234
259
  * @param {string[]} args - Arguments
@@ -237,12 +262,7 @@ function parseArgs(argv, schema = {}) {
237
262
  */
238
263
  function runCommand(cmd, args = [], opts = {}) {
239
264
  const { spawnSync } = require("child_process");
240
- const executable =
241
- process.platform === "win32" &&
242
- !cmd.endsWith(".cmd") &&
243
- !cmd.includes(path.sep)
244
- ? `${cmd}.cmd`
245
- : cmd;
265
+ const executable = normalizeCommand(cmd);
246
266
 
247
267
  const result = spawnSync(executable, args, {
248
268
  encoding: "utf8",
@@ -275,5 +295,6 @@ module.exports = {
275
295
  // CLI
276
296
  parseArgs,
277
297
  // Commands
298
+ normalizeCommand,
278
299
  runCommand,
279
300
  };
@@ -28,21 +28,9 @@ const readline = require("readline");
28
28
  // ── Colours ──────────────────────────────────────────────────────────────────
29
29
  const { GREEN, YELLOW, CYAN, RED, BOLD, DIM, RESET } = require("./_colors");
30
30
 
31
- // ── Find .agent directory ─────────────────────────────────────────────────────
32
- function findAgentDir() {
33
- let current = path.resolve(process.cwd());
34
- const root = path.parse(current).root;
35
- while (current !== root) {
36
- const candidate = path.join(current, ".agent");
37
- if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory())
38
- return candidate;
39
- current = path.dirname(current);
40
- }
41
- console.error(
42
- `${RED}✖ Error: '.agent' directory not found. Please run 'npx tribunal-kit init' first.${RESET}`,
43
- );
44
- process.exit(1);
45
- }
31
+ // ── Shared Utilities ──────────────────────────────────────────────────────────
32
+ const { findAgentDir } = require("./_utils");
33
+
46
34
 
47
35
  // ── Lazy path resolution (avoids side effects at require-time) ───────────────
48
36
  let _paths = null;
@@ -50,8 +50,10 @@
50
50
  const fs = require("fs");
51
51
  const path = require("path");
52
52
 
53
- // ── Colours ───────────────────────────────────────────────────────────────────
53
+ // ── Colours & Shared Utilities ────────────────────────────────────────────────
54
54
  const { GREEN, YELLOW, CYAN, RED, BOLD, DIM, RESET } = require("./_colors");
55
+ const { findAgentDir } = require("./_utils");
56
+
55
57
 
56
58
  // ── Domain → Skill affinity map ───────────────────────────────────────────────
57
59
  // Keywords in the user's task that strongly indicate specific skills.
@@ -353,25 +355,6 @@ const BASELINE_SKILLS = [
353
355
 
354
356
  // ── Skill catalogue (loaded from disk) ───────────────────────────────────────
355
357
 
356
- /**
357
- * Find the .agent directory by walking up from cwd.
358
- * @returns {string} path to .agent/
359
- */
360
- function findAgentDir() {
361
- let current = path.resolve(process.cwd());
362
- const root = path.parse(current).root;
363
- while (current !== root) {
364
- const candidate = path.join(current, ".agent");
365
- if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory())
366
- return candidate;
367
- current = path.dirname(current);
368
- }
369
- console.error(
370
- `${RED}✖ .agent/ not found. Run: npx tribunal-kit init${RESET}`,
371
- );
372
- process.exit(1);
373
- }
374
-
375
358
  /**
376
359
  * Parse the YAML frontmatter from a SKILL.md file.
377
360
  * Returns { name, description, ... } or null on parse failure.