minimal-vibe-coding-kit 0.5.0 → 0.5.2

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 (378) hide show
  1. package/.agents/skills/agentshield-security-review/SKILL.md +16 -8
  2. package/.agents/skills/agentshield-security-review/references/native-install.md +2 -2
  3. package/.agents/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +19 -1
  4. package/.agents/skills/mermaid/SKILL.md +141 -0
  5. package/.agents/skills/mermaid/UPSTREAM-NOTICE.md +52 -0
  6. package/.agents/skills/mermaid/references/architecture.md +433 -0
  7. package/.agents/skills/mermaid/references/block.md +752 -0
  8. package/.agents/skills/mermaid/references/c4.md +618 -0
  9. package/.agents/skills/mermaid/references/classDiagram.md +1191 -0
  10. package/.agents/skills/mermaid/references/coding-level-charts.md +27 -0
  11. package/.agents/skills/mermaid/references/config-configuration.md +71 -0
  12. package/.agents/skills/mermaid/references/config-directives.md +341 -0
  13. package/.agents/skills/mermaid/references/config-layouts.md +39 -0
  14. package/.agents/skills/mermaid/references/config-math.md +95 -0
  15. package/.agents/skills/mermaid/references/config-theming.md +245 -0
  16. package/.agents/skills/mermaid/references/config-tidy-tree.md +88 -0
  17. package/.agents/skills/mermaid/references/cynefin.md +278 -0
  18. package/.agents/skills/mermaid/references/debug-heatmap.md +68 -0
  19. package/.agents/skills/mermaid/references/entityRelationshipDiagram.md +902 -0
  20. package/.agents/skills/mermaid/references/eventmodeling.md +474 -0
  21. package/.agents/skills/mermaid/references/examples.md +300 -0
  22. package/.agents/skills/mermaid/references/flowchart.md +2166 -0
  23. package/.agents/skills/mermaid/references/gantt.md +736 -0
  24. package/.agents/skills/mermaid/references/gitgraph.md +2137 -0
  25. package/.agents/skills/mermaid/references/ishikawa.md +65 -0
  26. package/.agents/skills/mermaid/references/kanban.md +160 -0
  27. package/.agents/skills/mermaid/references/kit-examples.md +210 -0
  28. package/.agents/skills/mermaid/references/mindmap.md +334 -0
  29. package/.agents/skills/mermaid/references/packet.md +152 -0
  30. package/.agents/skills/mermaid/references/pie.md +111 -0
  31. package/.agents/skills/mermaid/references/preview.html +1143 -0
  32. package/.agents/skills/mermaid/references/quadrantChart.md +266 -0
  33. package/.agents/skills/mermaid/references/radar.md +268 -0
  34. package/.agents/skills/mermaid/references/railroad.md +455 -0
  35. package/.agents/skills/mermaid/references/requirementDiagram.md +494 -0
  36. package/.agents/skills/mermaid/references/sankey.md +414 -0
  37. package/.agents/skills/mermaid/references/sequenceDiagram.md +1206 -0
  38. package/.agents/skills/mermaid/references/stateDiagram.md +669 -0
  39. package/.agents/skills/mermaid/references/styling-preset.md +620 -0
  40. package/.agents/skills/mermaid/references/swimlanes.md +523 -0
  41. package/.agents/skills/mermaid/references/timeline.md +570 -0
  42. package/.agents/skills/mermaid/references/treeView.md +432 -0
  43. package/.agents/skills/mermaid/references/treemap.md +352 -0
  44. package/.agents/skills/mermaid/references/userJourney.md +41 -0
  45. package/.agents/skills/mermaid/references/venn.md +156 -0
  46. package/.agents/skills/mermaid/references/wardley.md +731 -0
  47. package/.agents/skills/mermaid/references/xyChart.md +392 -0
  48. package/.agents/skills/mermaid/references/zenuml.md +473 -0
  49. package/.agents/skills/sequential-thinking/SKILL.md +97 -69
  50. package/.agents/skills/sequential-thinking/examples/adaptive-depth.md +15 -536
  51. package/.agents/skills/sequential-thinking/examples/branching-exploration.md +18 -468
  52. package/.agents/skills/sequential-thinking/examples/linear-reasoning.md +22 -203
  53. package/.agents/skills/sequential-thinking/examples/revision-pattern.md +17 -298
  54. package/.agents/skills/sequential-thinking/references/advanced-techniques.md +98 -0
  55. package/.agents/skills/sequential-thinking/references/output-schema.md +99 -458
  56. package/.agents/skills/sequential-thinking/references/parameters.md +73 -435
  57. package/.agents/skills/sequential-thinking/references/patterns.md +72 -639
  58. package/.agents/skills/tutien/SKILL.md +36 -13
  59. package/.agents/skills/tutien/references/adaptive-response.md +68 -0
  60. package/.agents/skills/tutien/references/lore-sources.md +28 -0
  61. package/.agents/skills/tutien/references/privacy.md +13 -1
  62. package/.agents/skills/tutien/references/schema.md +32 -1
  63. package/.agents/skills/tutien/references/story-system.md +176 -0
  64. package/.agents/skills/tutien/references/vi-style-guide.md +89 -0
  65. package/.agents/skills/tutien/references/voice-and-mode.md +23 -8
  66. package/.agents/skills/tutien/scripts/catalog.mjs +17 -17
  67. package/.agents/skills/tutien/scripts/classify.mjs +64 -37
  68. package/.agents/skills/tutien/scripts/command.mjs +40 -21
  69. package/.agents/skills/tutien/scripts/project-profile.mjs +202 -0
  70. package/.agents/skills/tutien/scripts/render-report.mjs +128 -72
  71. package/.agents/skills/tutien/scripts/response-brief.mjs +103 -0
  72. package/.agents/skills/tutien/scripts/run-tutien.mjs +141 -63
  73. package/.agents/skills/tutien/scripts/story-ledger.mjs +241 -0
  74. package/.agents/skills/tutien/scripts/villains.mjs +14 -14
  75. package/.claude/skills/agentshield-security-review/SKILL.md +16 -8
  76. package/.claude/skills/agentshield-security-review/references/native-install.md +2 -2
  77. package/.claude/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +19 -1
  78. package/.claude/skills/mermaid/SKILL.md +141 -0
  79. package/.claude/skills/mermaid/UPSTREAM-NOTICE.md +52 -0
  80. package/.claude/skills/mermaid/references/architecture.md +433 -0
  81. package/.claude/skills/mermaid/references/block.md +752 -0
  82. package/.claude/skills/mermaid/references/c4.md +618 -0
  83. package/.claude/skills/mermaid/references/classDiagram.md +1191 -0
  84. package/.claude/skills/mermaid/references/coding-level-charts.md +27 -0
  85. package/.claude/skills/mermaid/references/config-configuration.md +71 -0
  86. package/.claude/skills/mermaid/references/config-directives.md +341 -0
  87. package/.claude/skills/mermaid/references/config-layouts.md +39 -0
  88. package/.claude/skills/mermaid/references/config-math.md +95 -0
  89. package/.claude/skills/mermaid/references/config-theming.md +245 -0
  90. package/.claude/skills/mermaid/references/config-tidy-tree.md +88 -0
  91. package/.claude/skills/mermaid/references/cynefin.md +278 -0
  92. package/.claude/skills/mermaid/references/debug-heatmap.md +68 -0
  93. package/.claude/skills/mermaid/references/entityRelationshipDiagram.md +902 -0
  94. package/.claude/skills/mermaid/references/eventmodeling.md +474 -0
  95. package/.claude/skills/mermaid/references/examples.md +300 -0
  96. package/.claude/skills/mermaid/references/flowchart.md +2166 -0
  97. package/.claude/skills/mermaid/references/gantt.md +736 -0
  98. package/.claude/skills/mermaid/references/gitgraph.md +2137 -0
  99. package/.claude/skills/mermaid/references/ishikawa.md +65 -0
  100. package/.claude/skills/mermaid/references/kanban.md +160 -0
  101. package/.claude/skills/mermaid/references/kit-examples.md +210 -0
  102. package/.claude/skills/mermaid/references/mindmap.md +334 -0
  103. package/.claude/skills/mermaid/references/packet.md +152 -0
  104. package/.claude/skills/mermaid/references/pie.md +111 -0
  105. package/.claude/skills/mermaid/references/preview.html +1143 -0
  106. package/.claude/skills/mermaid/references/quadrantChart.md +266 -0
  107. package/.claude/skills/mermaid/references/radar.md +268 -0
  108. package/.claude/skills/mermaid/references/railroad.md +455 -0
  109. package/.claude/skills/mermaid/references/requirementDiagram.md +494 -0
  110. package/.claude/skills/mermaid/references/sankey.md +414 -0
  111. package/.claude/skills/mermaid/references/sequenceDiagram.md +1206 -0
  112. package/.claude/skills/mermaid/references/stateDiagram.md +669 -0
  113. package/.claude/skills/mermaid/references/styling-preset.md +620 -0
  114. package/.claude/skills/mermaid/references/swimlanes.md +523 -0
  115. package/.claude/skills/mermaid/references/timeline.md +570 -0
  116. package/.claude/skills/mermaid/references/treeView.md +432 -0
  117. package/.claude/skills/mermaid/references/treemap.md +352 -0
  118. package/.claude/skills/mermaid/references/userJourney.md +41 -0
  119. package/.claude/skills/mermaid/references/venn.md +156 -0
  120. package/.claude/skills/mermaid/references/wardley.md +731 -0
  121. package/.claude/skills/mermaid/references/xyChart.md +392 -0
  122. package/.claude/skills/mermaid/references/zenuml.md +473 -0
  123. package/.claude/skills/sequential-thinking/SKILL.md +97 -69
  124. package/.claude/skills/sequential-thinking/examples/adaptive-depth.md +15 -536
  125. package/.claude/skills/sequential-thinking/examples/branching-exploration.md +18 -468
  126. package/.claude/skills/sequential-thinking/examples/linear-reasoning.md +22 -203
  127. package/.claude/skills/sequential-thinking/examples/revision-pattern.md +17 -298
  128. package/.claude/skills/sequential-thinking/references/advanced-techniques.md +98 -0
  129. package/.claude/skills/sequential-thinking/references/output-schema.md +99 -458
  130. package/.claude/skills/sequential-thinking/references/parameters.md +73 -435
  131. package/.claude/skills/sequential-thinking/references/patterns.md +72 -639
  132. package/.claude/skills/tutien/SKILL.md +36 -13
  133. package/.claude/skills/tutien/references/adaptive-response.md +68 -0
  134. package/.claude/skills/tutien/references/lore-sources.md +28 -0
  135. package/.claude/skills/tutien/references/privacy.md +13 -1
  136. package/.claude/skills/tutien/references/schema.md +32 -1
  137. package/.claude/skills/tutien/references/story-system.md +176 -0
  138. package/.claude/skills/tutien/references/vi-style-guide.md +89 -0
  139. package/.claude/skills/tutien/references/voice-and-mode.md +23 -8
  140. package/.claude/skills/tutien/scripts/catalog.mjs +17 -17
  141. package/.claude/skills/tutien/scripts/classify.mjs +64 -37
  142. package/.claude/skills/tutien/scripts/command.mjs +40 -21
  143. package/.claude/skills/tutien/scripts/project-profile.mjs +202 -0
  144. package/.claude/skills/tutien/scripts/render-report.mjs +128 -72
  145. package/.claude/skills/tutien/scripts/response-brief.mjs +103 -0
  146. package/.claude/skills/tutien/scripts/run-tutien.mjs +141 -63
  147. package/.claude/skills/tutien/scripts/story-ledger.mjs +241 -0
  148. package/.claude/skills/tutien/scripts/villains.mjs +14 -14
  149. package/.codex-plugin/plugin.json +1 -1
  150. package/.cursor/skills/mermaid/SKILL.md +141 -0
  151. package/.cursor/skills/mermaid/UPSTREAM-NOTICE.md +52 -0
  152. package/.cursor/skills/mermaid/references/architecture.md +433 -0
  153. package/.cursor/skills/mermaid/references/block.md +752 -0
  154. package/.cursor/skills/mermaid/references/c4.md +618 -0
  155. package/.cursor/skills/mermaid/references/classDiagram.md +1191 -0
  156. package/.cursor/skills/mermaid/references/coding-level-charts.md +27 -0
  157. package/.cursor/skills/mermaid/references/config-configuration.md +71 -0
  158. package/.cursor/skills/mermaid/references/config-directives.md +341 -0
  159. package/.cursor/skills/mermaid/references/config-layouts.md +39 -0
  160. package/.cursor/skills/mermaid/references/config-math.md +95 -0
  161. package/.cursor/skills/mermaid/references/config-theming.md +245 -0
  162. package/.cursor/skills/mermaid/references/config-tidy-tree.md +88 -0
  163. package/.cursor/skills/mermaid/references/cynefin.md +278 -0
  164. package/.cursor/skills/mermaid/references/debug-heatmap.md +68 -0
  165. package/.cursor/skills/mermaid/references/entityRelationshipDiagram.md +902 -0
  166. package/.cursor/skills/mermaid/references/eventmodeling.md +474 -0
  167. package/.cursor/skills/mermaid/references/examples.md +300 -0
  168. package/.cursor/skills/mermaid/references/flowchart.md +2166 -0
  169. package/.cursor/skills/mermaid/references/gantt.md +736 -0
  170. package/.cursor/skills/mermaid/references/gitgraph.md +2137 -0
  171. package/.cursor/skills/mermaid/references/ishikawa.md +65 -0
  172. package/.cursor/skills/mermaid/references/kanban.md +160 -0
  173. package/.cursor/skills/mermaid/references/kit-examples.md +210 -0
  174. package/.cursor/skills/mermaid/references/mindmap.md +334 -0
  175. package/.cursor/skills/mermaid/references/packet.md +152 -0
  176. package/.cursor/skills/mermaid/references/pie.md +111 -0
  177. package/.cursor/skills/mermaid/references/preview.html +1143 -0
  178. package/.cursor/skills/mermaid/references/quadrantChart.md +266 -0
  179. package/.cursor/skills/mermaid/references/radar.md +268 -0
  180. package/.cursor/skills/mermaid/references/railroad.md +455 -0
  181. package/.cursor/skills/mermaid/references/requirementDiagram.md +494 -0
  182. package/.cursor/skills/mermaid/references/sankey.md +414 -0
  183. package/.cursor/skills/mermaid/references/sequenceDiagram.md +1206 -0
  184. package/.cursor/skills/mermaid/references/stateDiagram.md +669 -0
  185. package/.cursor/skills/mermaid/references/styling-preset.md +620 -0
  186. package/.cursor/skills/mermaid/references/swimlanes.md +523 -0
  187. package/.cursor/skills/mermaid/references/timeline.md +570 -0
  188. package/.cursor/skills/mermaid/references/treeView.md +432 -0
  189. package/.cursor/skills/mermaid/references/treemap.md +352 -0
  190. package/.cursor/skills/mermaid/references/userJourney.md +41 -0
  191. package/.cursor/skills/mermaid/references/venn.md +156 -0
  192. package/.cursor/skills/mermaid/references/wardley.md +731 -0
  193. package/.cursor/skills/mermaid/references/xyChart.md +392 -0
  194. package/.cursor/skills/mermaid/references/zenuml.md +473 -0
  195. package/.cursor/skills/sequential-thinking/SKILL.md +97 -69
  196. package/.cursor/skills/sequential-thinking/examples/adaptive-depth.md +15 -536
  197. package/.cursor/skills/sequential-thinking/examples/branching-exploration.md +18 -468
  198. package/.cursor/skills/sequential-thinking/examples/linear-reasoning.md +22 -203
  199. package/.cursor/skills/sequential-thinking/examples/revision-pattern.md +17 -298
  200. package/.cursor/skills/sequential-thinking/references/advanced-techniques.md +98 -0
  201. package/.cursor/skills/sequential-thinking/references/output-schema.md +99 -458
  202. package/.cursor/skills/sequential-thinking/references/parameters.md +73 -435
  203. package/.cursor/skills/sequential-thinking/references/patterns.md +72 -639
  204. package/.cursor/skills/tutien/SKILL.md +36 -13
  205. package/.cursor/skills/tutien/references/adaptive-response.md +68 -0
  206. package/.cursor/skills/tutien/references/lore-sources.md +28 -0
  207. package/.cursor/skills/tutien/references/privacy.md +13 -1
  208. package/.cursor/skills/tutien/references/schema.md +32 -1
  209. package/.cursor/skills/tutien/references/story-system.md +176 -0
  210. package/.cursor/skills/tutien/references/vi-style-guide.md +89 -0
  211. package/.cursor/skills/tutien/references/voice-and-mode.md +23 -8
  212. package/.cursor/skills/tutien/scripts/catalog.mjs +17 -17
  213. package/.cursor/skills/tutien/scripts/classify.mjs +64 -37
  214. package/.cursor/skills/tutien/scripts/command.mjs +40 -21
  215. package/.cursor/skills/tutien/scripts/project-profile.mjs +202 -0
  216. package/.cursor/skills/tutien/scripts/render-report.mjs +128 -72
  217. package/.cursor/skills/tutien/scripts/response-brief.mjs +103 -0
  218. package/.cursor/skills/tutien/scripts/run-tutien.mjs +141 -63
  219. package/.cursor/skills/tutien/scripts/story-ledger.mjs +241 -0
  220. package/.cursor/skills/tutien/scripts/villains.mjs +14 -14
  221. package/.grok/skills/agentshield-security-review/SKILL.md +16 -8
  222. package/.grok/skills/agentshield-security-review/references/native-install.md +2 -2
  223. package/.grok/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +19 -1
  224. package/.grok/skills/mermaid/SKILL.md +141 -0
  225. package/.grok/skills/mermaid/UPSTREAM-NOTICE.md +52 -0
  226. package/.grok/skills/mermaid/references/architecture.md +433 -0
  227. package/.grok/skills/mermaid/references/block.md +752 -0
  228. package/.grok/skills/mermaid/references/c4.md +618 -0
  229. package/.grok/skills/mermaid/references/classDiagram.md +1191 -0
  230. package/.grok/skills/mermaid/references/coding-level-charts.md +27 -0
  231. package/.grok/skills/mermaid/references/config-configuration.md +71 -0
  232. package/.grok/skills/mermaid/references/config-directives.md +341 -0
  233. package/.grok/skills/mermaid/references/config-layouts.md +39 -0
  234. package/.grok/skills/mermaid/references/config-math.md +95 -0
  235. package/.grok/skills/mermaid/references/config-theming.md +245 -0
  236. package/.grok/skills/mermaid/references/config-tidy-tree.md +88 -0
  237. package/.grok/skills/mermaid/references/cynefin.md +278 -0
  238. package/.grok/skills/mermaid/references/debug-heatmap.md +68 -0
  239. package/.grok/skills/mermaid/references/entityRelationshipDiagram.md +902 -0
  240. package/.grok/skills/mermaid/references/eventmodeling.md +474 -0
  241. package/.grok/skills/mermaid/references/examples.md +300 -0
  242. package/.grok/skills/mermaid/references/flowchart.md +2166 -0
  243. package/.grok/skills/mermaid/references/gantt.md +736 -0
  244. package/.grok/skills/mermaid/references/gitgraph.md +2137 -0
  245. package/.grok/skills/mermaid/references/ishikawa.md +65 -0
  246. package/.grok/skills/mermaid/references/kanban.md +160 -0
  247. package/.grok/skills/mermaid/references/kit-examples.md +210 -0
  248. package/.grok/skills/mermaid/references/mindmap.md +334 -0
  249. package/.grok/skills/mermaid/references/packet.md +152 -0
  250. package/.grok/skills/mermaid/references/pie.md +111 -0
  251. package/.grok/skills/mermaid/references/preview.html +1143 -0
  252. package/.grok/skills/mermaid/references/quadrantChart.md +266 -0
  253. package/.grok/skills/mermaid/references/radar.md +268 -0
  254. package/.grok/skills/mermaid/references/railroad.md +455 -0
  255. package/.grok/skills/mermaid/references/requirementDiagram.md +494 -0
  256. package/.grok/skills/mermaid/references/sankey.md +414 -0
  257. package/.grok/skills/mermaid/references/sequenceDiagram.md +1206 -0
  258. package/.grok/skills/mermaid/references/stateDiagram.md +669 -0
  259. package/.grok/skills/mermaid/references/styling-preset.md +620 -0
  260. package/.grok/skills/mermaid/references/swimlanes.md +523 -0
  261. package/.grok/skills/mermaid/references/timeline.md +570 -0
  262. package/.grok/skills/mermaid/references/treeView.md +432 -0
  263. package/.grok/skills/mermaid/references/treemap.md +352 -0
  264. package/.grok/skills/mermaid/references/userJourney.md +41 -0
  265. package/.grok/skills/mermaid/references/venn.md +156 -0
  266. package/.grok/skills/mermaid/references/wardley.md +731 -0
  267. package/.grok/skills/mermaid/references/xyChart.md +392 -0
  268. package/.grok/skills/mermaid/references/zenuml.md +473 -0
  269. package/.grok/skills/sequential-thinking/SKILL.md +97 -69
  270. package/.grok/skills/sequential-thinking/examples/adaptive-depth.md +15 -536
  271. package/.grok/skills/sequential-thinking/examples/branching-exploration.md +18 -468
  272. package/.grok/skills/sequential-thinking/examples/linear-reasoning.md +22 -203
  273. package/.grok/skills/sequential-thinking/examples/revision-pattern.md +17 -298
  274. package/.grok/skills/sequential-thinking/references/advanced-techniques.md +98 -0
  275. package/.grok/skills/sequential-thinking/references/output-schema.md +99 -458
  276. package/.grok/skills/sequential-thinking/references/parameters.md +73 -435
  277. package/.grok/skills/sequential-thinking/references/patterns.md +72 -639
  278. package/.grok/skills/tutien/SKILL.md +36 -13
  279. package/.grok/skills/tutien/references/adaptive-response.md +68 -0
  280. package/.grok/skills/tutien/references/lore-sources.md +28 -0
  281. package/.grok/skills/tutien/references/privacy.md +13 -1
  282. package/.grok/skills/tutien/references/schema.md +32 -1
  283. package/.grok/skills/tutien/references/story-system.md +176 -0
  284. package/.grok/skills/tutien/references/vi-style-guide.md +89 -0
  285. package/.grok/skills/tutien/references/voice-and-mode.md +23 -8
  286. package/.grok/skills/tutien/scripts/catalog.mjs +17 -17
  287. package/.grok/skills/tutien/scripts/classify.mjs +64 -37
  288. package/.grok/skills/tutien/scripts/command.mjs +40 -21
  289. package/.grok/skills/tutien/scripts/project-profile.mjs +202 -0
  290. package/.grok/skills/tutien/scripts/render-report.mjs +128 -72
  291. package/.grok/skills/tutien/scripts/response-brief.mjs +103 -0
  292. package/.grok/skills/tutien/scripts/run-tutien.mjs +141 -63
  293. package/.grok/skills/tutien/scripts/story-ledger.mjs +241 -0
  294. package/.grok/skills/tutien/scripts/villains.mjs +14 -14
  295. package/.vibekit/docs/INSTALL.md +2 -1
  296. package/.vibekit/docs/SECURITY_MODEL.md +4 -1
  297. package/.vibekit/scripts/init-backbone.mjs +1 -1
  298. package/.vibekit/scripts/validate-kit.mjs +179 -3
  299. package/.vibekit/skills/agentshield-security-review/SKILL.md +16 -8
  300. package/.vibekit/skills/agentshield-security-review/references/native-install.md +2 -2
  301. package/.vibekit/skills/agentshield-security-review/scripts/agentshield_repo_probe.py +19 -1
  302. package/.vibekit/skills/mermaid/SKILL.md +141 -0
  303. package/.vibekit/skills/mermaid/UPSTREAM-NOTICE.md +52 -0
  304. package/.vibekit/skills/mermaid/references/architecture.md +433 -0
  305. package/.vibekit/skills/mermaid/references/block.md +752 -0
  306. package/.vibekit/skills/mermaid/references/c4.md +618 -0
  307. package/.vibekit/skills/mermaid/references/classDiagram.md +1191 -0
  308. package/.vibekit/skills/mermaid/references/coding-level-charts.md +27 -0
  309. package/.vibekit/skills/mermaid/references/config-configuration.md +71 -0
  310. package/.vibekit/skills/mermaid/references/config-directives.md +341 -0
  311. package/.vibekit/skills/mermaid/references/config-layouts.md +39 -0
  312. package/.vibekit/skills/mermaid/references/config-math.md +95 -0
  313. package/.vibekit/skills/mermaid/references/config-theming.md +245 -0
  314. package/.vibekit/skills/mermaid/references/config-tidy-tree.md +88 -0
  315. package/.vibekit/skills/mermaid/references/cynefin.md +278 -0
  316. package/.vibekit/skills/mermaid/references/debug-heatmap.md +68 -0
  317. package/.vibekit/skills/mermaid/references/entityRelationshipDiagram.md +902 -0
  318. package/.vibekit/skills/mermaid/references/eventmodeling.md +474 -0
  319. package/.vibekit/skills/mermaid/references/examples.md +300 -0
  320. package/.vibekit/skills/mermaid/references/flowchart.md +2166 -0
  321. package/.vibekit/skills/mermaid/references/gantt.md +736 -0
  322. package/.vibekit/skills/mermaid/references/gitgraph.md +2137 -0
  323. package/.vibekit/skills/mermaid/references/ishikawa.md +65 -0
  324. package/.vibekit/skills/mermaid/references/kanban.md +160 -0
  325. package/.vibekit/skills/mermaid/references/kit-examples.md +210 -0
  326. package/.vibekit/skills/mermaid/references/mindmap.md +334 -0
  327. package/.vibekit/skills/mermaid/references/packet.md +152 -0
  328. package/.vibekit/skills/mermaid/references/pie.md +111 -0
  329. package/.vibekit/skills/mermaid/references/preview.html +1143 -0
  330. package/.vibekit/skills/mermaid/references/quadrantChart.md +266 -0
  331. package/.vibekit/skills/mermaid/references/radar.md +268 -0
  332. package/.vibekit/skills/mermaid/references/railroad.md +455 -0
  333. package/.vibekit/skills/mermaid/references/requirementDiagram.md +494 -0
  334. package/.vibekit/skills/mermaid/references/sankey.md +414 -0
  335. package/.vibekit/skills/mermaid/references/sequenceDiagram.md +1206 -0
  336. package/.vibekit/skills/mermaid/references/stateDiagram.md +669 -0
  337. package/.vibekit/skills/mermaid/references/styling-preset.md +620 -0
  338. package/.vibekit/skills/mermaid/references/swimlanes.md +523 -0
  339. package/.vibekit/skills/mermaid/references/timeline.md +570 -0
  340. package/.vibekit/skills/mermaid/references/treeView.md +432 -0
  341. package/.vibekit/skills/mermaid/references/treemap.md +352 -0
  342. package/.vibekit/skills/mermaid/references/userJourney.md +41 -0
  343. package/.vibekit/skills/mermaid/references/venn.md +156 -0
  344. package/.vibekit/skills/mermaid/references/wardley.md +731 -0
  345. package/.vibekit/skills/mermaid/references/xyChart.md +392 -0
  346. package/.vibekit/skills/mermaid/references/zenuml.md +473 -0
  347. package/.vibekit/skills/sequential-thinking/SKILL.md +97 -69
  348. package/.vibekit/skills/sequential-thinking/examples/adaptive-depth.md +15 -536
  349. package/.vibekit/skills/sequential-thinking/examples/branching-exploration.md +18 -468
  350. package/.vibekit/skills/sequential-thinking/examples/linear-reasoning.md +22 -203
  351. package/.vibekit/skills/sequential-thinking/examples/revision-pattern.md +17 -298
  352. package/.vibekit/skills/sequential-thinking/references/advanced-techniques.md +98 -0
  353. package/.vibekit/skills/sequential-thinking/references/output-schema.md +99 -458
  354. package/.vibekit/skills/sequential-thinking/references/parameters.md +73 -435
  355. package/.vibekit/skills/sequential-thinking/references/patterns.md +72 -639
  356. package/.vibekit/skills/skills-manifest.json +2 -1
  357. package/.vibekit/skills/tutien/SKILL.md +36 -13
  358. package/.vibekit/skills/tutien/references/adaptive-response.md +68 -0
  359. package/.vibekit/skills/tutien/references/lore-sources.md +28 -0
  360. package/.vibekit/skills/tutien/references/privacy.md +13 -1
  361. package/.vibekit/skills/tutien/references/schema.md +32 -1
  362. package/.vibekit/skills/tutien/references/story-system.md +176 -0
  363. package/.vibekit/skills/tutien/references/vi-style-guide.md +89 -0
  364. package/.vibekit/skills/tutien/references/voice-and-mode.md +23 -8
  365. package/.vibekit/skills/tutien/scripts/catalog.mjs +17 -17
  366. package/.vibekit/skills/tutien/scripts/classify.mjs +64 -37
  367. package/.vibekit/skills/tutien/scripts/command.mjs +40 -21
  368. package/.vibekit/skills/tutien/scripts/project-profile.mjs +202 -0
  369. package/.vibekit/skills/tutien/scripts/render-report.mjs +128 -72
  370. package/.vibekit/skills/tutien/scripts/response-brief.mjs +103 -0
  371. package/.vibekit/skills/tutien/scripts/run-tutien.mjs +141 -63
  372. package/.vibekit/skills/tutien/scripts/story-ledger.mjs +241 -0
  373. package/.vibekit/skills/tutien/scripts/villains.mjs +14 -14
  374. package/CHANGELOG.md +47 -1
  375. package/README.md +273 -15
  376. package/docs/README.vi.md +290 -32
  377. package/docs/README.zh-CN.md +273 -15
  378. package/package.json +4 -2
@@ -22,7 +22,7 @@ Do not borrow meanings, triggers, roles, tone conventions, or vocabulary from un
22
22
 
23
23
  - A bare `/tutien` or `/tutien on` activates the experience.
24
24
  - While active, every `/tutien` action uses this namespace and voice.
25
- - `/tutien off` and explicit stop/end/exit requests end the experience, clear pending approval, and return one plain confirmation.
25
+ - `/tutien off` and explicit stop/end/exit requests end the experience, clear pending approval, return one plain confirmation, and forbid reuse of stale briefs or story context until reactivation.
26
26
  - After exit, use the normal Minimal Vibe Coding Kit writing style. Do not carry cultivation titles, metaphors, antagonists, or teasing into unrelated answers.
27
27
  - A quoted or documentary discussion of the command does not authorize reading history; normal preview and approval rules still apply.
28
28
 
@@ -30,15 +30,30 @@ Do not borrow meanings, triggers, roles, tone conventions, or vocabulary from un
30
30
 
31
31
  Write with quiet confidence: elegant, warm, lightly mystical, and easy to scan.
32
32
 
33
- 1. Open with one or two atmospheric sentences.
34
- 2. Present evidence and numbers in plain language.
35
- 3. Use at most one playful image per finding.
36
- 4. Target the workflow pattern, never the person.
37
- 5. Offer one small, measurable next step.
38
- 6. Close with calm encouragement and no pressure.
33
+ Treat these as effects, not an ordered outline: keep evidence legible, make every image illuminate the work, target the workflow pattern rather than the person, and leave a concrete discipline or next action. The response may begin with action, dialogue, a finding, a consequence, or atmosphere. It may use headings or none. Match its length and technical density to the current request.
39
34
 
40
- Avoid dense archaic prose, melodrama, mockery, personal judgment, intimacy, diagnosis, treatment claims, or imported persona language. `serene` is the default. `spirited` may tease the pattern more brightly but remains respectful. `neutral` removes theatrics and is mandatory for safety-sensitive or policy-suppressed reports.
35
+ Read `adaptive-response.md` before composing and use `latest-brief.json` as the factual handoff. The renderer's headings, opening, and closing exist for deterministic inspection only. Never paste them as the final answer or imitate their order by default. Use the user request, repository character, approved evidence, existing plot, and recent response shapes to decide how the role-play unfolds.
36
+
37
+ For ordinary Vietnamese role-play, the ending must cà khịa the evidenced flaw, teach a concrete lesson, avoid praise, and leave the final image or voice inside the cultivation world. This is an intended aftertaste, not a stock paragraph. Safety-sensitive output remains neutral and direct.
38
+
39
+ Avoid dense archaic prose, empty melodrama, personal judgment, intimacy, diagnosis, treatment claims, imported persona language, generic praise, and recycled catchphrases. `serene` is the default. `spirited` may tease the evidenced pattern more brightly but remains respectful. `neutral` removes theatrics and is mandatory for safety-sensitive or policy-suppressed reports.
41
40
 
42
41
  ## Language
43
42
 
44
43
  Keep Sino-Vietnamese realm and technique names in both Vietnamese and English reports. In English, gloss an unfamiliar name on first use. Match the invocation language when `language=auto`; never change facts between renderers.
44
+
45
+ The living chronicle additionally supports Simplified Chinese and follows `story-language=auto|vi|en|zh`. Treat the three story languages as parallel literary renderings of one continuity, not literal translations:
46
+
47
+ - Vietnamese: smooth modern Vietnamese with meaningful Hán–Việt names, natural cultivation honorifics, and restrained archaic color.
48
+ - English: clear fantasy narration with stable romanized cultivation names and useful translated epithets.
49
+ - Simplified Chinese: idiomatic modern web-serial prose with concise classical cadence, meaningful Chinese names, and relationship-aware forms of address.
50
+
51
+ Read `story-system.md` for the full multilingual name and dialogue contract.
52
+
53
+ Vietnamese prose must also follow `vi-style-guide.md`. In particular, use sentence case for headings and chapter titles (`Chương thứ nhất`, not `Chương Thứ Nhất`), keep extra capitals for real names, and never use spaced ASCII ` - ` as prose punctuation. Prefer Vietnamese workflow terms unless an exact technical identifier needs backticks.
54
+
55
+ ## Chronicle voice and antagonists
56
+
57
+ The analytical ledger stays deterministic; the user-facing response does not inherit its layout. Chronicle chapters are open-ended agent-authored fiction: vary scene shape, pacing, imagery, humor, dialogue, point of view, and technical density according to the current request and arc instead of reusing report sentences.
58
+
59
+ Villains may speak with malicious intent, relish a scheme, and tease with cutting sarcasm. Make the line meaningful by tying it to the exact project-derived weakness and the antagonist's advantage. The object of ridicule is the flawed array, repeated plan, unverified artifact, conflicting edict, or sect strategy—never the user or another real person's identity or worth. Safety-sensitive chapters remain neutral and antagonist-free.
@@ -10,45 +10,45 @@ export const CATALOG = {
10
10
  problemType: 'repeated-failure',
11
11
  counterTechnique: { vi: 'Dừng sau lần thất bại thứ hai giống nhau; lập giả thuyết mới trước khi thử lại.', en: 'Stop after the second identical failure; form a new hypothesis before retrying.' },
12
12
  projectHelp: 'sequential-thinking',
13
- microQuest: { vi: 'Lần lặp kế tiếp: viết 1 giả thuyết mới trước khi chạy lại.', en: 'Next iteration: write one new hypothesis before re-running.' },
14
- victory: { vi: 'Một task khép lại mà không có 3 lần thử giống nhau.', en: 'A task closes without three identical retries.' },
13
+ microQuest: { vi: 'Lần lặp kế tiếp: viết một giả thuyết mới trước khi chạy lại.', en: 'Next iteration: write one new hypothesis before re-running.' },
14
+ victory: { vi: 'Một nhiệm vụ khép lại mà không có ba lần thử giống nhau.', en: 'A task closes without three identical retries.' },
15
15
  ifThen: { vi: 'Nếu cùng một lệnh thất bại hai lần, thì dừng thử lại và viết một giả thuyết mới.', en: 'If the same command fails twice, then stop retrying and write a new hypothesis.' },
16
- villain: { name: 'Luân Hồi Lỗi Ma', gloss: 'Error-Cycle Wraith' }
16
+ villain: { name: 'Luân Hồi Ma Ảnh', gloss: 'Error-Cycle Wraith' }
17
17
  },
18
18
  'too-many-prompts': {
19
19
  problemType: 'too-many-prompts',
20
- counterTechnique: { vi: 'Chia task thành các checkpoint, mỗi ranh giới có một kết quả kiểm chứng.', en: 'Split the task into checkpoints with a validation result at each boundary.' },
20
+ counterTechnique: { vi: 'Chia nhiệm vụ thành các chặng kiểm chứng; mỗi chặng có một kết quả ràng.', en: 'Split the task into checkpoints with a validation result at each boundary.' },
21
21
  projectHelp: 'clearthought',
22
- microQuest: { vi: 'Task tới: định nghĩa 2 checkpoint có tiêu chí "done".', en: 'Next task: define 2 checkpoints each with a done-criterion.' },
23
- victory: { vi: 'Task hoàn thành trong số prompt dưới ngưỡng lịch sử.', en: 'A task completes under the historical prompt threshold.' },
24
- ifThen: { vi: 'Nếu gửi prompt thứ ba cho cùng một task, thì đặt một checkpoint có tiêu chí "done" trước đã.', en: 'If you send a third prompt on one task, then define a checkpoint with a done-criterion first.' },
22
+ microQuest: { vi: 'Nhiệm vụ tới: xác định hai chặng kiểm chứng có tiêu chí hoàn thành.', en: 'Next task: define 2 checkpoints each with a done-criterion.' },
23
+ victory: { vi: 'Nhiệm vụ hoàn thành với số lượt yêu cầu thấp hơn ngưỡng lịch sử.', en: 'A task completes under the historical prompt threshold.' },
24
+ ifThen: { vi: 'Nếu gửi lượt yêu cầu thứ ba cho cùng một nhiệm vụ, hãy đặt một chặng kiểm chứng có tiêu chí hoàn thành trước.', en: 'If you send a third prompt on one task, then define a checkpoint with a done-criterion first.' },
25
25
  villain: { name: 'Cửu Hoàn Tâm Ma', gloss: 'Ninefold Loop Heart-Shadow' }
26
26
  },
27
27
  'conflicting-instructions': {
28
28
  problemType: 'conflicting-instructions',
29
29
  counterTechnique: { vi: 'Lập sổ ưu tiên và ràng buộc; nêu rõ chỉ thị nào thay thế chỉ thị nào.', en: 'Build a precedence and constraint ledger; state which instruction supersedes which.' },
30
30
  projectHelp: 'claim',
31
- microQuest: { vi: 'Trước khi sửa: ghi 1 dòng "được phép / không được phép".', en: 'Before editing: write one allowed/forbidden line.' },
32
- victory: { vi: 'Không còn cặp chỉ thị mâu thuẫn chưa giải quyết trong một task.', en: 'No unresolved contradictory instruction pair remains in a task.' },
31
+ microQuest: { vi: 'Trước khi sửa: ghi một dòng nêu rõ điều được phép điều không được phép.', en: 'Before editing: write one allowed/forbidden line.' },
32
+ victory: { vi: 'Không còn cặp chỉ thị mâu thuẫn chưa giải quyết trong một nhiệm vụ.', en: 'No unresolved contradictory instruction pair remains in a task.' },
33
33
  ifThen: { vi: 'Nếu chỉ thị mới mâu thuẫn với chỉ thị trước, thì nêu rõ chỉ thị nào thắng trước khi sửa.', en: 'If a new instruction contradicts an earlier one, then state which one wins before editing.' },
34
34
  villain: { name: 'Nghịch Lệnh Ma Quân', gloss: 'Lord of Clashing Edicts' }
35
35
  },
36
36
  'unrecovered-failure': {
37
37
  problemType: 'unrecovered-failure',
38
- counterTechnique: { vi: 'Thêm cổng hoàn thành: chạy validation và đính kèm biên nhận kết quả.', en: 'Add a completion gate: run validation and attach a result receipt.' },
38
+ counterTechnique: { vi: 'Thêm cổng hoàn thành: chạy kiểm chứng và đính kèm kết quả.', en: 'Add a completion gate: run validation and attach a result receipt.' },
39
39
  projectHelp: 'backbone.yml validate',
40
- microQuest: { vi: 'Với mỗi lỗi còn treo: chạy lại đúng kiểm tra đó tới khi pass.', en: 'For each open failure: re-run that exact check until it passes.' },
41
- victory: { vi: 'Mỗi thất bại có một lần pass tương ứng về sau.', en: 'Every failure has a later matching pass.' },
42
- ifThen: { vi: 'Nếu một kiểm tra thất bại, thì chạy lại đúng kiểm tra đó cho tới khi pass trước khi làm việc mới.', en: 'If a check fails, then re-run that exact check until it passes before starting new work.' },
43
- villain: { name: 'Vô Kiểm Ảnh Quân', gloss: 'Unverified Trial Wraith' }
40
+ microQuest: { vi: 'Với mỗi lỗi còn treo: chạy lại đúng kiểm tra đó tới khi đạt.', en: 'For each open failure: re-run that exact check until it passes.' },
41
+ victory: { vi: 'Mỗi thất bại có một lần kiểm chứng đạt tương ứng về sau.', en: 'Every failure has a later matching pass.' },
42
+ ifThen: { vi: 'Nếu một kiểm tra thất bại, hãy chạy lại đúng kiểm tra đó tới khi đạt trước khi làm việc mới.', en: 'If a check fails, then re-run that exact check until it passes before starting new work.' },
43
+ villain: { name: 'Vô Nghiệm Ảnh Quân', gloss: 'Unverified Trial Wraith' }
44
44
  },
45
45
  'work-without-proof': {
46
46
  problemType: 'work-without-proof',
47
- counterTechnique: { vi: 'Chạy lệnh validation của repo và gắn kết quả trước khi tuyên bố xong.', en: 'Run the repository validation and attach the result before declaring done.' },
47
+ counterTechnique: { vi: 'Chạy lệnh kiểm chứng của kho và gắn kết quả trước khi tuyên bố hoàn thành.', en: 'Run the repository validation and attach the result before declaring done.' },
48
48
  projectHelp: 'backbone.yml validate',
49
- microQuest: { vi: 'Commit tới: kèm 1 dòng kết quả validation.', en: 'Next commit: include one validation-result line.' },
49
+ microQuest: { vi: 'Bản ghi Git tiếp theo: kèm một dòng kết quả kiểm chứng.', en: 'Next commit: include one validation-result line.' },
50
50
  victory: { vi: 'Mỗi vùng công việc có ít nhất một sự kiện kiểm chứng.', en: 'Every work window has at least one validation event.' },
51
- ifThen: { vi: 'Nếu sắp tuyên bố "xong", thì chạy validation của repo và đính kèm kết quả trước.', en: "If you are about to say 'done', then run the repo validation and attach the result first." },
51
+ ifThen: { vi: 'Nếu sắp tuyên bố hoàn thành, hãy chạy lệnh kiểm chứng của kho và đính kèm kết quả trước.', en: "If you are about to say 'done', then run the repo validation and attach the result first." },
52
52
  villain: { name: 'Vô Chứng Đan Ảnh', gloss: 'Proofless Elixir Shade' }
53
53
  }
54
54
  };
@@ -24,45 +24,71 @@ const round3 = (x) => Math.round(x * 1000) / 1000;
24
24
  const sha16 = (s) => crypto.createHash('sha256').update(s).digest('hex').slice(0, 16);
25
25
 
26
26
  export const FACTIONS = {
27
- 'chinh-dao': { name: 'Chính Đạo', gloss: { vi: 'chính phái hợp pháp, minh bạch, tạo giá trị cho người dùng', en: 'Righteous Dao — lawful, transparent, constructive, user-beneficial' }, rank: 'normal' },
28
- 'bang-mon': { name: 'Bàng Môn / Kỳ Đạo', gloss: { vi: 'phi truyền thống thử nghiệm, sáng tạo, chuyên biệt, không gây hại', en: 'Heterodox Dao — unconventional, experimental, creative, specialized; not harmful' }, rank: 'normal' },
29
- 'ma-dao': { name: 'Ma Đạo', gloss: { vi: 'kỹ thuật rủi ro cao / đối kháng cần ủy quyền và giám sát rõ ràng', en: 'Demonic Dao — high-risk, adversarial, restricted technical work requiring explicit authorization and oversight' }, rank: 'restricted' },
30
- 'ta-dao': { name: 'Tà Đạo', gloss: { vi: 'cố ý gây hại, bóc lột, phi pháp không bao giờ là con đường tu luyện', en: 'Evil Dao — intentionally harmful, exploitative, unlawful — never a progression path' }, rank: 'forbidden' }
27
+ 'chinh-dao': { name: 'Chính Đạo', gloss: { vi: 'chính phái, hợp pháp, minh bạch tạo giá trị cho người dùng', en: 'Righteous Dao — lawful, transparent, constructive, user-beneficial' }, rank: 'normal' },
28
+ 'bang-mon': { name: 'Bàng Môn (Kỳ Đạo)', gloss: { vi: 'phi truyền thống, thử nghiệm, sáng tạo, chuyên biệt không gây hại', en: 'Heterodox Dao — unconventional, experimental, creative, specialized; not harmful' }, rank: 'normal' },
29
+ 'ma-dao': { name: 'Ma Đạo', gloss: { vi: 'kỹ thuật rủi ro cao hoặc đối kháng; cần ủy quyền và giám sát rõ ràng', en: 'Demonic Dao — high-risk, adversarial, restricted technical work requiring explicit authorization and oversight' }, rank: 'restricted' },
30
+ 'ta-dao': { name: 'Tà Đạo', gloss: { vi: 'cố ý gây hại, bóc lột hoặc phi pháp; không bao giờ là con đường tu luyện', en: 'Evil Dao — intentionally harmful, exploitative, unlawful — never a progression path' }, rank: 'forbidden' }
31
31
  };
32
32
  // Not a real faction — the result of refusing to classify harmful intent.
33
- const UNDETERMINED_FACTION = { id: 'undetermined', name: 'Chưa phân định', gloss: { vi: 'chưa gán đạo cần review con người', en: 'undetermined — needs human review' }, rank: 'review' };
33
+ const UNDETERMINED_FACTION = { id: 'undetermined', name: 'Chưa phân định', gloss: { vi: 'chưa gán đạo; cần con người rà soát', en: 'undetermined — needs human review' }, rank: 'review' };
34
34
 
35
35
  export const AFFILIATIONS = {
36
- 'tong-mon': { name: 'Tông Môn Đệ Tử', gloss: { vi: 'làm việc trong đội nhóm / tổ chức / quy trình có sẵn', en: 'works within a team, organization, or established process' } },
36
+ 'tong-mon': { name: 'Tông Môn Đệ Tử', gloss: { vi: 'làm việc trong đội nhóm, tổ chức hoặc quy trình có sẵn', en: 'works within a team, organization, or established process' } },
37
37
  'tan-tu': { name: 'Tán Tu', gloss: { vi: 'tu luyện độc lập, không thuộc tổ chức cố định', en: 'works independently, outside a fixed organization or tradition' } },
38
- 'khach-khanh': { name: 'Khách Khanh', gloss: { vi: 'chuyên gia bên ngoài / cộng tác tạm thời', en: 'external expert or temporary contributor' } },
38
+ 'khach-khanh': { name: 'Khách Khanh', gloss: { vi: 'chuyên gia bên ngoài hoặc cộng tác tạm thời', en: 'external expert or temporary contributor' } },
39
39
  'an-tu': { name: 'Ẩn Tu', gloss: { vi: 'nghiên cứu riêng tư, dài hạn, chuyên sâu', en: 'private, long-term, deeply focused research' } }
40
40
  };
41
41
 
42
42
  export const PATHS = {
43
43
  kiem: { name: 'Kiếm Tu', gloss: { vi: 'triển khai phần mềm trực tiếp, giải quyết vấn đề nhanh', en: 'direct implementation and fast problem-solving' } },
44
44
  tran: { name: 'Trận Tu', gloss: { vi: 'kiến trúc, DevOps, hạ tầng, mạng, điều phối hệ thống', en: 'architecture, DevOps, infrastructure, networking, orchestration' } },
45
- phu: { name: 'Phù Tu', gloss: { vi: 'prompt, script, tự động hóa, workflow lặp lại được', en: 'prompts, scripts, automation, repeatable workflows' } },
45
+ phu: { name: 'Phù Tu', gloss: { vi: 'lời yêu cầu, tập lệnh, tự động hóa quy trình lặp lại được', en: 'prompts, scripts, automation, repeatable workflows' } },
46
46
  khi: { name: 'Khí Tu', gloss: { vi: 'công cụ, thư viện, thành phần tái sử dụng, nền tảng', en: 'tools, libraries, reusable components, platform engineering' } },
47
47
  dan: { name: 'Đan Tu', gloss: { vi: 'xử lý dữ liệu, tối ưu, biến đổi, tổng hợp tài nguyên', en: 'data processing, optimization, transformation, resource synthesis' } },
48
- y: { name: 'Y Tu', gloss: { vi: 'debug, bảo trì, khắc phục sự cố, hỗ trợ kỹ thuật', en: 'debugging, maintenance, incident recovery, support' } },
49
- huyen: { name: 'Huyễn Tu', gloss: { vi: 'UI/UX, animation, thiết kế, 3D, giao diện sáng tạo', en: 'UI/UX, animation, visual design, 3D, creative interfaces' } },
50
- 'ngu-thu': { name: 'Ngự Thú Tu', gloss: { vi: 'điều phối AI agent, bot, đa mô hình', en: 'AI-agent, bot, or multi-model orchestration' } },
48
+ y: { name: 'Y Tu', gloss: { vi: 'gỡ lỗi, bảo trì, khắc phục sự cố hỗ trợ kỹ thuật', en: 'debugging, maintenance, incident recovery, support' } },
49
+ huyen: { name: 'Huyễn Tu', gloss: { vi: 'UI/UX, chuyển động, thiết kế, 3D giao diện sáng tạo', en: 'UI/UX, animation, visual design, 3D, creative interfaces' } },
50
+ 'ngu-thu': { name: 'Ngự Thú Tu', gloss: { vi: 'điều phối tác nhân AI, bot nhiều mô hình', en: 'AI-agent, bot, or multi-model orchestration' } },
51
51
  'huyen-co': { name: 'Huyền Cơ Tu', gloss: { vi: 'mật mã, thuật toán khó, bài toán phân tích hóc búa', en: 'cryptography, advanced algorithms, hard analytical problems' } },
52
- anh: { name: 'Ảnh Tu', gloss: { vi: 'an ninh mạng có ủy quyền, forensics, điều tra, OSINT, dịch ngược', en: 'authorized cybersecurity, forensics, investigation, OSINT, reverse engineering' } },
53
- ta: { name: 'Tà Tu', gloss: { vi: 'phương pháp cố ý gây hại không bao giờ gán chỉ vì dự án khó hay thuộc mảng bảo mật', en: 'intentionally harmful methods — never assigned merely because work is difficult or security-related' } }
52
+ anh: { name: 'Ảnh Tu', gloss: { vi: 'an ninh mạng có ủy quyền, điều tra số, OSINT dịch ngược', en: 'authorized cybersecurity, forensics, investigation, OSINT, reverse engineering' } },
53
+ ta: { name: 'Tà Tu', gloss: { vi: 'phương pháp cố ý gây hại; không bao giờ gán chỉ vì dự án khó hay thuộc mảng bảo mật', en: 'intentionally harmful methods — never assigned merely because work is difficult or security-related' } }
54
54
  };
55
55
 
56
56
  export const KNOWLEDGE_KINDS = {
57
- 'tam-phap': { name: 'Tâm Pháp', gloss: { vi: 'nguyên tắc tư duy cốt lõi', en: 'core reasoning principles and mindset' } },
58
- 'cong-phap': { name: 'Công Pháp', gloss: { vi: 'chiến lược làm việc lặp lại được, dài hạn', en: 'repeatable strategies and long-term working methods' } },
59
- 'thuat-phap': { name: 'Thuật Pháp', gloss: { vi: 'kỹ thuật / mẫu prompt đơn lẻ', en: 'individual prompt patterns or techniques' } },
60
- 'bi-thuat': { name: 'Bí Thuật', gloss: { vi: 'kỹ thuật hiếm, chuyên sâu', en: 'rare, specialized, advanced techniques' } },
61
- 'than-thong': { name: 'Thần Thông', gloss: { vi: 'năng lực đã thuần thục, tái sử dụng tin cậy', en: 'highly mastered, reliably reusable abilities' } },
62
- 'phap-bao': { name: 'Pháp Bảo', gloss: { vi: 'công cụ, script, template, agent hỗ trợ (skill & command của kit)', en: 'tools, scripts, templates, agents (kit skills & commands)' } },
63
- 'dao-dien': { name: 'Bí Tịch / Đạo Điển', gloss: { vi: 'playbook, skill file, tài liệu tích lũy', en: 'written playbooks, skill files, accumulated documentation' } }
57
+ 'tam-phap': { name: 'Tâm pháp', gloss: { vi: 'nguyên tắc tư duy cốt lõi', en: 'core reasoning principles and mindset' } },
58
+ 'cong-phap': { name: 'Công pháp', gloss: { vi: 'chiến lược làm việc lặp lại được, dài hạn', en: 'repeatable strategies and long-term working methods' } },
59
+ 'thuat-phap': { name: 'Thuật pháp', gloss: { vi: 'kỹ thuật hoặc mẫu lời yêu cầu đơn lẻ', en: 'individual prompt patterns or techniques' } },
60
+ 'bi-thuat': { name: 'Bí thuật', gloss: { vi: 'kỹ thuật hiếm, chuyên sâu', en: 'rare, specialized, advanced techniques' } },
61
+ 'than-thong': { name: 'Thần thông', gloss: { vi: 'năng lực đã thuần thục, tái sử dụng tin cậy', en: 'highly mastered, reliably reusable abilities' } },
62
+ 'phap-bao': { name: 'Pháp bảo', gloss: { vi: 'công cụ, tập lệnh, khuôn mẫu và tác nhân hỗ trợ của bộ kỹ năng', en: 'tools, scripts, templates, agents (kit skills & commands)' } },
63
+ 'dao-dien': { name: 'Bí tịch đạo điển', gloss: { vi: 'sổ tay, tệp kỹ năng và tài liệu tích lũy', en: 'written playbooks, skill files, accumulated documentation' } }
64
64
  };
65
65
 
66
+ export function localizeRationale(value, language = 'en') {
67
+ const text = String(value ?? '');
68
+ if (language !== 'vi') return text;
69
+ if (text === 'declared by the user') return 'do người dùng khai báo';
70
+ if (text === 'default for lawful constructive work; no adversarial or experimental signals') {
71
+ return 'mặc định cho công việc hợp pháp và tạo giá trị; không có dấu hiệu đối kháng hoặc thử nghiệm';
72
+ }
73
+ if (text === 'single commit-author identifier (low-confidence hint)') return 'một mã tác giả Git; dấu hiệu có độ tin cậy thấp';
74
+ if (text === 'no author evidence; defaulting — declare affiliation= to correct') {
75
+ return 'không có bằng chứng về tác giả; tạm dùng giá trị mặc định. Có thể dùng `affiliation=` để sửa';
76
+ }
77
+ const authors = text.match(/^(\d+) distinct commit-author identifiers/);
78
+ if (authors) return `${authors[1]} mã tác giả Git riêng biệt; dấu hiệu có độ tin cậy thấp. Dùng \`affiliation=\` để xác nhận`;
79
+ const tagged = [
80
+ ['profile keywords: ', 'từ khóa hồ sơ: '],
81
+ ['intent-to-harm signals: ', 'dấu hiệu chủ đích gây hại: '],
82
+ ['adversarial engagement signals: ', 'dấu hiệu công việc đối kháng: '],
83
+ ['experimental/creative signals: ', 'dấu hiệu thử nghiệm hoặc sáng tạo: ']
84
+ ].find(([prefix]) => text.startsWith(prefix));
85
+ if (tagged) {
86
+ const values = text.slice(tagged[0].length).split(', ').filter(Boolean).map((item) => `\`${item}\``).join(', ');
87
+ return `${tagged[1]}${values}`;
88
+ }
89
+ return text;
90
+ }
91
+
66
92
  // Word/phrase-boundary matcher: boundaries are non-alphanumeric, so "ui" does
67
93
  // not match inside "build" and "api" does not match inside "rapid".
68
94
  function hasKeyword(text, kw) {
@@ -188,16 +214,16 @@ export function classifyProject(profile = {}) {
188
214
  }
189
215
 
190
216
  const PATH_KNOWLEDGE = {
191
- kiem: { tamPhap: { vi: 'Thay đổi nhỏ nhất mà đúng; kiểm chứng sau mỗi lần sửa.', en: 'Smallest correct change; validate after every edit.' }, congPhap: { vi: 'Vòng lặp checkpoint: sửa nhỏ validation xác nhận rồi mới đi tiếp.', en: 'Checkpoint loop: small edit → validation → confirm before moving on.' }, biThuat: { vi: 'Tách refactor lớn thành chuỗi diff nhỏ có thể đảo ngược.', en: 'Decompose a large refactor into a chain of small reversible diffs.' }, thanThong: { vi: 'Đọc-hiểu codebase lạ và định vị điểm sửa đúng ngay lần đầu.', en: 'Read an unfamiliar codebase and locate the right edit on the first pass.' }, phapBao: ['prompt-sharpener', 'sequential-thinking'] },
217
+ kiem: { tamPhap: { vi: 'Thay đổi nhỏ nhất mà đúng; kiểm chứng sau mỗi lần sửa.', en: 'Smallest correct change; validate after every edit.' }, congPhap: { vi: 'Vòng lặp theo chặng: sửa nhỏ, kiểm chứng, xác nhận rồi mới đi tiếp.', en: 'Checkpoint loop: small edit → validation → confirm before moving on.' }, biThuat: { vi: 'Tách lần tái cấu trúc lớn thành chuỗi `diff` nhỏ có thể đảo ngược.', en: 'Decompose a large refactor into a chain of small reversible diffs.' }, thanThong: { vi: 'Đọc hiểu kho lạ và định vị đúng điểm sửa ngay lần đầu.', en: 'Read an unfamiliar codebase and locate the right edit on the first pass.' }, phapBao: ['prompt-sharpener', 'sequential-thinking'] },
192
218
  tran: { tamPhap: { vi: 'Vẽ ranh giới và hợp đồng giữa các thành phần trước khi nối chúng.', en: 'Draw component boundaries and contracts before wiring them.' }, congPhap: { vi: 'Mọi thay đổi hạ tầng đều có đường lùi được diễn tập.', en: 'Every infrastructure change ships with a rehearsed rollback.' }, biThuat: { vi: 'Mô phỏng sự cố có kiểm soát trước khi sự cố thật xảy ra.', en: 'Controlled failure rehearsal before the real incident.' }, thanThong: { vi: 'Thiết kế hệ thống chịu lỗi mà không giấu đi độ bất định.', en: 'Design fault-tolerant systems without hiding uncertainty.' }, phapBao: ['clearthought', 'path-sensitive-shell-safety'] },
193
- phu: { tamPhap: { vi: 'Một quy trình lặp lại được đáng giá hơn mười lần làm tay.', en: 'One repeatable workflow beats ten manual runs.' }, congPhap: { vi: 'Chuẩn hóa prompt thành skill có tiêu chí done rõ ràng.', en: 'Formalize prompts into skills with explicit done-criteria.' }, biThuat: { vi: 'Guardrail tự kiểm: workflow tự phát hiện khi chính nó sai.', en: 'Self-checking guardrails: the workflow detects its own failure.' }, thanThong: { vi: 'Biến một việc thủ công lặp lại thành lệnh chạy một phát tin cậy.', en: 'Turn a repeated manual chore into a reliable one-shot command.' }, phapBao: ['prompt-sharpener', 'claim'] },
194
- khi: { tamPhap: { vi: 'API là lời hứa; đặt tên và hành vi phải giữ được lời.', en: 'An API is a promise; naming and behavior must keep it.' }, congPhap: { vi: 'Registry trung tâm + kiểm parity để bản phân phối không trôi.', en: 'Central registry + parity checks so distribution never drifts.' }, biThuat: { vi: 'Fixture âm bản: cố tình làm hỏng để chứng minh validator bắt được.', en: 'Negative fixtures: break it on purpose to prove the validator catches it.' }, thanThong: { vi: 'Thiết kế thành phần tái sử dụng mà người khác dùng đúng ngay.', en: 'Design reusable components others use correctly on the first try.' }, phapBao: ['claim', 'daily-workflow-curator'] },
195
- dan: { tamPhap: { vi: 'Số liệu tách bạch theo nguồn gốc: đo được, ước lượng, không rõ.', en: 'Numbers stay split by provenance: measured, estimated, unknown.' }, congPhap: { vi: 'Baseline trước, biến đổi sau, so sánh có log.', en: 'Baseline first, transform second, logged comparison always.' }, biThuat: { vi: 'Thiết kế pipeline chạy lại được từ bất kỳ điểm gãy nào.', en: 'Pipelines resumable from any break point.' }, thanThong: { vi: 'Chuyển dữ liệu thô hỗn độn thành dạng đáng tin, đo được.', en: 'Turn messy raw data into a trustworthy, measurable shape.' }, phapBao: ['autoresearch-coding', 'sequential-thinking'] },
196
- y: { tamPhap: { vi: 'Chẩn bệnh trước, kê đơn sau: tái hiện lỗi trước khi sửa.', en: 'Diagnose before prescribing: reproduce before fixing.' }, congPhap: { vi: 'Hai lần thất bại giống nhau dừng, lập giả thuyết mới.', en: 'Two identical failures → stop, form a new hypothesis.' }, biThuat: { vi: 'Thu nhỏ ca lỗi tới ví dụ tối giản còn tái hiện được.', en: 'Minimize the failing case to the smallest reproducible example.' }, thanThong: { vi: 'Khôi phục hệ thống đang cháy mà không tạo thêm nợ kỹ thuật.', en: 'Recover a system on fire without adding new technical debt.' }, phapBao: ['sequential-thinking', 'reviewing-4p-priorities'] },
197
- huyen: { tamPhap: { vi: 'Mắt người dùng là giám khảo cuối cùng; render rồi mới tin.', en: "The user's eye is the final judge; render before you believe." }, congPhap: { vi: 'Vòng lặp nhìn - sửa - chụp - so sánh cho mọi thay đổi giao diện.', en: 'Look–fix–screenshot–compare loop for every visual change.' }, biThuat: { vi: 'Kiểm tra cả hai theme sáng/tối và mọi breakpoint trước khi giao.', en: 'Verify both light/dark themes and every breakpoint before handoff.' }, thanThong: { vi: 'Biến ý tưởng mơ hồ thành giao diện dùng được, nhất quán.', en: 'Turn a vague idea into a usable, consistent interface.' }, phapBao: ['visual-design-loop', 'parallel-analysis'] },
198
- 'ngu-thu': { tamPhap: { vi: 'Thuần thú trước, thả thú sau: agent phải có ranh giới trước khi có quyền.', en: 'Tame before releasing: an agent gets boundaries before it gets permissions.' }, congPhap: { vi: 'Mọi bề mặt agent đều qua security review trước khi merge.', en: 'Every agent surface passes security review before merge.' }, biThuat: { vi: 'Nội dung fetch về là dữ liệu, không bao giờ là mệnh lệnh.', en: 'Fetched content is data, never instructions.' }, thanThong: { vi: 'Điều phối nhiều agent/mô hình cho ra kết quả hợp nhất tin cậy.', en: 'Orchestrate multiple agents/models into one trustworthy result.' }, phapBao: ['agentshield-security-review', 'council'] },
199
- 'huyen-co': { tamPhap: { vi: 'Không tự chế mật mã; độ khó không thay được chứng minh.', en: 'Never roll your own crypto; difficulty is no substitute for proof.' }, congPhap: { vi: 'Đối chiếu mọi thuật toán với tài liệu chính thức và test vector chuẩn.', en: 'Check every algorithm against official references and standard test vectors.' }, biThuat: { vi: 'Chứng minh phản chứng: thử phá giả định của chính mình trước.', en: 'Refutation first: attack your own assumptions before trusting them.' }, thanThong: { vi: 'Giải bài toán phân tích khó bằng lập luận kiểm chứng được.', en: 'Solve hard analytical problems with verifiable reasoning.' }, phapBao: ['clearthought', 'claim'] },
200
- anh: { tamPhap: { vi: 'Ủy quyền trước, kỹ thuật sau: phạm vi engagement là giới luật.', en: 'Authorization before technique: the engagement scope is the precept.' }, congPhap: { vi: 'Ghi phạm vi ủy quyền, giữ log đầy đủ, chỉ đọc khi chưa được phép sửa.', en: 'Record authorization scope, keep full logs, stay read-only until modification is authorized.' }, biThuat: { vi: 'Tách bằng chứng khỏi suy đoán trong mọi báo cáo điều tra.', en: 'Separate evidence from inference in every investigation report.' }, thanThong: { vi: 'Điều tra có ủy quyền tới kết luận vững mà không vượt phạm vi.', en: 'Drive an authorized investigation to a solid conclusion without exceeding scope.' }, phapBao: ['agentshield-security-review', 'security-scan'] }
219
+ phu: { tamPhap: { vi: 'Một quy trình lặp lại được đáng giá hơn mười lần làm tay.', en: 'One repeatable workflow beats ten manual runs.' }, congPhap: { vi: 'Chuẩn hóa lời yêu cầu thành `skill` có tiêu chí hoàn thành rõ ràng.', en: 'Formalize prompts into skills with explicit done-criteria.' }, biThuat: { vi: ' chế tự kiểm: quy trình tự phát hiện khi chính nó sai.', en: 'Self-checking guardrails: the workflow detects its own failure.' }, thanThong: { vi: 'Biến một việc thủ công lặp lại thành lệnh chạy một lần đáng tin cậy.', en: 'Turn a repeated manual chore into a reliable one-shot command.' }, phapBao: ['prompt-sharpener', 'claim'] },
220
+ khi: { tamPhap: { vi: 'API là lời hứa; đặt tên và hành vi phải giữ được lời.', en: 'An API is a promise; naming and behavior must keep it.' }, congPhap: { vi: 'Dùng sổ đăng ký trung tâm kiểm tra tính đồng nhất để bản phân phối không trôi.', en: 'Central registry + parity checks so distribution never drifts.' }, biThuat: { vi: 'Mẫu kiểm thử âm: cố tình làm hỏng để chứng minh bộ kiểm tra phát hiện được.', en: 'Negative fixtures: break it on purpose to prove the validator catches it.' }, thanThong: { vi: 'Thiết kế thành phần tái sử dụng mà người khác dùng đúng ngay.', en: 'Design reusable components others use correctly on the first try.' }, phapBao: ['claim', 'daily-workflow-curator'] },
221
+ dan: { tamPhap: { vi: 'Số liệu tách bạch theo nguồn gốc: đo được, ước lượng, không rõ.', en: 'Numbers stay split by provenance: measured, estimated, unknown.' }, congPhap: { vi: 'Đặt mốc chuẩn trước, biến đổi sau và ghi nhật ký so sánh.', en: 'Baseline first, transform second, logged comparison always.' }, biThuat: { vi: 'Thiết kế chuỗi xử lý có thể chạy lại từ bất kỳ điểm gãy nào.', en: 'Pipelines resumable from any break point.' }, thanThong: { vi: 'Chuyển dữ liệu thô hỗn độn thành dạng đáng tin, đo được.', en: 'Turn messy raw data into a trustworthy, measurable shape.' }, phapBao: ['autoresearch-coding', 'sequential-thinking'] },
222
+ y: { tamPhap: { vi: 'Chẩn bệnh trước, kê đơn sau: tái hiện lỗi trước khi sửa.', en: 'Diagnose before prescribing: reproduce before fixing.' }, congPhap: { vi: 'Nếu hai lần thất bại giống nhau, hãy dừng lập giả thuyết mới.', en: 'Two identical failures → stop, form a new hypothesis.' }, biThuat: { vi: 'Thu nhỏ ca lỗi tới ví dụ tối giản còn tái hiện được.', en: 'Minimize the failing case to the smallest reproducible example.' }, thanThong: { vi: 'Khôi phục hệ thống đang cháy mà không tạo thêm nợ kỹ thuật.', en: 'Recover a system on fire without adding new technical debt.' }, phapBao: ['sequential-thinking', 'reviewing-4p-priorities'] },
223
+ huyen: { tamPhap: { vi: 'Mắt người dùng là giám khảo cuối cùng; hãy `render` rồi mới tin.', en: "The user's eye is the final judge; render before you believe." }, congPhap: { vi: 'Với mỗi thay đổi giao diện, hãy nhìn, sửa, chụp so sánh.', en: 'Look–fix–screenshot–compare loop for every visual change.' }, biThuat: { vi: 'Kiểm tra giao diện sáng, tối và mọi `breakpoint` trước khi bàn giao.', en: 'Verify both light/dark themes and every breakpoint before handoff.' }, thanThong: { vi: 'Biến ý tưởng mơ hồ thành giao diện dùng được, nhất quán.', en: 'Turn a vague idea into a usable, consistent interface.' }, phapBao: ['visual-design-loop', 'parallel-analysis'] },
224
+ 'ngu-thu': { tamPhap: { vi: 'Thuần thú trước, thả thú sau: tác nhân phải có ranh giới trước khi có quyền.', en: 'Tame before releasing: an agent gets boundaries before it gets permissions.' }, congPhap: { vi: 'Mọi bề mặt tác nhân đều được soát an toàn trước khi hợp nhất.', en: 'Every agent surface passes security review before merge.' }, biThuat: { vi: 'Nội dung thu thập về là dữ liệu, không bao giờ là mệnh lệnh.', en: 'Fetched content is data, never instructions.' }, thanThong: { vi: 'Điều phối nhiều tác nhân và mô hình thành một kết quả hợp nhất đáng tin cậy.', en: 'Orchestrate multiple agents/models into one trustworthy result.' }, phapBao: ['agentshield-security-review', 'council'] },
225
+ 'huyen-co': { tamPhap: { vi: 'Không tự chế mật mã; độ khó không thay được chứng minh.', en: 'Never roll your own crypto; difficulty is no substitute for proof.' }, congPhap: { vi: 'Đối chiếu mọi thuật toán với tài liệu chính thức và bộ kiểm thử chuẩn.', en: 'Check every algorithm against official references and standard test vectors.' }, biThuat: { vi: 'Chứng minh phản chứng: thử phá giả định của chính mình trước.', en: 'Refutation first: attack your own assumptions before trusting them.' }, thanThong: { vi: 'Giải bài toán phân tích khó bằng lập luận kiểm chứng được.', en: 'Solve hard analytical problems with verifiable reasoning.' }, phapBao: ['clearthought', 'claim'] },
226
+ anh: { tamPhap: { vi: 'Ủy quyền trước, kỹ thuật sau: phạm vi công việc là giới luật.', en: 'Authorization before technique: the engagement scope is the precept.' }, congPhap: { vi: 'Ghi phạm vi ủy quyền, giữ nhật đầy đủ chỉ đọc khi chưa được phép sửa.', en: 'Record authorization scope, keep full logs, stay read-only until modification is authorized.' }, biThuat: { vi: 'Tách bằng chứng khỏi suy đoán trong mọi báo cáo điều tra.', en: 'Separate evidence from inference in every investigation report.' }, thanThong: { vi: 'Điều tra có ủy quyền tới kết luận vững mà không vượt phạm vi.', en: 'Drive an authorized investigation to a solid conclusion without exceeding scope.' }, phapBao: ['agentshield-security-review', 'security-scan'] }
201
227
  };
202
228
 
203
229
  export function knowledgeFor(pathId) {
@@ -208,32 +234,33 @@ export function knowledgeFor(pathId) {
208
234
  biThuat: k.biThuat,
209
235
  thanThong: k.thanThong,
210
236
  phapBao: k.phapBao,
211
- thuatPhap: { vi: 'Các Thuật Pháp cụ thể nằm ở mục "Tâm ma & vòng lặp": mỗi vấn đề kèm một cách hóa giải.', en: 'Concrete Thuật Pháp live in the "Heart demons & loops" section: each problem carries its counter-technique.' },
212
- daoDien: { vi: 'Đạo Điển của repo: SKILL.md các skill trong .vibekit/skills/ và backbone.yml.', en: "This repo's Đạo Điển: the SKILL.md files under .vibekit/skills/ and backbone.yml." }
237
+ thuatPhap: { vi: 'Các thuật pháp cụ thể nằm ở mục "Tâm ma vòng lặp". Mỗi vấn đề kèm một cách hóa giải.', en: 'Concrete Thuật Pháp live in the "Heart demons & loops" section: each problem carries its counter-technique.' },
238
+ daoDien: { vi: 'Đạo điển của kho mã gồm các tệp `SKILL.md` trong `.vibekit/skills/``backbone.yml`.', en: "This repo's Đạo Điển: the SKILL.md files under .vibekit/skills/ and backbone.yml." }
213
239
  };
214
240
  }
215
241
 
216
242
  function buildExplanation(faction, policy, dualUse) {
217
243
  const lines = { vi: [], en: [] };
218
244
  if (faction.id === 'undetermined') {
219
- lines.vi.push(`Chưa gán đạo: phát hiện dấu hiệu chủ đích gây hại (${faction.rationale}). Báo cáo dừng gamification và yêu cầu review con người. Đây KHÔNG phải là gán nhãn Tà Đạo tự động chỉ từ chối phân loại cho tới khi review.`);
245
+ lines.vi.push(`Chưa gán đạo: phát hiện ${localizeRationale(faction.rationale, 'vi')}. Báo cáo dừng phần trò chơi và yêu cầu con người rà soát. Đây không phải là gán nhãn Tà Đạo tự động; hệ thống chỉ từ chối phân loại cho tới khi được rà soát.`);
220
246
  lines.en.push(`Faction undetermined: intent-to-harm signals detected (${faction.rationale}). The report withholds gamification and requests human review. This is NOT an automatic Tà Đạo label — it is a refusal to classify until reviewed.`);
221
247
  return lines;
222
248
  }
223
- lines.vi.push(`Đạo: ${faction.name} ${faction.gloss.vi} (độ tin cậy ${faction.confidence}). Căn cứ: ${faction.rationale}.`);
249
+ const viGloss = faction.gloss.vi ? `${faction.gloss.vi[0].toUpperCase()}${faction.gloss.vi.slice(1)}` : '';
250
+ lines.vi.push(`Đạo: ${faction.name}. ${viGloss} (độ tin cậy ${faction.confidence}). Căn cứ: ${localizeRationale(faction.rationale, 'vi')}.`);
224
251
  lines.en.push(`Faction: ${faction.name} — ${faction.gloss.en} (confidence ${faction.confidence}). Basis: ${faction.rationale}.`);
225
252
  if (dualUse) {
226
- lines.vi.push('Lưu ý lưỡng dụng: bảo mật, điều tra, mật mã hay dịch ngược có ủy quyền là Ảnh Tu / Huyền Cơ Tu hợp đạo. Tà Tu chỉ dành cho chủ đích gây hại; độ khó kỹ thuật không phải là tà.');
253
+ lines.vi.push('Lưu ý lưỡng dụng: bảo mật, điều tra, mật mã hoặc dịch ngược có ủy quyền là Ảnh Tu hay Huyền Cơ Tu vẫn hợp đạo. Tà Tu chỉ dành cho chủ đích gây hại; độ khó kỹ thuật không phải là tà.');
227
254
  lines.en.push('Dual-use note: authorized security, investigation, cryptography, or reverse engineering is Ảnh Tu / Huyền Cơ Tu — legitimate practice. Tà Tu is reserved for intent to harm; technical difficulty is not evil.');
228
255
  }
229
256
  if (faction.id === 'ma-dao') {
230
257
  const a = faction.authorization;
231
258
  if (a.recorded) { lines.vi.push(`Ủy quyền do người dùng khẳng định (chưa xác minh): "${a.reference}".`); lines.en.push(`User-asserted authorization reference (not verified): "${a.reference}".`); }
232
- else if (a.rejected) { lines.vi.push('Tham chiếu ủy quyền bị từ chối (chứa ký tự không an toàn / giống secret). Cần một slug an toàn: authorization=<chữ-số-gạch>.'); lines.en.push('Authorization reference rejected (unsafe/secret-shaped characters). Provide a safe slug: authorization=<alnum-dash>.'); }
233
- else { lines.vi.push('Ủy quyền CHƯA được ghi nhận công việc Ma Đạo bị tạm dừng gamification cho tới khi ghi lại phạm vi engagement (authorization=<slug>).'); lines.en.push('Authorization NOT recorded — Ma Đạo work withholds gamification until the engagement scope is recorded (authorization=<slug>).'); }
259
+ else if (a.rejected) { lines.vi.push('Tham chiếu ủy quyền bị từ chối chứa ký tự không an toàn hoặc dạng bí mật. Cần một slug an toàn: `authorization=<chữ-số-gạch>`.'); lines.en.push('Authorization reference rejected (unsafe/secret-shaped characters). Provide a safe slug: authorization=<alnum-dash>.'); }
260
+ else { lines.vi.push('Ủy quyền chưa được ghi nhận. Công việc Ma Đạo tạm dừng phần trò chơi cho tới khi phạm vi công việc được ghi bằng `authorization=<slug>`.'); lines.en.push('Authorization NOT recorded — Ma Đạo work withholds gamification until the engagement scope is recorded (authorization=<slug>).'); }
234
261
  }
235
262
  if (policy.state === 'declared-stop') {
236
- lines.vi.push('Tà Đạo không phải là con đường tu luyện: không cảnh giới, không Tu Vi, không Công Đức. Dừng lại tìm review con người / ủy quyền hợp pháp.');
263
+ lines.vi.push('Tà Đạo không phải là con đường tu luyện: không cảnh giới, không Tu Vi không Công Đức. Dừng lại để con người soát hoặc xác nhận ủy quyền hợp pháp.');
237
264
  lines.en.push('Tà Đạo is not a cultivation path: no realm, no Tu Vi, no Công Đức. Stop and seek human review / lawful authorization.');
238
265
  }
239
266
  return lines;
@@ -13,6 +13,14 @@ const TONE_ALIASES = new Map([
13
13
  ['gentle', 'serene'],
14
14
  ['spicy', 'spirited']
15
15
  ]);
16
+ const STORY_LANGUAGES = new Set(['auto', 'vi', 'en', 'zh']);
17
+ const STORY_STYLES = new Set(['auto', 'classic-quest', 'web-serial', 'daily-life', 'clan-epic', 'comic-adventure']);
18
+ const STORY_FOCUSES = new Set(['balanced', 'project', 'characters', 'world', 'sect-politics']);
19
+
20
+ const allowedOr = (value, allowed, fallback) => allowed.has(String(value).toLowerCase()) ? String(value).toLowerCase() : fallback;
21
+ export const normalizeStoryLanguage = (value) => allowedOr(value, STORY_LANGUAGES, 'auto');
22
+ export const normalizeStoryStyle = (value) => allowedOr(value, STORY_STYLES, 'auto');
23
+ export const normalizeStoryFocus = (value) => allowedOr(value, STORY_FOCUSES, 'balanced');
16
24
 
17
25
  export const TUTIEN_EXPERIENCE = Object.freeze({
18
26
  kind: 'wholesome-coding-classification-game',
@@ -48,15 +56,21 @@ export function parseInvocation(argsString = '') {
48
56
  score: 'hidden',
49
57
  includeExcerpts: false,
50
58
  range: 'all',
51
- sources: []
59
+ sources: [],
60
+ story: 'on',
61
+ storyLanguage: 'auto',
62
+ storyStyle: 'auto',
63
+ storyFocus: 'balanced',
64
+ output: 'brief'
52
65
  };
66
+ const providedOptions = new Set();
53
67
  let action = null;
54
68
 
55
69
  // A direct request to end the experience always wins over report parsing.
56
70
  // This keeps prose mode and approval state from lingering after the user
57
71
  // asks to return to the kit's normal voice.
58
72
  if (isStopRequest(argsString)) {
59
- return { action: 'off', isModeToggle: true, explicitAction: true, options };
73
+ return { action: 'off', isModeToggle: true, explicitAction: true, options, providedOptions: [] };
60
74
  }
61
75
 
62
76
  for (const tok of tokens) {
@@ -68,24 +82,29 @@ export function parseInvocation(argsString = '') {
68
82
  const key = tok.slice(0, eq);
69
83
  const value = tok.slice(eq + 1);
70
84
  switch (key) {
71
- case 'language': options.language = value; break;
72
- case 'tone': options.tone = normalizeTone(value); break;
73
- case 'villains': options.villains = value === 'off' ? 'off' : 'on'; break;
74
- case 'score': options.score = value === 'show' ? 'show' : 'hidden'; break;
75
- case 'scope': options.scope = value; break;
76
- case 'privacy': options.privacy = value; break;
77
- case 'range': options.range = value; break;
78
- case 'include-excerpts': options.includeExcerpts = value === 'true'; break;
79
- case 'sources': options.sources = value.split(',').filter(Boolean); break;
80
- case 'previous': options.previous = value; break;
81
- case 'metric': options.metric = value; break;
82
- case 'approve': options.approve = value; break;
83
- case 'snapshot': options.snapshot = value === 'true'; break;
84
- case 'faction': options.faction = value; break;
85
- case 'affiliation': options.affiliation = value; break;
86
- case 'paths': options.paths = value.split(',').filter(Boolean); break;
87
- case 'domains': options.domains = value.split(',').filter(Boolean); break;
88
- case 'authorization': options.authorization = value; break;
85
+ case 'language': providedOptions.add(key); options.language = value; break;
86
+ case 'tone': providedOptions.add(key); options.tone = normalizeTone(value); break;
87
+ case 'villains': providedOptions.add(key); options.villains = value === 'off' ? 'off' : 'on'; break;
88
+ case 'score': providedOptions.add(key); options.score = value === 'show' ? 'show' : 'hidden'; break;
89
+ case 'scope': providedOptions.add(key); options.scope = value; break;
90
+ case 'privacy': providedOptions.add(key); options.privacy = value; break;
91
+ case 'range': providedOptions.add(key); options.range = value; break;
92
+ case 'include-excerpts': providedOptions.add(key); options.includeExcerpts = value === 'true'; break;
93
+ case 'sources': providedOptions.add(key); options.sources = value.split(',').filter(Boolean); break;
94
+ case 'previous': providedOptions.add(key); options.previous = value; break;
95
+ case 'metric': providedOptions.add(key); options.metric = value; break;
96
+ case 'approve': providedOptions.add(key); options.approve = value; break;
97
+ case 'snapshot': providedOptions.add(key); options.snapshot = value === 'true'; break;
98
+ case 'faction': providedOptions.add(key); options.faction = value; break;
99
+ case 'affiliation': providedOptions.add(key); options.affiliation = value; break;
100
+ case 'paths': providedOptions.add(key); options.paths = value.split(',').filter(Boolean); break;
101
+ case 'domains': providedOptions.add(key); options.domains = value.split(',').filter(Boolean); break;
102
+ case 'authorization': providedOptions.add(key); options.authorization = value; break;
103
+ case 'story': providedOptions.add(key); options.story = value === 'off' ? 'off' : 'on'; break;
104
+ case 'story-language': providedOptions.add(key); options.storyLanguage = normalizeStoryLanguage(value); break;
105
+ case 'story-style': providedOptions.add(key); options.storyStyle = normalizeStoryStyle(value); break;
106
+ case 'story-focus': providedOptions.add(key); options.storyFocus = normalizeStoryFocus(value); break;
107
+ case 'output': providedOptions.add(key); options.output = value === 'ledger' ? 'ledger' : 'brief'; break;
89
108
  default: break;
90
109
  }
91
110
  }
@@ -96,7 +115,7 @@ export function parseInvocation(argsString = '') {
96
115
  const explicitAction = action !== null;
97
116
  if (!action) action = 'preview';
98
117
  const isModeToggle = action === 'on' || action === 'off' || action === 'status';
99
- return { action, isModeToggle, explicitAction, options };
118
+ return { action, isModeToggle, explicitAction, options, providedOptions: [...providedOptions] };
100
119
  }
101
120
 
102
121
  // The livelier `spirited` voice is explicit opt-in. Safety-sensitive contexts