kenaz 0.3.3 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/core/.agents/skills/typesafe-ai/LICENSE +21 -21
  2. package/core/.agents/skills/typesafe-ai/SKILL.md +149 -149
  3. package/core/.claude/commands/Ansuz.md +15 -2
  4. package/core/.claude/hooks/__tests__/task-2395-project-registration.test.js +84 -0
  5. package/core/.claude/hooks/handoff-staleness.js +2 -2
  6. package/core/.claude/hooks/session-init.ps1 +49 -49
  7. package/core/.claude/hooks/turn-context.js +50 -2
  8. package/core/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -26
  9. package/core/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -97
  10. package/core/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -101
  11. package/core/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -31
  12. package/core/.claude/skills/ui-ux-pro-max/data/products.csv +96 -96
  13. package/core/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  14. package/core/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  15. package/core/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  16. package/core/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  17. package/core/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  18. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  19. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  20. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  21. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  22. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  23. package/core/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  24. package/core/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  25. package/core/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  26. package/core/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  27. package/core/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -68
  28. package/core/.claude/skills/ui-ux-pro-max/data/typography.csv +57 -57
  29. package/core/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  30. package/core/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  31. package/core/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  32. package/core/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -253
  33. package/core/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  34. package/core/.claude/skills/ui-ux-pro-max/scripts/search.py +106 -106
  35. package/core/.collaboration/core/task-api.js +1 -4
  36. package/core/.formation/README.md +21 -146
  37. package/core/.formation/bifrost/codex-doctor.js +37 -2
  38. package/core/.formation/bifrost/codex-doctor.test.js +18 -0
  39. package/core/.formation/bifrost/launch.js +1 -1
  40. package/core/.formation/bifrost/openai/codex-hook-shim.js +6 -0
  41. package/core/.formation/bifrost/openai/codex-hook-shim.test.js +11 -1
  42. package/core/.formation/bifrost/setup-codex.js +3 -0
  43. package/core/.formation/native/claude/README.md +1 -1
  44. package/core/.formation/role-map.yaml +3 -3
  45. package/core/.formation/spec/task_operations.parity.test.js +0 -1
  46. package/core/.formation/spec/task_operations.yaml +3 -3
  47. package/core/.formation/tests/hello.txt +2 -2
  48. package/core/.formation/tools/__tests__/subagent-bifrost-guard.test.js +4 -4
  49. package/core/.formation/tools/dashboard-models-chain.test.js +0 -6
  50. package/core/.formation/tools/dispatch-detail/cross-project-worktree.md +1 -9
  51. package/core/.formation/tools/dispatch-detail/worktree-subagent-mode.md +2 -2
  52. package/core/.formation/tools/dispatch.js +33 -554
  53. package/core/.formation/tools/mcp-allowlist.test.js +0 -1
  54. package/core/.formation/tools/post-complete/task2345.test.js +0 -5
  55. package/core/.formation/tools/pre-dispatch-snapshot.test.js +0 -100
  56. package/core/.formation/tools/prompt.js +33 -1623
  57. package/core/.formation/tools/prompt.test.js +26 -594
  58. package/core/.formation/unit/do.yaml +2 -4
  59. package/core/.kenaz/knowledge/ladybug_2c51da1e_shadow_file_frame_group.patch +163 -163
  60. package/core/.kenaz/knowledge/ladybug_30cf85690e_shadow_page_read_during_checkpoint.patch +393 -393
  61. package/core/.kenaz/knowledge/ladybug_7a17858d3a_node_group_delete_lock.patch +102 -102
  62. package/core/.kenaz/knowledge/ladybug_926a0ba1_column_checkpoint.patch +412 -412
  63. package/core/.kenaz/knowledge/ladybug_a346c4c4b6_pk_index_header_pages.patch +144 -144
  64. package/core/.kenaz/knowledge/ladybug_ba5f38815b_csr_node_group.patch +86 -86
  65. package/core/.kenaz/muninn_episode_write.ps1 +17 -17
  66. package/core/.kenaz/specialist/field_report_watermark.json +1 -1
  67. package/core/.kenaz/specialist/memory_guard_fired.json +1 -1
  68. package/core/.kenaz/specialist/memory_guard_trigger_cache.json +1 -1
  69. package/core/.kenaz/specialist/t1777_probe.txt +1 -1
  70. package/core/.matrix/index.matrix +5 -5
  71. package/core/.rule/general/agent-workflow.yaml +4 -4
  72. package/core/.rule/general/file-size-threshold.yaml +16 -4
  73. package/core/.rule/general/rust-verify-target.yaml +0 -1
  74. package/core/.rule/general/system-invariants.yaml +8 -25
  75. package/core/.specialist/Ansuz/SYSTEM_DOC.md +17 -42
  76. package/core/.specialist/Ansuz/capability.yaml +7 -14
  77. package/core/.specialist/Ansuz/concepts/formation_quick_ref.yaml +4 -11
  78. package/core/.specialist/Ansuz/elixir.yaml +3 -4
  79. package/core/.specialist/Ansuz/identity_contract.yaml +1 -1
  80. package/core/.specialist/Ansuz/knowledge.yaml +7 -10
  81. package/core/.specialist/Ansuz/rule.yaml +2 -2
  82. package/core/.specialist/Ansuz/tools/verify-and-land.js +22 -0
  83. package/core/.specialist/Ansuz/tools/verify-and-land.test.js +59 -5
  84. package/core/.specialist/Ansuz/workflow.yaml +7 -11
  85. package/core/.specialist/Forseti/core.yaml +1 -1
  86. package/core/.specialist/Heimdall/SKILL.md +1 -1
  87. package/core/.specialist/Heimdall/core.yaml +2 -2
  88. package/core/.specialist/Huginn/rule.yaml +1 -1
  89. package/core/.specialist/tools/README.md +2 -2
  90. package/core/.specialist/tools/__tests__/freya-cli-contract.test.js +0 -1
  91. package/core/.system/collaboration/README.md +1 -1
  92. package/core/.system/formation/LEGACY_SKILLS.md +2 -0
  93. package/core/.system/formation/POST_COMPLETE.md +2 -0
  94. package/core/.system/formation/README.md +2 -0
  95. package/core/KENAZ_CORE_VERSION +1 -1
  96. package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +355 -355
  97. package/core/dev/JEV_INTEGRATION_PLAN.md +189 -189
  98. package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +13 -13
  99. package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +9 -9
  100. package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +14 -14
  101. package/core/dev/design/matrix_v2_EXAMPLE.matrix +67 -67
  102. package/core/dev/jev-eval/ACTIVE_CORRECTION.md +52 -52
  103. package/core/dev/jev-eval/CONTEXT_REVIEW.md +31 -31
  104. package/core/dev/jev-eval/EVALUATION_STATUS.md +39 -39
  105. package/core/dev/jev-eval/HISTORICAL_CORPUS.md +33 -33
  106. package/core/dev/jev-eval/README.md +99 -99
  107. package/core/dev/jev-eval/THALAMUS_RANKING.md +58 -58
  108. package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +32 -32
  109. package/core/dev/jev-eval/reports/context-review-2026-09-20.json +48 -48
  110. package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +52 -52
  111. package/core/dev/pipeline/SELF_ENHANCEMENT_STATUS.json.bak +47 -47
  112. package/core/dev/pipeline/tasks/.gitkeep +1 -1
  113. package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +27 -27
  114. package/core/dev/scripts/check-file-size.js +44 -17
  115. package/core/dev/scripts/init_git.sh +0 -0
  116. package/core/dev/scripts/init_project.sh +0 -0
  117. package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +536 -536
  118. package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +1978 -1978
  119. package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +140 -140
  120. package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +173 -173
  121. package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +168 -168
  122. package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +126 -126
  123. package/core/dev/scripts/multi_agent_scheduler.sh +0 -0
  124. package/core/dev/scripts/run_once.sh +0 -0
  125. package/core/dev/scripts/setup_mcp.sh +0 -0
  126. package/core/dev/scripts/setup_rag.sh +0 -0
  127. package/core/dev/scripts/start_dev_agent.sh +0 -0
  128. package/core/dev/scripts/start_multi_agent.sh +0 -0
  129. package/core/dev/scripts/sync_task_queue.sh +0 -0
  130. package/core/k-cli/README.md +1 -94
  131. package/core/k-cli/test/TEST_SPEC.md +5 -22
  132. package/core/k-cli/test/run.sh +1 -67
  133. package/core/plugins/kenaz/commands/Amelia.md +1 -1
  134. package/core/plugins/kenaz/commands/Ansuz.md +16 -3
  135. package/core/plugins/kenaz/scripts/kenaz-mode.js +11 -1
  136. package/core/plugins/kenaz/scripts/sync.js +6 -2
  137. package/core/plugins/kenaz/scripts/ygg.js +13 -1
  138. package/core/plugins/kenaz/skills/product_manager/SKILL.md +12 -12
  139. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/charts.csv +26 -26
  140. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/colors.csv +97 -97
  141. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/icons.csv +101 -101
  142. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/landing.csv +31 -31
  143. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/products.csv +96 -96
  144. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
  145. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
  146. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  147. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  148. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  149. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  150. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  151. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  152. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  153. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  154. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  155. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  156. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  157. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  158. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/styles.csv +68 -68
  159. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/typography.csv +57 -57
  160. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
  161. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  162. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
  163. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/core.py +253 -253
  164. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
  165. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/search.py +106 -106
  166. package/lib/cli.js +11 -4
  167. package/package.json +11 -7
  168. package/vendor/install-kenaz-cli.js +18 -7
  169. package/core/.formation/legion/forge.yaml +0 -299
  170. package/core/.formation/legion/hive.yaml +0 -238
  171. package/core/.formation/squad/blitz.yaml +0 -192
  172. package/core/.formation/squad/strategy-tribunal.yaml +0 -354
  173. package/core/.formation/squad/strategy.yaml +0 -349
  174. package/core/.formation/squad/sweep.yaml +0 -208
  175. package/core/.formation/tools/broadcast.js +0 -103
  176. package/core/.formation/tools/dispatch-dryrun.test.js +0 -54
  177. package/core/.formation/tools/dispatch-notifier.js +0 -84
  178. package/core/.formation/tools/formations.js +0 -1203
  179. package/core/.formation/tools/headless-branch-recovery.test.js +0 -64
  180. package/core/.formation/tools/headless-dryrun.test.js +0 -79
  181. package/core/.formation/tools/headless-v2.js +0 -659
  182. package/core/.formation/tools/headless.js +0 -1071
  183. package/core/.formation/tools/legacy-scheduler.js +0 -1994
  184. package/core/.formation/tools/logger.js +0 -273
  185. package/core/.formation/tools/memory-loader.js +0 -422
  186. package/core/.formation/tools/process-state.js +0 -33
  187. package/core/.formation/tools/remote-conflict.js +0 -98
  188. package/core/.formation/tools/runner.js +0 -1332
  189. package/core/.formation/tools/task-utils.js +0 -344
  190. package/core/.formation/tools/task2028-headless-worktree.test.js +0 -112
  191. package/core/.formation/tools/tests/headless-mcp-args-plumbing.test.js +0 -123
  192. package/core/.formation/tools/worktree-leak.test.js +0 -162
  193. package/core/k-cli/dist/alaya/run.js +0 -91
  194. package/core/k-cli/dist/core/output.js +0 -24
  195. package/core/k-cli/dist/core/process.js +0 -38
  196. package/core/k-cli/dist/core/project.js +0 -80
  197. package/core/k-cli/dist/core/spawn.js +0 -268
  198. package/core/k-cli/dist/core/types.js +0 -2
  199. package/core/k-cli/dist/dashboard/update.js +0 -53
  200. package/core/k-cli/dist/dashboard/version.js +0 -20
  201. package/core/k-cli/dist/dispatch/run.js +0 -241
  202. package/core/k-cli/dist/dispatch/status.js +0 -103
  203. package/core/k-cli/dist/index.js +0 -283
  204. package/core/k-cli/dist/project/initialize.js +0 -301
  205. package/core/k-cli/dist/project/install.js +0 -89
  206. package/core/k-cli/dist/project/status.js +0 -138
  207. package/core/k-cli/dist/specialist/list.js +0 -100
  208. package/core/k-cli/dist/specialist/run.js +0 -93
  209. package/core/k-cli/dist/task/create.js +0 -194
  210. package/core/k-cli/dist/task/delete.js +0 -98
  211. package/core/k-cli/dist/task/get.js +0 -55
  212. package/core/k-cli/dist/task/list.js +0 -58
  213. package/core/k-cli/dist/task/submit.js +0 -156
  214. package/core/k-cli/dist/ygg/run.js +0 -51
  215. package/core/k-cli/node_modules/.bin/yaml +0 -16
  216. package/core/k-cli/node_modules/.bin/yaml.cmd +0 -17
  217. package/core/k-cli/node_modules/.bin/yaml.ps1 +0 -28
  218. package/core/k-cli/node_modules/.package-lock.json +0 -23
  219. package/core/k-cli/node_modules/yaml/LICENSE +0 -13
  220. package/core/k-cli/node_modules/yaml/README.md +0 -172
  221. package/core/k-cli/node_modules/yaml/bin.mjs +0 -11
  222. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-collection.js +0 -88
  223. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-doc.js +0 -43
  224. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-node.js +0 -109
  225. package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-scalar.js +0 -86
  226. package/core/k-cli/node_modules/yaml/browser/dist/compose/composer.js +0 -217
  227. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-map.js +0 -115
  228. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +0 -198
  229. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +0 -49
  230. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-end.js +0 -37
  231. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +0 -207
  232. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +0 -223
  233. package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-props.js +0 -146
  234. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-contains-newline.js +0 -34
  235. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +0 -26
  236. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +0 -15
  237. package/core/k-cli/node_modules/yaml/browser/dist/compose/util-map-includes.js +0 -13
  238. package/core/k-cli/node_modules/yaml/browser/dist/doc/Document.js +0 -335
  239. package/core/k-cli/node_modules/yaml/browser/dist/doc/anchors.js +0 -71
  240. package/core/k-cli/node_modules/yaml/browser/dist/doc/applyReviver.js +0 -55
  241. package/core/k-cli/node_modules/yaml/browser/dist/doc/createNode.js +0 -88
  242. package/core/k-cli/node_modules/yaml/browser/dist/doc/directives.js +0 -176
  243. package/core/k-cli/node_modules/yaml/browser/dist/errors.js +0 -57
  244. package/core/k-cli/node_modules/yaml/browser/dist/index.js +0 -17
  245. package/core/k-cli/node_modules/yaml/browser/dist/log.js +0 -11
  246. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Alias.js +0 -114
  247. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Collection.js +0 -147
  248. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Node.js +0 -38
  249. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Pair.js +0 -36
  250. package/core/k-cli/node_modules/yaml/browser/dist/nodes/Scalar.js +0 -24
  251. package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLMap.js +0 -144
  252. package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +0 -113
  253. package/core/k-cli/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +0 -63
  254. package/core/k-cli/node_modules/yaml/browser/dist/nodes/identity.js +0 -36
  255. package/core/k-cli/node_modules/yaml/browser/dist/nodes/toJS.js +0 -37
  256. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-scalar.js +0 -214
  257. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-stringify.js +0 -61
  258. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-visit.js +0 -97
  259. package/core/k-cli/node_modules/yaml/browser/dist/parse/cst.js +0 -98
  260. package/core/k-cli/node_modules/yaml/browser/dist/parse/lexer.js +0 -717
  261. package/core/k-cli/node_modules/yaml/browser/dist/parse/line-counter.js +0 -39
  262. package/core/k-cli/node_modules/yaml/browser/dist/parse/parser.js +0 -967
  263. package/core/k-cli/node_modules/yaml/browser/dist/public-api.js +0 -102
  264. package/core/k-cli/node_modules/yaml/browser/dist/schema/Schema.js +0 -37
  265. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/map.js +0 -17
  266. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/null.js +0 -15
  267. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/seq.js +0 -17
  268. package/core/k-cli/node_modules/yaml/browser/dist/schema/common/string.js +0 -14
  269. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/bool.js +0 -19
  270. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/float.js +0 -43
  271. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/int.js +0 -38
  272. package/core/k-cli/node_modules/yaml/browser/dist/schema/core/schema.js +0 -23
  273. package/core/k-cli/node_modules/yaml/browser/dist/schema/json/schema.js +0 -62
  274. package/core/k-cli/node_modules/yaml/browser/dist/schema/tags.js +0 -96
  275. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +0 -58
  276. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +0 -26
  277. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +0 -46
  278. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +0 -71
  279. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +0 -64
  280. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +0 -74
  281. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +0 -78
  282. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +0 -39
  283. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +0 -93
  284. package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +0 -101
  285. package/core/k-cli/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +0 -146
  286. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringify.js +0 -129
  287. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +0 -153
  288. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyComment.js +0 -20
  289. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +0 -85
  290. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +0 -24
  291. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyPair.js +0 -150
  292. package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyString.js +0 -336
  293. package/core/k-cli/node_modules/yaml/browser/dist/util.js +0 -11
  294. package/core/k-cli/node_modules/yaml/browser/dist/visit.js +0 -233
  295. package/core/k-cli/node_modules/yaml/browser/index.js +0 -5
  296. package/core/k-cli/node_modules/yaml/browser/package.json +0 -3
  297. package/core/k-cli/node_modules/yaml/dist/cli.d.ts +0 -8
  298. package/core/k-cli/node_modules/yaml/dist/cli.mjs +0 -201
  299. package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.d.ts +0 -11
  300. package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.js +0 -90
  301. package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.d.ts +0 -7
  302. package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.js +0 -45
  303. package/core/k-cli/node_modules/yaml/dist/compose/compose-node.d.ts +0 -29
  304. package/core/k-cli/node_modules/yaml/dist/compose/compose-node.js +0 -112
  305. package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.d.ts +0 -5
  306. package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.js +0 -88
  307. package/core/k-cli/node_modules/yaml/dist/compose/composer.d.ts +0 -63
  308. package/core/k-cli/node_modules/yaml/dist/compose/composer.js +0 -222
  309. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.d.ts +0 -6
  310. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.js +0 -117
  311. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +0 -11
  312. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.js +0 -200
  313. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +0 -6
  314. package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.js +0 -51
  315. package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.d.ts +0 -6
  316. package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.js +0 -39
  317. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +0 -7
  318. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.js +0 -209
  319. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +0 -10
  320. package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.js +0 -225
  321. package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.d.ts +0 -23
  322. package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.js +0 -148
  323. package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.d.ts +0 -2
  324. package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.js +0 -36
  325. package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +0 -2
  326. package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.js +0 -28
  327. package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +0 -3
  328. package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.js +0 -17
  329. package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.d.ts +0 -4
  330. package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.js +0 -15
  331. package/core/k-cli/node_modules/yaml/dist/doc/Document.d.ts +0 -141
  332. package/core/k-cli/node_modules/yaml/dist/doc/Document.js +0 -337
  333. package/core/k-cli/node_modules/yaml/dist/doc/anchors.d.ts +0 -24
  334. package/core/k-cli/node_modules/yaml/dist/doc/anchors.js +0 -76
  335. package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.d.ts +0 -9
  336. package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.js +0 -57
  337. package/core/k-cli/node_modules/yaml/dist/doc/createNode.d.ts +0 -17
  338. package/core/k-cli/node_modules/yaml/dist/doc/createNode.js +0 -90
  339. package/core/k-cli/node_modules/yaml/dist/doc/directives.d.ts +0 -49
  340. package/core/k-cli/node_modules/yaml/dist/doc/directives.js +0 -178
  341. package/core/k-cli/node_modules/yaml/dist/errors.d.ts +0 -21
  342. package/core/k-cli/node_modules/yaml/dist/errors.js +0 -62
  343. package/core/k-cli/node_modules/yaml/dist/index.d.ts +0 -25
  344. package/core/k-cli/node_modules/yaml/dist/index.js +0 -50
  345. package/core/k-cli/node_modules/yaml/dist/log.d.ts +0 -3
  346. package/core/k-cli/node_modules/yaml/dist/log.js +0 -19
  347. package/core/k-cli/node_modules/yaml/dist/nodes/Alias.d.ts +0 -29
  348. package/core/k-cli/node_modules/yaml/dist/nodes/Alias.js +0 -116
  349. package/core/k-cli/node_modules/yaml/dist/nodes/Collection.d.ts +0 -73
  350. package/core/k-cli/node_modules/yaml/dist/nodes/Collection.js +0 -151
  351. package/core/k-cli/node_modules/yaml/dist/nodes/Node.d.ts +0 -53
  352. package/core/k-cli/node_modules/yaml/dist/nodes/Node.js +0 -40
  353. package/core/k-cli/node_modules/yaml/dist/nodes/Pair.d.ts +0 -22
  354. package/core/k-cli/node_modules/yaml/dist/nodes/Pair.js +0 -39
  355. package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.d.ts +0 -43
  356. package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.js +0 -27
  357. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.d.ts +0 -53
  358. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.js +0 -147
  359. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +0 -60
  360. package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.js +0 -115
  361. package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +0 -4
  362. package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.js +0 -65
  363. package/core/k-cli/node_modules/yaml/dist/nodes/identity.d.ts +0 -23
  364. package/core/k-cli/node_modules/yaml/dist/nodes/identity.js +0 -53
  365. package/core/k-cli/node_modules/yaml/dist/nodes/toJS.d.ts +0 -29
  366. package/core/k-cli/node_modules/yaml/dist/nodes/toJS.js +0 -39
  367. package/core/k-cli/node_modules/yaml/dist/options.d.ts +0 -350
  368. package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.d.ts +0 -64
  369. package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.js +0 -218
  370. package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.d.ts +0 -8
  371. package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.js +0 -63
  372. package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.d.ts +0 -39
  373. package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.js +0 -99
  374. package/core/k-cli/node_modules/yaml/dist/parse/cst.d.ts +0 -109
  375. package/core/k-cli/node_modules/yaml/dist/parse/cst.js +0 -112
  376. package/core/k-cli/node_modules/yaml/dist/parse/lexer.d.ts +0 -87
  377. package/core/k-cli/node_modules/yaml/dist/parse/lexer.js +0 -719
  378. package/core/k-cli/node_modules/yaml/dist/parse/line-counter.d.ts +0 -22
  379. package/core/k-cli/node_modules/yaml/dist/parse/line-counter.js +0 -41
  380. package/core/k-cli/node_modules/yaml/dist/parse/parser.d.ts +0 -84
  381. package/core/k-cli/node_modules/yaml/dist/parse/parser.js +0 -972
  382. package/core/k-cli/node_modules/yaml/dist/public-api.d.ts +0 -44
  383. package/core/k-cli/node_modules/yaml/dist/public-api.js +0 -107
  384. package/core/k-cli/node_modules/yaml/dist/schema/Schema.d.ts +0 -17
  385. package/core/k-cli/node_modules/yaml/dist/schema/Schema.js +0 -39
  386. package/core/k-cli/node_modules/yaml/dist/schema/common/map.d.ts +0 -2
  387. package/core/k-cli/node_modules/yaml/dist/schema/common/map.js +0 -19
  388. package/core/k-cli/node_modules/yaml/dist/schema/common/null.d.ts +0 -4
  389. package/core/k-cli/node_modules/yaml/dist/schema/common/null.js +0 -17
  390. package/core/k-cli/node_modules/yaml/dist/schema/common/seq.d.ts +0 -2
  391. package/core/k-cli/node_modules/yaml/dist/schema/common/seq.js +0 -19
  392. package/core/k-cli/node_modules/yaml/dist/schema/common/string.d.ts +0 -2
  393. package/core/k-cli/node_modules/yaml/dist/schema/common/string.js +0 -16
  394. package/core/k-cli/node_modules/yaml/dist/schema/core/bool.d.ts +0 -4
  395. package/core/k-cli/node_modules/yaml/dist/schema/core/bool.js +0 -21
  396. package/core/k-cli/node_modules/yaml/dist/schema/core/float.d.ts +0 -4
  397. package/core/k-cli/node_modules/yaml/dist/schema/core/float.js +0 -47
  398. package/core/k-cli/node_modules/yaml/dist/schema/core/int.d.ts +0 -4
  399. package/core/k-cli/node_modules/yaml/dist/schema/core/int.js +0 -42
  400. package/core/k-cli/node_modules/yaml/dist/schema/core/schema.d.ts +0 -1
  401. package/core/k-cli/node_modules/yaml/dist/schema/core/schema.js +0 -25
  402. package/core/k-cli/node_modules/yaml/dist/schema/json/schema.d.ts +0 -2
  403. package/core/k-cli/node_modules/yaml/dist/schema/json/schema.js +0 -64
  404. package/core/k-cli/node_modules/yaml/dist/schema/json-schema.d.ts +0 -69
  405. package/core/k-cli/node_modules/yaml/dist/schema/tags.d.ts +0 -48
  406. package/core/k-cli/node_modules/yaml/dist/schema/tags.js +0 -99
  407. package/core/k-cli/node_modules/yaml/dist/schema/types.d.ts +0 -92
  408. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +0 -2
  409. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.js +0 -70
  410. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +0 -7
  411. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.js +0 -29
  412. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +0 -4
  413. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.js +0 -50
  414. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +0 -5
  415. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.js +0 -76
  416. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +0 -9
  417. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.js +0 -68
  418. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +0 -22
  419. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.js +0 -77
  420. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +0 -10
  421. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +0 -82
  422. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +0 -1
  423. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.js +0 -41
  424. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +0 -28
  425. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.js +0 -96
  426. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +0 -6
  427. package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +0 -105
  428. package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +0 -34
  429. package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.js +0 -151
  430. package/core/k-cli/node_modules/yaml/dist/stringify/stringify.d.ts +0 -21
  431. package/core/k-cli/node_modules/yaml/dist/stringify/stringify.js +0 -132
  432. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +0 -17
  433. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.js +0 -155
  434. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.d.ts +0 -10
  435. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.js +0 -24
  436. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +0 -4
  437. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.js +0 -87
  438. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +0 -2
  439. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.js +0 -26
  440. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.d.ts +0 -3
  441. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.js +0 -152
  442. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.d.ts +0 -9
  443. package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.js +0 -338
  444. package/core/k-cli/node_modules/yaml/dist/test-events.d.ts +0 -4
  445. package/core/k-cli/node_modules/yaml/dist/test-events.js +0 -134
  446. package/core/k-cli/node_modules/yaml/dist/util.d.ts +0 -16
  447. package/core/k-cli/node_modules/yaml/dist/util.js +0 -28
  448. package/core/k-cli/node_modules/yaml/dist/visit.d.ts +0 -102
  449. package/core/k-cli/node_modules/yaml/dist/visit.js +0 -236
  450. package/core/k-cli/node_modules/yaml/package.json +0 -97
  451. package/core/k-cli/node_modules/yaml/util.js +0 -2
@@ -1,106 +1,106 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
5
- Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
6
- python search.py "<query>" --design-system [-p "Project Name"]
7
- python search.py "<query>" --design-system --persist [-p "Project Name"] [--page "dashboard"]
8
-
9
- Domains: style, prompt, color, chart, landing, product, ux, typography
10
- Stacks: html-tailwind, react, nextjs
11
-
12
- Persistence (Master + Overrides pattern):
13
- --persist Save design system to design-system/MASTER.md
14
- --page Also create a page-specific override file in design-system/pages/
15
- """
16
-
17
- import argparse
18
- from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
19
- from design_system import generate_design_system, persist_design_system
20
-
21
-
22
- def format_output(result):
23
- """Format results for Claude consumption (token-optimized)"""
24
- if "error" in result:
25
- return f"Error: {result['error']}"
26
-
27
- output = []
28
- if result.get("stack"):
29
- output.append(f"## UI Pro Max Stack Guidelines")
30
- output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
31
- else:
32
- output.append(f"## UI Pro Max Search Results")
33
- output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
34
- output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
35
-
36
- for i, row in enumerate(result['results'], 1):
37
- output.append(f"### Result {i}")
38
- for key, value in row.items():
39
- value_str = str(value)
40
- if len(value_str) > 300:
41
- value_str = value_str[:300] + "..."
42
- output.append(f"- **{key}:** {value_str}")
43
- output.append("")
44
-
45
- return "\n".join(output)
46
-
47
-
48
- if __name__ == "__main__":
49
- parser = argparse.ArgumentParser(description="UI Pro Max Search")
50
- parser.add_argument("query", help="Search query")
51
- parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
52
- parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help="Stack-specific search (html-tailwind, react, nextjs)")
53
- parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
54
- parser.add_argument("--json", action="store_true", help="Output as JSON")
55
- # Design system generation
56
- parser.add_argument("--design-system", "-ds", action="store_true", help="Generate complete design system recommendation")
57
- parser.add_argument("--project-name", "-p", type=str, default=None, help="Project name for design system output")
58
- parser.add_argument("--format", "-f", choices=["ascii", "markdown"], default="ascii", help="Output format for design system")
59
- # Persistence (Master + Overrides pattern)
60
- parser.add_argument("--persist", action="store_true", help="Save design system to design-system/MASTER.md (creates hierarchical structure)")
61
- parser.add_argument("--page", type=str, default=None, help="Create page-specific override file in design-system/pages/")
62
- parser.add_argument("--output-dir", "-o", type=str, default=None, help="Output directory for persisted files (default: current directory)")
63
-
64
- args = parser.parse_args()
65
-
66
- # Design system takes priority
67
- if args.design_system:
68
- result = generate_design_system(
69
- args.query,
70
- args.project_name,
71
- args.format,
72
- persist=args.persist,
73
- page=args.page,
74
- output_dir=args.output_dir
75
- )
76
- print(result)
77
-
78
- # Print persistence confirmation
79
- if args.persist:
80
- project_slug = args.project_name.lower().replace(' ', '-') if args.project_name else "default"
81
- print("\n" + "=" * 60)
82
- print(f"✅ Design system persisted to design-system/{project_slug}/")
83
- print(f" 📄 design-system/{project_slug}/MASTER.md (Global Source of Truth)")
84
- if args.page:
85
- page_filename = args.page.lower().replace(' ', '-')
86
- print(f" 📄 design-system/{project_slug}/pages/{page_filename}.md (Page Overrides)")
87
- print("")
88
- print(f"📖 Usage: When building a page, check design-system/{project_slug}/pages/[page].md first.")
89
- print(f" If exists, its rules override MASTER.md. Otherwise, use MASTER.md.")
90
- print("=" * 60)
91
- # Stack search
92
- elif args.stack:
93
- result = search_stack(args.query, args.stack, args.max_results)
94
- if args.json:
95
- import json
96
- print(json.dumps(result, indent=2, ensure_ascii=False))
97
- else:
98
- print(format_output(result))
99
- # Domain search
100
- else:
101
- result = search(args.query, args.domain, args.max_results)
102
- if args.json:
103
- import json
104
- print(json.dumps(result, indent=2, ensure_ascii=False))
105
- else:
106
- print(format_output(result))
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
5
+ Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
6
+ python search.py "<query>" --design-system [-p "Project Name"]
7
+ python search.py "<query>" --design-system --persist [-p "Project Name"] [--page "dashboard"]
8
+
9
+ Domains: style, prompt, color, chart, landing, product, ux, typography
10
+ Stacks: html-tailwind, react, nextjs
11
+
12
+ Persistence (Master + Overrides pattern):
13
+ --persist Save design system to design-system/MASTER.md
14
+ --page Also create a page-specific override file in design-system/pages/
15
+ """
16
+
17
+ import argparse
18
+ from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
19
+ from design_system import generate_design_system, persist_design_system
20
+
21
+
22
+ def format_output(result):
23
+ """Format results for Claude consumption (token-optimized)"""
24
+ if "error" in result:
25
+ return f"Error: {result['error']}"
26
+
27
+ output = []
28
+ if result.get("stack"):
29
+ output.append(f"## UI Pro Max Stack Guidelines")
30
+ output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
31
+ else:
32
+ output.append(f"## UI Pro Max Search Results")
33
+ output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
34
+ output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
35
+
36
+ for i, row in enumerate(result['results'], 1):
37
+ output.append(f"### Result {i}")
38
+ for key, value in row.items():
39
+ value_str = str(value)
40
+ if len(value_str) > 300:
41
+ value_str = value_str[:300] + "..."
42
+ output.append(f"- **{key}:** {value_str}")
43
+ output.append("")
44
+
45
+ return "\n".join(output)
46
+
47
+
48
+ if __name__ == "__main__":
49
+ parser = argparse.ArgumentParser(description="UI Pro Max Search")
50
+ parser.add_argument("query", help="Search query")
51
+ parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
52
+ parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help="Stack-specific search (html-tailwind, react, nextjs)")
53
+ parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
54
+ parser.add_argument("--json", action="store_true", help="Output as JSON")
55
+ # Design system generation
56
+ parser.add_argument("--design-system", "-ds", action="store_true", help="Generate complete design system recommendation")
57
+ parser.add_argument("--project-name", "-p", type=str, default=None, help="Project name for design system output")
58
+ parser.add_argument("--format", "-f", choices=["ascii", "markdown"], default="ascii", help="Output format for design system")
59
+ # Persistence (Master + Overrides pattern)
60
+ parser.add_argument("--persist", action="store_true", help="Save design system to design-system/MASTER.md (creates hierarchical structure)")
61
+ parser.add_argument("--page", type=str, default=None, help="Create page-specific override file in design-system/pages/")
62
+ parser.add_argument("--output-dir", "-o", type=str, default=None, help="Output directory for persisted files (default: current directory)")
63
+
64
+ args = parser.parse_args()
65
+
66
+ # Design system takes priority
67
+ if args.design_system:
68
+ result = generate_design_system(
69
+ args.query,
70
+ args.project_name,
71
+ args.format,
72
+ persist=args.persist,
73
+ page=args.page,
74
+ output_dir=args.output_dir
75
+ )
76
+ print(result)
77
+
78
+ # Print persistence confirmation
79
+ if args.persist:
80
+ project_slug = args.project_name.lower().replace(' ', '-') if args.project_name else "default"
81
+ print("\n" + "=" * 60)
82
+ print(f"✅ Design system persisted to design-system/{project_slug}/")
83
+ print(f" 📄 design-system/{project_slug}/MASTER.md (Global Source of Truth)")
84
+ if args.page:
85
+ page_filename = args.page.lower().replace(' ', '-')
86
+ print(f" 📄 design-system/{project_slug}/pages/{page_filename}.md (Page Overrides)")
87
+ print("")
88
+ print(f"📖 Usage: When building a page, check design-system/{project_slug}/pages/[page].md first.")
89
+ print(f" If exists, its rules override MASTER.md. Otherwise, use MASTER.md.")
90
+ print("=" * 60)
91
+ # Stack search
92
+ elif args.stack:
93
+ result = search_stack(args.query, args.stack, args.max_results)
94
+ if args.json:
95
+ import json
96
+ print(json.dumps(result, indent=2, ensure_ascii=False))
97
+ else:
98
+ print(format_output(result))
99
+ # Domain search
100
+ else:
101
+ result = search(args.query, args.domain, args.max_results)
102
+ if args.json:
103
+ import json
104
+ print(json.dumps(result, indent=2, ensure_ascii=False))
105
+ else:
106
+ print(format_output(result))
@@ -2111,8 +2111,7 @@ class TaskAPI {
2111
2111
  // TASK_2264: decide up front whether post-complete (below) will measure 'after' in-process.
2112
2112
  // TASK_2288 single-winner rule: whenever a post-complete run is expected for this completion,
2113
2113
  // post-complete's own measurement is the ONE 'after' capture (it runs after merge and feeds the
2114
- // verdict), so moveTask must not also spawn one. Expected = in-process (below) OR the caller
2115
- // (headless.js / scheduler, signalled by FORMATION_HEADLESS / FORMATION_SCHEDULER) runs it itself.
2114
+ // verdict), so moveTask must not also spawn one. Expected = in-process (below).
2116
2115
  // moveTask's detached capture stays the sole one only when nobody measures: --skip-post-complete.
2117
2116
  const postCompleteRuns = !options.skipPostComplete;
2118
2117
  const result = await this.moveTask(taskId, 'done', updatedTask, { skipHealthAfter: postCompleteRuns });
@@ -2135,8 +2134,6 @@ class TaskAPI {
2135
2134
  }
2136
2135
 
2137
2136
  // 自動執行 post-complete(除非明確跳過)
2138
- // - FORMATION_SCHEDULER: 由 scheduler 統一管理,避免重複執行
2139
- // - FORMATION_HEADLESS: 由 headless.js onDone 統一執行,避免並行 agent git 衝突
2140
2137
  if (postCompleteRuns) {
2141
2138
  try {
2142
2139
  const { postComplete } = require('../../.formation/tools/post-complete.js');
@@ -1,16 +1,10 @@
1
1
  # Formation System
2
2
 
3
- Agent 部署陣型系統。根據任務規模選擇適當的陣型。
3
+ Subagent 調度。唯一的 live 路徑:`dispatch.js --dispatch-mode=subagent` 印出 JSON(`promptText` + `agentParams`),由 Ansuz 交給 Agent tool(或 `--harness=codex` 的 Codex `spawn_agent`)執行。
4
4
 
5
- ## 陣型一覽
5
+ Headless(`claude -p`、`kenaz_dispatch`)、Squad、Legion、Legacy scheduler 已退役;`squad/`、`legion/` 的 YAML 只是歷史定義,`dispatch.js` 遇到會直接報錯結束。
6
6
 
7
- ```
8
- Unit → Solo → Squad → Legion
9
- 1×1 1×N N×1 Native Team
10
- 最輕量 最靈活 真並行 最重火力
11
- ```
12
-
13
- ---
7
+ ## 陣型
14
8
 
15
9
  ### Unit
16
10
 
@@ -18,138 +12,37 @@ Unit → Solo → Squad → Legion
18
12
 
19
13
  派出一個 subagent 執行單一任務,完成後回報結果。不切換角色、不協作,純粹的「去做這件事」。
20
14
 
21
- - 機制:`Task` 工具,單次調用
22
- - 成本:最低
23
15
  - 適用:明確的單一任務、Bug 修復、檔案修改、腳本執行
24
-
25
- ---
16
+ - 可用 skill:`do`、`think`、`plan`
26
17
 
27
18
  ### Solo
28
19
 
29
20
  **1 agent, N perspectives** — 單人多視角自主切換。
30
21
 
31
- 派出一個 subagent,同時裝備多個專業視角。Agent 根據分析過程中的需要,自主決定何時切換到哪個視角。不是輪流發言,是一個人用不同鏡頭看同一件事。
22
+ 一個 subagent,同時裝備多個專業視角,由 agent 自主決定何時切換。
32
23
 
33
- - 機制:`dispatch.js --formation=solo`,prompt 中載入所有 `perspectives`
34
- - 成本:低(單次 subagent 調用)
24
+ - 機制:`dispatch.js --formation=solo`
35
25
  - 適用:策略分析、程式碼審查、方案評估、設計決策
36
26
  - 可用 skill:`strategy`(策略分析)、`diagnosis`(問題診斷)
37
27
 
38
- ```
39
- 範例:Solo + Strategy
40
- → [技術專家] 分析架構影響
41
- → 發現成本問題 → [產品策略師] 評估 ROI
42
- → 發現安全疑慮 → [風險分析師] 識別風險
43
- → 綜合判斷,產出結論
44
- (視角切換由 agent 自主決定,非固定順序)
45
- ```
46
-
47
- ---
48
-
49
- ### Squad
50
-
51
- **N agents, 1 task** — 多 agent 並行協作。
52
-
53
- 同時派出多個 subagent,各自負責任務的不同部分,並行執行後整合成果。成員之間不能互相通訊(那是 Legion 的事),各自獨立完成後由 lead 整合。
54
-
55
- - 機制:`dispatch.js --formation=squad`,並行啟動多個 Claude 進程
56
- - 成本:中等(隨 agent 數量線性增長)
57
- - 適用:並行子任務開發、跨模組批量修改、多區域同步掃蕩
58
- - 可用 skill:`blitz`(通用並行拆分)、`sweep`(同規則多範圍掃蕩)
59
-
60
- **核心約束**:
61
- - 成員之間 **不通訊**,只靠 `shared_context`(啟動前定義的共享約定)協調
62
- - 每個成員的 `scope_paths` 不得重疊(避免檔案衝突)
63
- - 如果子任務之間有依賴關係,不適合用 Squad
64
-
65
- ```
66
- 範例 1:Squad + blitz(並行拆分)
67
- ├── [part_1] → 實作模組 A 的功能
68
- ├── [part_2] → 實作模組 B 的功能
69
- └── [part_3] → 實作模組 C 的功能
70
- → lead 整合驗證,統一提交
71
-
72
- 範例 2:Squad + sweep(同規則掃蕩)
73
- ├── [zone_1] → 重構 cmd_modules/ 下的模組
74
- ├── [zone_2] → 重構 components/ 下的元件
75
- └── [zone_3] → 重構 lib/ 下的工具函數
76
- → lead 驗證一致性,統一提交
77
- ```
78
-
79
- ---
80
-
81
- ### Legion
82
-
83
- **Native Team** — 即時溝通的完整團隊。
84
-
85
- 使用 Claude Code 原生的 TeamCreate 機制,建立持久化團隊。成員之間可互相通訊、即時協調。Legion 的核心價值不是「更多人」,而是「即時溝通」— 只在成員的工作互相影響、需要即時協調時使用。
86
-
87
- - 機制:`TeamCreate` + `SendMessage`
88
- - 成本:最高(持久化 context + 通訊開銷)
89
- - 適用:有順序依賴、回饋循環、或高度耦合的複雜任務
90
- - 可用 skill:`forge`(順序流水線)、`hive`(網狀即時協調)
91
-
92
- **核心價值**(Squad 做不到的事):
93
- - 即時通知「我改了 X,你要更新」
94
- - 回饋循環(review → fix → re-review)
95
- - 順序依賴(A 做完 B 才開始)
96
- - 動態調整(做到一半改方向)
97
-
98
- ```
99
- 範例 1:Legion + forge(鍛造)
100
- Designer ──→ Implementer(s) ──→ Reviewer
101
- ↑ 回饋修正 ←──────────────────↓
102
- → 設計 → 打造 → 淬煉,有序且有品質把關
103
-
104
- 範例 2:Legion + hive(蜂巢)
105
- Worker A ←→ Worker B
106
- ↕ ↕
107
- Worker C ←→ Worker D
108
- → 所有人即時互聯,任何變更即時同步
109
- ```
110
-
111
- ---
112
-
113
- ## 選擇指南
114
-
115
- | 問自己 | 答案 | 陣型 |
116
- |--------|------|------|
117
- | 任務簡單、目標明確? | Yes | **Unit** |
118
- | 需要多角度分析? | Yes | **Solo** |
119
- | 需要同時做多件事? | Yes | **Squad** |
120
- | 有順序依賴或回饋循環? | Yes | **Legion** (forge) |
121
- | 工作高度耦合、需即時協調? | Yes | **Legion** (hive) |
122
-
123
28
  ---
124
29
 
125
30
  ## 啟動方式
126
31
 
127
- ### Headless Mode(推薦)
128
-
129
- 由 Formation Lead 配好任務後直接呼叫,subagent 不問問題:
130
-
131
32
  ```bash
132
- # Unit: 單一任務
133
- node .formation/tools/headless.js --skill=do --task="修正按鈕顏色"
33
+ # Unit
34
+ node .formation/tools/dispatch.js --skill=do --task=TASK_172 --dispatch-mode=subagent
134
35
 
135
- # Solo: 多視角分析
136
- node .formation/tools/headless.js --formation=solo --skill=strategy --task="評估快取方案"
36
+ # Solo
37
+ node .formation/tools/dispatch.js --formation=solo --skill=strategy --task=TASK_172 --dispatch-mode=subagent
137
38
 
138
- # Squad: 並行執行
139
- node .formation/tools/headless.js --formation=squad --skill=blitz --task=TASK_201
140
-
141
- # Legion: Agent Teams 即時協作
142
- node .formation/tools/headless.js --formation=legion --skill=forge --task=TASK_202
143
-
144
- # Dry run(只看 prompt,不啟動)
145
- node .formation/tools/headless.js --formation=legion --skill=forge --task=TASK_202 --dry-run
39
+ # Codex harness / 子專案 / 只看 payload 不產生副作用
40
+ node .formation/tools/dispatch.js --skill=do --task=TASK_172 --dispatch-mode=subagent --harness=codex
41
+ node .formation/tools/dispatch.js --skill=do --task=TASK_172 --dispatch-mode=subagent --project-path <path>
42
+ node .formation/tools/dispatch.js --skill=do --task=TASK_172 --dispatch-mode=subagent --dry-run
146
43
  ```
147
44
 
148
- ### Dispatch Mode(互動式)
149
-
150
- ```bash
151
- node .formation/tools/dispatch.js --skill=do --task=TASK_172
152
- ```
45
+ 缺 `--dispatch-mode=subagent`、或指定 squad/legion skill,都會以非零 exit code 結束並印出原因。
153
46
 
154
47
  ---
155
48
 
@@ -158,31 +51,13 @@ node .formation/tools/dispatch.js --skill=do --task=TASK_172
158
51
  ```
159
52
  .formation/
160
53
  ├── README.md # 本文件
161
- ├── lead.yaml # Formation Lead(陣型選擇器)
54
+ ├── lead.yaml # Formation Lead
162
55
  ├── tools/
163
- │ ├── headless.js # ⭐ 無頭啟動器(所有陣型)
164
- │ ├── dispatch.js # CLI 入口(互動式)
56
+ │ ├── dispatch.js # CLI 入口(--dispatch-mode=subagent)
165
57
  │ ├── loader.js # YAML/Task 載入
166
- │ ├── prompt.js # Prompt 組裝(unit/solo/squad/legion)
167
- │ ├── runner.js # Claude 進程管理(single + parallel)
168
- │ ├── logger.js # Log 格式化
58
+ │ ├── prompt.js # Subagent prompt 組裝 + 傳輸前綴
59
+ │ ├── post-complete.js # 完成後 merge / 驗證
169
60
  │ └── utils.js # 工具函數
170
- ├── logs/ # ⭐ 執行日誌(按陣型分目錄)
171
- │ ├── unit/
172
- │ ├── solo/
173
- │ ├── squad/
174
- │ └── legion/
175
- ├── unit/ # Unit 陣型定義
176
- │ ├── do.yaml # 執行者
177
- │ ├── think.yaml # 分析者
178
- │ └── plan.yaml # 規劃者
179
- ├── solo/ # Solo 陣型定義(含視角集)
180
- │ ├── strategy.yaml # 策略分析(6 視角)
181
- │ └── diagnosis.yaml # 問題診斷(4 視角)
182
- ├── squad/ # Squad 陣型定義(含協作模板)
183
- │ ├── blitz.yaml # 通用並行拆分
184
- │ └── sweep.yaml # 同規則多範圍掃蕩
185
- └── legion/ # Legion 陣型定義(含溝通模式)
186
- ├── forge.yaml # 順序流水線(設計→打造→淬煉)
187
- └── hive.yaml # 網狀即時協調(全連接)
61
+ ├── unit/ # do / think / plan
62
+ └── solo/ # strategy / diagnosis
188
63
  ```
@@ -40,12 +40,47 @@ function writeIfChanged(f, text) {
40
40
  return 'written';
41
41
  }
42
42
 
43
+ // Global Codex instructions (~/.codex/AGENTS.md, read by every Codex session): a marked Kenaz block,
44
+ // so Codex agents know how to report Kenaz problems (wish / field report) like Claude's /Ansuz does.
45
+ // Only the text between the markers is ours; the user's own content is never touched.
46
+ const AGENTS_BEGIN = '<!-- kenaz:begin (managed by kenaz install; edits here are overwritten) -->';
47
+ const AGENTS_END = '<!-- kenaz:end -->';
48
+ function agentsBlock() {
49
+ return [AGENTS_BEGIN, '## Kenaz',
50
+ '- Kenaz tools come from the `kenaz-dashboard` MCP server (kenaz-server on 127.0.0.1:18080); `$kenaz status|init|ygg ...` runs the Kenaz CLI (needs network access to 127.0.0.1).',
51
+ '- When Kenaz itself blocks or degrades the work (a tool/hook/install/peer/dispatch failure, wrong data, missing capability), call `kenaz_wish_create` BEFORE working around it:',
52
+ ' projectPath = this project; scope = `kenaz` (Kenaz problem) or `project`; wish_type = `bug` | `feature` | `question`;',
53
+ ' content = one-line repro + expected vs actual + versions (`npx kenaz doctor` lines) + session id. Never paste keys or tokens.',
54
+ ' A scope=kenaz wish is sent to the Kenaz team as a field report. Report each problem once, then finish the work with the workaround and tell the user the wish was filed.',
55
+ AGENTS_END].join('\n');
56
+ }
57
+ function withoutAgentsBlock(text) {
58
+ const a = text.indexOf(AGENTS_BEGIN), b = text.indexOf(AGENTS_END);
59
+ if (a < 0 || b < a) return text;
60
+ return (text.slice(0, a) + text.slice(b + AGENTS_END.length)).replace(/\n{3,}/g, '\n\n').trim() + '\n';
61
+ }
62
+ function installAgentsBlock() {
63
+ const f = path.join(codexHome(), 'AGENTS.md');
64
+ const cur = fs.existsSync(f) ? fs.readFileSync(f, 'utf8') : '';
65
+ const base = withoutAgentsBlock(cur).trim();
66
+ return writeIfChanged(f, (base ? base + '\n\n' : '') + agentsBlock() + '\n');
67
+ }
68
+ function removeAgentsBlock(dryRun) {
69
+ const f = path.join(codexHome(), 'AGENTS.md');
70
+ if (!fs.existsSync(f)) return 'absent';
71
+ const cur = fs.readFileSync(f, 'utf8');
72
+ if (!cur.includes(AGENTS_BEGIN)) return 'absent';
73
+ if (!dryRun) { const rest = withoutAgentsBlock(cur); if (rest.trim()) fs.writeFileSync(f, rest); else fs.rmSync(f, { force: true }); }
74
+ return 'removed';
75
+ }
76
+
43
77
  function installPrompts(core) {
44
78
  const f = path.join(codexHome(), 'prompts', 'kenaz.md');
45
79
  const skill = path.join(codexHome(), 'skills', 'kenaz', 'SKILL.md');
46
80
  const a = writeIfChanged(f, promptText(core));
47
81
  const b = writeIfChanged(skill, skillText(core));
48
- return { file: f, skill, action: a === 'unchanged' && b === 'unchanged' ? 'unchanged' : 'written' };
82
+ const c = installAgentsBlock();
83
+ return { file: f, skill, action: [a, b, c].every((x) => x === 'unchanged') ? 'unchanged' : 'written' };
49
84
  }
50
85
 
51
86
  // Per event: is our shim registered, and does codex hold a trusted_hash for it (hooks.state)?
@@ -95,7 +130,7 @@ function diagnose() {
95
130
  return { trust, delivery_mode: deliveryMode(trust), ok: notes.length === 0, notes };
96
131
  }
97
132
 
98
- module.exports = { promptText, skillText, installPrompts, hookTrust, deliveryMode, diagnose, SHIM_REL, EVENTS };
133
+ module.exports = { promptText, skillText, installPrompts, installAgentsBlock, removeAgentsBlock, agentsBlock, hookTrust, deliveryMode, diagnose, SHIM_REL, EVENTS };
99
134
 
100
135
  if (require.main === module) {
101
136
  if (process.argv.includes('--install-prompts')) console.log(JSON.stringify(installPrompts()));
@@ -49,3 +49,21 @@ test('shim honours Kenaz mode: off silent, full control still runs', () => {
49
49
  assert.strictEqual(off.stderr.includes('event='), false);
50
50
  assert.ok(full.stderr.includes('event=SessionStart')); // control: hook does run when not off
51
51
  });
52
+
53
+ test('global AGENTS.md gets one managed Kenaz block (wish / field report guidance); user text kept; removal leaves the rest', () => {
54
+ const home = fs.mkdtempSync(path.join(os.tmpdir(), 'cx-agents-'));
55
+ process.env.CODEX_HOME = home;
56
+ const f = path.join(home, 'AGENTS.md');
57
+ fs.writeFileSync(f, '# My own Codex rules\nAlways be terse.\n');
58
+ D.installAgentsBlock();
59
+ D.installAgentsBlock(); // idempotent: still one block
60
+ const t = fs.readFileSync(f, 'utf8');
61
+ assert.match(t, /Always be terse\./);
62
+ assert.strictEqual(t.split('kenaz:begin').length - 1, 1);
63
+ assert.match(t, /kenaz_wish_create/);
64
+ assert.strictEqual(D.removeAgentsBlock(false), 'removed');
65
+ const after = fs.readFileSync(f, 'utf8');
66
+ assert.match(after, /Always be terse\./);
67
+ assert.doesNotMatch(after, /kenaz:begin|kenaz_wish_create/);
68
+ delete process.env.CODEX_HOME;
69
+ });
@@ -305,7 +305,7 @@ function writeOverride(prompt, bootContext) {
305
305
 
306
306
  fs.writeFileSync(OVERRIDE_PATH, content, 'utf8');
307
307
 
308
- // Write adapter signal file so headless.js knows to route through Bifröst
308
+ // Write adapter signal file (read by session.js and the Dashboard bifrost-active route)
309
309
  const signalPath = path.join(ROOT, '.formation', '.bifrost-active');
310
310
  fs.writeFileSync(signalPath, JSON.stringify({ adapter: 'openai', specialist: SPECIALIST, pid: process.pid, started: new Date().toISOString() }));
311
311
 
@@ -123,6 +123,11 @@ async function main() {
123
123
  try { mode = require(path.resolve(ROOT, 'plugins/kenaz/hooks/mode.js')).resolveMode(p.cwd || process.cwd()); } catch {}
124
124
  if (mode === 'off') process.exit(0);
125
125
  console.error('[codex-hook-shim] event=' + ev);
126
+ // Register this project with kenaz-server (idempotent, no-op when known): Codex sessions never run
127
+ // the Claude turn-context hook, so a Codex-only machine stayed out of its room (field report).
128
+ const registering = (ev === 'SessionStart' || ev === 'UserPromptSubmit')
129
+ ? (() => { try { const r = resolvePeerProjectRoot(p.cwd || process.cwd()); return r ? peerRequest('POST', '/api/projects/register', { projectPath: r }) : null; } catch { return null; } })()
130
+ : null;
126
131
  const payload = normalizeHookPayload(p);
127
132
  if (ev === 'UserPromptSubmit') {
128
133
  payload.specialist = p.specialist || payload.specialist;
@@ -164,6 +169,7 @@ async function main() {
164
169
  }).catch(() => {}).finally(() => process.exit(0));
165
170
  return; // exit handled by finally above
166
171
  }
172
+ if (registering) await registering; // bounded by PEER_TIMEOUT_MS; fail-open
167
173
  process.exit(0);
168
174
  }
169
175
 
@@ -33,7 +33,17 @@ async function fixture({ project, cwd = path.resolve('hook-cwd'), reject = false
33
33
  readFileSync: () => { throw new Error('no real state reads'); },
34
34
  };
35
35
  // TASK_2299 peer pull deps; no KENAZ_PEER_PULL in these fixtures, so no request is expected.
36
- if (id === 'http') return { request: () => { effects.http.push('request'); assert.fail('unexpected peer request'); } };
36
+ // The only request allowed here is the idempotent project registration (SessionStart /
37
+ // UserPromptSubmit); the fake fails it at once, like a server that is down (fail-open).
38
+ if (id === 'http') return { request: (opts) => {
39
+ if (opts && opts.method === 'POST' && opts.path === '/api/projects/register') {
40
+ effects.http.push('register');
41
+ const handlers = {};
42
+ const req = { on: (ev, fn) => { handlers[ev] = fn; return req; }, destroy: () => {}, end: () => { if (handlers.error) handlers.error(new Error('down')); } };
43
+ return req;
44
+ }
45
+ effects.http.push('request'); assert.fail('unexpected peer request');
46
+ } };
37
47
  if (id.endsWith('_peer-project-root.js')) return { resolvePeerProjectRoot: dir => dir };
38
48
  if (id === 'child_process') return { execFileSync: () => assert.fail('unexpected child') };
39
49
  effects.modules.push(id);
@@ -231,6 +231,9 @@ function uninstall(options = {}) {
231
231
  if (res.hooks === 'removed' && !dryRun) fs.writeFileSync(cfg, out.join('\n').replace(/\n{3,}/g, '\n\n'), 'utf8');
232
232
  const prompt = path.join(getCodexHome(), 'prompts', 'kenaz.md');
233
233
  if (fs.existsSync(prompt)) { res.prompt = 'removed'; if (!dryRun) fs.rmSync(prompt, { force: true }); }
234
+ const skillDir = path.join(getCodexHome(), 'skills', 'kenaz');
235
+ if (fs.existsSync(skillDir)) { res.skill = 'removed'; if (!dryRun) fs.rmSync(skillDir, { recursive: true, force: true }); }
236
+ try { res.agents_md = require('./codex-doctor').removeAgentsBlock(dryRun); } catch (_) { /* doctor optional */ }
234
237
  log((dryRun ? 'dry-run: ' : '') + 'codex uninstall ' + JSON.stringify(res));
235
238
  return { success: true, ...res };
236
239
  }
@@ -51,7 +51,7 @@ no surprise dependencies.
51
51
  4. When the user picks an entry, the id is written into
52
52
  `.kenaz/dashboard-models.json` via
53
53
  `POST /api/dashboard/settings/models` and consumed by
54
- `kenaz_dispatch` / `SpecialistPanel.handleLaunch`.
54
+ `SpecialistPanel.handleLaunch`.
55
55
 
56
56
  ## Adding a new model
57
57
 
@@ -3,8 +3,8 @@
3
3
  # Amelia 判斷 role 時參考此表,dispatch 時用此表解析 --role 路徑
4
4
  #
5
5
  # Usage:
6
- # node .formation/tools/headless-v2.js --base=do --role=developer --task=TASK_XXX
7
- # headless-v2 會查此表找到 skill_path → 載入該 YAML 的 role context
6
+ # node .formation/tools/dispatch.js --skill=do --task=TASK_XXX --dispatch-mode=subagent
7
+ # (此表僅供 Amelia 判斷 role 參考;dispatch.js 不讀取它。headless-v2 已退役)
8
8
 
9
9
  version: "2.0"
10
10
 
@@ -259,7 +259,7 @@ roles:
259
259
  - 新功能開發
260
260
 
261
261
  # ─────────────────────────────────────────
262
- # Base Skills(headless-v2 的 --base 選項)
262
+ # Base Skills(歷史:原 headless-v2 的 --base 選項)
263
263
  # ─────────────────────────────────────────
264
264
 
265
265
  bases:
@@ -28,7 +28,6 @@ const PROJECT_ROOT = path.resolve(SPEC_DIR, '../..');
28
28
  const FILES = {
29
29
  taskApi: path.join(PROJECT_ROOT, '.collaboration/core/task-api.js'),
30
30
  postComplete: path.join(PROJECT_ROOT, '.formation/tools/post-complete/staging.js'),
31
- headless: path.join(PROJECT_ROOT, '.formation/tools/headless.js'),
32
31
  kenazRs: path.join(PROJECT_ROOT, 'dashboard/src-tauri/src/infrastructure/http_server/routes/mcp_tools/kenaz.rs'),
33
32
  spec: path.join(SPEC_DIR, 'task_operations.yaml'),
34
33
  };