kenaz 0.3.2 → 0.3.3

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 (390) hide show
  1. package/core/.agents/skills/typesafe-ai/LICENSE +21 -21
  2. package/core/.agents/skills/typesafe-ai/SKILL.md +149 -149
  3. package/core/.claude/commands/Ansuz.md +19 -30
  4. package/core/.claude/hooks/_ansuz-conversation.js +1 -0
  5. package/core/.claude/hooks/_ansuz-conversation.test.js +6 -0
  6. package/core/.claude/hooks/_run-user-prompt.js +0 -4
  7. package/core/.claude/hooks/_run-user-prompt.test.js +2 -3
  8. package/core/.claude/hooks/session-init.ps1 +49 -49
  9. package/core/.claude/settings.json +0 -37
  10. package/core/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -26
  11. package/core/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -97
  12. package/core/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -101
  13. package/core/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -31
  14. package/core/.claude/skills/ui-ux-pro-max/data/products.csv +96 -96
  15. package/core/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  16. package/core/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  17. package/core/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  18. package/core/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  19. package/core/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  20. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  21. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  22. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  23. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  24. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  25. package/core/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  26. package/core/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  27. package/core/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  28. package/core/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  29. package/core/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -68
  30. package/core/.claude/skills/ui-ux-pro-max/data/typography.csv +57 -57
  31. package/core/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  32. package/core/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  33. package/core/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  34. package/core/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -253
  35. package/core/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  36. package/core/.claude/skills/ui-ux-pro-max/scripts/search.py +106 -106
  37. package/core/.collaboration/core/task-api.js +3 -8
  38. package/core/.formation/tests/hello.txt +2 -2
  39. package/core/.formation/tools/prompt.js +58 -5
  40. package/core/.formation/tools/prompt.test.js +29 -0
  41. package/core/.kenaz/claude-hooks-manifest.json +16 -16
  42. package/core/.kenaz/knowledge/ladybug_2c51da1e_shadow_file_frame_group.patch +163 -163
  43. package/core/.kenaz/knowledge/ladybug_30cf85690e_shadow_page_read_during_checkpoint.patch +393 -393
  44. package/core/.kenaz/knowledge/ladybug_7a17858d3a_node_group_delete_lock.patch +102 -102
  45. package/core/.kenaz/knowledge/ladybug_926a0ba1_column_checkpoint.patch +412 -412
  46. package/core/.kenaz/knowledge/ladybug_a346c4c4b6_pk_index_header_pages.patch +144 -144
  47. package/core/.kenaz/knowledge/ladybug_ba5f38815b_csr_node_group.patch +86 -86
  48. package/core/.kenaz/muninn_episode_write.ps1 +17 -17
  49. package/core/.kenaz/specialist/field_report_watermark.json +1 -1
  50. package/core/.kenaz/specialist/memory_guard_fired.json +1 -1
  51. package/core/.kenaz/specialist/memory_guard_trigger_cache.json +1 -1
  52. package/core/.kenaz/specialist/t1777_probe.txt +1 -1
  53. package/core/.matrix/index.matrix +5 -5
  54. package/core/.specialist/Ansuz/RULES.md +6 -10
  55. package/core/.specialist/tools/__tests__/task-2218-boot-session-id.test.js +17 -1
  56. package/core/.specialist/tools/__tests__/task-2222-session-identity-interleave.test.js +17 -1
  57. package/core/.specialist/tools/__tests__/task-2254-handoff-archive-contract.test.js +6 -5
  58. package/core/.specialist/tools/ansuz-boot-fast.js +44 -100
  59. package/core/.specialist/tools/ansuz-boot-fast.test.js +45 -1
  60. package/core/KENAZ_CORE_VERSION +1 -1
  61. package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +355 -355
  62. package/core/dev/JEV_INTEGRATION_PLAN.md +189 -189
  63. package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +13 -13
  64. package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +9 -9
  65. package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +14 -14
  66. package/core/dev/design/matrix_v2_EXAMPLE.matrix +67 -67
  67. package/core/dev/jev-eval/ACTIVE_CORRECTION.md +52 -52
  68. package/core/dev/jev-eval/CONTEXT_REVIEW.md +31 -31
  69. package/core/dev/jev-eval/EVALUATION_STATUS.md +39 -39
  70. package/core/dev/jev-eval/HISTORICAL_CORPUS.md +33 -33
  71. package/core/dev/jev-eval/README.md +99 -99
  72. package/core/dev/jev-eval/THALAMUS_RANKING.md +58 -58
  73. package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +32 -32
  74. package/core/dev/jev-eval/reports/context-review-2026-09-20.json +48 -48
  75. package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +52 -52
  76. package/core/dev/pipeline/SELF_ENHANCEMENT_STATUS.json.bak +47 -47
  77. package/core/dev/pipeline/tasks/.gitkeep +1 -1
  78. package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +27 -27
  79. package/core/dev/plans/ANSUZ_SLIM_PLAN.md +68 -0
  80. package/core/dev/scripts/init_git.sh +0 -0
  81. package/core/dev/scripts/init_project.sh +0 -0
  82. package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +536 -536
  83. package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +1978 -1978
  84. package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +140 -140
  85. package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +173 -173
  86. package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +168 -168
  87. package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +126 -126
  88. package/core/dev/scripts/multi_agent_scheduler.sh +0 -0
  89. package/core/dev/scripts/run_once.sh +0 -0
  90. package/core/dev/scripts/setup_mcp.sh +0 -0
  91. package/core/dev/scripts/setup_rag.sh +0 -0
  92. package/core/dev/scripts/start_dev_agent.sh +0 -0
  93. package/core/dev/scripts/start_multi_agent.sh +0 -0
  94. package/core/dev/scripts/sync_task_queue.sh +0 -0
  95. package/core/k-cli/dist/alaya/run.js +91 -0
  96. package/core/k-cli/dist/core/output.js +24 -0
  97. package/core/k-cli/dist/core/process.js +38 -0
  98. package/core/k-cli/dist/core/project.js +80 -0
  99. package/core/k-cli/dist/core/spawn.js +268 -0
  100. package/core/k-cli/dist/core/types.js +2 -0
  101. package/core/k-cli/dist/dashboard/update.js +53 -0
  102. package/core/k-cli/dist/dashboard/version.js +20 -0
  103. package/core/k-cli/dist/dispatch/run.js +241 -0
  104. package/core/k-cli/dist/dispatch/status.js +103 -0
  105. package/core/k-cli/dist/index.js +283 -0
  106. package/core/k-cli/dist/project/initialize.js +301 -0
  107. package/core/k-cli/dist/project/install.js +89 -0
  108. package/core/k-cli/dist/project/status.js +138 -0
  109. package/core/k-cli/dist/specialist/list.js +100 -0
  110. package/core/k-cli/dist/specialist/run.js +93 -0
  111. package/core/k-cli/dist/task/create.js +194 -0
  112. package/core/k-cli/dist/task/delete.js +98 -0
  113. package/core/k-cli/dist/task/get.js +55 -0
  114. package/core/k-cli/dist/task/list.js +58 -0
  115. package/core/k-cli/dist/task/submit.js +156 -0
  116. package/core/k-cli/dist/ygg/run.js +51 -0
  117. package/core/k-cli/node_modules/.bin/yaml +16 -0
  118. package/core/k-cli/node_modules/.bin/yaml.cmd +17 -0
  119. package/core/k-cli/node_modules/.bin/yaml.ps1 +28 -0
  120. package/core/k-cli/node_modules/.package-lock.json +23 -0
  121. package/core/k-cli/node_modules/yaml/LICENSE +13 -0
  122. package/core/k-cli/node_modules/yaml/README.md +172 -0
  123. package/core/k-cli/node_modules/yaml/bin.mjs +11 -0
  124. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  125. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  126. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  127. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  128. package/core/k-cli/node_modules/yaml/browser/dist/compose/composer.js +217 -0
  129. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  130. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  131. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  132. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  133. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  134. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +223 -0
  135. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  136. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  137. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  138. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  139. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  140. package/core/k-cli/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  141. package/core/k-cli/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  142. package/core/k-cli/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  143. package/core/k-cli/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  144. package/core/k-cli/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  145. package/core/k-cli/node_modules/yaml/browser/dist/errors.js +57 -0
  146. package/core/k-cli/node_modules/yaml/browser/dist/index.js +17 -0
  147. package/core/k-cli/node_modules/yaml/browser/dist/log.js +11 -0
  148. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Alias.js +114 -0
  149. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  150. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  151. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  152. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  153. package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  154. package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  155. package/core/k-cli/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  156. package/core/k-cli/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  157. package/core/k-cli/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  158. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  159. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  160. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  161. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  162. package/core/k-cli/node_modules/yaml/browser/dist/parse/lexer.js +717 -0
  163. package/core/k-cli/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  164. package/core/k-cli/node_modules/yaml/browser/dist/parse/parser.js +967 -0
  165. package/core/k-cli/node_modules/yaml/browser/dist/public-api.js +102 -0
  166. package/core/k-cli/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  167. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  168. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  169. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  170. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  171. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  172. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  173. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  174. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  175. package/core/k-cli/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  176. package/core/k-cli/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  177. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  178. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  179. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  180. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  181. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +64 -0
  182. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  183. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  184. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  185. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  186. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  187. package/core/k-cli/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  188. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  189. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  190. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  191. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  192. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +24 -0
  193. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  194. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  195. package/core/k-cli/node_modules/yaml/browser/dist/util.js +11 -0
  196. package/core/k-cli/node_modules/yaml/browser/dist/visit.js +233 -0
  197. package/core/k-cli/node_modules/yaml/browser/index.js +5 -0
  198. package/core/k-cli/node_modules/yaml/browser/package.json +3 -0
  199. package/core/k-cli/node_modules/yaml/dist/cli.d.ts +8 -0
  200. package/core/k-cli/node_modules/yaml/dist/cli.mjs +201 -0
  201. package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  202. package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  203. package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  204. package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  205. package/core/k-cli/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  206. package/core/k-cli/node_modules/yaml/dist/compose/compose-node.js +112 -0
  207. package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  208. package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  209. package/core/k-cli/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  210. package/core/k-cli/node_modules/yaml/dist/compose/composer.js +222 -0
  211. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  212. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  213. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  214. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  215. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  216. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  217. package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  218. package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  219. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  220. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  221. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  222. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.js +225 -0
  223. package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  224. package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  225. package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  226. package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  227. package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  228. package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  229. package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  230. package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  231. package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  232. package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  233. package/core/k-cli/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  234. package/core/k-cli/node_modules/yaml/dist/doc/Document.js +337 -0
  235. package/core/k-cli/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  236. package/core/k-cli/node_modules/yaml/dist/doc/anchors.js +76 -0
  237. package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  238. package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  239. package/core/k-cli/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  240. package/core/k-cli/node_modules/yaml/dist/doc/createNode.js +90 -0
  241. package/core/k-cli/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  242. package/core/k-cli/node_modules/yaml/dist/doc/directives.js +178 -0
  243. package/core/k-cli/node_modules/yaml/dist/errors.d.ts +21 -0
  244. package/core/k-cli/node_modules/yaml/dist/errors.js +62 -0
  245. package/core/k-cli/node_modules/yaml/dist/index.d.ts +25 -0
  246. package/core/k-cli/node_modules/yaml/dist/index.js +50 -0
  247. package/core/k-cli/node_modules/yaml/dist/log.d.ts +3 -0
  248. package/core/k-cli/node_modules/yaml/dist/log.js +19 -0
  249. package/core/k-cli/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  250. package/core/k-cli/node_modules/yaml/dist/nodes/Alias.js +116 -0
  251. package/core/k-cli/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  252. package/core/k-cli/node_modules/yaml/dist/nodes/Collection.js +151 -0
  253. package/core/k-cli/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  254. package/core/k-cli/node_modules/yaml/dist/nodes/Node.js +40 -0
  255. package/core/k-cli/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  256. package/core/k-cli/node_modules/yaml/dist/nodes/Pair.js +39 -0
  257. package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.d.ts +43 -0
  258. package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  259. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  260. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  261. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  262. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  263. package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  264. package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  265. package/core/k-cli/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  266. package/core/k-cli/node_modules/yaml/dist/nodes/identity.js +53 -0
  267. package/core/k-cli/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  268. package/core/k-cli/node_modules/yaml/dist/nodes/toJS.js +39 -0
  269. package/core/k-cli/node_modules/yaml/dist/options.d.ts +350 -0
  270. package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  271. package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  272. package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  273. package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  274. package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  275. package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  276. package/core/k-cli/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  277. package/core/k-cli/node_modules/yaml/dist/parse/cst.js +112 -0
  278. package/core/k-cli/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  279. package/core/k-cli/node_modules/yaml/dist/parse/lexer.js +719 -0
  280. package/core/k-cli/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  281. package/core/k-cli/node_modules/yaml/dist/parse/line-counter.js +41 -0
  282. package/core/k-cli/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  283. package/core/k-cli/node_modules/yaml/dist/parse/parser.js +972 -0
  284. package/core/k-cli/node_modules/yaml/dist/public-api.d.ts +44 -0
  285. package/core/k-cli/node_modules/yaml/dist/public-api.js +107 -0
  286. package/core/k-cli/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  287. package/core/k-cli/node_modules/yaml/dist/schema/Schema.js +39 -0
  288. package/core/k-cli/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  289. package/core/k-cli/node_modules/yaml/dist/schema/common/map.js +19 -0
  290. package/core/k-cli/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  291. package/core/k-cli/node_modules/yaml/dist/schema/common/null.js +17 -0
  292. package/core/k-cli/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  293. package/core/k-cli/node_modules/yaml/dist/schema/common/seq.js +19 -0
  294. package/core/k-cli/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  295. package/core/k-cli/node_modules/yaml/dist/schema/common/string.js +16 -0
  296. package/core/k-cli/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  297. package/core/k-cli/node_modules/yaml/dist/schema/core/bool.js +21 -0
  298. package/core/k-cli/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  299. package/core/k-cli/node_modules/yaml/dist/schema/core/float.js +47 -0
  300. package/core/k-cli/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  301. package/core/k-cli/node_modules/yaml/dist/schema/core/int.js +42 -0
  302. package/core/k-cli/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  303. package/core/k-cli/node_modules/yaml/dist/schema/core/schema.js +25 -0
  304. package/core/k-cli/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  305. package/core/k-cli/node_modules/yaml/dist/schema/json/schema.js +64 -0
  306. package/core/k-cli/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  307. package/core/k-cli/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  308. package/core/k-cli/node_modules/yaml/dist/schema/tags.js +99 -0
  309. package/core/k-cli/node_modules/yaml/dist/schema/types.d.ts +92 -0
  310. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  311. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  312. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  313. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  314. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  315. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  316. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  317. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  318. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  319. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.js +68 -0
  320. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  321. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  322. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  323. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  324. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  325. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  326. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  327. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  328. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  329. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  330. package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  331. package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  332. package/core/k-cli/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  333. package/core/k-cli/node_modules/yaml/dist/stringify/stringify.js +132 -0
  334. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  335. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  336. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  337. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  338. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  339. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  340. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  341. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.js +26 -0
  342. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  343. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  344. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  345. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  346. package/core/k-cli/node_modules/yaml/dist/test-events.d.ts +4 -0
  347. package/core/k-cli/node_modules/yaml/dist/test-events.js +134 -0
  348. package/core/k-cli/node_modules/yaml/dist/util.d.ts +16 -0
  349. package/core/k-cli/node_modules/yaml/dist/util.js +28 -0
  350. package/core/k-cli/node_modules/yaml/dist/visit.d.ts +102 -0
  351. package/core/k-cli/node_modules/yaml/dist/visit.js +236 -0
  352. package/core/k-cli/node_modules/yaml/package.json +97 -0
  353. package/core/k-cli/node_modules/yaml/util.js +2 -0
  354. package/core/plugins/kenaz/commands/Ansuz.md +19 -30
  355. package/core/plugins/kenaz/hooks/hooks.json +1 -5
  356. package/core/plugins/kenaz/hooks/kenaz-hook.js +0 -4
  357. package/core/plugins/kenaz/scripts/kenaz.test.js +1 -1
  358. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/charts.csv +26 -26
  359. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/colors.csv +97 -97
  360. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/icons.csv +101 -101
  361. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/landing.csv +31 -31
  362. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/products.csv +96 -96
  363. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  364. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  365. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  366. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  367. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  368. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  369. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  370. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  371. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  372. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  373. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  374. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  375. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  376. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  377. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/styles.csv +68 -68
  378. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/typography.csv +57 -57
  379. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  380. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  381. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  382. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/core.py +253 -253
  383. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  384. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/search.py +106 -106
  385. package/lib/cli.js +36 -2
  386. package/lib/cli.test.js +24 -0
  387. package/lib/dashboard.js +10 -0
  388. package/package.json +6 -6
  389. package/core/.specialist/tools/__tests__/task-1863-boot-lease-reuse.test.js +0 -99
  390. package/core/.specialist/tools/__tests__/task-1977-banner-cap.test.js +0 -129
@@ -1,168 +1,168 @@
1
- /**
2
- * stats command - Display statistics about .matrix file
3
- */
4
-
5
- import chalk from 'chalk';
6
- import { FileHandler } from '../utils/file-handler';
7
- import { MatrixParser } from '../../parser';
8
- import { TagIndexer } from '../../indexer/tag-indexer';
9
- import type { DataRecord } from '../../../types';
10
-
11
- interface StatsOptions {
12
- verbose?: boolean;
13
- }
14
-
15
- export async function statsCommand(
16
- file: string,
17
- options: StatsOptions = {}
18
- ): Promise<void> {
19
- const filePath = FileHandler.ensureExtension(file);
20
-
21
- // Read file
22
- const content = FileHandler.read(filePath);
23
- if (!content) {
24
- process.exit(1);
25
- }
26
-
27
- // Parse file
28
- const parser = new MatrixParser();
29
- const result = parser.parse(content);
30
-
31
- if (!result.success) {
32
- console.error(chalk.red('Failed to parse file'));
33
- process.exit(1);
34
- }
35
-
36
- const matrixFile = result.data!;
37
-
38
- // Build tag index
39
- const indexer = new TagIndexer();
40
- indexer.buildIndex(matrixFile);
41
-
42
- console.log(chalk.bold.cyan('\nšŸ“Š Matrix File Statistics\n'));
43
- console.log(chalk.gray(`File: ${filePath}\n`));
44
-
45
- // 1. Overview
46
- console.log(chalk.bold('Overview:'));
47
- console.log(` Total Rules: ${chalk.green(matrixFile.data.records.length)}`);
48
- console.log(` Version: ${chalk.yellow(matrixFile.meta.v)}`);
49
- console.log(` Category: ${chalk.yellow(matrixFile.meta.cat)}\n`);
50
-
51
- // 2. Priority Distribution
52
- const priorityStats = groupBy(matrixFile.data.records, 'p');
53
- console.log(chalk.bold('Priority Distribution:'));
54
- printDistribution(priorityStats, ['P0', 'P1', 'P2', 'P3']);
55
-
56
- // 3. Source Distribution
57
- const sourceStats = groupBy(matrixFile.rules, 'source');
58
- console.log(chalk.bold('\nSource Distribution:'));
59
- printDistribution(sourceStats);
60
-
61
- // 4. Category Distribution
62
- const categoryStats = groupBy(matrixFile.rules, 'category');
63
- if (Object.keys(categoryStats).length > 0) {
64
- console.log(chalk.bold('\nCategory Distribution:'));
65
- printDistribution(categoryStats);
66
- }
67
-
68
- // 5. Status Distribution
69
- const statusStats = groupBy(matrixFile.rules, 'status');
70
- if (Object.keys(statusStats).length > 0) {
71
- console.log(chalk.bold('\nStatus Distribution:'));
72
- printDistribution(statusStats, [
73
- 'pending',
74
- 'in_progress',
75
- 'completed',
76
- 'blocked',
77
- 'cancelled',
78
- ]);
79
- }
80
-
81
- // 6. Domain Distribution
82
- const domainStats = groupBy(matrixFile.rules, 'domain');
83
- if (Object.keys(domainStats).length > 0) {
84
- console.log(chalk.bold('\nDomain Distribution:'));
85
- printDistribution(domainStats);
86
- }
87
-
88
- // 7. Tag Statistics
89
- const tagStats = indexer.getTagStats();
90
- if (tagStats.length > 0) {
91
- console.log(chalk.bold('\nTop Tags:'));
92
- const topTags = tagStats.slice(0, 10);
93
- for (const stat of topTags) {
94
- console.log(` ${chalk.cyan(stat.tag)}: ${chalk.green(stat.count)}`);
95
- }
96
- if (tagStats.length > 10) {
97
- console.log(chalk.gray(` ... and ${tagStats.length - 10} more`));
98
- }
99
- }
100
-
101
- // 8. Verbose mode: Show all rules
102
- if (options.verbose) {
103
- console.log(chalk.bold('\nAll Rules:'));
104
- for (const rule of matrixFile.rules) {
105
- console.log(` ${chalk.cyan(rule.id)}: ${rule.title || '(no title)'}`);
106
- }
107
- }
108
-
109
- console.log(); // Empty line at end
110
- }
111
-
112
- /**
113
- * Group rules by field
114
- */
115
- function groupBy(
116
- rules: Rule[],
117
- field: keyof Rule
118
- ): Record<string, number> {
119
- const result: Record<string, number> = {};
120
-
121
- for (const rule of rules) {
122
- const value = rule[field];
123
- if (value) {
124
- const key = String(value);
125
- result[key] = (result[key] || 0) + 1;
126
- }
127
- }
128
-
129
- return result;
130
- }
131
-
132
- /**
133
- * Print distribution with bar chart
134
- */
135
- function printDistribution(
136
- stats: Record<string, number>,
137
- order?: string[]
138
- ): void {
139
- const entries = Object.entries(stats);
140
-
141
- // Sort by order if provided, otherwise by count descending
142
- if (order) {
143
- entries.sort((a, b) => {
144
- const aIndex = order.indexOf(a[0]);
145
- const bIndex = order.indexOf(b[0]);
146
- if (aIndex === -1 && bIndex === -1) return 0;
147
- if (aIndex === -1) return 1;
148
- if (bIndex === -1) return -1;
149
- return aIndex - bIndex;
150
- });
151
- } else {
152
- entries.sort((a, b) => b[1] - a[1]);
153
- }
154
-
155
- // Calculate max count for bar chart
156
- const maxCount = Math.max(...entries.map(([, count]) => count));
157
- const maxBarLength = 30;
158
-
159
- for (const [key, count] of entries) {
160
- const barLength = Math.ceil((count / maxCount) * maxBarLength);
161
- const bar = 'ā–ˆ'.repeat(barLength);
162
- const percentage = ((count / entries.reduce((sum, [, c]) => sum + c, 0)) * 100).toFixed(1);
163
-
164
- console.log(
165
- ` ${chalk.yellow(key.padEnd(15))} ${chalk.green(bar)} ${chalk.cyan(count)} ${chalk.gray(`(${percentage}%)`)}`
166
- );
167
- }
168
- }
1
+ /**
2
+ * stats command - Display statistics about .matrix file
3
+ */
4
+
5
+ import chalk from 'chalk';
6
+ import { FileHandler } from '../utils/file-handler';
7
+ import { MatrixParser } from '../../parser';
8
+ import { TagIndexer } from '../../indexer/tag-indexer';
9
+ import type { DataRecord } from '../../../types';
10
+
11
+ interface StatsOptions {
12
+ verbose?: boolean;
13
+ }
14
+
15
+ export async function statsCommand(
16
+ file: string,
17
+ options: StatsOptions = {}
18
+ ): Promise<void> {
19
+ const filePath = FileHandler.ensureExtension(file);
20
+
21
+ // Read file
22
+ const content = FileHandler.read(filePath);
23
+ if (!content) {
24
+ process.exit(1);
25
+ }
26
+
27
+ // Parse file
28
+ const parser = new MatrixParser();
29
+ const result = parser.parse(content);
30
+
31
+ if (!result.success) {
32
+ console.error(chalk.red('Failed to parse file'));
33
+ process.exit(1);
34
+ }
35
+
36
+ const matrixFile = result.data!;
37
+
38
+ // Build tag index
39
+ const indexer = new TagIndexer();
40
+ indexer.buildIndex(matrixFile);
41
+
42
+ console.log(chalk.bold.cyan('\nšŸ“Š Matrix File Statistics\n'));
43
+ console.log(chalk.gray(`File: ${filePath}\n`));
44
+
45
+ // 1. Overview
46
+ console.log(chalk.bold('Overview:'));
47
+ console.log(` Total Rules: ${chalk.green(matrixFile.data.records.length)}`);
48
+ console.log(` Version: ${chalk.yellow(matrixFile.meta.v)}`);
49
+ console.log(` Category: ${chalk.yellow(matrixFile.meta.cat)}\n`);
50
+
51
+ // 2. Priority Distribution
52
+ const priorityStats = groupBy(matrixFile.data.records, 'p');
53
+ console.log(chalk.bold('Priority Distribution:'));
54
+ printDistribution(priorityStats, ['P0', 'P1', 'P2', 'P3']);
55
+
56
+ // 3. Source Distribution
57
+ const sourceStats = groupBy(matrixFile.rules, 'source');
58
+ console.log(chalk.bold('\nSource Distribution:'));
59
+ printDistribution(sourceStats);
60
+
61
+ // 4. Category Distribution
62
+ const categoryStats = groupBy(matrixFile.rules, 'category');
63
+ if (Object.keys(categoryStats).length > 0) {
64
+ console.log(chalk.bold('\nCategory Distribution:'));
65
+ printDistribution(categoryStats);
66
+ }
67
+
68
+ // 5. Status Distribution
69
+ const statusStats = groupBy(matrixFile.rules, 'status');
70
+ if (Object.keys(statusStats).length > 0) {
71
+ console.log(chalk.bold('\nStatus Distribution:'));
72
+ printDistribution(statusStats, [
73
+ 'pending',
74
+ 'in_progress',
75
+ 'completed',
76
+ 'blocked',
77
+ 'cancelled',
78
+ ]);
79
+ }
80
+
81
+ // 6. Domain Distribution
82
+ const domainStats = groupBy(matrixFile.rules, 'domain');
83
+ if (Object.keys(domainStats).length > 0) {
84
+ console.log(chalk.bold('\nDomain Distribution:'));
85
+ printDistribution(domainStats);
86
+ }
87
+
88
+ // 7. Tag Statistics
89
+ const tagStats = indexer.getTagStats();
90
+ if (tagStats.length > 0) {
91
+ console.log(chalk.bold('\nTop Tags:'));
92
+ const topTags = tagStats.slice(0, 10);
93
+ for (const stat of topTags) {
94
+ console.log(` ${chalk.cyan(stat.tag)}: ${chalk.green(stat.count)}`);
95
+ }
96
+ if (tagStats.length > 10) {
97
+ console.log(chalk.gray(` ... and ${tagStats.length - 10} more`));
98
+ }
99
+ }
100
+
101
+ // 8. Verbose mode: Show all rules
102
+ if (options.verbose) {
103
+ console.log(chalk.bold('\nAll Rules:'));
104
+ for (const rule of matrixFile.rules) {
105
+ console.log(` ${chalk.cyan(rule.id)}: ${rule.title || '(no title)'}`);
106
+ }
107
+ }
108
+
109
+ console.log(); // Empty line at end
110
+ }
111
+
112
+ /**
113
+ * Group rules by field
114
+ */
115
+ function groupBy(
116
+ rules: Rule[],
117
+ field: keyof Rule
118
+ ): Record<string, number> {
119
+ const result: Record<string, number> = {};
120
+
121
+ for (const rule of rules) {
122
+ const value = rule[field];
123
+ if (value) {
124
+ const key = String(value);
125
+ result[key] = (result[key] || 0) + 1;
126
+ }
127
+ }
128
+
129
+ return result;
130
+ }
131
+
132
+ /**
133
+ * Print distribution with bar chart
134
+ */
135
+ function printDistribution(
136
+ stats: Record<string, number>,
137
+ order?: string[]
138
+ ): void {
139
+ const entries = Object.entries(stats);
140
+
141
+ // Sort by order if provided, otherwise by count descending
142
+ if (order) {
143
+ entries.sort((a, b) => {
144
+ const aIndex = order.indexOf(a[0]);
145
+ const bIndex = order.indexOf(b[0]);
146
+ if (aIndex === -1 && bIndex === -1) return 0;
147
+ if (aIndex === -1) return 1;
148
+ if (bIndex === -1) return -1;
149
+ return aIndex - bIndex;
150
+ });
151
+ } else {
152
+ entries.sort((a, b) => b[1] - a[1]);
153
+ }
154
+
155
+ // Calculate max count for bar chart
156
+ const maxCount = Math.max(...entries.map(([, count]) => count));
157
+ const maxBarLength = 30;
158
+
159
+ for (const [key, count] of entries) {
160
+ const barLength = Math.ceil((count / maxCount) * maxBarLength);
161
+ const bar = 'ā–ˆ'.repeat(barLength);
162
+ const percentage = ((count / entries.reduce((sum, [, c]) => sum + c, 0)) * 100).toFixed(1);
163
+
164
+ console.log(
165
+ ` ${chalk.yellow(key.padEnd(15))} ${chalk.green(bar)} ${chalk.cyan(count)} ${chalk.gray(`(${percentage}%)`)}`
166
+ );
167
+ }
168
+ }
@@ -1,126 +1,126 @@
1
- /**
2
- * tokens command - Calculate token count and compression ratio
3
- */
4
-
5
- import chalk from 'chalk';
6
- import * as fs from 'fs';
7
- import { resolveFilePath } from '../utils/file-handler';
8
- import { parseMatrixFile } from '../../parser';
9
- import { serializeMatrixFile } from '../../serializer';
10
-
11
- interface TokensOptions {
12
- verbose?: boolean;
13
- }
14
-
15
- export async function tokensCommand(
16
- file: string,
17
- options: TokensOptions = {}
18
- ): Promise<void> {
19
- const filePath = resolveFilePath(file);
20
-
21
- // Read original .matrix content
22
- const matrixContent = fs.readFileSync(filePath, 'utf-8');
23
-
24
- // Parse and convert to JSON
25
- const matrixFile = parseMatrixFile(filePath);
26
- const jsonContent = JSON.stringify(matrixFile, null, 2);
27
-
28
- // Calculate token counts (using simple estimation)
29
- const matrixTokens = estimateTokenCount(matrixContent);
30
- const jsonTokens = estimateTokenCount(jsonContent);
31
-
32
- // Calculate compression ratio
33
- const compressionRatio = (jsonTokens / matrixTokens).toFixed(2);
34
-
35
- // Calculate sizes
36
- const matrixSize = Buffer.byteLength(matrixContent, 'utf-8');
37
- const jsonSize = Buffer.byteLength(jsonContent, 'utf-8');
38
- const sizeRatio = (jsonSize / matrixSize).toFixed(2);
39
-
40
- console.log(chalk.bold.cyan('\nšŸ”¢ Token Analysis\n'));
41
- console.log(chalk.gray(`File: ${filePath}\n`));
42
-
43
- // Token counts
44
- console.log(chalk.bold('Token Counts:'));
45
- console.log(` .matrix format: ${chalk.green(matrixTokens.toLocaleString())} tokens`);
46
- console.log(` JSON format: ${chalk.yellow(jsonTokens.toLocaleString())} tokens`);
47
- console.log(` Compression: ${chalk.cyan(compressionRatio)}:1`);
48
- console.log();
49
-
50
- // File sizes
51
- console.log(chalk.bold('File Sizes:'));
52
- console.log(` .matrix format: ${chalk.green(formatBytes(matrixSize))}`);
53
- console.log(` JSON format: ${chalk.yellow(formatBytes(jsonSize))}`);
54
- console.log(` Size ratio: ${chalk.cyan(sizeRatio)}:1`);
55
- console.log();
56
-
57
- // Efficiency analysis
58
- console.log(chalk.bold('Efficiency:'));
59
- const tokenSavings = jsonTokens - matrixTokens;
60
- const tokenSavingsPercent = ((tokenSavings / jsonTokens) * 100).toFixed(1);
61
- console.log(` Token savings: ${chalk.green(`-${tokenSavings.toLocaleString()}`)} (${tokenSavingsPercent}%)`);
62
-
63
- const sizeSavings = jsonSize - matrixSize;
64
- const sizeSavingsPercent = ((sizeSavings / jsonSize) * 100).toFixed(1);
65
- console.log(` Size savings: ${chalk.green(`-${formatBytes(sizeSavings)}`)} (${sizeSavingsPercent}%)`);
66
- console.log();
67
-
68
- // Verbose mode: Show rule breakdown
69
- if (options.verbose) {
70
- console.log(chalk.bold('Rule Breakdown:'));
71
- console.log(` Total rules: ${chalk.cyan(matrixFile.rules.length)}`);
72
- console.log(` Avg tokens/rule: ${chalk.cyan(Math.round(matrixTokens / matrixFile.rules.length))}`);
73
- console.log();
74
- }
75
-
76
- // Compression assessment
77
- const compressionQuality = parseFloat(compressionRatio);
78
- let assessment = '';
79
- let assessmentColor = chalk.green;
80
-
81
- if (compressionQuality >= 5) {
82
- assessment = 'Excellent compression! (≄5:1 target met)';
83
- assessmentColor = chalk.green.bold;
84
- } else if (compressionQuality >= 3) {
85
- assessment = 'Good compression (3-5:1)';
86
- assessmentColor = chalk.yellow;
87
- } else if (compressionQuality >= 2) {
88
- assessment = 'Moderate compression (2-3:1)';
89
- assessmentColor = chalk.yellow;
90
- } else {
91
- assessment = 'Low compression (<2:1)';
92
- assessmentColor = chalk.red;
93
- }
94
-
95
- console.log(assessmentColor(`āœ“ ${assessment}`));
96
- console.log();
97
- }
98
-
99
- /**
100
- * Estimate token count using simple heuristics
101
- * (Approximates GPT tokenization without needing tiktoken dependency)
102
- */
103
- function estimateTokenCount(text: string): number {
104
- // Simple estimation: ~4 characters per token for English text
105
- // This is a rough approximation; actual tokenization varies
106
- // For more accuracy, use tiktoken library
107
-
108
- // Remove whitespace for better estimation
109
- const trimmedText = text.replace(/\s+/g, ' ').trim();
110
-
111
- // Count words and punctuation as separate tokens
112
- const words = trimmedText.split(/\s+/).length;
113
- const punctuation = (trimmedText.match(/[.,;:!?()[\]{}'"]/g) || []).length;
114
-
115
- // Estimate: words + punctuation + special chars
116
- return Math.ceil((words + punctuation) * 1.3);
117
- }
118
-
119
- /**
120
- * Format bytes to human-readable string
121
- */
122
- function formatBytes(bytes: number): string {
123
- if (bytes < 1024) return `${bytes} B`;
124
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;
125
- return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
126
- }
1
+ /**
2
+ * tokens command - Calculate token count and compression ratio
3
+ */
4
+
5
+ import chalk from 'chalk';
6
+ import * as fs from 'fs';
7
+ import { resolveFilePath } from '../utils/file-handler';
8
+ import { parseMatrixFile } from '../../parser';
9
+ import { serializeMatrixFile } from '../../serializer';
10
+
11
+ interface TokensOptions {
12
+ verbose?: boolean;
13
+ }
14
+
15
+ export async function tokensCommand(
16
+ file: string,
17
+ options: TokensOptions = {}
18
+ ): Promise<void> {
19
+ const filePath = resolveFilePath(file);
20
+
21
+ // Read original .matrix content
22
+ const matrixContent = fs.readFileSync(filePath, 'utf-8');
23
+
24
+ // Parse and convert to JSON
25
+ const matrixFile = parseMatrixFile(filePath);
26
+ const jsonContent = JSON.stringify(matrixFile, null, 2);
27
+
28
+ // Calculate token counts (using simple estimation)
29
+ const matrixTokens = estimateTokenCount(matrixContent);
30
+ const jsonTokens = estimateTokenCount(jsonContent);
31
+
32
+ // Calculate compression ratio
33
+ const compressionRatio = (jsonTokens / matrixTokens).toFixed(2);
34
+
35
+ // Calculate sizes
36
+ const matrixSize = Buffer.byteLength(matrixContent, 'utf-8');
37
+ const jsonSize = Buffer.byteLength(jsonContent, 'utf-8');
38
+ const sizeRatio = (jsonSize / matrixSize).toFixed(2);
39
+
40
+ console.log(chalk.bold.cyan('\nšŸ”¢ Token Analysis\n'));
41
+ console.log(chalk.gray(`File: ${filePath}\n`));
42
+
43
+ // Token counts
44
+ console.log(chalk.bold('Token Counts:'));
45
+ console.log(` .matrix format: ${chalk.green(matrixTokens.toLocaleString())} tokens`);
46
+ console.log(` JSON format: ${chalk.yellow(jsonTokens.toLocaleString())} tokens`);
47
+ console.log(` Compression: ${chalk.cyan(compressionRatio)}:1`);
48
+ console.log();
49
+
50
+ // File sizes
51
+ console.log(chalk.bold('File Sizes:'));
52
+ console.log(` .matrix format: ${chalk.green(formatBytes(matrixSize))}`);
53
+ console.log(` JSON format: ${chalk.yellow(formatBytes(jsonSize))}`);
54
+ console.log(` Size ratio: ${chalk.cyan(sizeRatio)}:1`);
55
+ console.log();
56
+
57
+ // Efficiency analysis
58
+ console.log(chalk.bold('Efficiency:'));
59
+ const tokenSavings = jsonTokens - matrixTokens;
60
+ const tokenSavingsPercent = ((tokenSavings / jsonTokens) * 100).toFixed(1);
61
+ console.log(` Token savings: ${chalk.green(`-${tokenSavings.toLocaleString()}`)} (${tokenSavingsPercent}%)`);
62
+
63
+ const sizeSavings = jsonSize - matrixSize;
64
+ const sizeSavingsPercent = ((sizeSavings / jsonSize) * 100).toFixed(1);
65
+ console.log(` Size savings: ${chalk.green(`-${formatBytes(sizeSavings)}`)} (${sizeSavingsPercent}%)`);
66
+ console.log();
67
+
68
+ // Verbose mode: Show rule breakdown
69
+ if (options.verbose) {
70
+ console.log(chalk.bold('Rule Breakdown:'));
71
+ console.log(` Total rules: ${chalk.cyan(matrixFile.rules.length)}`);
72
+ console.log(` Avg tokens/rule: ${chalk.cyan(Math.round(matrixTokens / matrixFile.rules.length))}`);
73
+ console.log();
74
+ }
75
+
76
+ // Compression assessment
77
+ const compressionQuality = parseFloat(compressionRatio);
78
+ let assessment = '';
79
+ let assessmentColor = chalk.green;
80
+
81
+ if (compressionQuality >= 5) {
82
+ assessment = 'Excellent compression! (≄5:1 target met)';
83
+ assessmentColor = chalk.green.bold;
84
+ } else if (compressionQuality >= 3) {
85
+ assessment = 'Good compression (3-5:1)';
86
+ assessmentColor = chalk.yellow;
87
+ } else if (compressionQuality >= 2) {
88
+ assessment = 'Moderate compression (2-3:1)';
89
+ assessmentColor = chalk.yellow;
90
+ } else {
91
+ assessment = 'Low compression (<2:1)';
92
+ assessmentColor = chalk.red;
93
+ }
94
+
95
+ console.log(assessmentColor(`āœ“ ${assessment}`));
96
+ console.log();
97
+ }
98
+
99
+ /**
100
+ * Estimate token count using simple heuristics
101
+ * (Approximates GPT tokenization without needing tiktoken dependency)
102
+ */
103
+ function estimateTokenCount(text: string): number {
104
+ // Simple estimation: ~4 characters per token for English text
105
+ // This is a rough approximation; actual tokenization varies
106
+ // For more accuracy, use tiktoken library
107
+
108
+ // Remove whitespace for better estimation
109
+ const trimmedText = text.replace(/\s+/g, ' ').trim();
110
+
111
+ // Count words and punctuation as separate tokens
112
+ const words = trimmedText.split(/\s+/).length;
113
+ const punctuation = (trimmedText.match(/[.,;:!?()[\]{}'"]/g) || []).length;
114
+
115
+ // Estimate: words + punctuation + special chars
116
+ return Math.ceil((words + punctuation) * 1.3);
117
+ }
118
+
119
+ /**
120
+ * Format bytes to human-readable string
121
+ */
122
+ function formatBytes(bytes: number): string {
123
+ if (bytes < 1024) return `${bytes} B`;
124
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;
125
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
126
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes