kenaz 0.3.17 → 0.3.19

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 (316) hide show
  1. package/core/.claude/commands/agent-worker.md +1 -1
  2. package/core/.claude/commands/architect.md +1 -2
  3. package/core/.claude/commands/spec.md +1 -1
  4. package/core/.claude/commands//347/224/242/345/223/201.md +1 -1
  5. package/core/.claude/hooks/__tests__/task-1977-dedupe-guard.test.js +8 -8
  6. package/core/.claude/hooks/synapse-first-investigation.js +15 -0
  7. package/core/.claude/skills/architect_agent/SKILL.md +11 -92
  8. package/core/.claude/skills/assessment_agent/SKILL.md +0 -1
  9. package/core/.claude/skills/backend_engineer/SKILL.md +3 -6
  10. package/core/.claude/skills/code_reviewer/SKILL.md +1 -1
  11. package/core/.claude/skills/code_reviewer/patterns.yaml +1 -1
  12. package/core/.claude/skills/designer/SKILL.md +3 -6
  13. package/core/.claude/skills/dev_agent/SKILL.md +30 -491
  14. package/core/.claude/skills/developer/SKILL.md +3 -6
  15. package/core/.claude/skills/feature_agent/SKILL.md +3 -17
  16. package/core/.claude/skills/product_manager/SKILL.md +29 -1064
  17. package/core/.claude/skills/qa_engineer/SKILL.md +12 -17
  18. package/core/.claude/skills/spec_optimizer/SKILL.md +25 -275
  19. package/core/.claude/skills/sre_agent/SKILL.md +3 -6
  20. package/core/.collaboration/README.md +2 -3
  21. package/core/.collaboration/core/task-api.js +5 -138
  22. package/core/.collaboration/docs/CLI.md +0 -2
  23. package/core/.failure/INDEX.yaml +6 -40
  24. package/core/.failure/agent-execution/FAIL-013-search-cwd-drift-and-case-mismatch.yaml +1 -1
  25. package/core/.failure/tools/README.md +9 -227
  26. package/core/.formation/bifrost/exec.js +29 -4
  27. package/core/.formation/bifrost/launch.js +1 -6
  28. package/core/.formation/bifrost/launch.test.js +1 -1
  29. package/core/.formation/bifrost/provider-launch.js +18 -11
  30. package/core/.formation/bifrost/provider-launch.test.js +26 -2
  31. package/core/.formation/bifrost/shared/ansuz-boot-policy.js +3 -3
  32. package/core/.formation/bifrost/shared/ansuz-boot-policy.test.js +1 -2
  33. package/core/.formation/tools/__tests__/dispatch-cwd-project.test.js +42 -0
  34. package/core/.formation/tools/__tests__/m1-hmap-convid.test.js +1 -124
  35. package/core/.formation/tools/__tests__/subagent-executor.test.js +3 -2
  36. package/core/.formation/tools/dispatch.js +15 -2
  37. package/core/.formation/tools/loader.js +17 -140
  38. package/core/.formation/tools/post-complete.js +0 -31
  39. package/core/.rule/INDEX.yaml +0 -18
  40. package/core/.rule/general/agent-workflow.yaml +14 -164
  41. package/core/.rule/general/project-self-containment.yaml +8 -19
  42. package/core/.rule/general/rust-verify-target.yaml +6 -5
  43. package/core/.rule/general/synapse-code-intelligence.yaml +3 -3
  44. package/core/.specialist/Amelia/capability.yaml +12 -12
  45. package/core/.specialist/Amelia/workflow.yaml +2 -2
  46. package/core/.specialist/Ansuz/SYSTEM_DOC.md +20 -578
  47. package/core/.specialist/Ansuz/cognitive_principles.yaml +2 -3
  48. package/core/.specialist/Ansuz/concepts/boot_rules_summary.yaml +0 -1
  49. package/core/.specialist/Ansuz/concepts/deep_knowledge_pointers.yaml +1 -2
  50. package/core/.specialist/Ansuz/core.yaml +6 -108
  51. package/core/.specialist/Ansuz/guards/lesson_guards.yaml +0 -3
  52. package/core/.specialist/Ansuz/identity_contract.yaml +0 -1
  53. package/core/.specialist/Ansuz/knowledge.yaml +0 -4
  54. package/core/.specialist/Ansuz/rule.yaml +0 -1
  55. package/core/.specialist/Ansuz/tools/handoff-session-identity.test.js +6 -150
  56. package/core/.specialist/tests/runtime-discovery/README.md +1 -1
  57. package/core/.specialist/tools/__tests__/task-2374-usage-counter.test.js +1 -12
  58. package/core/.specialist/tools/prompt-files.test.js +1 -0
  59. package/core/.specialist/tools/task-bridge.js +1 -66
  60. package/core/.system/README.md +11 -552
  61. package/core/.system/collaboration/README.md +10 -174
  62. package/core/CLAUDE.md +1 -6
  63. package/core/KENAZ_CORE_VERSION +1 -1
  64. package/core/dev/scripts/js-yaml-resolution.test.js +1 -1
  65. package/core/dev/scripts/run-rust-tests.js +30 -46
  66. package/core/dev/scripts/run-rust-tests.test.js +17 -0
  67. package/core/dev/scripts/rust-verify-worktree.js +4 -4
  68. package/core/dev/scripts/verify-target-dir.js +6 -6
  69. package/core/plugins/kenaz/INVENTORY.md +8 -8
  70. package/core/plugins/kenaz/commands/architect.md +1 -2
  71. package/core/plugins/kenaz/commands/spec.md +1 -1
  72. package/core/plugins/kenaz/commands//347/224/242/345/223/201.md +1 -1
  73. package/core/plugins/kenaz/guidance.md +1 -1
  74. package/core/plugins/kenaz/scripts/sync.js +1 -1
  75. package/core/plugins/kenaz/scripts/ygg.js +6 -0
  76. package/core/plugins/kenaz/skills/architect_agent/SKILL.md +11 -92
  77. package/core/plugins/kenaz/skills/assessment_agent/SKILL.md +0 -1
  78. package/core/plugins/kenaz/skills/backend_engineer/SKILL.md +3 -6
  79. package/core/plugins/kenaz/skills/code_reviewer/SKILL.md +1 -1
  80. package/core/plugins/kenaz/skills/code_reviewer/patterns.yaml +1 -1
  81. package/core/plugins/kenaz/skills/designer/SKILL.md +3 -6
  82. package/core/plugins/kenaz/skills/dev_agent/SKILL.md +30 -491
  83. package/core/plugins/kenaz/skills/developer/SKILL.md +3 -6
  84. package/core/plugins/kenaz/skills/feature_agent/SKILL.md +3 -17
  85. package/core/plugins/kenaz/skills/product_manager/SKILL.md +29 -1064
  86. package/core/plugins/kenaz/skills/qa_engineer/SKILL.md +12 -17
  87. package/core/plugins/kenaz/skills/spec_optimizer/SKILL.md +25 -275
  88. package/core/plugins/kenaz/skills/sre_agent/SKILL.md +3 -6
  89. package/package.json +6 -6
  90. package/core/.claude/commands/archive.md +0 -24
  91. package/core/.claude/commands/init.md +0 -112
  92. package/core/.claude/commands/legacy_dev.md +0 -18
  93. package/core/.claude/commands/product-review.md +0 -131
  94. package/core/.claude/commands/strategy.md +0 -141
  95. package/core/.claude/commands/sunny.md +0 -1
  96. package/core/.claude/commands//347/224/242/345/223/201/346/252/242/350/246/226.md +0 -129
  97. package/core/.claude/commands//351/200/262/345/272/246.md +0 -15
  98. package/core/.claude/hooks/__tests__/substrate.test.js +0 -122
  99. package/core/.claude/hooks/_substrate-paths.js +0 -95
  100. package/core/.claude/hooks/context-check.js +0 -51
  101. package/core/.claude/hooks/fatigue-check.js +0 -52
  102. package/core/.claude/hooks/handoff-snapshot-on-commit.js +0 -154
  103. package/core/.claude/hooks/handoff-snapshot-on-question.js +0 -158
  104. package/core/.claude/hooks/handoff-staleness.js +0 -197
  105. package/core/.claude/hooks/jev-thalamus-context.js +0 -17
  106. package/core/.claude/hooks/jev-thalamus-context.test.js +0 -41
  107. package/core/.claude/hooks/lease-release.js +0 -119
  108. package/core/.claude/hooks/lease-touch.js +0 -96
  109. package/core/.claude/hooks/reflex-feedback.js +0 -5
  110. package/core/.claude/hooks/session-init.ps1 +0 -49
  111. package/core/.claude/hooks/sound-event.js +0 -70
  112. package/core/.claude/hooks/sound-event.sh +0 -37
  113. package/core/.claude/hooks/stream-delta.js +0 -169
  114. package/core/.claude/no-hooks.settings.json +0 -3
  115. package/core/.claude/skills/legacy_dev/SKILL.md +0 -202
  116. package/core/.claude/skills/sunny/SKILL.md +0 -74
  117. package/core/.collaboration/cli/commands/assign.js +0 -39
  118. package/core/.collaboration/cli/commands/claim.js +0 -33
  119. package/core/.collaboration/cli/commands/complete.js +0 -44
  120. package/core/.collaboration/cli/commands/create.js +0 -110
  121. package/core/.collaboration/cli/commands/get.js +0 -83
  122. package/core/.collaboration/cli/commands/index.js +0 -52
  123. package/core/.collaboration/cli/commands/list.js +0 -51
  124. package/core/.collaboration/cli/commands/lock.js +0 -45
  125. package/core/.collaboration/cli/commands/rebuild.js +0 -39
  126. package/core/.collaboration/cli/commands/search.js +0 -61
  127. package/core/.collaboration/cli/commands/stats.js +0 -61
  128. package/core/.collaboration/cli/commands/transfer.js +0 -41
  129. package/core/.collaboration/cli/commands/unlock.js +0 -48
  130. package/core/.collaboration/cli/formatters/help-formatter.js +0 -70
  131. package/core/.collaboration/cli/formatters/index.js +0 -7
  132. package/core/.collaboration/cli/task-cli.js +0 -46
  133. package/core/.collaboration/cli/utils/arg-parser.js +0 -74
  134. package/core/.collaboration/cli/utils/git-user.js +0 -25
  135. package/core/.collaboration/cli/utils/index.js +0 -9
  136. package/core/.collaboration/cli/utils/output.js +0 -10
  137. package/core/.collaboration/config/default.yaml +0 -189
  138. package/core/.collaboration/core/conflict-resolver.js +0 -461
  139. package/core/.collaboration/core/conflict-resolver.test.js +0 -389
  140. package/core/.collaboration/core/migrate-legacy.js +0 -260
  141. package/core/.collaboration/docs/API.md +0 -787
  142. package/core/.collaboration/docs/ARCHITECTURE.md +0 -596
  143. package/core/.collaboration/docs/FAQ.md +0 -695
  144. package/core/.collaboration/docs/MIGRATION.md +0 -804
  145. package/core/.collaboration/docs/examples/README.md +0 -320
  146. package/core/.collaboration/docs/examples/advanced-queries.js +0 -261
  147. package/core/.collaboration/docs/examples/basic-usage.js +0 -184
  148. package/core/.collaboration/docs/examples/team-workflow.js +0 -352
  149. package/core/.failure/agent-execution/FAIL-001-agent-no-output.yaml +0 -391
  150. package/core/.failure/agent-execution/FAIL-007-pm-lead-wrong-team-invocation.yaml +0 -0
  151. package/core/.failure/agent-execution/FAIL-010-phase0-poem-format-skipped.yaml +0 -28
  152. package/core/.failure/agent-execution/FAIL-010-skipping-cognitive-checkpoint-after-verification.yaml +0 -59
  153. package/core/.failure/agent-execution/FAIL-012-grep-shortcut-during-investigation.yaml +0 -85
  154. package/core/.failure/architecture/FAIL-006-python-version-compatibility.yaml +0 -445
  155. package/core/.failure/pipeline/FAIL-003-queue-pollution.yaml +0 -335
  156. package/core/.failure/pipeline/README.md +0 -95
  157. package/core/.failure/retired/FAIL-009-skipping-synapse-pulse-before-code-change.yaml +0 -49
  158. package/core/.failure/tools/USAGE_GUIDE.md +0 -323
  159. package/core/.failure/tools/check_failures.ps1 +0 -387
  160. package/core/.failure/tools/log_failure.ps1 +0 -474
  161. package/core/.formation/.episode-input.json +0 -10
  162. package/core/.formation/.merge-lock +0 -1
  163. package/core/.formation/lead.yaml +0 -118
  164. package/core/.formation/legacy.bak/designer.yaml +0 -57
  165. package/core/.formation/legacy.bak/pm.yaml +0 -57
  166. package/core/.formation/legacy.bak/qa.yaml +0 -57
  167. package/core/.formation/legacy.bak/review.yaml +0 -62
  168. package/core/.formation/legacy.bak/scheduler.yaml +0 -129
  169. package/core/.formation/legacy.bak/sre.yaml +0 -57
  170. package/core/.formation/role-map.yaml +0 -274
  171. package/core/.formation/roles/_shared/modules/code_review.yaml +0 -98
  172. package/core/.formation/roles/_shared/modules/security.yaml +0 -103
  173. package/core/.formation/roles/_shared/modules/testing.yaml +0 -14
  174. package/core/.formation/roles/backend/role.yaml +0 -93
  175. package/core/.formation/roles/code_reviewer/role.yaml +0 -102
  176. package/core/.formation/roles/database_optimizer/role.yaml +0 -107
  177. package/core/.formation/roles/designer/role.yaml +0 -66
  178. package/core/.formation/roles/developer/role.yaml +0 -75
  179. package/core/.formation/roles/frontend/role.yaml +0 -134
  180. package/core/.formation/roles/incident_response/role.yaml +0 -89
  181. package/core/.formation/roles/qa/role.yaml +0 -89
  182. package/core/.formation/roles/security/role.yaml +0 -87
  183. package/core/.formation/roles/sre/role.yaml +0 -66
  184. package/core/.formation/skills/coordinator.yaml +0 -52
  185. package/core/.formation/solo/diagnosis.yaml +0 -78
  186. package/core/.formation/solo/strategy.yaml +0 -121
  187. package/core/.formation/tests/hello.txt +0 -2
  188. package/core/.formation/tools/coordinator.js +0 -350
  189. package/core/.formation/tools/jev-correction.js +0 -214
  190. package/core/.formation/tools/jev-correction.test.js +0 -178
  191. package/core/.formation/tools/log-reader.js +0 -232
  192. package/core/.formation/tools/revert-daemon-state.js +0 -162
  193. package/core/.formation/tools/test-drift.js +0 -148
  194. package/core/.formation/unit/heimdall.yaml +0 -96
  195. package/core/.formation/unit/plan.yaml +0 -67
  196. package/core/.formation/unit/think.yaml +0 -58
  197. package/core/.kenaz/MUNINN_SNAPSHOT9_EPISODE.json +0 -32
  198. package/core/.kenaz/MUNINN_SNAPSHOT9_RUNE.json +0 -23
  199. package/core/.kenaz/MUNINN_SNAPSHOT9_SUMMARY.md +0 -89
  200. package/core/.kenaz/ash_TASK_1428-20260507.json +0 -14
  201. package/core/.kenaz/muninn_episode_write.ps1 +0 -17
  202. package/core/.kenaz/muninn_snapshot11_rune_candidates.md +0 -63
  203. package/core/.kenaz/muninn_snapshot1_rune_candidates.md +0 -49
  204. package/core/.kenaz/runes_TASK_1428.json +0 -57
  205. package/core/.kenaz/tmp_heimdall_proposal_8d3e392.json +0 -13
  206. package/core/.kenaz/tmp_props.json +0 -1
  207. package/core/.kenaz/tmp_sounddrop_t1_prompt.txt +0 -371
  208. package/core/.rule/MECHANIZED.md +0 -61
  209. package/core/.rule/general/cortex-memory-recall.yaml +0 -446
  210. package/core/.rule/general/pipeline.yaml +0 -246
  211. package/core/.rule/general/sunny-access-control.yaml +0 -60
  212. package/core/.rule/general/system-invariants.yaml +0 -231
  213. package/core/.rule/pipeline/PPL-002-completed-task-archival.yaml +0 -528
  214. package/core/.rule/pipeline/auto-update.yaml +0 -282
  215. package/core/.rule/pipeline/task-execution.yaml +0 -365
  216. package/core/.specialist/Ansuz/concepts/phase_protocol.yaml +0 -65
  217. package/core/.specialist/Ansuz/experiments/boot_ablation_replay.js +0 -197
  218. package/core/.specialist/Ansuz/tools/bootstrap-anchors.js +0 -289
  219. package/core/.specialist/Ansuz/workflow.yaml +0 -1225
  220. package/core/.specialist/experiments/rg_benchmark.js +0 -523
  221. package/core/.specialist/experiments/rg_benchmark_results.json +0 -27
  222. package/core/.specialist/tools/jev-optional-context.js +0 -107
  223. package/core/.specialist/tools/jev-optional-context.test.js +0 -152
  224. package/core/.specialist/tools/memory-action-log.js +0 -839
  225. package/core/.specialist/tools/phase-gate.js +0 -3534
  226. package/core/.specialist/tools/phase-gate.test.js +0 -85
  227. package/core/.specialist/tools/precompute-runner.js +0 -444
  228. package/core/.specialist/tools/rule-engine.js +0 -621
  229. package/core/.specialist/tools/task-bridge-jev.test.js +0 -170
  230. package/core/.synapse/memory-shared.json.sync +0 -1
  231. package/core/.system/agent-skills/README.md +0 -724
  232. package/core/.system/cli-tools/README.md +0 -724
  233. package/core/.system/cortex/MODULES.md +0 -1046
  234. package/core/.system/dashboard/FRONTEND.md +0 -812
  235. package/core/.system/dashboard/README.md +0 -737
  236. package/core/.system/failure/README.md +0 -723
  237. package/core/.system/formation/LEGACY_SKILLS.md +0 -974
  238. package/core/.system/formation/POST_COMPLETE.md +0 -602
  239. package/core/.system/formation/README.md +0 -1094
  240. package/core/.system/formation/TOOLS_REFERENCE.md +0 -1145
  241. package/core/.system/kenaz/README.md +0 -787
  242. package/core/.system/memory/README.md +0 -719
  243. package/core/.system/pipeline/README.md +0 -712
  244. package/core/.system/rule/README.md +0 -794
  245. package/core/.system/sunny/README.md +0 -476
  246. package/core/.system/sunny/RULES.json +0 -89
  247. package/core/.system/sunny/knowledge/INDEX.md +0 -37
  248. package/core/.system/sunny/knowledge/agent-teams-api.md +0 -0
  249. package/core/.system/sunny/knowledge/ansuz-specialist.md +0 -500
  250. package/core/.system/sunny/knowledge/claude-cli-spawn.md +0 -177
  251. package/core/.system/sunny/knowledge/collaboration-api.md +0 -925
  252. package/core/.system/sunny/teammates/README.md +0 -107
  253. package/core/.system/sunny/teammates/how_to_use.yaml +0 -101
  254. package/core/.system/sunny/teammates/tools/headless/launcher.js +0 -318
  255. package/core/.system/sunny/teammates/tools/powershell/launcher.js +0 -241
  256. package/core/.system/sunny/teammates/tools/powershell/start.bat +0 -50
  257. package/core/.system/sunny/teammates/tools/utils/env.js +0 -96
  258. package/core/.system/sunny/teammates/tools/utils/format-output.js +0 -329
  259. package/core/.system/sunny/tools.json +0 -101
  260. package/core/dev/scripts/cleanup-queue.js +0 -184
  261. package/core/dev/scripts/cleanup_queue.js +0 -86
  262. package/core/dev/scripts/legacy/README.md +0 -39
  263. package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +0 -536
  264. package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +0 -1978
  265. package/core/dev/scripts/matrix/CLI_README.md +0 -214
  266. package/core/dev/scripts/matrix/README.md +0 -310
  267. package/core/dev/scripts/matrix/package-lock.json +0 -4266
  268. package/core/dev/scripts/matrix/package.json +0 -55
  269. package/core/dev/scripts/matrix/src/abbreviations.ts +0 -295
  270. package/core/dev/scripts/matrix/src/cli/commands/convert.ts +0 -211
  271. package/core/dev/scripts/matrix/src/cli/commands/create.ts +0 -95
  272. package/core/dev/scripts/matrix/src/cli/commands/delete.ts +0 -102
  273. package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +0 -140
  274. package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +0 -173
  275. package/core/dev/scripts/matrix/src/cli/commands/query.ts +0 -261
  276. package/core/dev/scripts/matrix/src/cli/commands/read.ts +0 -77
  277. package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +0 -168
  278. package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +0 -126
  279. package/core/dev/scripts/matrix/src/cli/commands/update.ts +0 -147
  280. package/core/dev/scripts/matrix/src/cli/commands/validate.ts +0 -275
  281. package/core/dev/scripts/matrix/src/cli/index.ts +0 -350
  282. package/core/dev/scripts/matrix/src/cli/utils/file-handler.ts +0 -72
  283. package/core/dev/scripts/matrix/src/cli/utils/logger.ts +0 -65
  284. package/core/dev/scripts/matrix/src/index.ts +0 -62
  285. package/core/dev/scripts/matrix/src/indexer/tag-indexer.ts +0 -165
  286. package/core/dev/scripts/matrix/src/parser.ts +0 -281
  287. package/core/dev/scripts/matrix/src/serializer.ts +0 -151
  288. package/core/dev/scripts/matrix/src/validator.ts +0 -301
  289. package/core/dev/scripts/matrix/tests/abbreviations.test.ts +0 -122
  290. package/core/dev/scripts/matrix/tests/cli.test.ts +0 -177
  291. package/core/dev/scripts/matrix/tests/convert.test.ts +0 -143
  292. package/core/dev/scripts/matrix/tests/parser.test.ts +0 -203
  293. package/core/dev/scripts/matrix/tests/query.test.ts +0 -85
  294. package/core/dev/scripts/matrix/tests/serializer.test.ts +0 -197
  295. package/core/dev/scripts/matrix/tests/validate.test.ts +0 -141
  296. package/core/dev/scripts/matrix/tests/validator.test.ts +0 -167
  297. package/core/dev/scripts/matrix/tsconfig.json +0 -20
  298. package/core/dev/scripts/matrix/types/index.d.ts +0 -111
  299. package/core/dev/scripts/matrix/types/index.d.ts.map +0 -1
  300. package/core/dev/scripts/matrix/types/index.js +0 -8
  301. package/core/dev/scripts/matrix/types/index.js.map +0 -1
  302. package/core/dev/scripts/matrix/types/index.ts +0 -124
  303. package/core/dev/scripts/memory-usage-report.js +0 -152
  304. package/core/dev/scripts/probe/ansuz-scaffold-ablation.js +0 -579
  305. package/core/dev/scripts/probe/ansuz-scaffold-ablation.test.js +0 -244
  306. package/core/dev/scripts/probe/hook-latency-probe.js +0 -315
  307. package/core/dev/scripts/probe/hook-latency-probe.test.js +0 -105
  308. package/core/dev/scripts/probe/prediction-signal-auc.js +0 -483
  309. package/core/dev/scripts/probe/prediction-signal-auc.test.js +0 -200
  310. package/core/dev/scripts/test-pty-ws-tunnel.js +0 -229
  311. package/core/dev/scripts/validate_pipeline.js +0 -197
  312. package/core/dev/spikes/task2145-evidence-20261004/backend-log-excerpt.txt +0 -56
  313. package/core/dev/spikes/task2145-evidence-20261004/graph.shadow +0 -0
  314. package/core/dev/spikes/task2145-evidence-20261004/graph.wal +0 -0
  315. package/core/dev/spikes/task2145-evidence-20261004/graph_corrupt_suspect.marker +0 -1
  316. package/core/plugins/kenaz/commands/strategy.md +0 -141
@@ -1,77 +0,0 @@
1
- /**
2
- * matrix read command
3
- * Reads and displays .matrix file content with level-based filtering
4
- */
5
-
6
- import { MatrixParser } from '../../parser';
7
- import { Logger } from '../utils/logger';
8
- import { FileHandler } from '../utils/file-handler';
9
-
10
- interface ReadOptions {
11
- level?: number;
12
- }
13
-
14
- export function readCommand(filePath: string, options: ReadOptions): void {
15
- Logger.header('Read .matrix File');
16
-
17
- // Ensure .matrix extension
18
- const targetPath = FileHandler.ensureExtension(filePath);
19
-
20
- // Read file
21
- const content = FileHandler.read(targetPath);
22
- if (!content) {
23
- process.exit(1);
24
- }
25
-
26
- // Parse file
27
- const parser = new MatrixParser();
28
- const result = parser.parse(content);
29
-
30
- if (!result.success) {
31
- Logger.error('Failed to parse file');
32
- if (result.error) {
33
- Logger.error(` ${result.error.message}`);
34
- if (result.error.line) {
35
- Logger.error(` Line: ${result.error.line}, Column: ${result.error.column}`);
36
- }
37
- }
38
- process.exit(1);
39
- }
40
-
41
- const { data: matrixFile } = result;
42
- const level = options.level || 3;
43
-
44
- // Level 1: Overview (@meta + @index)
45
- if (level >= 1) {
46
- Logger.header('Meta Information');
47
- Object.entries(matrixFile.meta).forEach(([key, value]) => {
48
- Logger.field(key, value);
49
- });
50
-
51
- Logger.header('Index Statistics');
52
- Object.entries(matrixFile.index).forEach(([key, value]) => {
53
- Logger.field(key, value);
54
- });
55
- }
56
-
57
- // Level 2: Recent 10 records
58
- if (level >= 2 && matrixFile.data) {
59
- const records = matrixFile.data.records;
60
- const displayCount = level === 2 ? Math.min(10, records.length) : records.length;
61
-
62
- Logger.header(`Data Records (${displayCount}/${records.length})`);
63
-
64
- for (let i = 0; i < displayCount; i++) {
65
- const record = records[i];
66
- Logger.record(record.id, record.fields);
67
- }
68
-
69
- if (level === 2 && records.length > 10) {
70
- Logger.info(`\nShowing first 10 of ${records.length} records. Use --level 3 to see all.`);
71
- }
72
- }
73
-
74
- // Level 3: All records (already handled in level 2)
75
-
76
- Logger.success(`\nRead complete: ${targetPath}`);
77
- }
@@ -1,168 +0,0 @@
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 +0,0 @@
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,147 +0,0 @@
1
- /**
2
- * matrix update command
3
- * Updates a specific rule in .matrix file and auto-updates @index
4
- */
5
-
6
- import inquirer from 'inquirer';
7
- import { MatrixParser } from '../../parser';
8
- import { MatrixSerializer } from '../../serializer';
9
- import { Logger } from '../utils/logger';
10
- import { FileHandler } from '../utils/file-handler';
11
-
12
- interface UpdateOptions {
13
- field?: string;
14
- value?: string;
15
- interactive?: boolean;
16
- }
17
-
18
- export async function updateCommand(
19
- filePath: string,
20
- ruleId: string,
21
- options: UpdateOptions
22
- ): Promise<void> {
23
- Logger.header('Update .matrix Rule');
24
-
25
- // Ensure .matrix extension
26
- const targetPath = FileHandler.ensureExtension(filePath);
27
-
28
- // Read and parse file
29
- const content = FileHandler.read(targetPath);
30
- if (!content) {
31
- process.exit(1);
32
- }
33
-
34
- const parser = new MatrixParser();
35
- const result = parser.parse(content);
36
-
37
- if (!result.success) {
38
- Logger.error('Failed to parse file');
39
- if (result.error) {
40
- Logger.error(` ${result.error.message}`);
41
- }
42
- process.exit(1);
43
- }
44
-
45
- const matrixFile = result.data!;
46
-
47
- // Find rule by ID
48
- if (!matrixFile.data) {
49
- Logger.error('No data records found in file');
50
- process.exit(1);
51
- }
52
-
53
- const recordIndex = matrixFile.data.records.findIndex(r => r.id === ruleId);
54
- if (recordIndex === -1) {
55
- Logger.error(`Rule not found: ${ruleId}`);
56
- Logger.info('Use "matrix read" to list available rules');
57
- process.exit(1);
58
- }
59
-
60
- const record = matrixFile.data.records[recordIndex];
61
-
62
- Logger.info(`Found rule: ${ruleId}`);
63
- Logger.record(ruleId, record.fields);
64
-
65
- let field = options.field;
66
- let value = options.value;
67
-
68
- // Interactive mode
69
- if (options.interactive || (!field || value === undefined)) {
70
- const fieldChoices = Object.keys(record.fields).map(key => ({
71
- name: `${key}: ${record.fields[key]}`,
72
- value: key,
73
- }));
74
-
75
- fieldChoices.push({ name: '+ Add new field', value: '__new__' });
76
-
77
- const answers = await inquirer.prompt([
78
- {
79
- type: 'list',
80
- name: 'field',
81
- message: 'Select field to update:',
82
- choices: fieldChoices,
83
- },
84
- {
85
- type: 'input',
86
- name: 'newFieldName',
87
- message: 'Enter new field name:',
88
- when: (answers: any) => answers.field === '__new__',
89
- validate: (input: string) => input.trim().length > 0 || 'Field name is required',
90
- },
91
- {
92
- type: 'input',
93
- name: 'value',
94
- message: (answers: any) =>
95
- `Enter new value for ${answers.field === '__new__' ? answers.newFieldName : answers.field}:`,
96
- validate: (input: string) => input !== undefined || 'Value is required',
97
- },
98
- ]);
99
-
100
- field = answers.field === '__new__' ? answers.newFieldName : answers.field;
101
- value = answers.value;
102
- }
103
-
104
- // Update field
105
- record.fields[field!] = parseValue(value!);
106
-
107
- Logger.info(`\nUpdating field: ${field} = ${value}`);
108
-
109
- // Auto-update @index (update timestamp if exists)
110
- if (matrixFile.index.upd !== undefined) {
111
- matrixFile.index.upd = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '');
112
- }
113
-
114
- // Serialize and write
115
- const serializer = new MatrixSerializer();
116
- const newContent = serializer.serialize(matrixFile);
117
-
118
- if (FileHandler.write(targetPath, newContent)) {
119
- Logger.success(`Updated rule: ${ruleId}`);
120
- Logger.field('Field', field);
121
- Logger.field('New Value', value);
122
- } else {
123
- process.exit(1);
124
- }
125
- }
126
-
127
- /**
128
- * Parse value from string (auto-detect type)
129
- */
130
- function parseValue(value: string): any {
131
- // Boolean
132
- if (value === 'true' || value === '1') return true;
133
- if (value === 'false' || value === '0') return false;
134
-
135
- // Number
136
- if (/^-?\d+(\.\d+)?$/.test(value)) {
137
- return value.includes('.') ? parseFloat(value) : parseInt(value, 10);
138
- }
139
-
140
- // Array (comma-separated)
141
- if (value.includes(',')) {
142
- return value.split(',').map(s => s.trim());
143
- }
144
-
145
- // String
146
- return value;
147
- }