tribunal-kit 6.0.1 → 8.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.
Files changed (434) hide show
  1. package/.agent/ARCHITECTURE.md +9 -6
  2. package/.agent/agents/accessibility-reviewer.md +23 -16
  3. package/.agent/agents/ai-code-reviewer.md +25 -21
  4. package/.agent/agents/anti-pattern-reviewer.md +12 -7
  5. package/.agent/agents/api-architect.md +1 -0
  6. package/.agent/agents/backend-specialist.md +23 -22
  7. package/.agent/agents/cloud-engineer.md +1 -0
  8. package/.agent/agents/code-archaeologist.md +1 -0
  9. package/.agent/agents/complexity-reviewer.md +10 -7
  10. package/.agent/agents/database-architect.md +3 -2
  11. package/.agent/agents/db-latency-auditor.md +6 -2
  12. package/.agent/agents/debugger.md +3 -2
  13. package/.agent/agents/dependency-reviewer.md +1 -0
  14. package/.agent/agents/devops-engineer.md +9 -8
  15. package/.agent/agents/documentation-writer.md +6 -5
  16. package/.agent/agents/explorer-agent.md +1 -0
  17. package/.agent/agents/frontend-reviewer.md +21 -17
  18. package/.agent/agents/frontend-specialist.md +23 -20
  19. package/.agent/agents/game-developer.md +1 -0
  20. package/.agent/agents/interaction-reviewer.md +10 -5
  21. package/.agent/agents/logic-reviewer.md +3 -0
  22. package/.agent/agents/minimalist-reviewer.md +6 -0
  23. package/.agent/agents/mobile-developer.md +7 -6
  24. package/.agent/agents/mobile-reviewer.md +14 -13
  25. package/.agent/agents/orchestrator.md +3 -0
  26. package/.agent/agents/penetration-tester.md +1 -0
  27. package/.agent/agents/performance-optimizer.md +6 -5
  28. package/.agent/agents/performance-reviewer.md +6 -6
  29. package/.agent/agents/pipeline-reviewer.md +144 -0
  30. package/.agent/agents/precedence-reviewer.md +1 -0
  31. package/.agent/agents/product-manager.md +1 -0
  32. package/.agent/agents/product-owner.md +1 -0
  33. package/.agent/agents/product-reviewer.md +12 -7
  34. package/.agent/agents/project-planner.md +3 -0
  35. package/.agent/agents/qa-automation-engineer.md +50 -43
  36. package/.agent/agents/resilience-reviewer.md +1 -0
  37. package/.agent/agents/schema-reviewer.md +1 -0
  38. package/.agent/agents/security-auditor.md +24 -24
  39. package/.agent/agents/seo-specialist.md +33 -23
  40. package/.agent/agents/sql-reviewer.md +5 -4
  41. package/.agent/agents/supervisor-agent.md +12 -2
  42. package/.agent/agents/swarm-worker-contracts.md +13 -13
  43. package/.agent/agents/swarm-worker-registry.md +51 -51
  44. package/.agent/agents/system-architect.md +1 -0
  45. package/.agent/agents/test-coverage-reviewer.md +25 -22
  46. package/.agent/agents/test-engineer.md +12 -11
  47. package/.agent/agents/throughput-optimizer.md +45 -40
  48. package/.agent/agents/type-safety-reviewer.md +5 -4
  49. package/.agent/agents/ui-ux-auditor.md +6 -4
  50. package/.agent/agents/ui-visual-auditor.md +3 -0
  51. package/.agent/agents/ux-reviewer.md +11 -6
  52. package/.agent/agents/visual-reviewer.md +11 -6
  53. package/.agent/agents/vitals-reviewer.md +5 -4
  54. package/.agent/config/claude.json +18 -0
  55. package/.agent/config/plugin.json +102 -0
  56. package/.agent/config/slash-commands.json +103 -0
  57. package/.agent/config/specialist-registry.json +415 -0
  58. package/.agent/config/system-prompt.md +191 -0
  59. package/.agent/history/architecture-graph.yaml +302 -3
  60. package/.agent/history/graph-cache.json +515 -45
  61. package/.agent/history/memory/.memory.idx +1532 -1
  62. package/.agent/history/memory/MEMORY.md +102 -1
  63. package/.agent/history/memory.db +0 -0
  64. package/.agent/history/snapshots/bin__adapter-install.js.json +13 -0
  65. package/.agent/history/snapshots/bin__global-store.js.json +15 -0
  66. package/.agent/history/snapshots/bin__mcp-server.js.json +19 -0
  67. package/.agent/history/snapshots/bin__proxy-server.js.json +20 -0
  68. package/.agent/history/snapshots/bin__spawn-agent.js.json +12 -0
  69. package/.agent/history/snapshots/bin__tk-proxy.js.json +21 -0
  70. package/.agent/history/snapshots/bin__tribunal-kit.js.json +9 -7
  71. package/.agent/history/snapshots/bin__wrapper.js.json +14 -0
  72. package/.agent/history/snapshots/eslint.config.js.json +1 -2
  73. package/.agent/history/snapshots/scripts__benchmark.js.json +14 -0
  74. package/.agent/history/snapshots/scripts__changelog.js.json +1 -2
  75. package/.agent/history/snapshots/scripts__fix-vbc.js.json +11 -0
  76. package/.agent/history/snapshots/scripts__stress_benchmark.js.json +15 -0
  77. package/.agent/history/snapshots/scripts__sync-version.js.json +1 -2
  78. package/.agent/history/snapshots/scripts__validate-payload.js.json +1 -2
  79. package/.agent/history/snapshots/scripts__visual_audit.js.json +11 -0
  80. package/.agent/history/snapshots/test__integration__bridges.test.js.json +1 -2
  81. package/.agent/history/snapshots/test__integration__graceful_degradation.test.js.json +12 -0
  82. package/.agent/history/snapshots/test__integration__init.test.js.json +1 -2
  83. package/.agent/history/snapshots/test__integration__minimal_change_pipeline.test.js.json +13 -0
  84. package/.agent/history/snapshots/test__integration__parallel_tribunal.test.js.json +12 -0
  85. package/.agent/history/snapshots/test__integration__routing.test.js.json +1 -2
  86. package/.agent/history/snapshots/test__integration__swarm_dispatcher.test.js.json +1 -2
  87. package/.agent/history/snapshots/test__integration__sync_status.test.js.json +13 -0
  88. package/.agent/history/snapshots/test__integration__wave2.test.js.json +1 -2
  89. package/.agent/history/snapshots/test__integration__wrapper.test.js.json +13 -0
  90. package/.agent/history/snapshots/test__unit__align.test.js.json +10 -0
  91. package/.agent/history/snapshots/test__unit__args.test.js.json +3 -3
  92. package/.agent/history/snapshots/test__unit__audit_release.test.js.json +16 -0
  93. package/.agent/history/snapshots/test__unit__case_law_manager.test.js.json +1 -2
  94. package/.agent/history/snapshots/test__unit__cicd_validator.test.js.json +12 -0
  95. package/.agent/history/snapshots/test__unit__compile.test.js.json +10 -0
  96. package/.agent/history/snapshots/test__unit__context_broker.test.js.json +1 -2
  97. package/.agent/history/snapshots/test__unit__contract_engine.test.js.json +13 -0
  98. package/.agent/history/snapshots/test__unit__copyDir.test.js.json +3 -3
  99. package/.agent/history/snapshots/test__unit__graph_tools.test.js.json +1 -2
  100. package/.agent/history/snapshots/test__unit__guardrail_engine.test.js.json +10 -0
  101. package/.agent/history/snapshots/test__unit__impact_classifier.test.js.json +12 -0
  102. package/.agent/history/snapshots/test__unit__init.test.js.json +14 -0
  103. package/.agent/history/snapshots/test__unit__inner_loop_validator.test.js.json +1 -2
  104. package/.agent/history/snapshots/test__unit__integrity_manifest.test.js.json +13 -0
  105. package/.agent/history/snapshots/test__unit__learn.test.js.json +11 -0
  106. package/.agent/history/snapshots/test__unit__marathon.test.js.json +22 -0
  107. package/.agent/history/snapshots/test__unit__mcp_server.test.js.json +16 -0
  108. package/.agent/history/snapshots/test__unit__memory.test.js.json +13 -0
  109. package/.agent/history/snapshots/test__unit__minimal_change.test.js.json +10 -0
  110. package/.agent/history/snapshots/test__unit__native.test.js.json +10 -0
  111. package/.agent/history/snapshots/test__unit__optimize.test.js.json +13 -0
  112. package/.agent/history/snapshots/test__unit__path_resolution.test.js.json +14 -0
  113. package/.agent/history/snapshots/test__unit__production_readiness_evidence.test.js.json +21 -0
  114. package/.agent/history/snapshots/test__unit__selfInstall.test.js.json +3 -3
  115. package/.agent/history/snapshots/test__unit__semver.test.js.json +3 -3
  116. package/.agent/history/snapshots/test__unit__skill_evolution.test.js.json +11 -0
  117. package/.agent/history/snapshots/test__unit__stress.test.js.json +15 -0
  118. package/.agent/history/snapshots/test__unit__swarm_dispatcher.test.js.json +3 -3
  119. package/.agent/history/snapshots/test__unit__utils.test.js.json +10 -0
  120. package/.agent/mcp_config.json +1 -6
  121. package/.agent/routing_index.json +2033 -263
  122. package/.agent/rules/GEMINI.md +11 -9
  123. package/.agent/rules/GEMINI_PLANNER.md +19 -21
  124. package/.agent/scripts/_colors.js +52 -54
  125. package/.agent/scripts/_utils.js +52 -53
  126. package/.agent/scripts/ast_context_loader.js +137 -0
  127. package/.agent/scripts/auto_preview.js +39 -43
  128. package/.agent/scripts/bundle_analyzer.js +47 -60
  129. package/.agent/scripts/case_law_manager.js +200 -294
  130. package/.agent/scripts/checklist.js +73 -94
  131. package/.agent/scripts/cicd_validator.js +305 -0
  132. package/.agent/scripts/context_broker.js +317 -412
  133. package/.agent/scripts/contract_engine.js +402 -0
  134. package/.agent/scripts/dependency_analyzer.js +112 -124
  135. package/.agent/scripts/graph_builder.js +75 -103
  136. package/.agent/scripts/graph_visualizer.js +10 -12
  137. package/.agent/scripts/graph_zoom.js +38 -55
  138. package/.agent/scripts/guardrail_engine.js +195 -145
  139. package/.agent/scripts/impact_classifier.js +55 -30
  140. package/.agent/scripts/inner_loop_validator.js +108 -159
  141. package/.agent/scripts/integrity_manifest.js +59 -67
  142. package/.agent/scripts/lint_runner.js +65 -75
  143. package/.agent/scripts/marathon_harness.js +131 -208
  144. package/.agent/scripts/memory_engine.js +581 -0
  145. package/.agent/scripts/minify_context.js +29 -33
  146. package/.agent/scripts/minimal_change_engine.js +95 -87
  147. package/.agent/scripts/mutation_runner.js +46 -62
  148. package/.agent/scripts/payload_schemas.js +146 -0
  149. package/.agent/scripts/pipeline_engine.js +320 -209
  150. package/.agent/scripts/prompt_compiler.js +166 -93
  151. package/.agent/scripts/schema_validator.js +73 -121
  152. package/.agent/scripts/security_scan.js +88 -117
  153. package/.agent/scripts/session_manager.js +52 -69
  154. package/.agent/scripts/signal_detector.js +24 -22
  155. package/.agent/scripts/skill_evolution.js +184 -245
  156. package/.agent/scripts/skill_integrator.js +35 -48
  157. package/.agent/scripts/socratic_gate_policy.js +15 -12
  158. package/.agent/scripts/strengthen_skills.js +29 -33
  159. package/.agent/scripts/swarm_dispatcher.js +397 -200
  160. package/.agent/scripts/test_runner.js +54 -56
  161. package/.agent/scripts/token_budget_broker.js +126 -13
  162. package/.agent/scripts/trace_engine.js +126 -0
  163. package/.agent/scripts/verify_all.js +76 -93
  164. package/.agent/scripts/visual_audit.js +16 -21
  165. package/.agent/skill_topic_map.json +22 -3
  166. package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
  167. package/.agent/skills/60fps-animation/SKILL.md +7 -0
  168. package/.agent/skills/accessible-animation/SKILL.md +5 -1
  169. package/.agent/skills/adapt/SKILL.md +7 -1
  170. package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
  171. package/.agent/skills/agent-organizer/SKILL.md +1 -0
  172. package/.agent/skills/agentic-patterns/SKILL.md +33 -25
  173. package/.agent/skills/agentic-workflows-2026/SKILL.md +6 -2
  174. package/.agent/skills/ai-app-hardening/SKILL.md +9 -8
  175. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
  176. package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
  177. package/.agent/skills/animation-systems/SKILL.md +11 -10
  178. package/.agent/skills/antfu-conventions/SKILL.md +7 -2
  179. package/.agent/skills/api-patterns/SKILL.md +14 -10
  180. package/.agent/skills/api-security-auditor/SKILL.md +15 -14
  181. package/.agent/skills/app-builder/SKILL.md +1 -0
  182. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
  183. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
  184. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
  185. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
  186. package/.agent/skills/apple-design/SKILL.md +8 -7
  187. package/.agent/skills/architecture/SKILL.md +3 -2
  188. package/.agent/skills/audit-and-fix/SKILL.md +8 -5
  189. package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
  190. package/.agent/skills/backend-security-expert/SKILL.md +1 -0
  191. package/.agent/skills/baseline-ui/SKILL.md +8 -7
  192. package/.agent/skills/bash-linux/SKILL.md +1 -0
  193. package/.agent/skills/behavioral-modes/SKILL.md +1 -0
  194. package/.agent/skills/better-colors/SKILL.md +11 -7
  195. package/.agent/skills/better-typography/SKILL.md +30 -16
  196. package/.agent/skills/better-ui/SKILL.md +17 -10
  197. package/.agent/skills/bolder/SKILL.md +6 -0
  198. package/.agent/skills/brainstorming/SKILL.md +6 -4
  199. package/.agent/skills/browser-native-ai/SKILL.md +5 -4
  200. package/.agent/skills/build-primitive/SKILL.md +5 -0
  201. package/.agent/skills/building-native-ui/SKILL.md +1 -0
  202. package/.agent/skills/cicd-pro/SKILL.md +2 -1
  203. package/.agent/skills/clarify/SKILL.md +19 -14
  204. package/.agent/skills/clean-code/SKILL.md +16 -15
  205. package/.agent/skills/cloud-architect/SKILL.md +1 -0
  206. package/.agent/skills/cobejs/SKILL.md +7 -9
  207. package/.agent/skills/code-review-checklist/SKILL.md +1 -0
  208. package/.agent/skills/codebase-design/SKILL.md +7 -2
  209. package/.agent/skills/colorize/SKILL.md +8 -3
  210. package/.agent/skills/compact-landing/SKILL.md +8 -3
  211. package/.agent/skills/company-logos/SKILL.md +6 -0
  212. package/.agent/skills/config-validator/SKILL.md +10 -9
  213. package/.agent/skills/containerization-pro/SKILL.md +6 -5
  214. package/.agent/skills/context-engineering-pro/SKILL.md +5 -4
  215. package/.agent/skills/create-design-md/SKILL.md +13 -5
  216. package/.agent/skills/critique/SKILL.md +10 -8
  217. package/.agent/skills/csharp-developer/SKILL.md +1 -0
  218. package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
  219. package/.agent/skills/database-design/SKILL.md +2 -1
  220. package/.agent/skills/delight/SKILL.md +6 -0
  221. package/.agent/skills/deployment-procedures/SKILL.md +2 -1
  222. package/.agent/skills/design-lab/SKILL.md +5 -0
  223. package/.agent/skills/devops-engineer/SKILL.md +3 -2
  224. package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
  225. package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
  226. package/.agent/skills/distill/SKILL.md +7 -2
  227. package/.agent/skills/documentation-templates/SKILL.md +3 -2
  228. package/.agent/skills/domain-modeling/SKILL.md +12 -4
  229. package/.agent/skills/duckdb-analytical-sql/SKILL.md +7 -3
  230. package/.agent/skills/edge-ai-mobile/SKILL.md +5 -1
  231. package/.agent/skills/edge-computing/SKILL.md +9 -8
  232. package/.agent/skills/emil-design-eng/SKILL.md +43 -27
  233. package/.agent/skills/error-resilience/SKILL.md +34 -16
  234. package/.agent/skills/expo-router-v4/SKILL.md +2 -1
  235. package/.agent/skills/extract-design-system/SKILL.md +12 -11
  236. package/.agent/skills/fabel-protocol/SKILL.md +24 -17
  237. package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
  238. package/.agent/skills/fixing-metadata/SKILL.md +24 -13
  239. package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
  240. package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
  241. package/.agent/skills/frontend-design/SKILL.md +21 -13
  242. package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
  243. package/.agent/skills/game-design-expert/SKILL.md +1 -0
  244. package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
  245. package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
  246. package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
  247. package/.agent/skills/git-pro/SKILL.md +10 -9
  248. package/.agent/skills/github-operations/SKILL.md +2 -1
  249. package/.agent/skills/gpt-taste/SKILL.md +7 -0
  250. package/.agent/skills/gsap-core/SKILL.md +26 -22
  251. package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
  252. package/.agent/skills/gsap-performance/SKILL.md +4 -3
  253. package/.agent/skills/gsap-plugins/SKILL.md +34 -33
  254. package/.agent/skills/gsap-react/SKILL.md +9 -8
  255. package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
  256. package/.agent/skills/gsap-timeline/SKILL.md +18 -15
  257. package/.agent/skills/gsap-utils/SKILL.md +25 -24
  258. package/.agent/skills/harden/SKILL.md +9 -3
  259. package/.agent/skills/harness-protocol/SKILL.md +1 -0
  260. package/.agent/skills/i18n-localization/SKILL.md +10 -9
  261. package/.agent/skills/impeccable/SKILL.md +5 -0
  262. package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
  263. package/.agent/skills/improve-ui/SKILL.md +12 -5
  264. package/.agent/skills/intelligent-routing/SKILL.md +7 -6
  265. package/.agent/skills/knowledge-graph/SKILL.md +1 -0
  266. package/.agent/skills/landing-page/SKILL.md +1 -0
  267. package/.agent/skills/lint-and-validate/SKILL.md +9 -4
  268. package/.agent/skills/llm-engineering/SKILL.md +55 -54
  269. package/.agent/skills/local-first/SKILL.md +20 -19
  270. package/.agent/skills/local-first-architecture/SKILL.md +6 -1
  271. package/.agent/skills/lottie-animation/SKILL.md +7 -3
  272. package/.agent/skills/marquee-loop/SKILL.md +1 -0
  273. package/.agent/skills/masked-reveal/SKILL.md +17 -4
  274. package/.agent/skills/mcp-builder/SKILL.md +13 -10
  275. package/.agent/skills/micro-interaction/SKILL.md +20 -5
  276. package/.agent/skills/mobile-design/SKILL.md +26 -15
  277. package/.agent/skills/monorepo-management/SKILL.md +3 -2
  278. package/.agent/skills/morphing-icons/SKILL.md +16 -6
  279. package/.agent/skills/motion-engineering/SKILL.md +19 -15
  280. package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
  281. package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
  282. package/.agent/skills/observability/SKILL.md +45 -44
  283. package/.agent/skills/opentelemetry-observability/SKILL.md +2 -1
  284. package/.agent/skills/page-transition-animation/SKILL.md +6 -3
  285. package/.agent/skills/parallel-agents/SKILL.md +7 -2
  286. package/.agent/skills/performance-profiling/SKILL.md +24 -13
  287. package/.agent/skills/plan-writing/SKILL.md +1 -0
  288. package/.agent/skills/platform-engineer/SKILL.md +3 -2
  289. package/.agent/skills/platform-engineering-opentofu/SKILL.md +1 -0
  290. package/.agent/skills/playwright-ai-e2e/SKILL.md +3 -2
  291. package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
  292. package/.agent/skills/polish/SKILL.md +13 -12
  293. package/.agent/skills/powershell-windows/SKILL.md +1 -0
  294. package/.agent/skills/pricing-page/SKILL.md +8 -3
  295. package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
  296. package/.agent/skills/progressive-blur/SKILL.md +9 -4
  297. package/.agent/skills/project-idioms/SKILL.md +1 -0
  298. package/.agent/skills/property-based-testing/SKILL.md +10 -12
  299. package/.agent/skills/python-patterns/SKILL.md +1 -0
  300. package/.agent/skills/python-pro/SKILL.md +1 -0
  301. package/.agent/skills/quieter/SKILL.md +6 -0
  302. package/.agent/skills/react-doctor/SKILL.md +6 -0
  303. package/.agent/skills/react-specialist/SKILL.md +32 -28
  304. package/.agent/skills/readme-builder/SKILL.md +1 -0
  305. package/.agent/skills/realtime-patterns/SKILL.md +34 -33
  306. package/.agent/skills/red-team-tactics/SKILL.md +1 -0
  307. package/.agent/skills/redesign-skill/SKILL.md +6 -0
  308. package/.agent/skills/review-animations/SKILL.md +5 -2
  309. package/.agent/skills/review-animations/STANDARDS.md +37 -23
  310. package/.agent/skills/rust-pro/SKILL.md +1 -0
  311. package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
  312. package/.agent/skills/server-management/SKILL.md +1 -0
  313. package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
  314. package/.agent/skills/shape/SKILL.md +9 -2
  315. package/.agent/skills/skill-creator/SKILL.md +1 -0
  316. package/.agent/skills/soft-skill/SKILL.md +6 -0
  317. package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
  318. package/.agent/skills/sql-pro/SKILL.md +1 -0
  319. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
  320. package/.agent/skills/svg-animation/SKILL.md +16 -7
  321. package/.agent/skills/swiftui-expert/SKILL.md +1 -0
  322. package/.agent/skills/swiss-design/SKILL.md +5 -0
  323. package/.agent/skills/system-design-pro/SKILL.md +1 -0
  324. package/.agent/skills/systematic-debugging/SKILL.md +1 -0
  325. package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
  326. package/.agent/skills/taste-skill/SKILL.md +6 -0
  327. package/.agent/skills/tdd-workflow/SKILL.md +5 -0
  328. package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
  329. package/.agent/skills/testing-patterns/SKILL.md +123 -115
  330. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
  331. package/.agent/skills/thinking-protocol/SKILL.md +3 -0
  332. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
  333. package/.agent/skills/transitions-dev/SKILL.md +19 -6
  334. package/.agent/skills/trend-researcher/SKILL.md +1 -0
  335. package/.agent/skills/typescript-advanced/SKILL.md +23 -18
  336. package/.agent/skills/typeset/SKILL.md +10 -1
  337. package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
  338. package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
  339. package/.agent/skills/ui-skills-root/SKILL.md +39 -38
  340. package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
  341. package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
  342. package/.agent/skills/vector-search-pgvector/SKILL.md +3 -2
  343. package/.agent/skills/vue-expert/SKILL.md +22 -19
  344. package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
  345. package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
  346. package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
  347. package/.agent/skills/web-quality-audit/SKILL.md +5 -0
  348. package/.agent/skills/webapp-testing/SKILL.md +14 -13
  349. package/.agent/skills/webgpu-performance/SKILL.md +1 -0
  350. package/.agent/skills/whimsy-injector/SKILL.md +9 -5
  351. package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
  352. package/.agent/skills/zero-trust-passkeys/SKILL.md +11 -6
  353. package/.agent/templates/DESIGN.md +119 -110
  354. package/.agent/templates/design-tokens.json +9 -6
  355. package/.agent/workflows/acf.md +1 -0
  356. package/.agent/workflows/api-tester.md +1 -0
  357. package/.agent/workflows/audit.md +1 -0
  358. package/.agent/workflows/brainstorm.md +1 -0
  359. package/.agent/workflows/changelog.md +1 -0
  360. package/.agent/workflows/contract.md +60 -0
  361. package/.agent/workflows/create.md +1 -0
  362. package/.agent/workflows/debug.md +1 -0
  363. package/.agent/workflows/deploy.md +1 -0
  364. package/.agent/workflows/enhance.md +1 -0
  365. package/.agent/workflows/fix-ci.md +89 -0
  366. package/.agent/workflows/fix.md +1 -0
  367. package/.agent/workflows/generate.md +1 -0
  368. package/.agent/workflows/marathon.md +1 -0
  369. package/.agent/workflows/migrate.md +1 -0
  370. package/.agent/workflows/minimal.md +9 -7
  371. package/.agent/workflows/orchestrate.md +1 -0
  372. package/.agent/workflows/performance-benchmarker.md +1 -0
  373. package/.agent/workflows/pipeline.md +26 -21
  374. package/.agent/workflows/plan.md +1 -0
  375. package/.agent/workflows/preview.md +1 -0
  376. package/.agent/workflows/refactor.md +3 -2
  377. package/.agent/workflows/review-ai.md +4 -3
  378. package/.agent/workflows/review.md +1 -0
  379. package/.agent/workflows/session.md +1 -0
  380. package/.agent/workflows/status.md +1 -0
  381. package/.agent/workflows/strengthen-skills.md +1 -0
  382. package/.agent/workflows/super-prompt.md +1 -0
  383. package/.agent/workflows/swarm.md +15 -3
  384. package/.agent/workflows/test.md +8 -7
  385. package/.agent/workflows/tribunal-backend.md +3 -2
  386. package/.agent/workflows/tribunal-cicd.md +104 -0
  387. package/.agent/workflows/tribunal-database.md +1 -0
  388. package/.agent/workflows/tribunal-frontend.md +8 -6
  389. package/.agent/workflows/tribunal-full.md +2 -1
  390. package/.agent/workflows/tribunal-mobile.md +6 -5
  391. package/.agent/workflows/tribunal-performance.md +1 -0
  392. package/.agent/workflows/tribunal-speed.md +1 -0
  393. package/.agent/workflows/tribunal-ui.md +29 -21
  394. package/.agent/workflows/ui-ux-pro-max.md +19 -15
  395. package/.claude/CLAUDE.md +442 -0
  396. package/CONTRIBUTING.md +3 -3
  397. package/README.md +105 -45
  398. package/SECURITY.md +11 -11
  399. package/bin/adapter-install.js +240 -0
  400. package/bin/global-store.js +48 -0
  401. package/bin/mcp-server.js +781 -332
  402. package/bin/proxy-server.js +113 -0
  403. package/bin/spawn-agent.js +39 -0
  404. package/bin/tk-proxy.js +34 -0
  405. package/bin/tribunal-kit.js +29 -30
  406. package/bin/wrapper.js +40 -46
  407. package/dist/cli.js +6 -0
  408. package/dist/commands/case.js +2 -0
  409. package/dist/commands/contract.js +440 -0
  410. package/dist/commands/init.js +8 -51
  411. package/dist/commands/status.js +61 -30
  412. package/dist/commands/validate.js +22 -31
  413. package/dist/index.d.ts +8 -1
  414. package/dist/tui/banner.js +77 -0
  415. package/dist/tui/index.js +21 -0
  416. package/dist/tui/reviewer-grid.js +90 -0
  417. package/dist/tui/shimmer.js +91 -0
  418. package/dist/tui/theme.js +130 -0
  419. package/dist/tui/tree.js +93 -0
  420. package/dist/tui/wizard.js +148 -0
  421. package/dist/utils/helpers.js +5 -41
  422. package/package.json +33 -15
  423. package/scripts/benchmark.js +62 -86
  424. package/scripts/build-graph.js +71 -0
  425. package/scripts/changelog.js +67 -73
  426. package/scripts/fix-vbc.js +13 -15
  427. package/scripts/fix-vbc.ps1 +2 -118
  428. package/scripts/stress_benchmark.js +358 -0
  429. package/scripts/sync-version.js +71 -41
  430. package/scripts/validate-payload.js +23 -30
  431. package/scripts/visual_audit.js +23 -13
  432. package/.agent/history/snapshots/migrate_refs.js.json +0 -11
  433. package/.agent/scripts/compile_router.py +0 -112
  434. package/.agent/scripts/migrate_skills_frontmatter.py +0 -64
@@ -0,0 +1,581 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * memory_engine.js — Tribunal Kit 4-Type Taxonomy Persistent Memory Engine
4
+ * ==============================================================================
5
+ * SQLite-backed memory storage with budget-constrained recall.
6
+ *
7
+ * Memory Types:
8
+ * - semantic: Permanent facts (no expiration)
9
+ * - procedural: How-to recipes (no expiration)
10
+ * - episodic: Events with 30-day TTL
11
+ * - working: Session scratch (cleared on restart)
12
+ *
13
+ * Recall Algorithm:
14
+ * score = relevance × recency × priority
15
+ * where relevance = token overlap with query
16
+ * recency = -0.1 × days since last access
17
+ * priority = explicit priority (default: 1.0)
18
+ *
19
+ * Usage:
20
+ * const { MemoryEngine } = require('./memory_engine');
21
+ * const mem = new MemoryEngine(agentDir);
22
+ * mem.store('semantic', 'User prefers TypeScript', ['typescript', 'preference']);
23
+ * const { results } = mem.recall('typescript', 2000);
24
+ *
25
+ * Zero external dependencies beyond better-sqlite3 (already installed).
26
+ */
27
+
28
+ 'use strict';
29
+
30
+ const fs = require('fs');
31
+ const path = require('path');
32
+
33
+ // Lazy-load better-sqlite3 (optional dependency for environments without native compilation)
34
+ let Database = null;
35
+ try {
36
+ Database = require('better-sqlite3');
37
+ } catch (_err) {
38
+ // Fallback to in-memory storage if better-sqlite3 not available
39
+ console.warn('[Memory] better-sqlite3 not available, using in-memory fallback');
40
+ }
41
+
42
+ // ─── Memory Types ─────────────────────────────────────────────────────────────
43
+
44
+ const MEMORY_TYPES = {
45
+ SEMANTIC: 'semantic', // Permanent facts
46
+ PROCEDURAL: 'procedural', // How-to recipes
47
+ EPISODIC: 'episodic', // Events (30-day TTL)
48
+ WORKING: 'working', // Session scratch
49
+ };
50
+
51
+ const VALID_TYPES = Object.values(MEMORY_TYPES);
52
+
53
+ // ─── In-Memory Fallback Storage ───────────────────────────────────────────────
54
+
55
+ class InMemoryStore {
56
+ constructor() {
57
+ this.memories = new Map();
58
+ this.nextId = 1;
59
+ }
60
+
61
+ prepare(sql) {
62
+ const self = this;
63
+
64
+ // Simple SQL-like operations on in-memory Map
65
+ return {
66
+ run(...params) {
67
+ // INSERT
68
+ if (sql.includes('INSERT INTO memories')) {
69
+ const [type, content, tags, priority, expiresAt] = params;
70
+ const id = self.nextId++;
71
+ self.memories.set(id, {
72
+ id,
73
+ type,
74
+ content,
75
+ tags: JSON.parse(tags),
76
+ priority,
77
+ created_at: new Date().toISOString(),
78
+ accessed_at: new Date().toISOString(),
79
+ expires_at: expiresAt,
80
+ access_count: 0,
81
+ });
82
+ return { lastInsertRowid: id, changes: 1 };
83
+ }
84
+ // UPDATE
85
+ if (sql.includes('UPDATE memories')) {
86
+ for (const [_id, mem] of self.memories) {
87
+ mem.accessed_at = new Date().toISOString();
88
+ mem.access_count++;
89
+ }
90
+ return { changes: self.memories.size };
91
+ }
92
+ // DELETE
93
+ if (sql.includes('DELETE FROM memories')) {
94
+ const before = self.memories.size;
95
+ for (const [id, mem] of self.memories) {
96
+ if (
97
+ mem.type === 'episodic' &&
98
+ mem.expires_at &&
99
+ new Date(mem.expires_at) < new Date()
100
+ ) {
101
+ self.memories.delete(id);
102
+ }
103
+ }
104
+ return { changes: before - self.memories.size };
105
+ }
106
+ return { changes: 0 };
107
+ },
108
+
109
+ all(...params) {
110
+ const [query] = params;
111
+ const results = [];
112
+
113
+ for (const [_id, mem] of self.memories) {
114
+ // Filter expired
115
+ if (mem.expires_at && new Date(mem.expires_at) < new Date()) {
116
+ continue;
117
+ }
118
+
119
+ // Calculate score
120
+ const relevance = (
121
+ mem.content.toLowerCase().match(new RegExp(query.toLowerCase(), 'g')) || []
122
+ ).length;
123
+ const daysSinceAccess =
124
+ (Date.now() - new Date(mem.accessed_at).getTime()) / (1000 * 60 * 60 * 24);
125
+ const score = relevance * 3.0 + daysSinceAccess * -0.1 + mem.priority;
126
+
127
+ results.push({ ...mem, score });
128
+ }
129
+
130
+ return results.sort((a, b) => b.score - a.score);
131
+ },
132
+
133
+ get(...params) {
134
+ const [id] = params;
135
+ return self.memories.get(id) || undefined;
136
+ },
137
+ };
138
+ }
139
+
140
+ exec(_sql) {
141
+ // No-op for in-memory
142
+ }
143
+
144
+ close() {
145
+ this.memories.clear();
146
+ }
147
+ }
148
+
149
+ // ─── Memory Engine Class ──────────────────────────────────────────────────────
150
+
151
+ class MemoryEngine {
152
+ /**
153
+ * Initialize the Memory Engine.
154
+ * @param {string} agentDir - Path to .agent/ directory
155
+ * @param {object} options - Configuration options
156
+ */
157
+ constructor(agentDir, options = {}) {
158
+ this.agentDir = agentDir;
159
+ this.dbPath = path.join(agentDir, 'history', 'memory.db');
160
+ this.options = {
161
+ defaultTTL: 30 * 24 * 60 * 60 * 1000, // 30 days for episodic
162
+ maxWorkingMemorySize: 100, // Max working memory entries
163
+ ...options,
164
+ };
165
+
166
+ // Ensure history directory exists
167
+ const historyDir = path.dirname(this.dbPath);
168
+ if (!fs.existsSync(historyDir)) {
169
+ fs.mkdirSync(historyDir, { recursive: true });
170
+ }
171
+
172
+ // Initialize database
173
+ this.db = this.initDatabase();
174
+ this.initSchema();
175
+ }
176
+
177
+ /**
178
+ * Initialize database connection (SQLite or in-memory fallback).
179
+ */
180
+ initDatabase() {
181
+ if (Database) {
182
+ return new Database(this.dbPath);
183
+ }
184
+ return new InMemoryStore();
185
+ }
186
+
187
+ /**
188
+ * Create database schema if not exists.
189
+ */
190
+ initSchema() {
191
+ this.db.exec(`
192
+ CREATE TABLE IF NOT EXISTS memories (
193
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
194
+ type TEXT NOT NULL CHECK(type IN ('semantic', 'procedural', 'episodic', 'working')),
195
+ content TEXT NOT NULL,
196
+ tags TEXT,
197
+ priority REAL DEFAULT 1.0,
198
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP,
199
+ accessed_at TEXT DEFAULT CURRENT_TIMESTAMP,
200
+ expires_at TEXT,
201
+ access_count INTEGER DEFAULT 0
202
+ );
203
+
204
+ CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type);
205
+ CREATE INDEX IF NOT EXISTS idx_memories_accessed ON memories(accessed_at);
206
+ `);
207
+ }
208
+
209
+ /**
210
+ * Store a new memory entry.
211
+ * @param {string} type - Memory type (semantic, procedural, episodic, working)
212
+ * @param {string} content - Memory content
213
+ * @param {string[]} tags - Searchable tags
214
+ * @param {object} options - Additional options (priority, expiresIn)
215
+ * @returns {{ id: number, type: string, token_estimate: number }}
216
+ */
217
+ store(type, content, tags = [], options = {}) {
218
+ // Validate type
219
+ if (!VALID_TYPES.includes(type)) {
220
+ throw new Error(`Invalid memory type: "${type}". Must be one of: ${VALID_TYPES.join(', ')}`);
221
+ }
222
+
223
+ // Validate content
224
+ if (!content || typeof content !== 'string') {
225
+ throw new Error('Memory content must be a non-empty string');
226
+ }
227
+
228
+ // Calculate expiration
229
+ let expiresAt = null;
230
+ if (type === MEMORY_TYPES.EPISODIC) {
231
+ const expiresIn = options.expiresIn || this.options.defaultTTL;
232
+ expiresAt = new Date(Date.now() + expiresIn).toISOString();
233
+ }
234
+
235
+ // Insert into database
236
+ const stmt = this.db.prepare(`
237
+ INSERT INTO memories (type, content, tags, priority, expires_at)
238
+ VALUES (?, ?, ?, ?, ?)
239
+ `);
240
+
241
+ const result = stmt.run(
242
+ type,
243
+ content,
244
+ JSON.stringify(tags),
245
+ options.priority || 1.0,
246
+ expiresAt,
247
+ );
248
+
249
+ return {
250
+ id: result.lastInsertRowid,
251
+ type,
252
+ token_estimate: this.estimateTokens(content),
253
+ };
254
+ }
255
+
256
+ /**
257
+ * Recall memories matching a query, within token budget.
258
+ * @param {string} query - Search query
259
+ * @param {number} budget - Maximum token budget
260
+ * @returns {{ results: array, tokens_used: number }}
261
+ */
262
+ recall(query, budget = 2000) {
263
+ const _tokens = this.tokenize(query);
264
+
265
+ // Score by relevance × recency × priority
266
+ const memories = this.db
267
+ .prepare(
268
+ `
269
+ SELECT *, (
270
+ (length(content) - length(replace(lower(content), lower(?), ''))) / length(?) * 3.0
271
+ + (julianday('now') - julianday(accessed_at)) * -0.1
272
+ + priority
273
+ ) as score
274
+ FROM memories
275
+ WHERE expires_at IS NULL OR expires_at > datetime('now')
276
+ ORDER BY score DESC
277
+ `,
278
+ )
279
+ .all(query, query);
280
+
281
+ // Fit within budget
282
+ const selected = [];
283
+ let usedTokens = 0;
284
+
285
+ for (const mem of memories) {
286
+ const tokens = this.estimateTokens(mem.content);
287
+ if (usedTokens + tokens <= budget) {
288
+ selected.push({
289
+ id: mem.id,
290
+ memory_type: mem.type,
291
+ content: mem.content,
292
+ tags: mem.tags ? JSON.parse(mem.tags) : [],
293
+ priority: mem.priority,
294
+ score: mem.score,
295
+ });
296
+ usedTokens += tokens;
297
+
298
+ // Update access stats
299
+ this.db
300
+ .prepare(
301
+ `
302
+ UPDATE memories
303
+ SET accessed_at = CURRENT_TIMESTAMP, access_count = access_count + 1
304
+ WHERE id = ?
305
+ `,
306
+ )
307
+ .run(mem.id);
308
+ }
309
+ }
310
+
311
+ return { results: selected, tokens_used: usedTokens };
312
+ }
313
+
314
+ /**
315
+ * Get a specific memory by ID.
316
+ * @param {number} id - Memory ID
317
+ * @returns {object|null}
318
+ */
319
+ get(id) {
320
+ const mem = this.db
321
+ .prepare(
322
+ `
323
+ SELECT * FROM memories WHERE id = ?
324
+ `,
325
+ )
326
+ .get(id);
327
+
328
+ if (!mem) return null;
329
+
330
+ return {
331
+ id: mem.id,
332
+ memory_type: mem.type,
333
+ content: mem.content,
334
+ tags: mem.tags ? JSON.parse(mem.tags) : [],
335
+ priority: mem.priority,
336
+ created_at: mem.created_at,
337
+ accessed_at: mem.accessed_at,
338
+ access_count: mem.access_count,
339
+ expires_at: mem.expires_at,
340
+ };
341
+ }
342
+
343
+ /**
344
+ * Delete a memory by ID.
345
+ * @param {number} id - Memory ID
346
+ * @returns {boolean} True if deleted
347
+ */
348
+ delete(id) {
349
+ const result = this.db
350
+ .prepare(
351
+ `
352
+ DELETE FROM memories WHERE id = ?
353
+ `,
354
+ )
355
+ .run(id);
356
+
357
+ return result.changes > 0;
358
+ }
359
+
360
+ /**
361
+ * Clear all working memories (session scratch).
362
+ */
363
+ clearWorking() {
364
+ this.db
365
+ .prepare(
366
+ `
367
+ DELETE FROM memories WHERE type = 'working'
368
+ `,
369
+ )
370
+ .run();
371
+ }
372
+
373
+ /**
374
+ * Auto-expire episodic memories.
375
+ */
376
+ expire() {
377
+ this.db
378
+ .prepare(
379
+ `
380
+ DELETE FROM memories
381
+ WHERE type = 'episodic' AND expires_at < datetime('now')
382
+ `,
383
+ )
384
+ .run();
385
+ }
386
+
387
+ /**
388
+ * Get memory statistics.
389
+ */
390
+ stats() {
391
+ const stats = this.db
392
+ .prepare(
393
+ `
394
+ SELECT
395
+ type,
396
+ COUNT(*) as count,
397
+ SUM(length(content)) as total_chars
398
+ FROM memories
399
+ WHERE expires_at IS NULL OR expires_at > datetime('now')
400
+ GROUP BY type
401
+ `,
402
+ )
403
+ .all();
404
+
405
+ const result = {
406
+ total: 0,
407
+ by_type: {},
408
+ };
409
+
410
+ for (const stat of stats) {
411
+ result.total += stat.count;
412
+ result.by_type[stat.type] = {
413
+ count: stat.count,
414
+ total_chars: stat.total_chars,
415
+ estimated_tokens: Math.ceil(stat.total_chars / 4),
416
+ };
417
+ }
418
+
419
+ return result;
420
+ }
421
+
422
+ /**
423
+ * Close database connection.
424
+ */
425
+ close() {
426
+ if (this.db && this.db.close) {
427
+ this.db.close();
428
+ }
429
+ }
430
+
431
+ // ─── Helpers ───────────────────────────────────────────────────────────────
432
+
433
+ /**
434
+ * Estimate token count for text.
435
+ * Uses rough approximation: 1 token ≈ 4 characters.
436
+ */
437
+ estimateTokens(text) {
438
+ if (!text) return 0;
439
+ return Math.ceil(text.length / 4);
440
+ }
441
+
442
+ /**
443
+ * Tokenize text into lowercase words.
444
+ */
445
+ tokenize(text) {
446
+ if (!text) return [];
447
+ return (text.match(/\b[a-zA-Z_][a-zA-Z0-9_]{2,}\b/g) || []).map(t => t.toLowerCase());
448
+ }
449
+ }
450
+
451
+ // ─── Module Exports ────────────────────────────────────────────────────────────
452
+
453
+ module.exports = {
454
+ MemoryEngine,
455
+ MEMORY_TYPES,
456
+ VALID_TYPES,
457
+ };
458
+
459
+ // ─── CLI Entry Point ───────────────────────────────────────────────────────────
460
+
461
+ if (require.main === module) {
462
+ const args = process.argv.slice(2);
463
+
464
+ if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
465
+ console.log(`
466
+ \x1b[1mmemory_engine.js\x1b[0m — Tribunal Kit 4-Type Taxonomy Persistent Memory Engine
467
+
468
+ \x1b[1mUsage:\x1b[0m
469
+ node .agent/scripts/memory_engine.js store <type> <content> [--tags tag1,tag2]
470
+ node .agent/scripts/memory_engine.js recall <query> [--budget 2000]
471
+ node .agent/scripts/memory_engine.js get <id>
472
+ node .agent/scripts/memory_engine.js delete <id>
473
+ node .agent/scripts/memory_engine.js stats
474
+ node .agent/scripts/memory_engine.js expire
475
+
476
+ \x1b[1mMemory Types:\x1b[0m
477
+ semantic — Permanent facts (no expiration)
478
+ procedural — How-to recipes (no expiration)
479
+ episodic — Events with 30-day TTL
480
+ working — Session scratch (cleared on restart)
481
+
482
+ \x1b[1mExamples:\x1b[0m
483
+ node .agent/scripts/memory_engine.js store semantic "User prefers TypeScript strict mode" --tags typescript,preference
484
+ node .agent/scripts/memory_engine.js recall "typescript" --budget 1000
485
+ node .agent/scripts/memory_engine.js stats
486
+ `);
487
+ process.exit(0);
488
+ }
489
+
490
+ const { findAgentDir } = require('./_utils');
491
+ const agentDir = findAgentDir() || path.resolve(__dirname, '..');
492
+
493
+ const mem = new MemoryEngine(agentDir);
494
+
495
+ const command = args[0];
496
+
497
+ try {
498
+ switch (command) {
499
+ case 'store': {
500
+ const type = args[1];
501
+ const content = args[2];
502
+ const tagsIdx = args.indexOf('--tags');
503
+ const tags =
504
+ tagsIdx !== -1 && args[tagsIdx + 1]
505
+ ? args[tagsIdx + 1].split(',').map(t => t.trim())
506
+ : [];
507
+
508
+ const result = mem.store(type, content, tags);
509
+ console.log(
510
+ `\x1b[32m✓\x1b[0m Memory stored: #${result.id} (${result.type}, ~${result.token_estimate} tokens)`,
511
+ );
512
+ break;
513
+ }
514
+
515
+ case 'recall': {
516
+ const query = args[1];
517
+ const budgetIdx = args.indexOf('--budget');
518
+ const budget =
519
+ budgetIdx !== -1 && args[budgetIdx + 1] ? parseInt(args[budgetIdx + 1], 10) : 2000;
520
+
521
+ const { results, tokens_used } = mem.recall(query, budget);
522
+ console.log(
523
+ `\n## Memory Recall (${results.length} results, ~${tokens_used}/${budget} tokens)\n`,
524
+ );
525
+ for (const entry of results) {
526
+ console.log(`- **[${entry.memory_type.toUpperCase()}]** #${entry.id}: ${entry.content}`);
527
+ if (entry.tags.length > 0) console.log(` _(${entry.tags.join(', ')})_`);
528
+ }
529
+ break;
530
+ }
531
+
532
+ case 'get': {
533
+ const id = parseInt(args[1], 10);
534
+ const result = mem.get(id);
535
+ if (!result) {
536
+ console.error(`\x1b[31m✖ Memory #${id} not found\x1b[0m`);
537
+ process.exit(1);
538
+ }
539
+ console.log(JSON.stringify(result, null, 2));
540
+ break;
541
+ }
542
+
543
+ case 'delete': {
544
+ const id = parseInt(args[1], 10);
545
+ const deleted = mem.delete(id);
546
+ if (deleted) {
547
+ console.log(`\x1b[32m✓\x1b[0m Memory #${id} deleted`);
548
+ } else {
549
+ console.error(`\x1b[31m✖ Memory #${id} not found\x1b[0m`);
550
+ process.exit(1);
551
+ }
552
+ break;
553
+ }
554
+
555
+ case 'stats': {
556
+ const stats = mem.stats();
557
+ console.log(`\n## Memory Statistics\n`);
558
+ console.log(`Total memories: ${stats.total}`);
559
+ for (const [type, data] of Object.entries(stats.by_type)) {
560
+ console.log(` ${type}: ${data.count} (~${data.estimated_tokens} tokens)`);
561
+ }
562
+ break;
563
+ }
564
+
565
+ case 'expire': {
566
+ mem.expire();
567
+ console.log(`\x1b[32m✓\x1b[0m Expired episodic memories cleaned up`);
568
+ break;
569
+ }
570
+
571
+ default:
572
+ console.error(`\x1b[31m✖ Unknown command: ${command}\x1b[0m`);
573
+ process.exit(1);
574
+ }
575
+ } catch (err) {
576
+ console.error(`\x1b[31m✖ Error: ${err.message}\x1b[0m`);
577
+ process.exit(1);
578
+ } finally {
579
+ mem.close();
580
+ }
581
+ }
@@ -4,74 +4,70 @@
4
4
  * Minifies markdown documentation in the .agent directory to save tokens.
5
5
  */
6
6
 
7
- "use strict";
7
+ 'use strict';
8
8
 
9
- const fs = require("fs");
10
- const path = require("path");
9
+ const fs = require('fs');
10
+ const path = require('path');
11
11
 
12
12
  function minifyMarkdown(filePath) {
13
- let content = fs.readFileSync(filePath, "utf8");
13
+ let content = fs.readFileSync(filePath, 'utf8');
14
14
  const originalLen = content.length;
15
15
 
16
16
  // 1. Strip repetitive Output Format templates
17
- content = content.replace(/## Output Format\n\n```[\s\S]*?```\n/g, "");
17
+ content = content.replace(/## Output Format\n\n```[\s\S]*?```\n/g, '');
18
18
 
19
19
  // 2. Convert bloated Cross-Workflow Navigation tables to dense YAML lists
20
20
  content = content.replace(
21
21
  /## Cross-Workflow Navigation\n\n\|.*?\|[\s\S]*?(?=\n## |\Z)/g,
22
- (match) => {
23
- const lines = match.trim().split("\n");
22
+ match => {
23
+ const lines = match.trim().split('\n');
24
24
  const out = [];
25
25
  for (const line of lines) {
26
- if (
27
- line.startsWith("|") &&
28
- !line.startsWith("|:") &&
29
- !line.startsWith("| After")
30
- ) {
26
+ if (line.startsWith('|') && !line.startsWith('|:') && !line.startsWith('| After')) {
31
27
  const parts = line
32
- .split("|")
33
- .map((p) => p.trim())
28
+ .split('|')
29
+ .map(p => p.trim())
34
30
  .filter(Boolean);
35
31
  if (parts.length >= 2) {
36
32
  out.push(`- ${parts[0]} -> ${parts[1]}`);
37
33
  }
38
34
  }
39
35
  }
40
- return "## Cross-Workflow Navigation\n" + out.join("\n") + "\n";
36
+ return '## Cross-Workflow Navigation\n' + out.join('\n') + '\n';
41
37
  },
42
38
  );
43
39
 
44
40
  // 3. Collapse multiple empty lines into a single one
45
- content = content.replace(/\n{3,}/g, "\n\n");
41
+ content = content.replace(/\n{3,}/g, '\n\n');
46
42
 
47
43
  // 4. Remove padding from remaining tables to save space tokens
48
- content = content.replace(/^\|.+|$/gm, (match) => {
44
+ content = content.replace(/^\|.+|$/gm, match => {
49
45
  let line = match;
50
46
  // remove spaces around |
51
- line = line.replace(/\s+\|\s+/g, "|");
52
- line = line.replace(/\|\s+/g, "|");
53
- line = line.replace(/\s+\|/g, "|");
47
+ line = line.replace(/\s+\|\s+/g, '|');
48
+ line = line.replace(/\|\s+/g, '|');
49
+ line = line.replace(/\s+\|/g, '|');
54
50
  return line;
55
51
  });
56
52
 
57
53
  // 5. Remove conversational blockquotes > if they don't contain WARNING/NOTE/IMPORTANT
58
- content = content.replace(/^>.*$/gm, (match) => {
54
+ content = content.replace(/^>.*$/gm, match => {
59
55
  if (
60
- match.includes("⚠️") ||
61
- match.includes("WARNING") ||
62
- match.includes("CRITICAL") ||
63
- match.includes("!")
56
+ match.includes('⚠️') ||
57
+ match.includes('WARNING') ||
58
+ match.includes('CRITICAL') ||
59
+ match.includes('!')
64
60
  ) {
65
61
  return match;
66
62
  }
67
- return match.replace(/> /g, "").replace(/>/g, "");
63
+ return match.replace(/> /g, '').replace(/>/g, '');
68
64
  });
69
65
 
70
66
  // 6. Dense Examples (convert ❌ Bad: and ✅ Good: blocks to single lines)
71
- content = content.replace(/\n❌ Bad:/g, "");
72
- content = content.replace(/\n✅ Good:/g, "");
67
+ content = content.replace(/\n❌ Bad:/g, '');
68
+ content = content.replace(/\n✅ Good:/g, '');
73
69
 
74
- fs.writeFileSync(filePath, content, "utf8");
70
+ fs.writeFileSync(filePath, content, 'utf8');
75
71
  return [originalLen, content.length];
76
72
  }
77
73
 
@@ -89,12 +85,12 @@ function walkDir(dir, callback) {
89
85
  }
90
86
 
91
87
  function main() {
92
- const agentDir = path.join(".agent");
88
+ const agentDir = path.join('.agent');
93
89
  let totalOriginal = 0;
94
90
  let totalNew = 0;
95
91
 
96
- walkDir(agentDir, (file) => {
97
- if (file.endsWith(".md")) {
92
+ walkDir(agentDir, file => {
93
+ if (file.endsWith('.md')) {
98
94
  const [orig, newLen] = minifyMarkdown(file);
99
95
  totalOriginal += orig;
100
96
  totalNew += newLen;
@@ -104,7 +100,7 @@ function main() {
104
100
  const saved = totalOriginal - totalNew;
105
101
  const percent = totalOriginal > 0 ? (saved / totalOriginal) * 100 : 0;
106
102
 
107
- console.log("Minification Complete.");
103
+ console.log('Minification Complete.');
108
104
  console.log(`Original size: ${totalOriginal} bytes`);
109
105
  console.log(`New size: ${totalNew} bytes`);
110
106
  console.log(`Saved: ${saved} bytes (${percent.toFixed(1)}%)`);