kenaz 0.3.3 → 0.3.6

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 (451) 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 +15 -2
  4. package/core/.claude/hooks/__tests__/task-2395-project-registration.test.js +84 -0
  5. package/core/.claude/hooks/handoff-staleness.js +2 -2
  6. package/core/.claude/hooks/session-init.ps1 +49 -49
  7. package/core/.claude/hooks/turn-context.js +50 -2
  8. package/core/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -26
  9. package/core/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -97
  10. package/core/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -101
  11. package/core/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -31
  12. package/core/.claude/skills/ui-ux-pro-max/data/products.csv +96 -96
  13. package/core/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  14. package/core/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  15. package/core/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  16. package/core/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  17. package/core/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  18. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  19. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  20. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  21. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  22. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  23. package/core/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  24. package/core/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  25. package/core/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  26. package/core/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  27. package/core/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -68
  28. package/core/.claude/skills/ui-ux-pro-max/data/typography.csv +57 -57
  29. package/core/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  30. package/core/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  31. package/core/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  32. package/core/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -253
  33. package/core/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  34. package/core/.claude/skills/ui-ux-pro-max/scripts/search.py +106 -106
  35. package/core/.collaboration/core/task-api.js +1 -4
  36. package/core/.formation/README.md +21 -146
  37. package/core/.formation/bifrost/codex-doctor.js +37 -2
  38. package/core/.formation/bifrost/codex-doctor.test.js +18 -0
  39. package/core/.formation/bifrost/launch.js +1 -1
  40. package/core/.formation/bifrost/openai/codex-hook-shim.js +6 -0
  41. package/core/.formation/bifrost/openai/codex-hook-shim.test.js +11 -1
  42. package/core/.formation/bifrost/setup-codex.js +3 -0
  43. package/core/.formation/native/claude/README.md +1 -1
  44. package/core/.formation/role-map.yaml +3 -3
  45. package/core/.formation/spec/task_operations.parity.test.js +0 -1
  46. package/core/.formation/spec/task_operations.yaml +3 -3
  47. package/core/.formation/tests/hello.txt +2 -2
  48. package/core/.formation/tools/__tests__/subagent-bifrost-guard.test.js +4 -4
  49. package/core/.formation/tools/dashboard-models-chain.test.js +0 -6
  50. package/core/.formation/tools/dispatch-detail/cross-project-worktree.md +1 -9
  51. package/core/.formation/tools/dispatch-detail/worktree-subagent-mode.md +2 -2
  52. package/core/.formation/tools/dispatch.js +33 -554
  53. package/core/.formation/tools/mcp-allowlist.test.js +0 -1
  54. package/core/.formation/tools/post-complete/task2345.test.js +0 -5
  55. package/core/.formation/tools/pre-dispatch-snapshot.test.js +0 -100
  56. package/core/.formation/tools/prompt.js +33 -1623
  57. package/core/.formation/tools/prompt.test.js +26 -594
  58. package/core/.formation/unit/do.yaml +2 -4
  59. package/core/.kenaz/knowledge/ladybug_2c51da1e_shadow_file_frame_group.patch +163 -163
  60. package/core/.kenaz/knowledge/ladybug_30cf85690e_shadow_page_read_during_checkpoint.patch +393 -393
  61. package/core/.kenaz/knowledge/ladybug_7a17858d3a_node_group_delete_lock.patch +102 -102
  62. package/core/.kenaz/knowledge/ladybug_926a0ba1_column_checkpoint.patch +412 -412
  63. package/core/.kenaz/knowledge/ladybug_a346c4c4b6_pk_index_header_pages.patch +144 -144
  64. package/core/.kenaz/knowledge/ladybug_ba5f38815b_csr_node_group.patch +86 -86
  65. package/core/.kenaz/muninn_episode_write.ps1 +17 -17
  66. package/core/.kenaz/specialist/field_report_watermark.json +1 -1
  67. package/core/.kenaz/specialist/memory_guard_fired.json +1 -1
  68. package/core/.kenaz/specialist/memory_guard_trigger_cache.json +1 -1
  69. package/core/.kenaz/specialist/t1777_probe.txt +1 -1
  70. package/core/.matrix/index.matrix +5 -5
  71. package/core/.rule/general/agent-workflow.yaml +4 -4
  72. package/core/.rule/general/file-size-threshold.yaml +16 -4
  73. package/core/.rule/general/rust-verify-target.yaml +0 -1
  74. package/core/.rule/general/system-invariants.yaml +8 -25
  75. package/core/.specialist/Ansuz/SYSTEM_DOC.md +17 -42
  76. package/core/.specialist/Ansuz/capability.yaml +7 -14
  77. package/core/.specialist/Ansuz/concepts/formation_quick_ref.yaml +4 -11
  78. package/core/.specialist/Ansuz/elixir.yaml +3 -4
  79. package/core/.specialist/Ansuz/identity_contract.yaml +1 -1
  80. package/core/.specialist/Ansuz/knowledge.yaml +7 -10
  81. package/core/.specialist/Ansuz/rule.yaml +2 -2
  82. package/core/.specialist/Ansuz/tools/verify-and-land.js +22 -0
  83. package/core/.specialist/Ansuz/tools/verify-and-land.test.js +59 -5
  84. package/core/.specialist/Ansuz/workflow.yaml +7 -11
  85. package/core/.specialist/Forseti/core.yaml +1 -1
  86. package/core/.specialist/Heimdall/SKILL.md +1 -1
  87. package/core/.specialist/Heimdall/core.yaml +2 -2
  88. package/core/.specialist/Huginn/rule.yaml +1 -1
  89. package/core/.specialist/tools/README.md +2 -2
  90. package/core/.specialist/tools/__tests__/freya-cli-contract.test.js +0 -1
  91. package/core/.system/collaboration/README.md +1 -1
  92. package/core/.system/formation/LEGACY_SKILLS.md +2 -0
  93. package/core/.system/formation/POST_COMPLETE.md +2 -0
  94. package/core/.system/formation/README.md +2 -0
  95. package/core/KENAZ_CORE_VERSION +1 -1
  96. package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +355 -355
  97. package/core/dev/JEV_INTEGRATION_PLAN.md +189 -189
  98. package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +13 -13
  99. package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +9 -9
  100. package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +14 -14
  101. package/core/dev/design/matrix_v2_EXAMPLE.matrix +67 -67
  102. package/core/dev/jev-eval/ACTIVE_CORRECTION.md +52 -52
  103. package/core/dev/jev-eval/CONTEXT_REVIEW.md +31 -31
  104. package/core/dev/jev-eval/EVALUATION_STATUS.md +39 -39
  105. package/core/dev/jev-eval/HISTORICAL_CORPUS.md +33 -33
  106. package/core/dev/jev-eval/README.md +99 -99
  107. package/core/dev/jev-eval/THALAMUS_RANKING.md +58 -58
  108. package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +32 -32
  109. package/core/dev/jev-eval/reports/context-review-2026-09-20.json +48 -48
  110. package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +52 -52
  111. package/core/dev/pipeline/SELF_ENHANCEMENT_STATUS.json.bak +47 -47
  112. package/core/dev/pipeline/tasks/.gitkeep +1 -1
  113. package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +27 -27
  114. package/core/dev/scripts/check-file-size.js +44 -17
  115. package/core/dev/scripts/init_git.sh +0 -0
  116. package/core/dev/scripts/init_project.sh +0 -0
  117. package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +536 -536
  118. package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +1978 -1978
  119. package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +140 -140
  120. package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +173 -173
  121. package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +168 -168
  122. package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +126 -126
  123. package/core/dev/scripts/multi_agent_scheduler.sh +0 -0
  124. package/core/dev/scripts/run_once.sh +0 -0
  125. package/core/dev/scripts/setup_mcp.sh +0 -0
  126. package/core/dev/scripts/setup_rag.sh +0 -0
  127. package/core/dev/scripts/start_dev_agent.sh +0 -0
  128. package/core/dev/scripts/start_multi_agent.sh +0 -0
  129. package/core/dev/scripts/sync_task_queue.sh +0 -0
  130. package/core/k-cli/README.md +1 -94
  131. package/core/k-cli/test/TEST_SPEC.md +5 -22
  132. package/core/k-cli/test/run.sh +1 -67
  133. package/core/plugins/kenaz/commands/Amelia.md +1 -1
  134. package/core/plugins/kenaz/commands/Ansuz.md +16 -3
  135. package/core/plugins/kenaz/scripts/kenaz-mode.js +11 -1
  136. package/core/plugins/kenaz/scripts/sync.js +6 -2
  137. package/core/plugins/kenaz/scripts/ygg.js +13 -1
  138. package/core/plugins/kenaz/skills/product_manager/SKILL.md +12 -12
  139. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/charts.csv +26 -26
  140. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/colors.csv +97 -97
  141. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/icons.csv +101 -101
  142. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/landing.csv +31 -31
  143. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/products.csv +96 -96
  144. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  145. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  146. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  147. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  148. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  149. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  150. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  151. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  152. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  153. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  154. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  155. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  156. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  157. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  158. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/styles.csv +68 -68
  159. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/typography.csv +57 -57
  160. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  161. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  162. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  163. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/core.py +253 -253
  164. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  165. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/search.py +106 -106
  166. package/lib/cli.js +11 -4
  167. package/package.json +11 -7
  168. package/vendor/install-kenaz-cli.js +18 -7
  169. package/core/.formation/legion/forge.yaml +0 -299
  170. package/core/.formation/legion/hive.yaml +0 -238
  171. package/core/.formation/squad/blitz.yaml +0 -192
  172. package/core/.formation/squad/strategy-tribunal.yaml +0 -354
  173. package/core/.formation/squad/strategy.yaml +0 -349
  174. package/core/.formation/squad/sweep.yaml +0 -208
  175. package/core/.formation/tools/broadcast.js +0 -103
  176. package/core/.formation/tools/dispatch-dryrun.test.js +0 -54
  177. package/core/.formation/tools/dispatch-notifier.js +0 -84
  178. package/core/.formation/tools/formations.js +0 -1203
  179. package/core/.formation/tools/headless-branch-recovery.test.js +0 -64
  180. package/core/.formation/tools/headless-dryrun.test.js +0 -79
  181. package/core/.formation/tools/headless-v2.js +0 -659
  182. package/core/.formation/tools/headless.js +0 -1071
  183. package/core/.formation/tools/legacy-scheduler.js +0 -1994
  184. package/core/.formation/tools/logger.js +0 -273
  185. package/core/.formation/tools/memory-loader.js +0 -422
  186. package/core/.formation/tools/process-state.js +0 -33
  187. package/core/.formation/tools/remote-conflict.js +0 -98
  188. package/core/.formation/tools/runner.js +0 -1332
  189. package/core/.formation/tools/task-utils.js +0 -344
  190. package/core/.formation/tools/task2028-headless-worktree.test.js +0 -112
  191. package/core/.formation/tools/tests/headless-mcp-args-plumbing.test.js +0 -123
  192. package/core/.formation/tools/worktree-leak.test.js +0 -162
  193. package/core/k-cli/dist/alaya/run.js +0 -91
  194. package/core/k-cli/dist/core/output.js +0 -24
  195. package/core/k-cli/dist/core/process.js +0 -38
  196. package/core/k-cli/dist/core/project.js +0 -80
  197. package/core/k-cli/dist/core/spawn.js +0 -268
  198. package/core/k-cli/dist/core/types.js +0 -2
  199. package/core/k-cli/dist/dashboard/update.js +0 -53
  200. package/core/k-cli/dist/dashboard/version.js +0 -20
  201. package/core/k-cli/dist/dispatch/run.js +0 -241
  202. package/core/k-cli/dist/dispatch/status.js +0 -103
  203. package/core/k-cli/dist/index.js +0 -283
  204. package/core/k-cli/dist/project/initialize.js +0 -301
  205. package/core/k-cli/dist/project/install.js +0 -89
  206. package/core/k-cli/dist/project/status.js +0 -138
  207. package/core/k-cli/dist/specialist/list.js +0 -100
  208. package/core/k-cli/dist/specialist/run.js +0 -93
  209. package/core/k-cli/dist/task/create.js +0 -194
  210. package/core/k-cli/dist/task/delete.js +0 -98
  211. package/core/k-cli/dist/task/get.js +0 -55
  212. package/core/k-cli/dist/task/list.js +0 -58
  213. package/core/k-cli/dist/task/submit.js +0 -156
  214. package/core/k-cli/dist/ygg/run.js +0 -51
  215. package/core/k-cli/node_modules/.bin/yaml +0 -16
  216. package/core/k-cli/node_modules/.bin/yaml.cmd +0 -17
  217. package/core/k-cli/node_modules/.bin/yaml.ps1 +0 -28
  218. package/core/k-cli/node_modules/.package-lock.json +0 -23
  219. package/core/k-cli/node_modules/yaml/LICENSE +0 -13
  220. package/core/k-cli/node_modules/yaml/README.md +0 -172
  221. package/core/k-cli/node_modules/yaml/bin.mjs +0 -11
  222. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-collection.js +0 -88
  223. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-doc.js +0 -43
  224. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-node.js +0 -109
  225. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-scalar.js +0 -86
  226. package/core/k-cli/node_modules/yaml/browser/dist/compose/composer.js +0 -217
  227. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-map.js +0 -115
  228. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +0 -198
  229. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +0 -49
  230. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-end.js +0 -37
  231. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +0 -207
  232. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +0 -223
  233. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-props.js +0 -146
  234. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-contains-newline.js +0 -34
  235. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +0 -26
  236. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +0 -15
  237. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-map-includes.js +0 -13
  238. package/core/k-cli/node_modules/yaml/browser/dist/doc/Document.js +0 -335
  239. package/core/k-cli/node_modules/yaml/browser/dist/doc/anchors.js +0 -71
  240. package/core/k-cli/node_modules/yaml/browser/dist/doc/applyReviver.js +0 -55
  241. package/core/k-cli/node_modules/yaml/browser/dist/doc/createNode.js +0 -88
  242. package/core/k-cli/node_modules/yaml/browser/dist/doc/directives.js +0 -176
  243. package/core/k-cli/node_modules/yaml/browser/dist/errors.js +0 -57
  244. package/core/k-cli/node_modules/yaml/browser/dist/index.js +0 -17
  245. package/core/k-cli/node_modules/yaml/browser/dist/log.js +0 -11
  246. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Alias.js +0 -114
  247. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Collection.js +0 -147
  248. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Node.js +0 -38
  249. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Pair.js +0 -36
  250. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Scalar.js +0 -24
  251. package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLMap.js +0 -144
  252. package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +0 -113
  253. package/core/k-cli/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +0 -63
  254. package/core/k-cli/node_modules/yaml/browser/dist/nodes/identity.js +0 -36
  255. package/core/k-cli/node_modules/yaml/browser/dist/nodes/toJS.js +0 -37
  256. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-scalar.js +0 -214
  257. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-stringify.js +0 -61
  258. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-visit.js +0 -97
  259. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst.js +0 -98
  260. package/core/k-cli/node_modules/yaml/browser/dist/parse/lexer.js +0 -717
  261. package/core/k-cli/node_modules/yaml/browser/dist/parse/line-counter.js +0 -39
  262. package/core/k-cli/node_modules/yaml/browser/dist/parse/parser.js +0 -967
  263. package/core/k-cli/node_modules/yaml/browser/dist/public-api.js +0 -102
  264. package/core/k-cli/node_modules/yaml/browser/dist/schema/Schema.js +0 -37
  265. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/map.js +0 -17
  266. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/null.js +0 -15
  267. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/seq.js +0 -17
  268. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/string.js +0 -14
  269. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/bool.js +0 -19
  270. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/float.js +0 -43
  271. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/int.js +0 -38
  272. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/schema.js +0 -23
  273. package/core/k-cli/node_modules/yaml/browser/dist/schema/json/schema.js +0 -62
  274. package/core/k-cli/node_modules/yaml/browser/dist/schema/tags.js +0 -96
  275. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +0 -58
  276. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +0 -26
  277. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +0 -46
  278. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +0 -71
  279. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +0 -64
  280. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +0 -74
  281. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +0 -78
  282. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +0 -39
  283. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +0 -93
  284. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +0 -101
  285. package/core/k-cli/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +0 -146
  286. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringify.js +0 -129
  287. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +0 -153
  288. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyComment.js +0 -20
  289. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +0 -85
  290. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +0 -24
  291. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyPair.js +0 -150
  292. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyString.js +0 -336
  293. package/core/k-cli/node_modules/yaml/browser/dist/util.js +0 -11
  294. package/core/k-cli/node_modules/yaml/browser/dist/visit.js +0 -233
  295. package/core/k-cli/node_modules/yaml/browser/index.js +0 -5
  296. package/core/k-cli/node_modules/yaml/browser/package.json +0 -3
  297. package/core/k-cli/node_modules/yaml/dist/cli.d.ts +0 -8
  298. package/core/k-cli/node_modules/yaml/dist/cli.mjs +0 -201
  299. package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.d.ts +0 -11
  300. package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.js +0 -90
  301. package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.d.ts +0 -7
  302. package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.js +0 -45
  303. package/core/k-cli/node_modules/yaml/dist/compose/compose-node.d.ts +0 -29
  304. package/core/k-cli/node_modules/yaml/dist/compose/compose-node.js +0 -112
  305. package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.d.ts +0 -5
  306. package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.js +0 -88
  307. package/core/k-cli/node_modules/yaml/dist/compose/composer.d.ts +0 -63
  308. package/core/k-cli/node_modules/yaml/dist/compose/composer.js +0 -222
  309. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.d.ts +0 -6
  310. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.js +0 -117
  311. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +0 -11
  312. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.js +0 -200
  313. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +0 -6
  314. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.js +0 -51
  315. package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.d.ts +0 -6
  316. package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.js +0 -39
  317. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +0 -7
  318. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.js +0 -209
  319. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +0 -10
  320. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.js +0 -225
  321. package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.d.ts +0 -23
  322. package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.js +0 -148
  323. package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.d.ts +0 -2
  324. package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.js +0 -36
  325. package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +0 -2
  326. package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.js +0 -28
  327. package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +0 -3
  328. package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.js +0 -17
  329. package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.d.ts +0 -4
  330. package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.js +0 -15
  331. package/core/k-cli/node_modules/yaml/dist/doc/Document.d.ts +0 -141
  332. package/core/k-cli/node_modules/yaml/dist/doc/Document.js +0 -337
  333. package/core/k-cli/node_modules/yaml/dist/doc/anchors.d.ts +0 -24
  334. package/core/k-cli/node_modules/yaml/dist/doc/anchors.js +0 -76
  335. package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.d.ts +0 -9
  336. package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.js +0 -57
  337. package/core/k-cli/node_modules/yaml/dist/doc/createNode.d.ts +0 -17
  338. package/core/k-cli/node_modules/yaml/dist/doc/createNode.js +0 -90
  339. package/core/k-cli/node_modules/yaml/dist/doc/directives.d.ts +0 -49
  340. package/core/k-cli/node_modules/yaml/dist/doc/directives.js +0 -178
  341. package/core/k-cli/node_modules/yaml/dist/errors.d.ts +0 -21
  342. package/core/k-cli/node_modules/yaml/dist/errors.js +0 -62
  343. package/core/k-cli/node_modules/yaml/dist/index.d.ts +0 -25
  344. package/core/k-cli/node_modules/yaml/dist/index.js +0 -50
  345. package/core/k-cli/node_modules/yaml/dist/log.d.ts +0 -3
  346. package/core/k-cli/node_modules/yaml/dist/log.js +0 -19
  347. package/core/k-cli/node_modules/yaml/dist/nodes/Alias.d.ts +0 -29
  348. package/core/k-cli/node_modules/yaml/dist/nodes/Alias.js +0 -116
  349. package/core/k-cli/node_modules/yaml/dist/nodes/Collection.d.ts +0 -73
  350. package/core/k-cli/node_modules/yaml/dist/nodes/Collection.js +0 -151
  351. package/core/k-cli/node_modules/yaml/dist/nodes/Node.d.ts +0 -53
  352. package/core/k-cli/node_modules/yaml/dist/nodes/Node.js +0 -40
  353. package/core/k-cli/node_modules/yaml/dist/nodes/Pair.d.ts +0 -22
  354. package/core/k-cli/node_modules/yaml/dist/nodes/Pair.js +0 -39
  355. package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.d.ts +0 -43
  356. package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.js +0 -27
  357. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.d.ts +0 -53
  358. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.js +0 -147
  359. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +0 -60
  360. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.js +0 -115
  361. package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +0 -4
  362. package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.js +0 -65
  363. package/core/k-cli/node_modules/yaml/dist/nodes/identity.d.ts +0 -23
  364. package/core/k-cli/node_modules/yaml/dist/nodes/identity.js +0 -53
  365. package/core/k-cli/node_modules/yaml/dist/nodes/toJS.d.ts +0 -29
  366. package/core/k-cli/node_modules/yaml/dist/nodes/toJS.js +0 -39
  367. package/core/k-cli/node_modules/yaml/dist/options.d.ts +0 -350
  368. package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.d.ts +0 -64
  369. package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.js +0 -218
  370. package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.d.ts +0 -8
  371. package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.js +0 -63
  372. package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.d.ts +0 -39
  373. package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.js +0 -99
  374. package/core/k-cli/node_modules/yaml/dist/parse/cst.d.ts +0 -109
  375. package/core/k-cli/node_modules/yaml/dist/parse/cst.js +0 -112
  376. package/core/k-cli/node_modules/yaml/dist/parse/lexer.d.ts +0 -87
  377. package/core/k-cli/node_modules/yaml/dist/parse/lexer.js +0 -719
  378. package/core/k-cli/node_modules/yaml/dist/parse/line-counter.d.ts +0 -22
  379. package/core/k-cli/node_modules/yaml/dist/parse/line-counter.js +0 -41
  380. package/core/k-cli/node_modules/yaml/dist/parse/parser.d.ts +0 -84
  381. package/core/k-cli/node_modules/yaml/dist/parse/parser.js +0 -972
  382. package/core/k-cli/node_modules/yaml/dist/public-api.d.ts +0 -44
  383. package/core/k-cli/node_modules/yaml/dist/public-api.js +0 -107
  384. package/core/k-cli/node_modules/yaml/dist/schema/Schema.d.ts +0 -17
  385. package/core/k-cli/node_modules/yaml/dist/schema/Schema.js +0 -39
  386. package/core/k-cli/node_modules/yaml/dist/schema/common/map.d.ts +0 -2
  387. package/core/k-cli/node_modules/yaml/dist/schema/common/map.js +0 -19
  388. package/core/k-cli/node_modules/yaml/dist/schema/common/null.d.ts +0 -4
  389. package/core/k-cli/node_modules/yaml/dist/schema/common/null.js +0 -17
  390. package/core/k-cli/node_modules/yaml/dist/schema/common/seq.d.ts +0 -2
  391. package/core/k-cli/node_modules/yaml/dist/schema/common/seq.js +0 -19
  392. package/core/k-cli/node_modules/yaml/dist/schema/common/string.d.ts +0 -2
  393. package/core/k-cli/node_modules/yaml/dist/schema/common/string.js +0 -16
  394. package/core/k-cli/node_modules/yaml/dist/schema/core/bool.d.ts +0 -4
  395. package/core/k-cli/node_modules/yaml/dist/schema/core/bool.js +0 -21
  396. package/core/k-cli/node_modules/yaml/dist/schema/core/float.d.ts +0 -4
  397. package/core/k-cli/node_modules/yaml/dist/schema/core/float.js +0 -47
  398. package/core/k-cli/node_modules/yaml/dist/schema/core/int.d.ts +0 -4
  399. package/core/k-cli/node_modules/yaml/dist/schema/core/int.js +0 -42
  400. package/core/k-cli/node_modules/yaml/dist/schema/core/schema.d.ts +0 -1
  401. package/core/k-cli/node_modules/yaml/dist/schema/core/schema.js +0 -25
  402. package/core/k-cli/node_modules/yaml/dist/schema/json/schema.d.ts +0 -2
  403. package/core/k-cli/node_modules/yaml/dist/schema/json/schema.js +0 -64
  404. package/core/k-cli/node_modules/yaml/dist/schema/json-schema.d.ts +0 -69
  405. package/core/k-cli/node_modules/yaml/dist/schema/tags.d.ts +0 -48
  406. package/core/k-cli/node_modules/yaml/dist/schema/tags.js +0 -99
  407. package/core/k-cli/node_modules/yaml/dist/schema/types.d.ts +0 -92
  408. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +0 -2
  409. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.js +0 -70
  410. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +0 -7
  411. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.js +0 -29
  412. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +0 -4
  413. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.js +0 -50
  414. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +0 -5
  415. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.js +0 -76
  416. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +0 -9
  417. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.js +0 -68
  418. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +0 -22
  419. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.js +0 -77
  420. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +0 -10
  421. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +0 -82
  422. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +0 -1
  423. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.js +0 -41
  424. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +0 -28
  425. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.js +0 -96
  426. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +0 -6
  427. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +0 -105
  428. package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +0 -34
  429. package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.js +0 -151
  430. package/core/k-cli/node_modules/yaml/dist/stringify/stringify.d.ts +0 -21
  431. package/core/k-cli/node_modules/yaml/dist/stringify/stringify.js +0 -132
  432. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +0 -17
  433. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.js +0 -155
  434. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.d.ts +0 -10
  435. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.js +0 -24
  436. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +0 -4
  437. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.js +0 -87
  438. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +0 -2
  439. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.js +0 -26
  440. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.d.ts +0 -3
  441. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.js +0 -152
  442. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.d.ts +0 -9
  443. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.js +0 -338
  444. package/core/k-cli/node_modules/yaml/dist/test-events.d.ts +0 -4
  445. package/core/k-cli/node_modules/yaml/dist/test-events.js +0 -134
  446. package/core/k-cli/node_modules/yaml/dist/util.d.ts +0 -16
  447. package/core/k-cli/node_modules/yaml/dist/util.js +0 -28
  448. package/core/k-cli/node_modules/yaml/dist/visit.d.ts +0 -102
  449. package/core/k-cli/node_modules/yaml/dist/visit.js +0 -236
  450. package/core/k-cli/node_modules/yaml/package.json +0 -97
  451. package/core/k-cli/node_modules/yaml/util.js +0 -2
@@ -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