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,162 +0,0 @@
1
- /**
2
- * TASK_1530 — regression test for the Bifrost/Codex worktree WRITE-LEAK class.
3
- *
4
- * Confirmed external-user incident: a Codex (OpenAI adapter) dispatch wrote a
5
- * modified tracked file to the MAIN repo instead of the isolated worktree, then:
6
- * 1. spawnBifrost never set CLAUDE_PROJECT_DIR / never captured
7
- * originalWorktreeHead → detectWorktreeLeak NEVER fired for Bifrost.
8
- * 2. detectWorktreeLeak was WARN-ONLY: it wrote a marker + console.error but
9
- * did NOT salvage the leaked content nor block the dispatch, so the file
10
- * sat in the main working tree where a later force-checkout could discard
11
- * it, and the dispatch was still reported as a clean success.
12
- *
13
- * This test drives the REAL detectWorktreeLeak (exported from runner.js) against
14
- * a synthetic temp repo + worktree (no external repo needed), simulating a
15
- * dispatch that produced ZERO task-branch commits while the main repo has an
16
- * uncommitted TRACKED modification. It asserts:
17
- * • the leak is SALVAGED — recoverable on a branch, and
18
- * • the dispatch is BLOCKED — child._formationExitCode flips to 1.
19
- *
20
- * Revert-proof: if the runner.js change (salvage + block) is reverted, this test
21
- * fails (no salvage branch / exit code stays 0).
22
- *
23
- * Scaffolding mirrors ./post-complete/worktree-rescue.test.js (TASK_1529).
24
- */
25
-
26
- const test = require('node:test');
27
- const assert = require('node:assert/strict');
28
- const fs = require('fs');
29
- const os = require('os');
30
- const path = require('path');
31
- const { execSync } = require('child_process');
32
-
33
- const { detectWorktreeLeak } = require('./runner');
34
-
35
- function git(cmd, cwd) {
36
- return execSync(cmd, { cwd, encoding: 'utf8', timeout: 20000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
37
- }
38
- function gitSafe(cmd, cwd) {
39
- try { return git(cmd, cwd); } catch { return null; }
40
- }
41
-
42
- function makeGitRepo(dir) {
43
- git('git init', dir);
44
- git('git config user.email "test@test.com"', dir);
45
- git('git config user.name "Test"', dir);
46
- git('git config commit.gpgsign false', dir);
47
- gitSafe('git checkout -b userwork', dir);
48
- fs.writeFileSync(path.join(dir, 'README.md'), 'init\n');
49
- git('git add README.md', dir);
50
- git('git commit --no-verify -m "init"', dir);
51
- const cur = git('git rev-parse --abbrev-ref HEAD', dir);
52
- if (cur !== 'userwork') git(`git branch -m ${cur} userwork`, dir);
53
- }
54
-
55
- function setup() {
56
- const tmpRoot = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'tn1530-')));
57
- const repo = path.join(tmpRoot, 'repo');
58
- fs.mkdirSync(repo, { recursive: true });
59
- makeGitRepo(repo);
60
- return { tmpRoot, repo };
61
- }
62
-
63
- function teardown(tmpRoot, repo) {
64
- try {
65
- const wt = git('git worktree list --porcelain', repo);
66
- for (const line of wt.split('\n')) {
67
- if (line.startsWith('worktree ')) {
68
- const p = line.slice('worktree '.length).trim();
69
- if (p && path.resolve(p) !== path.resolve(repo)) {
70
- gitSafe(`git worktree remove --force "${p}"`, repo);
71
- }
72
- }
73
- }
74
- } catch { /* best effort */ }
75
- fs.rmSync(tmpRoot, { recursive: true, force: true });
76
- }
77
-
78
- // ─────────────────────────────────────────────────────────────────────────────
79
- // LEAK: zero task-branch commits + main repo has an uncommitted tracked change.
80
- // detectWorktreeLeak must SALVAGE the leaked change AND BLOCK the dispatch.
81
- // ─────────────────────────────────────────────────────────────────────────────
82
-
83
- test('TASK_1530: Bifrost write-leak (zero task commits + dirty main) is salvaged AND blocks dispatch', () => {
84
- const { tmpRoot, repo } = setup();
85
- try {
86
- // Baseline tracked file the user cares about.
87
- const lostContent = 'module.exports = { version: 2, critical: true };\n';
88
- fs.writeFileSync(path.join(repo, 'kb.js'), 'module.exports = { version: 1 };\n');
89
- git('git add kb.js', repo);
90
- git('git commit --no-verify -m "seed kb.js baseline"', repo);
91
-
92
- // Agent worktree on a task branch — snapshot HEAD BEFORE any agent work
93
- // (exactly what spawnBifrost now captures as originalWorktreeHead).
94
- const worktree = path.join(tmpRoot, 'wt');
95
- git(`git worktree add -b task/task_repro1530 "${worktree}" HEAD`, repo);
96
- const originalWorktreeHead = git('git rev-parse HEAD', worktree);
97
-
98
- // THE BUG: the Codex agent produced ZERO commits on the task branch, and its
99
- // modified tracked file landed in the MAIN repo (CLAUDE_PROJECT_DIR misroute).
100
- fs.writeFileSync(path.join(repo, 'kb.js'), lostContent);
101
-
102
- // Simulate runner.js's child object so the function can flip the exit code.
103
- const child = { _formation: { sessionId: 'sess1530', skill: 'feature_agent' } };
104
-
105
- // Drive the REAL detector against the synthetic repo (mainRoot = temp repo).
106
- const res = detectWorktreeLeak(worktree, originalWorktreeHead, child, repo);
107
-
108
- // 1) A leak must be reported.
109
- assert.ok(res && res.leaked === true, `expected leak to be detected, got ${JSON.stringify(res)}`);
110
-
111
- // 2) The dispatch must be BLOCKED: exit code flipped to 1.
112
- assert.equal(child._formationExitCode, 1,
113
- `expected child._formationExitCode=1 (blocked), got ${child._formationExitCode}`);
114
- assert.ok(child._formationLeak, 'expected child._formationLeak to be set');
115
-
116
- // 3) The leaked modification must be SALVAGED onto a recoverable branch.
117
- assert.ok(res.salvageBranch, `expected a salvage branch, got ${res.salvageBranch}`);
118
- const salvaged = gitSafe(`git show ${res.salvageBranch}:kb.js`, repo);
119
- assert.equal(salvaged, lostContent.trim(),
120
- `salvage branch must contain the leaked kb.js content. Got: ${JSON.stringify(salvaged)}`);
121
-
122
- // 4) A LEAK_DETECTED marker is persisted in the worktree.
123
- assert.ok(fs.existsSync(path.join(worktree, 'LEAK_DETECTED')), 'expected LEAK_DETECTED marker');
124
- } finally {
125
- teardown(tmpRoot, repo);
126
- }
127
- });
128
-
129
- // ─────────────────────────────────────────────────────────────────────────────
130
- // REGRESSION GUARD: a healthy dispatch (>=1 task-branch commit) must NOT be
131
- // flagged as a leak even if the main repo happens to be dirty.
132
- // ─────────────────────────────────────────────────────────────────────────────
133
-
134
- test('TASK_1530 regression: dispatch WITH task-branch commits is NOT flagged as leak', () => {
135
- const { tmpRoot, repo } = setup();
136
- try {
137
- fs.writeFileSync(path.join(repo, 'kb.js'), 'v1\n');
138
- git('git add kb.js', repo);
139
- git('git commit --no-verify -m "seed"', repo);
140
-
141
- const worktree = path.join(tmpRoot, 'wt');
142
- git(`git worktree add -b task/task_ok1530 "${worktree}" HEAD`, repo);
143
- const originalWorktreeHead = git('git rev-parse HEAD', worktree);
144
-
145
- // Agent committed real work on the task branch (the healthy path).
146
- fs.writeFileSync(path.join(worktree, 'feature.js'), 'export const x = 1;\n');
147
- git('git add feature.js', worktree);
148
- git('git commit --no-verify -m "[TASK_OK1530] add feature"', worktree);
149
-
150
- // Main repo is incidentally dirty (e.g. unrelated state files).
151
- fs.writeFileSync(path.join(repo, 'kb.js'), 'v1\nincidental\n');
152
-
153
- const child = { _formation: { sessionId: 'sessok', skill: 'feature_agent' } };
154
- const res = detectWorktreeLeak(worktree, originalWorktreeHead, child, repo);
155
-
156
- assert.equal(res, null, `healthy dispatch must not be flagged as leak, got ${JSON.stringify(res)}`);
157
- assert.equal(child._formationExitCode, undefined, 'exit code must remain unset for healthy dispatch');
158
- assert.ok(!child._formationLeak, 'no leak record for healthy dispatch');
159
- } finally {
160
- teardown(tmpRoot, repo);
161
- }
162
- });
@@ -1,91 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.status = status;
4
- exports.register = register;
5
- const output_1 = require("../core/output");
6
- // TASK_2361: Alaya device registration without the Dashboard Google login.
7
- //
8
- // Flow (RFC 8628 style, relay contract documented in TASK_2361):
9
- // POST {relay}/auth/device/start -> {device_code, user_code, verification_url, interval, expires_in}
10
- // user opens verification_url in any browser and approves (Google login at the relay)
11
- // POST {relay}/auth/device/poll {device_code} -> 202 pending | 200 {token} | 410 expired | 403 denied
12
- // The JWT is handed to the local kenaz-server, which runs the one existing
13
- // register-device implementation (hub_client::register_alaya_device).
14
- // The JWT is held in memory only: never printed, never written.
15
- const server = () => process.env.KENAZ_SERVER_URL || `http://127.0.0.1:${process.env.KENAZ_HTTP_PORT || "18080"}`;
16
- const relay = () => (process.env.KENAZ_RELAY_URL || "https://app.kenazai.com").replace(/\/+$/, "");
17
- const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
18
- const fail = (msg) => {
19
- console.error(msg);
20
- process.exit(1);
21
- };
22
- async function serverFetch(path, init) {
23
- try {
24
- return await fetch(`${server()}${path}`, init);
25
- }
26
- catch {
27
- return fail(`Cannot reach kenaz-server at ${server()}. Start it first (kenaz-server or the Dashboard).`);
28
- }
29
- }
30
- async function status(flags) {
31
- const res = await serverFetch("/api/rust/alaya/status");
32
- if (!res.ok)
33
- fail(`kenaz-server returned ${res.status}`);
34
- const s = (await res.json());
35
- (0, output_1.output)(flags.json
36
- ? s
37
- : `Alaya: ${s.registered ? "registered" : "not registered"}; outbox depth: ${s.outbox_depth}` +
38
- (s.registered ? "" : "\nRun: k-cli alaya register"), flags);
39
- }
40
- async function register(flags) {
41
- const st = await serverFetch("/api/rust/alaya/status");
42
- if (st.ok && (await st.json()).registered) {
43
- (0, output_1.output)(flags.json ? { registered: true, already_registered: true } : "Alaya: already registered", flags);
44
- return;
45
- }
46
- const start = await fetch(`${relay()}/auth/device/start`, {
47
- method: "POST",
48
- headers: { "content-type": "application/json" },
49
- body: "{}",
50
- }).catch((e) => fail(`Cannot reach relay ${relay()}: ${e.message}`));
51
- if (start.status === 404) {
52
- fail(`Relay ${relay()} has no device-code endpoint yet (POST /auth/device/start).\n` +
53
- "Hub/relay change required; see TASK_2361 technical notes. Meanwhile, log in once via the Dashboard.");
54
- }
55
- if (!start.ok)
56
- fail(`Relay device/start failed: HTTP ${start.status}`);
57
- const d = (await start.json());
58
- console.log(`Open ${d.verification_url} in any browser and enter code: ${d.user_code}`);
59
- const deadline = Date.now() + (d.expires_in ?? 600) * 1000;
60
- const intervalMs = Math.max(1, d.interval ?? 5) * 1000;
61
- let token = "";
62
- while (Date.now() < deadline) {
63
- await sleep(intervalMs);
64
- const p = await fetch(`${relay()}/auth/device/poll`, {
65
- method: "POST",
66
- headers: { "content-type": "application/json" },
67
- body: JSON.stringify({ device_code: d.device_code }),
68
- }).catch(() => null);
69
- if (!p || p.status === 202 || p.status === 428)
70
- continue;
71
- if (p.status === 403)
72
- fail("Approval denied.");
73
- if (p.status === 410)
74
- fail("Code expired. Run the command again.");
75
- if (!p.ok)
76
- fail(`Relay device/poll failed: HTTP ${p.status}`);
77
- token = (await p.json()).token ?? "";
78
- break;
79
- }
80
- if (!token)
81
- fail("Timed out waiting for approval.");
82
- const r = await serverFetch("/api/rust/alaya/register", {
83
- method: "POST",
84
- headers: { "content-type": "application/json" },
85
- body: JSON.stringify({ token }),
86
- });
87
- const res = (await r.json().catch(() => ({})));
88
- if (!r.ok || !res.registered)
89
- fail(`Registration failed: ${res.error ?? `HTTP ${r.status}`}`);
90
- (0, output_1.output)(flags.json ? res : "Alaya: registered (~/.kenaz/alaya.toml written); queued reports will drain", flags);
91
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatTable = formatTable;
4
- exports.output = output;
5
- function formatTable(headers, rows) {
6
- const colWidths = headers.map((h, i) => {
7
- const vals = [h, ...rows.map((r) => String(r[i] || ""))];
8
- return Math.max(...vals.map((v) => v.length));
9
- });
10
- const sep = colWidths.map((w) => "-".repeat(w + 2)).join("+");
11
- const line = (cells) => cells.map((c, i) => ` ${String(c).padEnd(colWidths[i])} `).join("|");
12
- return [line(headers), sep, ...rows.map((r) => line(r))].join("\n");
13
- }
14
- function output(data, opts = {}) {
15
- if (opts.json) {
16
- console.log(JSON.stringify(data, null, 2));
17
- }
18
- else if (typeof data === "string") {
19
- console.log(data);
20
- }
21
- else {
22
- console.log(JSON.stringify(data, null, 2));
23
- }
24
- }
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.nodeProcess = nodeProcess;
4
- const child_process_1 = require("child_process");
5
- /**
6
- * Spawn a process and return stdout.
7
- * cmd defaults to node (process.execPath).
8
- * shell defaults to false to avoid Windows arg escaping issues.
9
- */
10
- function nodeProcess(args, cwd, timeout = 10000, cmd = process.execPath, shell = false) {
11
- return new Promise((resolve, reject) => {
12
- const child = (0, child_process_1.spawn)(cmd, args, {
13
- cwd,
14
- stdio: ["pipe", "pipe", "pipe"],
15
- windowsHide: true,
16
- shell,
17
- });
18
- let stdout = "";
19
- let stderr = "";
20
- child.stdout.on("data", (d) => (stdout += d));
21
- child.stderr.on("data", (d) => (stderr += d));
22
- const timer = setTimeout(() => {
23
- child.kill();
24
- reject(new Error("timeout"));
25
- }, timeout);
26
- child.on("close", (code) => {
27
- clearTimeout(timer);
28
- if (code !== 0)
29
- reject(new Error(stderr || `exit code ${code}`));
30
- else
31
- resolve(stdout.trim());
32
- });
33
- child.on("error", (e) => {
34
- clearTimeout(timer);
35
- reject(e);
36
- });
37
- });
38
- }
@@ -1,80 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.resolveProject = resolveProject;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const yaml = __importStar(require("yaml"));
40
- function resolveProject(explicitPath) {
41
- const cwd = path.resolve(explicitPath || process.cwd());
42
- const isCore = fs.existsSync(path.join(cwd, ".collaboration", "tasks"));
43
- const kenazYaml = path.join(cwd, ".kenaz", "project.yaml");
44
- const hasKenaz = fs.existsSync(kenazYaml);
45
- // Read .kenaz/project.yaml if it exists
46
- let config = null;
47
- if (hasKenaz) {
48
- const raw = fs.readFileSync(kenazYaml, "utf-8");
49
- config = yaml.parse(raw);
50
- }
51
- // Core project (has .collaboration/tasks)
52
- if (isCore) {
53
- return {
54
- mode: "core",
55
- name: config?.project_name || path.basename(cwd),
56
- path: cwd,
57
- core_path: cwd,
58
- config,
59
- };
60
- }
61
- // Sub-project (has .kenaz/project.yaml but no .collaboration/tasks)
62
- if (hasKenaz && config) {
63
- const corePath = path.resolve(config.core_path || cwd);
64
- return {
65
- mode: "sub-project",
66
- name: config.project_name || path.basename(cwd),
67
- path: cwd,
68
- core_path: corePath,
69
- config,
70
- };
71
- }
72
- // Unknown — no detection, no guessing
73
- return {
74
- mode: "unknown",
75
- name: path.basename(cwd),
76
- path: cwd,
77
- core_path: cwd,
78
- config: null,
79
- };
80
- }
@@ -1,268 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.spawnClaude = spawnClaude;
37
- exports.collectClaudeOutput = collectClaudeOutput;
38
- exports.streamClaudeOutput = streamClaudeOutput;
39
- const child_process_1 = require("child_process");
40
- const path = __importStar(require("path"));
41
- const fs = __importStar(require("fs"));
42
- /**
43
- * Detect git-bash path on Windows.
44
- * Claude Code requires git-bash to run on Windows.
45
- */
46
- function detectGitBash() {
47
- try {
48
- const gitPaths = (0, child_process_1.execSync)("where git", { encoding: "utf8", timeout: 5000, windowsHide: true })
49
- .split("\n").map((l) => l.trim()).filter(Boolean);
50
- for (const gitPath of gitPaths) {
51
- let dir = path.dirname(gitPath);
52
- for (let i = 0; i < 4; i++) {
53
- const bashPath = path.join(dir, "bin", "bash.exe");
54
- if (fs.existsSync(bashPath))
55
- return bashPath;
56
- dir = path.dirname(dir);
57
- }
58
- }
59
- }
60
- catch { }
61
- const fallbacks = [
62
- "C:\\Program Files\\Git\\bin\\bash.exe",
63
- "C:\\Program Files (x86)\\Git\\bin\\bash.exe",
64
- "D:\\Program Files\\Git\\bin\\bash.exe",
65
- ];
66
- for (const p of fallbacks) {
67
- if (fs.existsSync(p))
68
- return p;
69
- }
70
- return null;
71
- }
72
- /**
73
- * Detect the claude CLI command path.
74
- */
75
- function detectClaudeCmd() {
76
- if (process.platform !== "win32")
77
- return "claude";
78
- try {
79
- const result = (0, child_process_1.execSync)("where claude", { encoding: "utf8", timeout: 5000, windowsHide: true })
80
- .split("\n").map((l) => l.trim()).filter(Boolean);
81
- if (result.length > 0) {
82
- return result.find((p) => p.endsWith(".cmd")) || result[0];
83
- }
84
- }
85
- catch { }
86
- const homedir = process.env.USERPROFILE || process.env.HOME || "";
87
- const candidates = [
88
- path.join(homedir, ".claude", "local", "claude.exe"),
89
- path.join(homedir, ".claude", "bin", "claude.exe"),
90
- ];
91
- for (const p of candidates) {
92
- if (fs.existsSync(p))
93
- return p;
94
- }
95
- return "claude.cmd";
96
- }
97
- /**
98
- * Build a clean env for Claude subprocesses.
99
- * Mirrors .formation/tools/utils.js getClaudeEnv()
100
- */
101
- function getClaudeEnv() {
102
- const env = { ...process.env };
103
- // Remove CLAUDECODE to avoid nested session error
104
- delete env.CLAUDECODE;
105
- // Windows: ensure git-bash path is set
106
- if (process.platform === "win32" && !env.CLAUDE_CODE_GIT_BASH_PATH) {
107
- const gitBash = detectGitBash();
108
- if (gitBash)
109
- env.CLAUDE_CODE_GIT_BASH_PATH = gitBash;
110
- }
111
- return env;
112
- }
113
- /**
114
- * Spawn a Claude CLI subprocess.
115
- *
116
- * Returns the ChildProcess. Caller is responsible for
117
- * listening on stdout/stderr/close events.
118
- */
119
- function spawnClaude(opts) {
120
- const { prompt, cwd, allowedTools = "Bash,Read,Edit,Write,Glob,Grep", disallowedTools, extraArgs = [], projectPath = null, } = opts;
121
- const claudeCmd = detectClaudeCmd();
122
- const args = [
123
- "-p", "-",
124
- "--dangerously-skip-permissions",
125
- "--output-format", "stream-json",
126
- "--verbose",
127
- "--allowedTools", allowedTools,
128
- ...(disallowedTools ? ["--disallowedTools", disallowedTools] : []),
129
- ...extraArgs,
130
- ];
131
- const env = getClaudeEnv();
132
- // Sub-project git isolation
133
- if (projectPath && projectPath !== cwd) {
134
- const parentDir = path.dirname(projectPath);
135
- env.GIT_CEILING_DIRECTORIES = parentDir;
136
- }
137
- const child = (0, child_process_1.spawn)(claudeCmd, args, {
138
- cwd: projectPath || cwd,
139
- env,
140
- stdio: ["pipe", "pipe", "pipe"],
141
- windowsHide: true,
142
- shell: true,
143
- });
144
- child.stdin.write(prompt, "utf8");
145
- child.stdin.end();
146
- return child;
147
- }
148
- /**
149
- * Format a tool_use block into a concise one-liner.
150
- */
151
- function formatToolUse(block) {
152
- const name = block.name || "unknown";
153
- const input = block.input || {};
154
- // Extract the most relevant field for each tool type
155
- if (name === "Bash" && input.command) {
156
- const cmd = String(input.command);
157
- const short = cmd.length > 120 ? cmd.slice(0, 120) + "..." : cmd;
158
- return `[${name}] ${short}`;
159
- }
160
- if ((name === "Read" || name === "Write") && input.file_path) {
161
- return `[${name}] ${input.file_path}`;
162
- }
163
- if (name === "Edit" && input.file_path) {
164
- return `[${name}] ${input.file_path}`;
165
- }
166
- if ((name === "Glob" || name === "Grep") && input.pattern) {
167
- return `[${name}] ${input.pattern}`;
168
- }
169
- // Fallback: tool name + first string value
170
- const firstVal = Object.values(input).find((v) => typeof v === "string");
171
- return firstVal ? `[${name}] ${String(firstVal).slice(0, 80)}` : `[${name}]`;
172
- }
173
- /**
174
- * Collect Claude stream-json stdout as a string (no console output).
175
- * Used when the caller needs to parse the result programmatically.
176
- */
177
- function collectClaudeOutput(child) {
178
- return new Promise((resolve, reject) => {
179
- let stderr = "";
180
- let result = "";
181
- child.stdout.on("data", (d) => {
182
- const lines = d.toString().split("\n").filter((l) => l.trim());
183
- for (const line of lines) {
184
- try {
185
- const evt = JSON.parse(line);
186
- if (evt.type === "assistant" && evt.message?.content) {
187
- for (const block of evt.message.content) {
188
- if (block.type === "text" && block.text) {
189
- result += block.text;
190
- }
191
- }
192
- }
193
- else if (evt.type === "result" && typeof evt.result === "string") {
194
- result += evt.result;
195
- }
196
- }
197
- catch {
198
- // not JSON — skip
199
- }
200
- }
201
- });
202
- child.stderr.on("data", (d) => (stderr += d));
203
- child.on("close", (code) => {
204
- if (code !== 0) {
205
- reject(new Error(`Claude exited with code ${code}${stderr ? `: ${stderr.slice(0, 500)}` : ""}`));
206
- return;
207
- }
208
- resolve(result);
209
- });
210
- child.on("error", (e) => reject(e));
211
- });
212
- }
213
- /**
214
- * Parse Claude stream-json stdout and output formatted content.
215
- * - text blocks: output as-is
216
- * - tool_use blocks: formatted one-liner showing what the agent is doing
217
- * - thinking, raw JSON: filtered out
218
- */
219
- function streamClaudeOutput(child) {
220
- return new Promise((resolve, reject) => {
221
- let stderr = "";
222
- let hasOutput = false;
223
- child.stdout.on("data", (d) => {
224
- const lines = d.toString().split("\n").filter((l) => l.trim());
225
- for (const line of lines) {
226
- try {
227
- const evt = JSON.parse(line);
228
- if (evt.type === "assistant" && evt.message?.content) {
229
- for (const block of evt.message.content) {
230
- if (block.type === "text" && block.text) {
231
- hasOutput = true;
232
- process.stdout.write(block.text);
233
- }
234
- else if (block.type === "tool_use") {
235
- hasOutput = true;
236
- console.log(formatToolUse(block));
237
- }
238
- }
239
- }
240
- else if (evt.type === "result" && evt.result) {
241
- hasOutput = true;
242
- console.log(evt.result);
243
- }
244
- }
245
- catch {
246
- // not JSON — skip
247
- }
248
- }
249
- });
250
- child.stderr.on("data", (d) => (stderr += d));
251
- child.on("close", (code) => {
252
- if (code !== 0) {
253
- console.error(`\nError: Claude exited with code ${code}`);
254
- if (stderr)
255
- console.error(stderr);
256
- process.exit(1);
257
- }
258
- if (!hasOutput) {
259
- console.error("\nWarning: Claude exited successfully but produced no output.", "\nThis may indicate nested session detection.", stderr ? `\nStderr: ${stderr.slice(0, 500)}` : "");
260
- }
261
- resolve();
262
- });
263
- child.on("error", (e) => {
264
- console.error(`Error spawning Claude: ${e.message}`);
265
- reject(e);
266
- });
267
- });
268
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });