@weavecode/weave 0.1.3 → 0.1.4

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/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/.editorconfig +1 -1
  2. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/CHANGELOG.md +45 -22
  3. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/README.md +26 -1
  4. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/dist/qs.js +27 -27
  5. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/eslint.config.mjs +61 -50
  6. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/formats.js +7 -2
  7. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/parse.js +13 -6
  8. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/stringify.js +5 -3
  9. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/lib/utils.js +15 -7
  10. package/node_modules/@modelcontextprotocol/sdk/node_modules/express/node_modules/qs/package.json +6 -6
  11. package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/dist/common.js +2 -2
  12. package/node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit/node_modules/ip-address/package.json +2 -2
  13. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/README.md +2 -3
  14. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/css/common.js +8 -3
  15. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/css/index.js +1 -1
  16. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/helper/route/index.js +3 -1
  17. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/jsx/base.js +1 -1
  18. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +8 -0
  19. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/middleware/serve-static/index.js +3 -1
  20. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/router/trie-router/node.js +2 -2
  21. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/cjs/utils/url.js +11 -6
  22. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/css/common.js +8 -3
  23. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/css/index.js +1 -1
  24. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/helper/route/index.js +3 -1
  25. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/jsx/base.js +1 -1
  26. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/bearer-auth/index.js +8 -0
  27. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/middleware/serve-static/index.js +3 -1
  28. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/router/trie-router/node.js +2 -2
  29. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +1 -1
  30. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +1 -1
  31. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +1 -1
  32. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +1 -1
  33. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +1 -1
  34. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +1 -1
  35. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +1 -1
  36. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +1 -1
  37. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +1 -1
  38. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +1 -1
  39. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/helper/testing/index.d.ts +2 -1
  40. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/hono-base.d.ts +21 -9
  41. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/index.d.ts +1 -1
  42. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/components.d.ts +2 -2
  43. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/context.d.ts +2 -2
  44. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/dom/components.d.ts +2 -2
  45. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/dom/css.d.ts +2 -2
  46. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/jsx/streaming.d.ts +4 -3
  47. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +2 -1
  48. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +3 -3
  49. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +3 -3
  50. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/types/utils/ipaddr.d.ts +1 -1
  51. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/dist/utils/url.js +11 -6
  52. package/node_modules/@modelcontextprotocol/sdk/node_modules/hono/package.json +1 -1
  53. package/node_modules/@weavecode/cli/dist/cli.js +4 -4
  54. package/node_modules/@weavecode/cli/dist/commands/chpass.js +1 -1
  55. package/node_modules/@weavecode/cli/dist/commands/daemon-auth.js +1 -1
  56. package/node_modules/@weavecode/cli/dist/commands/daemon.js +2 -2
  57. package/node_modules/@weavecode/cli/dist/commands/dashboard.js +2 -2
  58. package/node_modules/@weavecode/cli/dist/commands/doctor.js +1 -1
  59. package/node_modules/@weavecode/cli/dist/commands/init.js +1 -1
  60. package/node_modules/@weavecode/cli/dist/commands/scan.js +1 -1
  61. package/node_modules/@weavecode/cli/dist/commands/status.js +2 -2
  62. package/node_modules/@weavecode/cli/dist/commands/uninstall.js +1 -1
  63. package/node_modules/@weavecode/cli/dist/i18n/dict/en.js +2 -1
  64. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +14 -0
  65. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +4 -3
  66. package/node_modules/@weavecode/cli/dist/i18n/index.js +1 -1
  67. package/node_modules/@weavecode/cli/dist/i18n/t.js +1 -1
  68. package/node_modules/@weavecode/cli/dist/init/claudemd-gen.js +3 -3
  69. package/node_modules/@weavecode/cli/dist/init/executor.d.ts +5 -4
  70. package/node_modules/@weavecode/cli/dist/init/executor.js +3 -3
  71. package/node_modules/@weavecode/cli/dist/init/git-commit.js +2 -2
  72. package/node_modules/@weavecode/cli/dist/init/harnesses/claude.js +7 -7
  73. package/node_modules/@weavecode/cli/dist/init/harnesses/codex.js +1 -1
  74. package/node_modules/@weavecode/cli/dist/init/instruction-link.js +1 -1
  75. package/node_modules/@weavecode/cli/dist/init/plugin-templates.js +1 -1
  76. package/node_modules/@weavecode/cli/dist/init/prompt.js +4 -4
  77. package/node_modules/@weavecode/cli/dist/init/provision.d.ts +25 -0
  78. package/node_modules/@weavecode/cli/dist/init/provision.js +1 -0
  79. package/node_modules/@weavecode/cli/dist/init/uninstall.js +6 -6
  80. package/node_modules/@weavecode/cli/dist/init/wiring.js +1 -1
  81. package/node_modules/@weavecode/cli/dist/parser.js +1 -1
  82. package/node_modules/@weavecode/cli/dist/statusline/ansi.js +1 -1
  83. package/node_modules/@weavecode/cli/dist/statusline/mock-input.js +1 -1
  84. package/node_modules/@weavecode/cli/dist/statusline/preview.js +2 -2
  85. package/node_modules/@weavecode/cli/package.json +5 -5
  86. package/node_modules/@weavecode/core/dist/harness-checks.js +1 -1
  87. package/node_modules/@weavecode/core/dist/harness.d.ts +13 -1
  88. package/node_modules/@weavecode/core/dist/harness.js +1 -1
  89. package/node_modules/@weavecode/core/dist/index.d.ts +1 -1
  90. package/node_modules/@weavecode/core/dist/index.js +1 -1
  91. package/node_modules/@weavecode/core/dist/platform.js +1 -1
  92. package/node_modules/@weavecode/core/dist/types.js +1 -1
  93. package/node_modules/@weavecode/core/dist/utils/fs.js +1 -1
  94. package/node_modules/@weavecode/core/dist/utils/logger.js +1 -1
  95. package/node_modules/@weavecode/core/package.json +1 -1
  96. package/node_modules/@weavecode/harness/dist/claude/assets.js +4 -4
  97. package/node_modules/@weavecode/harness/dist/claude/capture.js +9 -9
  98. package/node_modules/@weavecode/harness/dist/claude/commands.js +3 -3
  99. package/node_modules/@weavecode/harness/dist/claude/config.d.ts +9 -0
  100. package/node_modules/@weavecode/harness/dist/claude/config.js +2 -2
  101. package/node_modules/@weavecode/harness/dist/claude/detect.js +1 -1
  102. package/node_modules/@weavecode/harness/dist/claude/edits.js +1 -1
  103. package/node_modules/@weavecode/harness/dist/claude/event-source.d.ts +2 -0
  104. package/node_modules/@weavecode/harness/dist/claude/event-source.js +1 -1
  105. package/node_modules/@weavecode/harness/dist/claude/images.js +2 -2
  106. package/node_modules/@weavecode/harness/dist/claude/index.d.ts +4 -2
  107. package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
  108. package/node_modules/@weavecode/harness/dist/claude/liveness.d.ts +64 -0
  109. package/node_modules/@weavecode/harness/dist/claude/liveness.js +1 -0
  110. package/node_modules/@weavecode/harness/dist/claude/mcp-gen.js +1 -1
  111. package/node_modules/@weavecode/harness/dist/claude/messaging.js +2 -2
  112. package/node_modules/@weavecode/harness/dist/claude/model-aliases.d.ts +4 -0
  113. package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -1
  114. package/node_modules/@weavecode/harness/dist/claude/narration.d.ts +13 -0
  115. package/node_modules/@weavecode/harness/dist/claude/narration.js +1 -0
  116. package/node_modules/@weavecode/harness/dist/claude/peers.js +1 -1
  117. package/node_modules/@weavecode/harness/dist/claude/plan.js +1 -1
  118. package/node_modules/@weavecode/harness/dist/claude/plugins.js +4 -4
  119. package/node_modules/@weavecode/harness/dist/claude/prompt-inbox.js +1 -1
  120. package/node_modules/@weavecode/harness/dist/claude/prompt.js +3 -3
  121. package/node_modules/@weavecode/harness/dist/claude/questions.js +2 -2
  122. package/node_modules/@weavecode/harness/dist/claude/resume.js +1 -1
  123. package/node_modules/@weavecode/harness/dist/claude/settings-gen.js +1 -1
  124. package/node_modules/@weavecode/harness/dist/claude/side-question.js +2 -2
  125. package/node_modules/@weavecode/harness/dist/claude/statusline/generator.js +14 -14
  126. package/node_modules/@weavecode/harness/dist/claude/statusline/git-cache.js +1 -1
  127. package/node_modules/@weavecode/harness/dist/claude/statusline/surface.js +2 -2
  128. package/node_modules/@weavecode/harness/dist/claude/transcript.d.ts +13 -0
  129. package/node_modules/@weavecode/harness/dist/claude/transcript.js +7 -6
  130. package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
  131. package/node_modules/@weavecode/harness/dist/codex/capture.d.ts +1 -2
  132. package/node_modules/@weavecode/harness/dist/codex/capture.js +2 -2
  133. package/node_modules/@weavecode/harness/dist/codex/commands.js +4 -4
  134. package/node_modules/@weavecode/harness/dist/codex/config.d.ts +10 -0
  135. package/node_modules/@weavecode/harness/dist/codex/config.js +2 -2
  136. package/node_modules/@weavecode/harness/dist/codex/detect.js +1 -1
  137. package/node_modules/@weavecode/harness/dist/codex/event-source.d.ts +1 -1
  138. package/node_modules/@weavecode/harness/dist/codex/event-source.js +2 -2
  139. package/node_modules/@weavecode/harness/dist/codex/images.d.ts +2 -0
  140. package/node_modules/@weavecode/harness/dist/codex/images.js +1 -0
  141. package/node_modules/@weavecode/harness/dist/codex/index.d.ts +13 -2
  142. package/node_modules/@weavecode/harness/dist/codex/index.js +1 -1
  143. package/node_modules/@weavecode/harness/dist/codex/liveness.d.ts +38 -0
  144. package/node_modules/@weavecode/harness/dist/codex/liveness.js +1 -0
  145. package/node_modules/@weavecode/harness/dist/codex/mcp.js +1 -1
  146. package/node_modules/@weavecode/harness/dist/codex/messaging.d.ts +7 -3
  147. package/node_modules/@weavecode/harness/dist/codex/messaging.js +3 -3
  148. package/node_modules/@weavecode/harness/dist/codex/narration.d.ts +10 -0
  149. package/node_modules/@weavecode/harness/dist/codex/narration.js +1 -0
  150. package/node_modules/@weavecode/harness/dist/codex/plugin-state.js +1 -1
  151. package/node_modules/@weavecode/harness/dist/codex/plugins.js +3 -3
  152. package/node_modules/@weavecode/harness/dist/codex/provision.d.ts +12 -0
  153. package/node_modules/@weavecode/harness/dist/codex/provision.js +1 -0
  154. package/node_modules/@weavecode/harness/dist/codex/questions.d.ts +9 -0
  155. package/node_modules/@weavecode/harness/dist/codex/questions.js +2 -0
  156. package/node_modules/@weavecode/harness/dist/codex/resume.js +1 -1
  157. package/node_modules/@weavecode/harness/dist/codex/rollout.d.ts +8 -5
  158. package/node_modules/@weavecode/harness/dist/codex/rollout.js +5 -5
  159. package/node_modules/@weavecode/harness/dist/codex/side-question.d.ts +12 -0
  160. package/node_modules/@weavecode/harness/dist/codex/side-question.js +4 -0
  161. package/node_modules/@weavecode/harness/dist/codex/titles.d.ts +8 -0
  162. package/node_modules/@weavecode/harness/dist/codex/titles.js +4 -0
  163. package/node_modules/@weavecode/harness/dist/codex/toml.js +13 -13
  164. package/node_modules/@weavecode/harness/dist/codex/transcript.js +2 -2
  165. package/node_modules/@weavecode/harness/dist/driver.d.ts +162 -8
  166. package/node_modules/@weavecode/harness/dist/driver.js +1 -1
  167. package/node_modules/@weavecode/harness/dist/index.d.ts +1 -0
  168. package/node_modules/@weavecode/harness/dist/index.js +1 -1
  169. package/node_modules/@weavecode/harness/dist/init/generated.js +2 -2
  170. package/node_modules/@weavecode/harness/dist/init/pipeline.js +1 -1
  171. package/node_modules/@weavecode/harness/dist/install.d.ts +9 -0
  172. package/node_modules/@weavecode/harness/dist/install.js +1 -0
  173. package/node_modules/@weavecode/harness/dist/registry-wiring.js +1 -1
  174. package/node_modules/@weavecode/harness/dist/shared/install-link.js +1 -1
  175. package/node_modules/@weavecode/harness/dist/shared/json-cap.js +1 -1
  176. package/node_modules/@weavecode/harness/dist/zcode/assets.js +1 -1
  177. package/node_modules/@weavecode/harness/dist/zcode/capture.js +3 -3
  178. package/node_modules/@weavecode/harness/dist/zcode/mcp.js +2 -2
  179. package/node_modules/@weavecode/harness/package.json +2 -2
  180. package/node_modules/@weavecode/server/dist/config/dotted.js +1 -1
  181. package/node_modules/@weavecode/server/dist/config/profiles.d.ts +10 -1
  182. package/node_modules/@weavecode/server/dist/config/profiles.js +2 -2
  183. package/node_modules/@weavecode/server/dist/daemon/ai-config.js +2 -2
  184. package/node_modules/@weavecode/server/dist/daemon/ai-context.js +6 -6
  185. package/node_modules/@weavecode/server/dist/daemon/ai-routes.js +4 -4
  186. package/node_modules/@weavecode/server/dist/daemon/api-log.js +3 -3
  187. package/node_modules/@weavecode/server/dist/daemon/auth-routes.js +1 -1
  188. package/node_modules/@weavecode/server/dist/daemon/auto-start.js +6 -6
  189. package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
  190. package/node_modules/@weavecode/server/dist/daemon/claude-liveness.d.ts +4 -55
  191. package/node_modules/@weavecode/server/dist/daemon/claude-liveness.js +1 -1
  192. package/node_modules/@weavecode/server/dist/daemon/config-routes.js +1 -1
  193. package/node_modules/@weavecode/server/dist/daemon/cron.js +1 -1
  194. package/node_modules/@weavecode/server/dist/daemon/dashboard-auth.js +2 -2
  195. package/node_modules/@weavecode/server/dist/daemon/dashboard-pusher.js +1 -1
  196. package/node_modules/@weavecode/server/dist/daemon/data-bus.js +1 -1
  197. package/node_modules/@weavecode/server/dist/daemon/decision-config.js +2 -2
  198. package/node_modules/@weavecode/server/dist/daemon/dev-entry.js +1 -1
  199. package/node_modules/@weavecode/server/dist/daemon/fs-browser.js +1 -1
  200. package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.d.ts +2 -0
  201. package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.js +1 -1
  202. package/node_modules/@weavecode/server/dist/daemon/hooks-routes.js +1 -1
  203. package/node_modules/@weavecode/server/dist/daemon/http.js +1 -1
  204. package/node_modules/@weavecode/server/dist/daemon/liveness.d.ts +7 -0
  205. package/node_modules/@weavecode/server/dist/daemon/liveness.js +1 -0
  206. package/node_modules/@weavecode/server/dist/daemon/mcp-orchestration.js +1 -1
  207. package/node_modules/@weavecode/server/dist/daemon/narration-watcher.d.ts +28 -0
  208. package/node_modules/@weavecode/server/dist/daemon/narration-watcher.js +2 -0
  209. package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.d.ts +16 -0
  210. package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.js +1 -0
  211. package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.d.ts +20 -0
  212. package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.js +12 -0
  213. package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.d.ts +23 -0
  214. package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.js +2 -0
  215. package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.d.ts +19 -0
  216. package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.js +1 -0
  217. package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.d.ts +87 -0
  218. package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.js +1 -0
  219. package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.d.ts +45 -0
  220. package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.js +1 -0
  221. package/node_modules/@weavecode/server/dist/daemon/opener/backend.d.ts +115 -0
  222. package/node_modules/@weavecode/server/dist/daemon/opener/backend.js +1 -0
  223. package/node_modules/@weavecode/server/dist/daemon/opener/launch.js +1 -1
  224. package/node_modules/@weavecode/server/dist/daemon/opener/pty-terminals.js +4 -4
  225. package/node_modules/@weavecode/server/dist/daemon/opener/shared.js +1 -1
  226. package/node_modules/@weavecode/server/dist/daemon/opener/wezterm-mux.d.ts +8 -5
  227. package/node_modules/@weavecode/server/dist/daemon/opener/wezterm-mux.js +1 -1
  228. package/node_modules/@weavecode/server/dist/daemon/opener/wt.js +3 -3
  229. package/node_modules/@weavecode/server/dist/daemon/opener.d.ts +23 -120
  230. package/node_modules/@weavecode/server/dist/daemon/opener.js +1 -13
  231. package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
  232. package/node_modules/@weavecode/server/dist/daemon/project-files.d.ts +17 -2
  233. package/node_modules/@weavecode/server/dist/daemon/project-files.js +2 -1
  234. package/node_modules/@weavecode/server/dist/daemon/project-harnesses.d.ts +2 -0
  235. package/node_modules/@weavecode/server/dist/daemon/project-harnesses.js +2 -2
  236. package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.js +1 -1
  237. package/node_modules/@weavecode/server/dist/daemon/prompt-images.js +1 -1
  238. package/node_modules/@weavecode/server/dist/daemon/routes/hooks-admin.js +1 -1
  239. package/node_modules/@weavecode/server/dist/daemon/routes/market.js +1 -1
  240. package/node_modules/@weavecode/server/dist/daemon/routes/orchestration.js +1 -1
  241. package/node_modules/@weavecode/server/dist/daemon/routes/path-refs.js +1 -1
  242. package/node_modules/@weavecode/server/dist/daemon/routes/project-files.d.ts +6 -0
  243. package/node_modules/@weavecode/server/dist/daemon/routes/project-files.js +1 -0
  244. package/node_modules/@weavecode/server/dist/daemon/routes/projects.js +1 -1
  245. package/node_modules/@weavecode/server/dist/daemon/routes/search.d.ts +38 -0
  246. package/node_modules/@weavecode/server/dist/daemon/routes/search.js +1 -0
  247. package/node_modules/@weavecode/server/dist/daemon/routes/session-control.js +1 -1
  248. package/node_modules/@weavecode/server/dist/daemon/routes/session-insights.js +1 -1
  249. package/node_modules/@weavecode/server/dist/daemon/routes/settings-statusline.js +1 -1
  250. package/node_modules/@weavecode/server/dist/daemon/routes/uploads.js +1 -1
  251. package/node_modules/@weavecode/server/dist/daemon/routes/watches.js +1 -1
  252. package/node_modules/@weavecode/server/dist/daemon/server.d.ts +8 -2
  253. package/node_modules/@weavecode/server/dist/daemon/server.js +8 -8
  254. package/node_modules/@weavecode/server/dist/daemon/session-open.d.ts +10 -1
  255. package/node_modules/@weavecode/server/dist/daemon/session-open.js +1 -1
  256. package/node_modules/@weavecode/server/dist/daemon/session-probe.js +1 -1
  257. package/node_modules/@weavecode/server/dist/daemon/settings.js +2 -2
  258. package/node_modules/@weavecode/server/dist/daemon/snapshot-refresher.js +1 -1
  259. package/node_modules/@weavecode/server/dist/daemon/sse-hub.js +1 -1
  260. package/node_modules/@weavecode/server/dist/daemon/start.js +1 -1
  261. package/node_modules/@weavecode/server/dist/daemon/state.js +2 -2
  262. package/node_modules/@weavecode/server/dist/daemon/static.js +1 -1
  263. package/node_modules/@weavecode/server/dist/daemon/terminal-topology-refresher.js +1 -1
  264. package/node_modules/@weavecode/server/dist/daemon/tls.js +1 -1
  265. package/node_modules/@weavecode/server/dist/daemon/toolkit-routes.js +1 -1
  266. package/node_modules/@weavecode/server/dist/daemon/upload-sessions.js +1 -1
  267. package/node_modules/@weavecode/server/dist/db/db.js +5 -2
  268. package/node_modules/@weavecode/server/dist/db/layout.js +1 -1
  269. package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
  270. package/node_modules/@weavecode/server/dist/hooks/bus.d.ts +10 -0
  271. package/node_modules/@weavecode/server/dist/hooks/bus.js +1 -1
  272. package/node_modules/@weavecode/server/dist/hooks/dashboard-rate.js +1 -1
  273. package/node_modules/@weavecode/server/dist/hooks/decision-judge.js +1 -1
  274. package/node_modules/@weavecode/server/dist/hooks/delivery/ack-gate.d.ts +20 -0
  275. package/node_modules/@weavecode/server/dist/hooks/delivery/ack-gate.js +1 -1
  276. package/node_modules/@weavecode/server/dist/hooks/delivery/channels.js +1 -1
  277. package/node_modules/@weavecode/server/dist/hooks/delivery/keys.d.ts +7 -1
  278. package/node_modules/@weavecode/server/dist/hooks/delivery/keys.js +1 -1
  279. package/node_modules/@weavecode/server/dist/hooks/delivery/queue.d.ts +4 -4
  280. package/node_modules/@weavecode/server/dist/hooks/delivery/queue.js +1 -1
  281. package/node_modules/@weavecode/server/dist/hooks/delivery/relay.js +1 -1
  282. package/node_modules/@weavecode/server/dist/hooks/delivery/send.js +2 -2
  283. package/node_modules/@weavecode/server/dist/hooks/delivery/views.d.ts +3 -1
  284. package/node_modules/@weavecode/server/dist/hooks/delivery/views.js +1 -1
  285. package/node_modules/@weavecode/server/dist/hooks/dispatcher.d.ts +5 -0
  286. package/node_modules/@weavecode/server/dist/hooks/dispatcher.js +6 -6
  287. package/node_modules/@weavecode/server/dist/hooks/edge-extract.js +1 -1
  288. package/node_modules/@weavecode/server/dist/hooks/handlers/webhook.js +1 -1
  289. package/node_modules/@weavecode/server/dist/hooks/headless-runner.js +2 -2
  290. package/node_modules/@weavecode/server/dist/hooks/inbox-socket.js +2 -2
  291. package/node_modules/@weavecode/server/dist/hooks/inbox-worker.d.ts +15 -0
  292. package/node_modules/@weavecode/server/dist/hooks/inbox-worker.js +3 -3
  293. package/node_modules/@weavecode/server/dist/hooks/match.js +1 -1
  294. package/node_modules/@weavecode/server/dist/hooks/message-deliverer.d.ts +64 -6
  295. package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +3 -2
  296. package/node_modules/@weavecode/server/dist/hooks/mirror.js +4 -4
  297. package/node_modules/@weavecode/server/dist/hooks/orchestration-engine.js +7 -7
  298. package/node_modules/@weavecode/server/dist/hooks/orchestration-graph.js +1 -1
  299. package/node_modules/@weavecode/server/dist/hooks/plugin-installer.d.ts +5 -0
  300. package/node_modules/@weavecode/server/dist/hooks/plugin-installer.js +3 -3
  301. package/node_modules/@weavecode/server/dist/hooks/plugin-loader.js +1 -1
  302. package/node_modules/@weavecode/server/dist/hooks/plugin-project-state.js +1 -1
  303. package/node_modules/@weavecode/server/dist/hooks/prompt-flusher.js +1 -1
  304. package/node_modules/@weavecode/server/dist/hooks/promptbox.js +8 -8
  305. package/node_modules/@weavecode/server/dist/hooks/push-notify.js +2 -2
  306. package/node_modules/@weavecode/server/dist/hooks/question-tracker.js +1 -1
  307. package/node_modules/@weavecode/server/dist/hooks/registry.js +1 -1
  308. package/node_modules/@weavecode/server/dist/hooks/resume-runner.js +1 -1
  309. package/node_modules/@weavecode/server/dist/hooks/session-purge.js +1 -1
  310. package/node_modules/@weavecode/server/dist/hooks/session-sweeper.d.ts +2 -0
  311. package/node_modules/@weavecode/server/dist/hooks/session-sweeper.js +1 -1
  312. package/node_modules/@weavecode/server/dist/hooks/side-questions.js +1 -1
  313. package/node_modules/@weavecode/server/dist/hooks/synthetic-sessions.js +1 -1
  314. package/node_modules/@weavecode/server/dist/hooks/toolkit-scan.js +1 -1
  315. package/node_modules/@weavecode/server/dist/hooks/toolkit.js +5 -5
  316. package/node_modules/@weavecode/server/dist/hooks/watch-engine.js +1 -1
  317. package/node_modules/@weavecode/server/dist/index.d.ts +1 -0
  318. package/node_modules/@weavecode/server/dist/index.js +1 -1
  319. package/node_modules/@weavecode/server/dist/install/apply-update.js +1 -1
  320. package/node_modules/@weavecode/server/dist/install/capabilities.js +1 -1
  321. package/node_modules/@weavecode/server/dist/install/codex-toml.js +1 -1
  322. package/node_modules/@weavecode/server/dist/install/file-assets.js +1 -1
  323. package/node_modules/@weavecode/server/dist/install/fingerprint.js +1 -1
  324. package/node_modules/@weavecode/server/dist/install/global-config.js +1 -1
  325. package/node_modules/@weavecode/server/dist/install/global-file-assets.js +1 -1
  326. package/node_modules/@weavecode/server/dist/install/init-files.js +2 -2
  327. package/node_modules/@weavecode/server/dist/install/install-ledger.js +1 -1
  328. package/node_modules/@weavecode/server/dist/install/installer.js +1 -1
  329. package/node_modules/@weavecode/server/dist/install/library-index.js +1 -1
  330. package/node_modules/@weavecode/server/dist/install/mcp-rows.js +1 -1
  331. package/node_modules/@weavecode/server/dist/install/plugin-install.js +1 -1
  332. package/node_modules/@weavecode/server/dist/install/plugin-rows.js +1 -1
  333. package/node_modules/@weavecode/server/dist/install/plugin-templates.js +1 -1
  334. package/node_modules/@weavecode/server/dist/install/project-config.js +1 -1
  335. package/node_modules/@weavecode/server/dist/install/reader.js +1 -1
  336. package/node_modules/@weavecode/server/dist/install/scan-cache.js +1 -1
  337. package/node_modules/@weavecode/server/dist/install/scanner.js +1 -1
  338. package/node_modules/@weavecode/server/dist/install/settings-mcp.js +2 -2
  339. package/node_modules/@weavecode/server/dist/install/updates.js +1 -1
  340. package/node_modules/@weavecode/server/dist/market/builtin.js +1 -1
  341. package/node_modules/@weavecode/server/dist/market/identity.js +1 -1
  342. package/node_modules/@weavecode/server/dist/market/import.js +2 -2
  343. package/node_modules/@weavecode/server/dist/market/refresh.js +1 -1
  344. package/node_modules/@weavecode/server/dist/market/resolve.js +1 -1
  345. package/node_modules/@weavecode/server/dist/market/updates.js +1 -1
  346. package/node_modules/@weavecode/server/dist/registry.js +2 -2
  347. package/node_modules/@weavecode/server/dist/repositories/hook-dispatches.js +5 -5
  348. package/node_modules/@weavecode/server/dist/repositories/hook-events.d.ts +19 -1
  349. package/node_modules/@weavecode/server/dist/repositories/hook-events.js +9 -3
  350. package/node_modules/@weavecode/server/dist/repositories/hook-rules.js +4 -4
  351. package/node_modules/@weavecode/server/dist/repositories/libraries.js +1 -1
  352. package/node_modules/@weavecode/server/dist/repositories/orchestrations.js +7 -7
  353. package/node_modules/@weavecode/server/dist/repositories/plugin-states.js +1 -1
  354. package/node_modules/@weavecode/server/dist/repositories/projects.js +2 -2
  355. package/node_modules/@weavecode/server/dist/repositories/push-subscriptions.js +2 -2
  356. package/node_modules/@weavecode/server/dist/repositories/session-watches.js +4 -4
  357. package/node_modules/@weavecode/server/dist/repositories/sessions.d.ts +12 -2
  358. package/node_modules/@weavecode/server/dist/repositories/sessions.js +2 -2
  359. package/node_modules/@weavecode/server/dist/repositories/side-questions.d.ts +7 -0
  360. package/node_modules/@weavecode/server/dist/repositories/side-questions.js +8 -5
  361. package/node_modules/@weavecode/server/dist/repositories/uploads.js +11 -11
  362. package/node_modules/@weavecode/server/dist/statusline/cache-sweeper.js +1 -1
  363. package/node_modules/@weavecode/server/dist/statusline/generator.js +1 -1
  364. package/node_modules/@weavecode/server/dist/statusline/manager.js +3 -3
  365. package/node_modules/@weavecode/server/dist/surfaces.d.ts +8 -1
  366. package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
  367. package/node_modules/@weavecode/server/dist/version.d.ts +1 -11
  368. package/node_modules/@weavecode/server/dist/version.js +1 -1
  369. package/node_modules/@weavecode/server/dist/watch/cache.js +1 -1
  370. package/node_modules/@weavecode/server/dist/watch/classifier.js +1 -1
  371. package/node_modules/@weavecode/server/dist/watch/plugin-mods.js +1 -1
  372. package/node_modules/@weavecode/server/dist/watch/sync-scheduler.js +1 -1
  373. package/node_modules/@weavecode/server/dist/watch/watch-service.js +1 -1
  374. package/node_modules/@weavecode/server/package.json +4 -4
  375. package/node_modules/@weavecode/server/web/dist/assets/{abnfDiagram-WEYOIA3C-etRkSvQM.js → abnfDiagram-WEYOIA3C-DA-K085F.js} +1 -1
  376. package/node_modules/@weavecode/server/web/dist/assets/{arc-FxRZALAZ.js → arc-BI1jnmdZ.js} +1 -1
  377. package/node_modules/@weavecode/server/web/dist/assets/{architectureDiagram-ZHVYKT53-5OxZ-ffz.js → architectureDiagram-ZHVYKT53-DbdBgric.js} +1 -1
  378. package/node_modules/@weavecode/server/web/dist/assets/{blockDiagram-RJAE7QA3-C-CgMF0O.js → blockDiagram-RJAE7QA3-BPRBmzb-.js} +1 -1
  379. package/node_modules/@weavecode/server/web/dist/assets/{c4Diagram-XDPPPE54-B6TqN1Pw.js → c4Diagram-XDPPPE54-C4D5sRs1.js} +1 -1
  380. package/node_modules/@weavecode/server/web/dist/assets/channel-DcCJrvon.js +1 -0
  381. package/node_modules/@weavecode/server/web/dist/assets/{chunk-2E7WHVMD-Bdzr5RRj.js → chunk-2E7WHVMD-9ZSKiNU3.js} +1 -1
  382. package/node_modules/@weavecode/server/web/dist/assets/{chunk-2Q5K7J3B-gBZASjAC.js → chunk-2Q5K7J3B-i0AOjw_8.js} +1 -1
  383. package/node_modules/@weavecode/server/web/dist/assets/{chunk-4EMNKR2T-DSlUhKMw.js → chunk-4EMNKR2T-DTpLfX1H.js} +1 -1
  384. package/node_modules/@weavecode/server/web/dist/assets/{chunk-55XCU76K-BDQ6zpGR.js → chunk-55XCU76K-COQYRD4q.js} +1 -1
  385. package/node_modules/@weavecode/server/web/dist/assets/{chunk-5VM5RSS4-DPnewKbl.js → chunk-5VM5RSS4-VsftEbvo.js} +1 -1
  386. package/node_modules/@weavecode/server/web/dist/assets/{chunk-JWPE2WC7-DagmT8Cc.js → chunk-JWPE2WC7-DonektJN.js} +1 -1
  387. package/node_modules/@weavecode/server/web/dist/assets/{chunk-VQ5W62QI-Da_2PxfM.js → chunk-VQ5W62QI-CaKUwuul.js} +1 -1
  388. package/node_modules/@weavecode/server/web/dist/assets/{chunk-XXDRQBXY-Cdaysois.js → chunk-XXDRQBXY-DXH3D_MT.js} +1 -1
  389. package/node_modules/@weavecode/server/web/dist/assets/{chunk-ZCHMQSOR-CvgYfbjU.js → chunk-ZCHMQSOR-COwyAuGn.js} +2 -2
  390. package/node_modules/@weavecode/server/web/dist/assets/{classDiagram-v2-4MYWR3UA-ahplYD2h.js → classDiagram-v2-4MYWR3UA-DEvMZ6mX.js} +1 -1
  391. package/node_modules/@weavecode/server/web/dist/assets/{cose-bilkent-JH36ORCC-DFyUfgKj.js → cose-bilkent-JH36ORCC-6JBJHfH6.js} +1 -1
  392. package/node_modules/@weavecode/server/web/dist/assets/{cynefin-EF2NZ3EQ-mr2qRwod.js → cynefin-EF2NZ3EQ-C4GM4sjT.js} +1 -1
  393. package/node_modules/@weavecode/server/web/dist/assets/{cynefinDiagram-WF24UDRP-BC26VqNp.js → cynefinDiagram-WF24UDRP-Cqgi0MBP.js} +1 -1
  394. package/node_modules/@weavecode/server/web/dist/assets/{dagre-NK4GIZVX-DoKn_P1x.js → dagre-NK4GIZVX-CljrnkCY.js} +1 -1
  395. package/node_modules/@weavecode/server/web/dist/assets/{diagram-CBK3MWTC-C9WfEmt3.js → diagram-CBK3MWTC-C3PyOj5J.js} +1 -1
  396. package/node_modules/@weavecode/server/web/dist/assets/{diagram-I5XIIV2D-D4Ibieda.js → diagram-I5XIIV2D-I5brQlaZ.js} +1 -1
  397. package/node_modules/@weavecode/server/web/dist/assets/{diagram-ODIL2UCW-wsLbYLi0.js → diagram-ODIL2UCW-BX9uFNbU.js} +1 -1
  398. package/node_modules/@weavecode/server/web/dist/assets/{diagram-PFBEJUXE-DBioMmDk.js → diagram-PFBEJUXE-y7D-VmqJ.js} +1 -1
  399. package/node_modules/@weavecode/server/web/dist/assets/{diagram-RJA3I4VV-Cl5gKsWm.js → diagram-RJA3I4VV-DLUL8W42.js} +1 -1
  400. package/node_modules/@weavecode/server/web/dist/assets/{diagram-TYUNFSNR-BSXOaZic.js → diagram-TYUNFSNR-DLCC3ILi.js} +1 -1
  401. package/node_modules/@weavecode/server/web/dist/assets/{ebnfDiagram-V4P3TTPT-CJIGOag6.js → ebnfDiagram-V4P3TTPT-D7vALia7.js} +1 -1
  402. package/node_modules/@weavecode/server/web/dist/assets/{elk-QONTBCTQ-D6nd2OVX.js → elk-QONTBCTQ-Ct2_hatz.js} +1 -1
  403. package/node_modules/@weavecode/server/web/dist/assets/{erDiagram-KYQIGQAA-gmXjWsuF.js → erDiagram-KYQIGQAA-DxLai58T.js} +1 -1
  404. package/node_modules/@weavecode/server/web/dist/assets/{flowDiagram-IUGLLWBU-DWAiZ43K.js → flowDiagram-IUGLLWBU-AWn2IHrF.js} +1 -1
  405. package/node_modules/@weavecode/server/web/dist/assets/{ganttDiagram-R7GPNTJY-De4v6Wtt.js → ganttDiagram-R7GPNTJY-DmRHd4Wz.js} +1 -1
  406. package/node_modules/@weavecode/server/web/dist/assets/{gitGraphDiagram-PDYL7XHY-CouLBWOB.js → gitGraphDiagram-PDYL7XHY-Ccj-t3zg.js} +1 -1
  407. package/node_modules/@weavecode/server/web/dist/assets/index-BSxzia7U.js +1031 -0
  408. package/node_modules/@weavecode/server/web/dist/assets/index-CEpJpR7P.css +11 -0
  409. package/node_modules/@weavecode/server/web/dist/assets/{infoDiagram-MVDRKAX5-CeMCdduD.js → infoDiagram-MVDRKAX5-BHquFlQa.js} +1 -1
  410. package/node_modules/@weavecode/server/web/dist/assets/{ishikawaDiagram-HPEHV2GE-DK6hETwg.js → ishikawaDiagram-HPEHV2GE-CVogEbdm.js} +1 -1
  411. package/node_modules/@weavecode/server/web/dist/assets/{journeyDiagram-BOSHW7O7-BcgwTlST.js → journeyDiagram-BOSHW7O7-DC9XG9oh.js} +1 -1
  412. package/node_modules/@weavecode/server/web/dist/assets/{kanban-definition-FNSA4HC5-CTVMJNz2.js → kanban-definition-FNSA4HC5-C_eu7DC_.js} +1 -1
  413. package/node_modules/@weavecode/server/web/dist/assets/{linear-CqQf5eWO.js → linear-keTbWHJ-.js} +1 -1
  414. package/node_modules/@weavecode/server/web/dist/assets/{mermaid.core-B6KZaljU.js → mermaid.core-4sbg0MnY.js} +4 -4
  415. package/node_modules/@weavecode/server/web/dist/assets/{mindmap-definition-6OY57UG3-cpKvrQTI.js → mindmap-definition-6OY57UG3-kMQS0S2l.js} +1 -1
  416. package/node_modules/@weavecode/server/web/dist/assets/{pegDiagram-ECIUJNBX-Bv2bNqMZ.js → pegDiagram-ECIUJNBX-DcUFoEwP.js} +1 -1
  417. package/node_modules/@weavecode/server/web/dist/assets/{pieDiagram-GNMPY74T-CXOnA429.js → pieDiagram-GNMPY74T-BQJ7WDCx.js} +1 -1
  418. package/node_modules/@weavecode/server/web/dist/assets/{quadrantDiagram-D57K4MC3-BFDUpWZb.js → quadrantDiagram-D57K4MC3-C7Oi1-sq.js} +1 -1
  419. package/node_modules/@weavecode/server/web/dist/assets/{railroadDiagram-Y72NRBL7-BHoDSO0D.js → railroadDiagram-Y72NRBL7-CEF2QbOF.js} +1 -1
  420. package/node_modules/@weavecode/server/web/dist/assets/{requirementDiagram-EQYSW5RA-B8JGji7q.js → requirementDiagram-EQYSW5RA-CTjjFS7X.js} +1 -1
  421. package/node_modules/@weavecode/server/web/dist/assets/{sankeyDiagram-SY24JHO5-BbE2-6ZM.js → sankeyDiagram-SY24JHO5-j0S5kubS.js} +1 -1
  422. package/node_modules/@weavecode/server/web/dist/assets/{sequenceDiagram-BLEHNHQU-DwK4X2MT.js → sequenceDiagram-BLEHNHQU-B76EsZp4.js} +1 -1
  423. package/node_modules/@weavecode/server/web/dist/assets/{sizeCapture-INFHLROL-CY10zRMe.js → sizeCapture-INFHLROL-r0DZuqAy.js} +1 -1
  424. package/node_modules/@weavecode/server/web/dist/assets/{stateDiagram-v2-A6IESKWZ-32t4Zx8b.js → stateDiagram-v2-A6IESKWZ-B4DR9LHz.js} +1 -1
  425. package/node_modules/@weavecode/server/web/dist/assets/{swimlanes-B3ENRKFQ-CZlYQ8_g.js → swimlanes-B3ENRKFQ-Dbcl85ro.js} +1 -1
  426. package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-CZ_6SSBd.js +8 -0
  427. package/node_modules/@weavecode/server/web/dist/assets/{timeline-definition-JXYKGLGB-8VsB-Jwg.js → timeline-definition-JXYKGLGB-BlBXXRNf.js} +1 -1
  428. package/node_modules/@weavecode/server/web/dist/assets/{usecaseDiagram-WPOLBNNX-CKOTONay.js → usecaseDiagram-WPOLBNNX-Ck1M0dpc.js} +1 -1
  429. package/node_modules/@weavecode/server/web/dist/assets/{vennDiagram-Q3Y3IDCW-BzrNjxtm.js → vennDiagram-Q3Y3IDCW-N8B-ohWk.js} +1 -1
  430. package/node_modules/@weavecode/server/web/dist/assets/{wardleyDiagram-IVAIDKWA-CrSd-v8I.js → wardleyDiagram-IVAIDKWA-DX-AMXq_.js} +1 -1
  431. package/node_modules/@weavecode/server/web/dist/assets/{xychartDiagram-4URNHDU4-t9cV9_9b.js → xychartDiagram-4URNHDU4-4fgL48Yl.js} +1 -1
  432. package/node_modules/@weavecode/server/web/dist/index.html +5 -4
  433. package/node_modules/@weavecode/templates/package.json +2 -2
  434. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/@peculiar/asn1-x509-attr/package.json +3 -3
  435. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/package.json +4 -4
  436. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/package.json +3 -3
  437. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/package.json +3 -3
  438. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-pfx/package.json +5 -5
  439. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-pkcs8/package.json +3 -3
  440. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/@peculiar/asn1-x509-attr/package.json +3 -3
  441. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/package.json +7 -7
  442. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/package.json +3 -3
  443. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/package.json +1 -1
  444. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/build/cjs/time.js +1 -1
  445. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/build/es2015/time.js +1 -1
  446. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/package.json +2 -2
  447. package/package.json +6 -6
  448. package/node_modules/@weavecode/server/web/dist/assets/channel-Dv4QUMOJ.js +0 -1
  449. package/node_modules/@weavecode/server/web/dist/assets/index-BXhLerZ4.js +0 -1008
  450. package/node_modules/@weavecode/server/web/dist/assets/index-BYRxC-Zz.css +0 -11
  451. package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-BlIxQLON.js +0 -8
@@ -1,7 +1,7 @@
1
- import a from"node:path";import{readFile as f,writeFile as c,readdir as D,unlink as T}from"node:fs/promises";import{DEFAULT_AGENTS as A,DEFAULT_COMMANDS as F,DEFAULT_HOOKS as O,DEFAULT_MCP as J,DEFAULT_SKILLS as N,ensureDir as m,fileExists as w,logger as p,resolveComponents as b,writeFileIfAbsent as y}from"@weavecode/core";import{templateRegistry as d}from"@weavecode/templates";import{generateStatuslineScript as M,readStatuslineConfig as C,WEAVE_VERSION as U}from"@weavecode/server";import{InitPipeline as L,generateHookHandler as P,readUserCapture as _}from"@weavecode/harness";import{generateSettingsJson as I,mergeSettingsJson as R}from"../settings-gen.js";import{generateMcpJson as H,mergeMcpJson as x}from"../mcp-gen.js";import{generateAutoMemoryHook as K}from"../helpers-gen.js";import{registerPluginTemplates as V,collectPluginMcpServers as W}from"../plugin-templates.js";import{t as l}from"../../i18n/index.js";export const WEAVE_HELPER_MARKER="@version weave@";const q={preToolUse:!1,postToolUse:!1,userPromptSubmit:!1,sessionStart:!1,stop:!1,stopFailure:!1,subagentStop:!1,subagentStart:!1,notification:!1,postToolUseFailure:!1,permissionRequest:!1,permissionDenied:!1,preCompact:!1,sessionEnd:!1,preModelSwitch:!1,timeout:5e3,continueOnError:!0};export class ClaudeInitTemplate extends L{records={created:{directories:[],files:[]},skipped:[],merged:[],updated:[],removed:[]};st;constructor(s){super(s);const i=a.join(s.targetDir,".claude");this.st={targetDir:s.targetDir,force:s.force,platform:s.platform,components:b(s.preset,s.components),hooks:{...O,...s.hooks},skills:{...N,...s.skills},commands:{...F,...s.commands},agents:{...A,...s.agents},mcp:{...J,...s.mcp},claudeDir:i,skillsDir:a.join(i,"skills"),commandsDir:a.join(i,"commands"),agentsDir:a.join(i,"agents"),helpersDir:a.join(i,"helpers"),...this.records}}ensureDirs(){return G(this.st)}writeSettings(){return z(this.st)}writeMcp(){return B(this.st)}copySkills(){return Q(this.st)}copyCommands(){return X(this.st)}copyAgents(){return Y(this.st)}injectPluginTemplates(){return Z(this.st)}writeHelpers(){return $(this.st)}}async function G(t){await m(t.claudeDir),t.created.directories.push(t.claudeDir),t.components.skills&&(await m(t.skillsDir),t.created.directories.push(t.skillsDir)),t.components.commands&&(await m(t.commandsDir),t.created.directories.push(t.commandsDir)),t.components.agents&&(await m(t.agentsDir),t.created.directories.push(t.agentsDir)),t.components.helpers&&(await m(t.helpersDir),t.created.directories.push(t.helpersDir))}async function z(t){if(t.components.settings){const s=await _({home:t.platform.homeDir}),i=s.installed?q:t.hooks;s.installed&&p.dim(l("init.userCaptureActive"));const o=I({components:t.components,hooks:i,platform:t.platform,helpersDir:t.helpersDir}),e=a.join(t.claudeDir,"settings.json");if(t.force)await c(e,JSON.stringify(o,null,2)+`
2
- `,"utf-8"),t.created.files.push(e);else{const r=await S(e);if(r===void 0)await w(e)?(t.skipped.push(e),p.warn(l("init.skippedInvalidJson",{path:e}))):(await c(e,JSON.stringify(o,null,2)+`
3
- `,"utf-8"),t.created.files.push(e));else{const n=R(r,o);await c(e,JSON.stringify(n,null,2)+`
4
- `,"utf-8"),t.merged.push(e)}}}}async function B(t){if(t.components.mcp){const s=H({platform:t.platform,includeWeaveServer:t.mcp.weave}),i=Object.keys(s.mcpServers),o=await W(t.targetDir,void 0,i),e=s.mcpServers;for(const[r,n]of Object.entries(o.servers))e[r]=n;for(const r of o.renamed)p.warn(l("init.pluginMcpRenamed",{renamed:r}));if(Object.keys(e).length>0){const r=a.join(t.targetDir,".mcp.json");if(t.force)await c(r,JSON.stringify(s,null,2)+`
5
- `,"utf-8"),t.created.files.push(r);else{const n=await S(r);if(n===void 0)await w(r)?(t.skipped.push(r),p.warn(l("init.skippedInvalidJson",{path:r}))):(await c(r,JSON.stringify(s,null,2)+`
6
- `,"utf-8"),t.created.files.push(r));else{const u=x(n,s);await c(r,JSON.stringify(u,null,2)+`
7
- `,"utf-8"),t.merged.push(r)}}}else await w(a.join(t.targetDir,".mcp.json"))&&t.skipped.push(a.join(t.targetDir,".mcp.json"))}}async function Q(t){if(t.components.skills&&t.skills.core){const s=d.getSkillsSourceDir();await h(s,t.skillsDir,t.force,t.created,t.skipped)}}async function X(t){if(t.components.commands&&t.commands.core){const s=d.getCommandsSourceDir();await h(s,t.commandsDir,t.force,t.created,t.skipped)}}async function Y(t){if(t.components.agents&&t.agents.core){const s=d.getAgentsSourceDir();await h(s,t.agentsDir,t.force,t.created,t.skipped)}}async function Z(t){try{const{registered:s}=await V(t.targetDir);for(const i of s){const o=d.resolvePath(i);if(i.category==="skill"){await h(o,a.join(t.skillsDir,a.basename(o)),t.force,t.created,t.skipped);continue}const e=i.category==="command"?t.commandsDir:t.agentsDir,r=a.join(e,a.basename(o));try{const n=await f(o,"utf-8");await y(r,n,t.force)?t.created.files.push(r):t.skipped.push(r)}catch(n){p.warn(l("init.copyTemplatesFailed",{srcDir:o,error:String(n)}))}}}catch(s){p.warn(l("init.copyTemplatesFailed",{srcDir:"plugins",error:String(s)}))}}async function $(t){if(t.components.helpers){const s=await C(t.targetDir),i=[["hook-handler.cjs",P(U)],["statusline.cjs",M(s)],["auto-memory-hook.mjs",K()]];for(const[e,r]of i){const n=a.join(t.helpersDir,e);if(t.force){await c(n,r,"utf-8"),t.created.files.push(n);continue}const u=await k(n);u===null?(await c(n,r,"utf-8"),t.created.files.push(n)):u.includes(WEAVE_HELPER_MARKER)?(await c(n,r,"utf-8"),t.updated.push(n)):t.skipped.push(n)}const o=new Set(i.map(([e])=>e));try{for(const e of await D(t.helpersDir,{withFileTypes:!0})){if(!e.isFile()||o.has(e.name))continue;const r=a.join(t.helpersDir,e.name),n=await k(r);n!==null&&n.includes(WEAVE_HELPER_MARKER)&&(await T(r),t.removed.push(r))}}catch{}}}async function k(t){try{return await f(t,"utf-8")}catch(s){if(j(s))return null;throw s}}async function S(t){let s;try{s=await f(t,"utf-8")}catch(i){if(j(i))return;throw i}try{const i=JSON.parse(s);if(typeof i=="object"&&i!==null&&!Array.isArray(i))return i}catch{}}function j(t){return typeof t=="object"&&t!==null&&t.code==="ENOENT"}async function h(t,s,i,o,e){try{const r=await v(t);for(const n of r){const u=a.relative(t,n),g=a.join(s,u),E=await f(n,"utf-8");await y(g,E,i)?o.files.push(g):e.push(g)}}catch(r){p.warn(l("init.copyTemplatesFailed",{srcDir:t,error:String(r)}))}}async function v(t){const s=[];try{const i=await D(t,{withFileTypes:!0});for(const o of i){const e=a.join(t,o.name);o.isDirectory()?s.push(...await v(e)):s.push(e)}}catch{}return s}
1
+ import a from"node:path";import{readFile as d,writeFile as l,readdir as D,unlink as v}from"node:fs/promises";import{DEFAULT_AGENTS as F,DEFAULT_COMMANDS as A,DEFAULT_HOOKS as O,DEFAULT_MCP as C,DEFAULT_SKILLS as J,ensureDir as m,fileExists as w,logger as p,resolveComponents as M,writeFileIfAbsent as y}from"@weavecode/core";import{templateRegistry as g}from"@weavecode/templates";import{generateStatuslineScript as P,readStatuslineConfig as N,WEAVE_VERSION as b}from"@weavecode/server";import{InitPipeline as U,generateHookHandler as _,readUserCapture as R}from"@weavecode/harness";import{generateSettingsJson as I,mergeSettingsJson as L}from"../settings-gen.js";import{generateMcpJson as H,mergeMcpJson as K}from"../mcp-gen.js";import{generateAutoMemoryHook as V}from"../helpers-gen.js";import{registerPluginTemplates as W,collectPluginMcpServers as q}from"../plugin-templates.js";import{t as f}from"../../i18n/index.js";export const WEAVE_HELPER_MARKER="@version weave@";const G={preToolUse:!1,postToolUse:!1,userPromptSubmit:!1,sessionStart:!1,stop:!1,stopFailure:!1,subagentStop:!1,subagentStart:!1,notification:!1,postToolUseFailure:!1,permissionRequest:!1,permissionDenied:!1,preCompact:!1,sessionEnd:!1,preModelSwitch:!1,timeout:5e3,continueOnError:!0};export class ClaudeInitTemplate extends U{records={created:{directories:[],files:[]},skipped:[],merged:[],updated:[],removed:[]};st;constructor(i){super(i);const t=a.join(i.targetDir,".claude");this.st={targetDir:i.targetDir,force:i.force,platform:i.platform,components:M(i.preset,i.components),hooks:{...O,...i.hooks},skills:{...J,...i.skills},commands:{...A,...i.commands},agents:{...F,...i.agents},mcp:{...C,...i.mcp},claudeDir:t,skillsDir:a.join(t,"skills"),commandsDir:a.join(t,"commands"),agentsDir:a.join(t,"agents"),helpersDir:a.join(t,"helpers"),...this.records}}ensureDirs(){return z(this.st)}writeSettings(){return B(this.st)}writeMcp(){return Q(this.st)}copySkills(){return X(this.st)}copyCommands(){return Y(this.st)}copyAgents(){return Z(this.st)}injectPluginTemplates(){return $(this.st)}writeHelpers(){return x(this.st)}}async function z(e){await m(e.claudeDir),e.created.directories.push(e.claudeDir),e.components.skills&&(await m(e.skillsDir),e.created.directories.push(e.skillsDir)),e.components.commands&&(await m(e.commandsDir),e.created.directories.push(e.commandsDir)),e.components.agents&&(await m(e.agentsDir),e.created.directories.push(e.agentsDir)),e.components.helpers&&(await m(e.helpersDir),e.created.directories.push(e.helpersDir))}async function B(e){if(e.components.settings){const i=await R({home:e.platform.homeDir}),t=i.installed?G:e.hooks;i.installed&&p.dim(f("init.userCaptureActive"));const s=I({components:e.components,hooks:t,platform:e.platform,helpersDir:e.helpersDir}),n=a.join(e.claudeDir,"settings.json");if(e.force)await l(n,JSON.stringify(s,null,2)+`
2
+ `,"utf-8"),e.created.files.push(n);else{const o=await k(n);if(o===void 0)await w(n)?(e.skipped.push(n),p.warn(f("init.skippedInvalidJson",{path:n}))):(await l(n,JSON.stringify(s,null,2)+`
3
+ `,"utf-8"),e.created.files.push(n));else{const r=L(o,s);await l(n,JSON.stringify(r,null,2)+`
4
+ `,"utf-8"),e.merged.push(n)}}}}async function Q(e){if(e.components.mcp){const i=H({platform:e.platform,includeWeaveServer:e.mcp.weave}),t=Object.keys(i.mcpServers),s=await q(e.targetDir,void 0,t),n=i.mcpServers;for(const[r,c]of Object.entries(s.servers))n[r]=c;for(const r of s.renamed)p.warn(f("init.pluginMcpRenamed",{renamed:r}));if(Object.keys(n).length>0){const r=a.join(e.targetDir,".mcp.json");if(e.force)await l(r,JSON.stringify(i,null,2)+`
5
+ `,"utf-8"),e.created.files.push(r);else{const c=await k(r);if(c===void 0)await w(r)?(e.skipped.push(r),p.warn(f("init.skippedInvalidJson",{path:r}))):(await l(r,JSON.stringify(i,null,2)+`
6
+ `,"utf-8"),e.created.files.push(r));else{const u=K(c,i);await l(r,JSON.stringify(u,null,2)+`
7
+ `,"utf-8"),e.merged.push(r)}}}else await w(a.join(e.targetDir,".mcp.json"))&&e.skipped.push(a.join(e.targetDir,".mcp.json"))}}async function X(e){if(e.components.skills&&e.skills.core){const i=g.getSkillsSourceDir();await h(i,e.skillsDir,e.force,e.created,e.skipped)}}async function Y(e){if(e.components.commands&&e.commands.core){const i=g.getCommandsSourceDir();await h(i,e.commandsDir,e.force,e.created,e.skipped)}}async function Z(e){if(e.components.agents&&e.agents.core){const i=g.getAgentsSourceDir();await h(i,e.agentsDir,e.force,e.created,e.skipped)}}async function $(e){try{const{registered:i}=await W(e.targetDir);for(const t of i){const s=g.resolvePath(t);if(t.category==="skill"){await h(s,a.join(e.skillsDir,a.basename(s)),e.force,e.created,e.skipped);continue}const n=t.category==="command"?e.commandsDir:e.agentsDir,o=a.join(n,a.basename(s));try{const r=await d(s,"utf-8");await y(o,r,e.force)?e.created.files.push(o):e.skipped.push(o)}catch(r){p.warn(f("init.copyTemplatesFailed",{srcDir:s,error:String(r)}))}}}catch(i){p.warn(f("init.copyTemplatesFailed",{srcDir:"plugins",error:String(i)}))}}async function x(e){if(e.components.helpers){const i=await N(e.targetDir),t=[["hook-handler.cjs",_(b)],["statusline.cjs",P(i)],["auto-memory-hook.mjs",V()]];for(const[n,o]of t){const r=a.join(e.helpersDir,n);if(e.force){await l(r,o,"utf-8"),e.created.files.push(r);continue}const c=await S(r);c===null?(await l(r,o,"utf-8"),e.created.files.push(r)):c.includes(WEAVE_HELPER_MARKER)?(await l(r,o,"utf-8"),e.updated.push(r)):e.skipped.push(r)}const s=new Set(t.map(([n])=>n));try{for(const n of await D(e.helpersDir,{withFileTypes:!0})){if(!n.isFile()||s.has(n.name))continue;const o=a.join(e.helpersDir,n.name),r=await S(o);r!==null&&r.includes(WEAVE_HELPER_MARKER)&&(await v(o),e.removed.push(o))}}catch{}}}async function S(e){try{return await d(e,"utf-8")}catch(i){if(j(i))return null;throw i}}async function k(e){let i;try{i=await d(e,"utf-8")}catch(t){if(j(t))return;throw t}try{const t=JSON.parse(i);if(typeof t=="object"&&t!==null&&!Array.isArray(t))return t}catch{}}function j(e){return typeof e=="object"&&e!==null&&e.code==="ENOENT"}async function h(e,i,t,s,n){try{const o=await T(e);for(const r of o){const c=a.relative(e,r),u=a.join(i,c),E=await d(r,"utf-8");await y(u,E,t)?s.files.push(u):n.push(u)}}catch(o){p.warn(f("init.copyTemplatesFailed",{srcDir:e,error:String(o)}))}}async function T(e){const i=[];try{const t=await D(e,{withFileTypes:!0});for(const s of t){const n=a.join(e,s.name);s.isDirectory()?i.push(...await T(n)):i.push(n)}}catch{}return i}
@@ -1 +1 @@
1
- import o from"node:path";import{readdir as m,readFile as k}from"node:fs/promises";import{DEFAULT_SKILLS as f,HARNESS_DIRS as u,ensureDir as n,logger as p,resolveComponents as D,writeFileIfAbsent as w}from"@weavecode/core";import{templateRegistry as y}from"@weavecode/templates";import{InitPipeline as g}from"@weavecode/harness";import{t as a}from"../../i18n/index.js";export class CodexInitTemplate extends g{records={created:{directories:[],files:[]},skipped:[],merged:[],updated:[],removed:[]};force;components;skills;codexDir;skillsDir;constructor(s){super(s);const i=D(s.preset,s.components),e=o.join(s.targetDir,u.codex.projectDir);this.force=s.force,this.components=i,this.skills={...f,...s.skills},this.codexDir=e,this.skillsDir=o.join(e,"skills")}async ensureDirs(){await n(this.codexDir),this.records.created.directories.push(this.codexDir),this.components.skills&&(await n(this.skillsDir),this.records.created.directories.push(this.skillsDir))}writeSettings(){this.skipNoFace("writeSettings")}writeMcp(){this.skipNoFace("writeMcp")}async copySkills(){if(this.components.skills&&this.skills.core){const s=y.getSkillsSourceDir();await F(s,this.skillsDir,this.force,this.records)}}copyCommands(){this.skipNoFace("copyCommands")}copyAgents(){this.skipNoFace("copyAgents")}injectPluginTemplates(){this.skipNoFace("injectPluginTemplates")}writeHelpers(){this.skipNoFace("writeHelpers")}skipNoFace(s){const i=a("init.noPeerFace");this.skip(s,i),p.dim(a("init.stepSkipped",{step:s,reason:i}))}}async function F(t,s,i,e){try{for(const r of await l(t)){const h=o.relative(t,r),c=o.join(s,h),d=await k(r,"utf-8");await w(c,d,i)?e.created.files.push(c):e.skipped.push(c)}}catch(r){p.warn(a("init.copyTemplatesFailed",{srcDir:t,error:String(r)}))}}async function l(t){const s=[];try{const i=await m(t,{withFileTypes:!0});for(const e of i){const r=o.join(t,e.name);e.isDirectory()?s.push(...await l(r)):s.push(r)}}catch{return s}return s}
1
+ import o from"node:path";import{readdir as d,readFile as k}from"node:fs/promises";import{DEFAULT_SKILLS as f,HARNESS_DIRS as u,ensureDir as l,logger as p,resolveComponents as w,writeFileIfAbsent as D}from"@weavecode/core";import{templateRegistry as y}from"@weavecode/templates";import{InitPipeline as F}from"@weavecode/harness";import{t as n}from"../../i18n/index.js";export class CodexInitTemplate extends F{records={created:{directories:[],files:[]},skipped:[],merged:[],updated:[],removed:[]};force;components;skills;codexDir;skillsDir;constructor(e){super(e);const i=w(e.preset,e.components),s=o.join(e.targetDir,u.codex.projectDir);this.force=e.force,this.components=i,this.skills={...f,...e.skills},this.codexDir=s,this.skillsDir=o.join(s,"skills")}async ensureDirs(){await l(this.codexDir),this.records.created.directories.push(this.codexDir),this.components.skills&&(await l(this.skillsDir),this.records.created.directories.push(this.skillsDir))}writeSettings(){this.skipNoFace("writeSettings")}writeMcp(){this.skipNoFace("writeMcp")}async copySkills(){if(this.components.skills&&this.skills.core){const e=y.getSkillsSourceDir();await g(e,this.skillsDir,this.force,this.records)}}copyCommands(){this.skipNoFace("copyCommands")}copyAgents(){this.skipNoFace("copyAgents")}injectPluginTemplates(){this.skipNoFace("injectPluginTemplates")}writeHelpers(){this.skipNoFace("writeHelpers")}skipNoFace(e){const i=n("init.noPeerFace");this.skip(e,i),p.dim(n("init.stepSkipped",{step:e,reason:i}))}}async function g(t,e,i,s){try{for(const r of await a(t)){const h=o.relative(t,r),c=o.join(e,h),m=await k(r,"utf-8");await D(c,m,i)?s.created.files.push(c):s.skipped.push(c)}}catch(r){p.warn(n("init.copyTemplatesFailed",{srcDir:t,error:String(r)}))}}async function a(t){const e=[];try{const i=await d(t,{withFileTypes:!0});for(const s of i){const r=o.join(t,s.name);s.isDirectory()?e.push(...await a(r)):e.push(r)}}catch{return e}return e}
@@ -1 +1 @@
1
- import o from"node:path";import{lstat as m,mkdir as p,readFile as u,readlink as b,symlink as g,unlink as f,writeFile as y}from"node:fs/promises";import{INSTRUCTION_FILES as F}from"@weavecode/core";import{t as c}from"../i18n/index.js";const[n,s]=F;async function w(t){try{if((await m(t)).isSymbolicLink()){const a=await b(t);try{return await u(o.resolve(o.dirname(t),a)),{state:"link",target:a}}catch{return{state:"broken-link",target:a}}}return{state:"file"}}catch{return{state:"absent"}}}async function k(t,a,r){const l=o.join(t,a);try{await g(r,l,"file")}catch(e){const i=e.code;throw new Error(c("ilink.linkFailed",{link:a,target:r,path:l,detail:i==="EPERM"||i==="EACCES"||i==="UNKNOWN"?c("ilink.symlinkNotAllowed"):String(e)}))}}async function h(t,a){const r=o.join(t,".weave","backup");await p(r,{recursive:!0});const l=new Date().toISOString().replace(/[:.]/g,"-"),e=o.join(r,`${a}.${l}`);return await y(e,await u(o.join(t,a),"utf-8"),"utf-8"),e}export async function ensureInstructionLink(t,a){const r=o.join(t,n),l=o.join(t,s),e=await w(r),i=await w(l);if(e.state==="link"&&e.target===s&&i.state==="file")return{action:"unchanged",realFile:s};if((i.state==="link"||i.state==="broken-link")&&i.target===n)return{action:"unchanged",realFile:n};if(e.state==="absent"&&i.state==="file")return await k(t,n,s),{action:"adopted",realFile:s};if(i.state==="absent")return(e.state==="link"||e.state==="broken-link")&&await f(r),await k(t,s,n),{action:"created",realFile:n};if(!(a.force||await a.confirm(c("ilink.bothHaveContent"),c("ilink.replaceDetail",{backupDir:".weave/backup/"}))))return{action:"unchanged",realFile:n};const d=i.state==="file"?await h(t,s):void 0;return await f(l),await k(t,s,n),{action:"replaced",realFile:n,backedUpTo:d}}
1
+ import c from"node:path";import{lstat as d,mkdir as h,readFile as k,readlink as b,symlink as g,unlink as f,writeFile as m}from"node:fs/promises";import{INSTRUCTION_FILES as y}from"@weavecode/core";import{t as l}from"../i18n/index.js";const[r,o]=y;async function w(t){try{if((await d(t)).isSymbolicLink()){const a=await b(t);try{return await k(c.resolve(c.dirname(t),a)),{state:"link",target:a}}catch{return{state:"broken-link",target:a}}}return{state:"file"}}catch{return{state:"absent"}}}async function u(t,i,a){const s=c.join(t,i);try{await g(a,s,"file")}catch(e){const n=e.code;throw new Error(l("ilink.linkFailed",{link:i,target:a,path:s,detail:n==="EPERM"||n==="EACCES"||n==="UNKNOWN"?l("ilink.symlinkNotAllowed"):String(e)}))}}async function F(t,i){const a=c.join(t,".weave","backup");await h(a,{recursive:!0});const s=new Date().toISOString().replace(/[:.]/g,"-"),e=c.join(a,`${i}.${s}`);return await m(e,await k(c.join(t,i),"utf-8"),"utf-8"),e}export async function ensureInstructionLink(t,i){const a=c.join(t,r),s=c.join(t,o),e=await w(a),n=await w(s);if(e.state==="link"&&e.target===o&&n.state==="file")return{action:"unchanged",realFile:o};if((n.state==="link"||n.state==="broken-link")&&n.target===r)return{action:"unchanged",realFile:r};if(e.state==="absent"&&n.state==="file")return await u(t,r,o),{action:"adopted",realFile:o};if(n.state==="absent")return(e.state==="link"||e.state==="broken-link")&&await f(a),await u(t,o,r),{action:"created",realFile:r};if(!(i.force?!0:await i.confirm(l("ilink.bothHaveContent"),l("ilink.replaceDetail",{backupDir:".weave/backup/"}))))return{action:"unchanged",realFile:r};const p=n.state==="file"?await F(t,o):void 0;return await f(s),await u(t,o,r),{action:"replaced",realFile:r,backedUpTo:p}}
@@ -1 +1 @@
1
- import o from"node:path";import{readdir as y,readFile as $}from"node:fs/promises";import{detectPlatform as w,WEAVE_PLUGIN_MANIFEST as P,WeavePluginManifestSchema as S}from"@weavecode/core";import{templateRegistry as j}from"@weavecode/templates";async function*g(f,m){const i=[m??o.join(w().configDir,"weave","data","plugins"),o.join(f,".weave","plugins")];for(const e of i){let s;try{s=await y(e)}catch{continue}for(const r of s){const t=o.join(e,r);let n;try{n=JSON.parse(await $(o.join(t,P),"utf8"))}catch{continue}const c=S.safeParse(n);c.success&&(yield{dir:t,manifest:c.data})}}}export async function registerPluginTemplates(f,m){const i=[],e=[];for await(const{dir:s,manifest:r}of g(f,m)){if(!r.templates)continue;const{id:t,templates:n}=r,c={skills:"skill",commands:"command",agents:"agent"};for(const[a,h]of Object.entries(n)){const l=c[a];if(l)for(const d of h??[]){const u=o.resolve(s,d);if(!u.startsWith(o.resolve(s)+o.sep)){e.push(d);continue}const v=o.basename(u).replace(/\.md$/,""),p={name:`${t}:${v}`,category:l,sourcePath:u,description:`${t} \u63D2\u4EF6\u6A21\u677F`};j.register(p)?i.push(p):e.push(p.name)}}}return{registered:i,skipped:e}}export async function collectPluginMcpServers(f,m,i=[]){const e={},s=[],r=new Set(i);for await(const{manifest:t}of g(f,m))if(t.mcpServers)for(const[n,c]of Object.entries(t.mcpServers)){let a=n;r.has(a)&&(a=`${t.id}-${n}`,s.push(`${n} \u2192 ${a}`)),r.add(a),e[a]=c}return{servers:e,renamed:s}}
1
+ import o from"node:path";import{readdir as v,readFile as w}from"node:fs/promises";import{detectPlatform as P,WEAVE_PLUGIN_MANIFEST as $,WeavePluginManifestSchema as S}from"@weavecode/core";import{templateRegistry as j}from"@weavecode/templates";async function*g(f,m){const i=[m??o.join(P().configDir,"weave","data","plugins"),o.join(f,".weave","plugins")];for(const e of i){let n;try{n=await v(e)}catch{continue}for(const r of n){const t=o.join(e,r);let s;try{s=JSON.parse(await w(o.join(t,$),"utf8"))}catch{continue}const c=S.safeParse(s);c.success&&(yield{dir:t,manifest:c.data})}}}export async function registerPluginTemplates(f,m){const i=[],e=[];for await(const{dir:n,manifest:r}of g(f,m)){if(!r.templates)continue;const{id:t,templates:s}=r,c={skills:"skill",commands:"command",agents:"agent"};for(const[a,h]of Object.entries(s)){const u=c[a];if(u)for(const d of h??[]){const p=o.resolve(n,d);if(!p.startsWith(o.resolve(n)+o.sep)){e.push(d);continue}const y=o.basename(p).replace(/\.md$/,""),l={name:`${t}:${y}`,category:u,sourcePath:p,description:`${t} \u63D2\u4EF6\u6A21\u677F`};j.register(l)?i.push(l):e.push(l.name)}}}return{registered:i,skipped:e}}export async function collectPluginMcpServers(f,m,i=[]){const e={},n=[],r=new Set(i);for await(const{manifest:t}of g(f,m))if(t.mcpServers)for(const[s,c]of Object.entries(t.mcpServers)){let a=s;r.has(a)&&(a=`${t.id}-${s}`,n.push(`${s} \u2192 ${a}`)),r.add(a),e[a]=c}return{servers:e,renamed:n}}
@@ -1,5 +1,5 @@
1
- import{logger as m}from"@weavecode/core";import{t as u}from"../i18n/index.js";export async function confirmPrompt(e,l,t){if(!t||!process.stdin.isTTY||!process.stdout.isTTY)return!0;const{createInterface:s}=await import("node:readline/promises"),n=s({input:process.stdin,output:process.stdout});try{const r=await n.question(`
2
- ${e}
1
+ import{logger as m}from"@weavecode/core";import{t as c}from"../i18n/index.js";export async function confirmPrompt(o,l,t){if(!t||!process.stdin.isTTY||!process.stdout.isTTY)return!0;const{createInterface:e}=await import("node:readline/promises"),s=e({input:process.stdin,output:process.stdout});try{const i=await s.question(`
2
+ ${o}
3
3
  ${l}
4
- ${u("init.proceed")} `);return!/^n(o)?$/i.test(r.trim())}finally{n.close()}}export function createPromptPort(e){const l=()=>e&&!!process.stdin.isTTY&&!!process.stdout.isTTY;return{confirm:(t,s="")=>confirmPrompt(t,s,e),async multiselect(t,s){if(!l())return[...s];if(t.length===0)return[];const{createInterface:n}=await import("node:readline/promises"),r=n({input:process.stdin,output:process.stdout});try{console.log(`
5
- ${u("init.multiselect.title")}`),t.forEach((o,i)=>console.log(` ${i+1}) ${o}`));const p=(await r.question(` ${u("init.multiselect.hint",{defaults:s.join(",")})} `)).trim();if(!p)return[...s];const c=[],a=[];for(const o of p.split(/[,\s]+/).filter(Boolean)){const i=(/^\d+$/.test(o)?t[Number(o)-1]:void 0)??t.find(f=>f.toLowerCase()===o.toLowerCase());i===void 0?a.push(o):c.includes(i)||c.push(i)}return a.length>0&&m.warn(u("init.multiselect.invalid",{keys:a.join(", ")})),c.length>0?c:[...s]}finally{r.close()}}}}
4
+ ${c("init.proceed")} `);return!/^n(o)?$/i.test(i.trim())}finally{s.close()}}export function createPromptPort(o){const l=()=>o&&!!process.stdin.isTTY&&!!process.stdout.isTTY;return{confirm:(t,e="")=>confirmPrompt(t,e,o),async multiselect(t,e){if(!l())return[...e];if(t.length===0)return[];const{createInterface:s}=await import("node:readline/promises"),i=s({input:process.stdin,output:process.stdout});try{console.log(`
5
+ ${c("init.multiselect.title")}`),t.forEach((n,f)=>console.log(` ${f+1}) ${n}`));const p=(await i.question(` ${c("init.multiselect.hint",{defaults:e.join(",")})} `)).trim();if(!p)return[...e];const r=[],u=[];for(const n of p.split(/[,\s]+/).filter(Boolean)){const a=(/^\d+$/.test(n)?t[Number(n)-1]:void 0)??t.find(d=>d.toLowerCase()===n.toLowerCase());a===void 0?u.push(n):r.includes(a)||r.push(a)}return u.length>0&&m.warn(c("init.multiselect.invalid",{keys:u.join(", ")})),r.length>0?r:[...e]}finally{i.close()}}}}
@@ -0,0 +1,25 @@
1
+ import { type Harness } from '@weavecode/core';
2
+ import type { PromptPort } from './prompt.js';
3
+ /**
4
+ * init 的环境备置步骤(executor Step 1 之后):安装检测(未装经一次确认代跑
5
+ * 官方安装命令)、多形态冲突检查(provision 槽:codex 桌面端/CLI 版本漂移)与
6
+ * 文件夹信任预写(替用户答掉宿主首开的「是否信任该文件夹」)。各步都不阻断
7
+ * init——失败降级为 warn,文件面照常生成。
8
+ */
9
+ /** 探测/安装动作的注入口(测试桩;缺省真跑子进程)。 */
10
+ export interface ProvisionIo {
11
+ versionOf(bin: string): Promise<string | null>;
12
+ runInstall(command: string): Promise<void>;
13
+ }
14
+ /**
15
+ * 逐 harness 检测安装状态:已装报版本(低于 `resume.minVersion` 只提示升级、
16
+ * 不自动升);未装经 `prompt.confirm` 一次确认后代跑安装命令并复验。非交互
17
+ * (confirm 静默 true 的语义不适用于安装这种重操作)——`canPrompt` 为假时
18
+ * 只提示命令、不提问也不安装。
19
+ *
20
+ * 已装的再过一遍 provision 槽(多形态冲突检查):codex 桌面端与 CLI 共享
21
+ * `~/.codex`,daemon 版本漂移会让旧一方用旧快照回写 config.toml——冲突与
22
+ * 官方修法命令如实提示,weave 不代跑(会重启 daemon、中断在跑的任务)。
23
+ */
24
+ export declare function ensureHarnessInstalled(selected: readonly Harness[], prompt: PromptPort, io?: ProvisionIo): Promise<void>;
25
+ export declare function prewriteTrust(selected: readonly Harness[], targetDir: string): Promise<void>;
@@ -0,0 +1 @@
1
+ import{spawn as d}from"node:child_process";import{HARNESS_DRIVERS as m,HARNESS_INSTALL as p,ensureClaudeTrustAccepted as w,ensureCodexTrustAccepted as h}from"@weavecode/harness";import{probeBinVersion as v}from"@weavecode/server";import{logger as r}from"@weavecode/core";import{t}from"../i18n/index.js";const T={versionOf:e=>v(e),runInstall:e=>new Promise((a,i)=>{const s=d(e,{shell:!0,stdio:"inherit",windowsHide:!0});s.on("error",i),s.on("close",n=>n===0?a():i(new Error(`exit ${n}`)))})};export async function ensureHarnessInstalled(e,a,i=T){const s=!!process.stdin.isTTY&&!!process.stdout.isTTY;for(const n of e){const o=m[n].resume;if(!o?.bin)continue;const c=p[n].command,l=await i.versionOf(o.bin);if(l!==null){const u=o.minVersion;u&&!y(l,u)?r.warn(t("init.install.versionLow",{harness:n,version:l,min:u,command:c})):r.dim(t("init.install.installed",{harness:n,version:l})),await g(n,o.bin);continue}if(r.info(t("init.install.notFound",{harness:n})),!s){r.warn(t("init.install.declined",{command:c}));continue}if(await i.versionOf("npm")===null){r.warn(t("init.install.npmMissing",{command:c}));continue}if(!await a.confirm(t("init.install.confirm",{harness:n}),t("init.install.detail",{command:c}))){r.warn(t("init.install.declined",{command:c}));continue}r.dim(t("init.install.running",{harness:n}));try{await i.runInstall(c)}catch{r.warn(t("init.install.verifyFailed",{harness:n,command:c}));continue}const f=await i.versionOf(o.bin);f!==null?r.success(t("init.install.done",{harness:n,version:f})):r.warn(t("init.install.verifyFailed",{harness:n,command:c}))}}async function g(e,a){const i=m[e].provision;if(i)try{const s=await i.check(a);for(let n=0;n<s.warnings.length;n++){const o=s.hints[n];r.warn(t("init.provision.conflict",{harness:e,warning:s.warnings[n],hint:o??""}))}}catch(s){r.warn(t("init.provision.checkFailed",{harness:e,error:s.message}))}}const I={claude:w,codex:h};export async function prewriteTrust(e,a){for(const i of e){const s=I[i];if(s)try{await s(a),r.dim(t("init.trust.prewritten",{harness:i}))}catch(n){r.warn(t("init.trust.failed",{harness:i,error:n.message}))}}}function y(e,a){const i=e.split(".").map(n=>Number.parseInt(n,10)),s=a.split(".").map(n=>Number.parseInt(n,10));for(let n=0;n<3;n++){const o=(i[n]??0)-(s[n]??0);if(o!==0)return o>0}return!0}
@@ -1,6 +1,6 @@
1
- import s from"node:path";import{lstat as A,readdir as P,readFile as O,rm as T,rmdir as x,unlink as m,writeFile as v}from"node:fs/promises";import{HARNESS_DIRS as R,HARNESS_KEYS as _,INSTRUCTION_FILES as D,logger as M}from"@weavecode/core";import{hashFile as N,projectPackFiles as W,unregisterProject as H}from"@weavecode/server";import{templateRegistry as F}from"@weavecode/templates";import{stripWeaveSettings as B}from"./settings-gen.js";import{stripWeaveMcp as U}from"./mcp-gen.js";import{WEAVE_BLOCK_START as C,WEAVE_BLOCK_END as b,WEAVE_MANAGED_HEADER as L}from"./claudemd-gen.js";import{WEAVE_HELPER_MARKER as K}from"./harnesses/claude.js";import{registerPluginTemplates as V}from"./plugin-templates.js";import{NESTED_GITIGNORE as J}from"./executor.js";import{COMMIT_MESSAGE as q,findGitRepoRoot as z,defaultGitExec as Y}from"./git-commit.js";import{t as $}from"../i18n/index.js";const Q="chore: weave uninstall \u79FB\u9664 init \u751F\u6210\u7269",S=D[1],X=[...D,".mcp.json",..._.map(n=>R[n].projectDir),".weave"];async function p(n){try{return await A(n),!0}catch{return!1}}async function g(n){try{return await O(n,"utf-8")}catch{return null}}async function G(n){const t=await g(n);if(t!==null)try{const i=JSON.parse(t);if(i&&typeof i=="object"&&!Array.isArray(i))return i}catch{}}async function E(n){const t=[];let i;try{i=await P(n,{withFileTypes:!0})}catch{return t}for(const e of i){const a=s.join(n,e.name);e.isDirectory()?t.push(...await E(a)):t.push(a)}return t}async function Z(n,t){const[i,e]=await Promise.all([g(n),g(t)]);return i!==null&&i===e}async function j(n,t,i){let e=n;const a=s.resolve(t);for(;;){if(s.resolve(e)===a||!e.startsWith(a+s.sep))return;try{await x(e),i.push(e)}catch{return}e=s.dirname(e)}}class tt{targetDir;execGit;dbPath;hooksDir;result;constructor(t){this.targetDir=s.resolve(t.targetDir),this.execGit=t.execGit??Y,this.dbPath=t.dbPath,this.hooksDir=t.hooksDir,this.result={status:"ok",removedFiles:[],removedDirs:[],modifiedFiles:[],keptUserFiles:[],git:"no-changes",server:{outcome:"absent"}}}async run(){const t=s.join(this.targetDir,".weave");if(!await p(t))return this.result.status="not-initialized",this.unregisterFromServer(),this.result;const i=await W(this.targetDir),e=await et(t);let a=[];try{a=(await V(this.targetDir)).registered}catch(o){M.warn($("uninstall.pluginScanFailed",{error:String(o)}))}for(const o of _)await this.sweepHarness(o,a);return await this.sweepMcp(),await this.sweepInstructionFiles(e),await this.sweepPackFiles(i),await T(t,{recursive:!0,force:!0}),this.result.removedDirs.push(t),await this.runGit(),this.unregisterFromServer(),this.result}unregisterFromServer(){try{const t=H(this.targetDir,this.dbPath,this.hooksDir);t&&(this.result.server={outcome:"removed",name:t.name,purged:t.purged})}catch(t){this.result.server={outcome:"failed",error:t instanceof Error?t.message:String(t)}}}async sweepHarness(t,i){const e=s.join(this.targetDir,R[t].projectDir);if(!await p(e))return;const a=s.join(e,"helpers");for(const r of await E(a)){const l=await g(r);l!==null&&l.includes(K)?(await m(r),this.result.removedFiles.push(r)):this.result.keptUserFiles.push(r)}const o=[["skills",F.getSkillsSourceDir()],["commands",F.getCommandsSourceDir()],["agents",F.getAgentsSourceDir()]];for(const[r,l]of o)l&&await this.removeTemplateMirrors(s.join(e,r),l);for(const r of i){const l=r.sourcePath;if(r.category==="skill")await this.removeTemplateMirrors(s.join(e,"skills",s.basename(l)),l);else{const d=r.category==="command"?"commands":"agents",w=s.join(e,d,s.basename(l));await this.removeIfSame(w,l)}}const c=s.join(e,"settings.json"),u=await G(c);if(u){const r=B(u);Object.keys(r).length>0?(await v(c,JSON.stringify(r,null,2)+`
2
- `,"utf-8"),this.result.modifiedFiles.push(c)):(await m(c),this.result.removedFiles.push(c))}const h=s.join(e,".gitignore");await g(h)===J&&(await m(h),this.result.removedFiles.push(h));for(const r of["helpers","skills","commands","agents"])await j(s.join(e,r),this.targetDir,this.result.removedDirs);await j(e,this.targetDir,this.result.removedDirs)}async removeTemplateMirrors(t,i){for(const e of await E(i)){const a=s.relative(i,e);await this.removeIfSame(s.join(t,a),e)}}async removeIfSame(t,i){await p(t)&&(await Z(t,i)?(await m(t),this.result.removedFiles.push(t)):this.result.keptUserFiles.push(t))}async sweepMcp(){const t=s.join(this.targetDir,".mcp.json"),i=await G(t);if(!i)return;const e=U(i);Object.keys(e).length>0?(await v(t,JSON.stringify(e,null,2)+`
3
- `,"utf-8"),this.result.modifiedFiles.push(t)):(await m(t),this.result.removedFiles.push(t))}async sweepInstructionFiles(t){for(const i of[...D].reverse()){const e=s.join(this.targetDir,i);let a;try{a=await A(e)}catch{continue}if(a.isSymbolicLink()){await m(e),this.result.removedFiles.push(e);continue}if(!a.isFile())continue;const o=await g(e);if(o===null)continue;if(o.includes(L)){await m(e),this.result.removedFiles.push(e);continue}const c=o.indexOf(C),u=o.indexOf(b);if(c!==-1&&u!==-1&&u>c){const h=(o.slice(0,c)+o.slice(u+b.length)).replace(/\s+$/,"");h===""?(await m(e),this.result.removedFiles.push(e)):(await v(e,h+`
4
- `,"utf-8"),this.result.modifiedFiles.push(e))}}if(t&&!await p(s.join(this.targetDir,S))){const i=await g(t);i!==null&&(await v(s.join(this.targetDir,S),i,"utf-8"),this.result.restoredFromBackup=s.join(this.targetDir,S))}}async sweepPackFiles(t){for(const[e,a]of t){const o=s.resolve(this.targetDir,e);o!==this.targetDir&&!o.startsWith(this.targetDir+s.sep)||(await N(o)===a?(await m(o).catch(()=>{}),this.result.removedFiles.push(o)):await p(o)&&this.result.keptUserFiles.push(o))}const i=[...new Set([...t.keys()].map(e=>s.dirname(s.resolve(this.targetDir,e))))];for(const e of i)await j(e,this.targetDir,this.result.removedDirs)}async git(t){return this.execGit("git",t,{cwd:this.targetDir})}async runGit(){if(!await z(this.targetDir)){this.result.git="skipped-not-repo";return}try{if((await this.git(["diff","--cached","--quiet"])).code!==0){this.result.git="skipped-dirty-index";return}const t=await this.git(["log","-1","--format=%s %H %P"]);if(t.code===0){const[r,l,d]=t.stdout.trimEnd().split(" ");if(r===q&&d){const w=await this.git(["diff-tree","--no-commit-id","--name-only","-r",l]),k=w.code===0?w.stdout.split(`
5
- `).map(f=>f.trim()).filter(Boolean):[],I=f=>X.some(y=>f===y||f===y+"/"||f.startsWith(y+"/"));if(k.length>0&&k.every(I)){const f=await this.git(["reset","--mixed","HEAD~1"]);if(f.code===0){this.result.git="reset",this.result.gitSha=d.slice(0,7);return}this.result.git="failed",this.result.gitError=f.stderr.trim()||"git reset failed";return}}}const i=[...this.result.removedFiles,...this.result.modifiedFiles,...this.result.restoredFromBackup?[this.result.restoredFromBackup]:[],s.join(this.targetDir,".weave")],e=[...new Set(i.map(r=>s.relative(this.targetDir,r).replace(/\\/g,"/")))],a=50,o=new Set;for(let r=0;r<e.length;r+=a){const l=await this.git(["ls-files","--",...e.slice(r,r+a)]);if(l.code!==0){this.result.git="failed",this.result.gitError=l.stderr.trim()||"git ls-files failed";return}for(const d of l.stdout.split(`
6
- `))d.trim()&&o.add(d.trim().replace(/\\/g,"/"))}const c=[...o];if(c.length>0)for(let r=0;r<c.length;r+=a){const l=await this.git(["add","--",...c.slice(r,r+a)]);if(l.code!==0){this.result.git="failed",this.result.gitError=l.stderr.trim()||"git add failed";return}}if((await this.git(["diff","--cached","--quiet"])).code===0){this.result.git="no-changes";return}const u=await this.git(["commit","-m",Q]);if(u.code!==0){this.result.git="failed",this.result.gitError=u.stderr.trim()||"git commit failed";return}const h=await this.git(["rev-parse","--short","HEAD"]);this.result.git="committed",this.result.gitSha=h.code===0?h.stdout.trim():void 0}catch(t){this.result.git="failed",this.result.gitError=t instanceof Error?t.message:String(t)}}}async function et(n){const t=s.join(n,"backup");let i;try{i=await P(t)}catch{return null}const e=i.filter(a=>D.some(o=>a.startsWith(o+"."))).sort();return e.length>0?s.join(t,e[e.length-1]):null}export async function executeUninstall(n){return new tt(n).run()}
1
+ import s from"node:path";import{lstat as T,readdir as _,readFile as G,rm as O,rmdir as W,unlink as m,writeFile as v}from"node:fs/promises";import{HARNESS_DIRS as x,HARNESS_KEYS as N,INSTRUCTION_FILES as S,logger as H}from"@weavecode/core";import{hashFile as C,projectPackFiles as U,unregisterProject as B}from"@weavecode/server";import{templateRegistry as F}from"@weavecode/templates";import{stripWeaveSettings as L}from"./settings-gen.js";import{stripWeaveMcp as V}from"./mcp-gen.js";import{WEAVE_BLOCK_START as J,WEAVE_BLOCK_END as R,WEAVE_MANAGED_HEADER as K}from"./claudemd-gen.js";import{WEAVE_HELPER_MARKER as q}from"./harnesses/claude.js";import{registerPluginTemplates as z}from"./plugin-templates.js";import{NESTED_GITIGNORE as Y}from"./executor.js";import{COMMIT_MESSAGE as $,findGitRepoRoot as Q,defaultGitExec as X}from"./git-commit.js";import{t as Z}from"../i18n/index.js";const tt="chore: weave uninstall \u79FB\u9664 init \u751F\u6210\u7269",k=S[1],et=[...S,".mcp.json",...N.map(n=>x[n].projectDir),".weave"];async function D(n){try{return await T(n),!0}catch{return!1}}async function p(n){try{return await G(n,"utf-8")}catch{return null}}async function b(n){const t=await p(n);if(t!==null)try{const i=JSON.parse(t);if(i&&typeof i=="object"&&!Array.isArray(i))return i}catch{}}async function j(n){const t=[];let i;try{i=await _(n,{withFileTypes:!0})}catch{return t}for(const e of i){const a=s.join(n,e.name);e.isDirectory()?t.push(...await j(a)):t.push(a)}return t}async function it(n,t){const[i,e]=await Promise.all([p(n),p(t)]);return i!==null&&i===e}async function A(n,t,i){let e=n;const a=s.resolve(t);for(;;){if(s.resolve(e)===a||!e.startsWith(a+s.sep))return;try{await W(e),i.push(e)}catch{return}e=s.dirname(e)}}class st{targetDir;execGit;dbPath;hooksDir;result;constructor(t){this.targetDir=s.resolve(t.targetDir),this.execGit=t.execGit??X,this.dbPath=t.dbPath,this.hooksDir=t.hooksDir,this.result={status:"ok",removedFiles:[],removedDirs:[],modifiedFiles:[],keptUserFiles:[],git:"no-changes",server:{outcome:"absent"}}}async run(){const t=s.join(this.targetDir,".weave");if(!await D(t))return this.result.status="not-initialized",this.unregisterFromServer(),this.result;const i=await U(this.targetDir),e=await rt(t);let a=[];try{a=(await z(this.targetDir)).registered}catch(r){H.warn(Z("uninstall.pluginScanFailed",{error:String(r)}))}for(const r of N)await this.sweepHarness(r,a);return await this.sweepMcp(),await this.sweepInstructionFiles(e),await this.sweepPackFiles(i),await O(t,{recursive:!0,force:!0}),this.result.removedDirs.push(t),await this.runGit(),this.unregisterFromServer(),this.result}unregisterFromServer(){try{const t=B(this.targetDir,this.dbPath,this.hooksDir);t&&(this.result.server={outcome:"removed",name:t.name,purged:t.purged})}catch(t){this.result.server={outcome:"failed",error:t instanceof Error?t.message:String(t)}}}async sweepHarness(t,i){const e=s.join(this.targetDir,x[t].projectDir);if(!await D(e))return;const a=s.join(e,"helpers");for(const o of await j(a)){const u=await p(o);u!==null&&u.includes(q)?(await m(o),this.result.removedFiles.push(o)):this.result.keptUserFiles.push(o)}const r=[["skills",F.getSkillsSourceDir()],["commands",F.getCommandsSourceDir()],["agents",F.getAgentsSourceDir()]];for(const[o,u]of r)u&&await this.removeTemplateMirrors(s.join(e,o),u);for(const o of i){const u=o.sourcePath;if(o.category==="skill")await this.removeTemplateMirrors(s.join(e,"skills",s.basename(u)),u);else{const y=o.category==="command"?"commands":"agents",l=s.join(e,y,s.basename(u));await this.removeIfSame(l,u)}}const c=s.join(e,"settings.json"),f=await b(c);if(f){const o=L(f);Object.keys(o).length>0?(await v(c,JSON.stringify(o,null,2)+`
2
+ `,"utf-8"),this.result.modifiedFiles.push(c)):(await m(c),this.result.removedFiles.push(c))}const h=s.join(e,".gitignore");await p(h)===Y&&(await m(h),this.result.removedFiles.push(h));for(const o of["helpers","skills","commands","agents"])await A(s.join(e,o),this.targetDir,this.result.removedDirs);await A(e,this.targetDir,this.result.removedDirs)}async removeTemplateMirrors(t,i){for(const e of await j(i)){const a=s.relative(i,e);await this.removeIfSame(s.join(t,a),e)}}async removeIfSame(t,i){await D(t)&&(await it(t,i)?(await m(t),this.result.removedFiles.push(t)):this.result.keptUserFiles.push(t))}async sweepMcp(){const t=s.join(this.targetDir,".mcp.json"),i=await b(t);if(!i)return;const e=V(i);Object.keys(e).length>0?(await v(t,JSON.stringify(e,null,2)+`
3
+ `,"utf-8"),this.result.modifiedFiles.push(t)):(await m(t),this.result.removedFiles.push(t))}async sweepInstructionFiles(t){for(const i of[...S].reverse()){const e=s.join(this.targetDir,i);let a;try{a=await T(e)}catch{continue}if(a.isSymbolicLink()){await m(e),this.result.removedFiles.push(e);continue}if(!a.isFile())continue;const r=await p(e);if(r===null)continue;if(r.includes(K)){await m(e),this.result.removedFiles.push(e);continue}const c=r.indexOf(J),f=r.indexOf(R);if(c!==-1&&f!==-1&&f>c){const h=(r.slice(0,c)+r.slice(f+R.length)).replace(/\s+$/,"");h===""?(await m(e),this.result.removedFiles.push(e)):(await v(e,h+`
4
+ `,"utf-8"),this.result.modifiedFiles.push(e))}}if(t&&!await D(s.join(this.targetDir,k))){const i=await p(t);i!==null&&(await v(s.join(this.targetDir,k),i,"utf-8"),this.result.restoredFromBackup=s.join(this.targetDir,k))}}async sweepPackFiles(t){for(const[e,a]of t){const r=s.resolve(this.targetDir,e);r!==this.targetDir&&!r.startsWith(this.targetDir+s.sep)||(await C(r)===a?(await m(r).catch(()=>{}),this.result.removedFiles.push(r)):await D(r)&&this.result.keptUserFiles.push(r))}const i=[...new Set([...t.keys()].map(e=>s.dirname(s.resolve(this.targetDir,e))))];for(const e of i)await A(e,this.targetDir,this.result.removedDirs)}async git(t){return this.execGit("git",t,{cwd:this.targetDir})}async runGit(){if(!await Q(this.targetDir)){this.result.git="skipped-not-repo";return}try{if((await this.git(["diff","--cached","--quiet"])).code!==0){this.result.git="skipped-dirty-index";return}const e=await this.git(["log","-1","--format=%s %H %P"]);if(e.code===0){const[l,d,w]=e.stdout.trimEnd().split(" ");if(l===$&&w){const I=await this.git(["diff-tree","--no-commit-id","--name-only","-r",d]),P=I.code===0?I.stdout.split(`
5
+ `).map(g=>g.trim()).filter(Boolean):[],M=g=>et.some(E=>g===E||g===E+"/"||g.startsWith(E+"/"));if(P.length>0&&P.every(M)){const g=await this.git(["reset","--mixed","HEAD~1"]);if(g.code===0){this.result.git="reset",this.result.gitSha=w.slice(0,7);return}this.result.git="failed",this.result.gitError=g.stderr.trim()||"git reset failed";return}}}const a=[...this.result.removedFiles,...this.result.modifiedFiles,...this.result.restoredFromBackup?[this.result.restoredFromBackup]:[],s.join(this.targetDir,".weave")],r=[...new Set(a.map(l=>s.relative(this.targetDir,l).replace(/\\/g,"/")))],c=50,f=new Set;for(let l=0;l<r.length;l+=c){const d=await this.git(["ls-files","--",...r.slice(l,l+c)]);if(d.code!==0){this.result.git="failed",this.result.gitError=d.stderr.trim()||"git ls-files failed";return}for(const w of d.stdout.split(`
6
+ `))w.trim()&&f.add(w.trim().replace(/\\/g,"/"))}const h=[...f];if(h.length>0)for(let l=0;l<h.length;l+=c){const d=await this.git(["add","--",...h.slice(l,l+c)]);if(d.code!==0){this.result.git="failed",this.result.gitError=d.stderr.trim()||"git add failed";return}}if((await this.git(["diff","--cached","--quiet"])).code===0){this.result.git="no-changes";return}const u=await this.git(["commit","-m",tt]);if(u.code!==0){this.result.git="failed",this.result.gitError=u.stderr.trim()||"git commit failed";return}const y=await this.git(["rev-parse","--short","HEAD"]);this.result.git="committed",this.result.gitSha=y.code===0?y.stdout.trim():void 0}catch(i){this.result.git="failed",this.result.gitError=i instanceof Error?i.message:String(i)}}}async function rt(n){const t=s.join(n,"backup");let i;try{i=await _(t)}catch{return null}const e=i.filter(a=>S.some(r=>a.startsWith(r+"."))).sort();return e.length>0?s.join(t,e[e.length-1]):null}export async function executeUninstall(n){return new st(n).run()}
@@ -1 +1 @@
1
- import{HARNESS_DRIVERS as r,createRuntimeRegistry as n}from"@weavecode/harness";import{ClaudeInitTemplate as o}from"./harnesses/claude.js";import{CodexInitTemplate as c}from"./harnesses/codex.js";const s={claude:o,codex:c};export function buildInitRegistry(){const t=n();for(const e of Object.keys(s)){const i=r[e],a={...i,capabilities:i.capabilities.includes("init")?i.capabilities:[...i.capabilities,"init"],init:s[e]};t.unregister(e),t.register(a)}return t}
1
+ import{HARNESS_DRIVERS as o,createRuntimeRegistry as s}from"@weavecode/harness";import{ClaudeInitTemplate as c}from"./harnesses/claude.js";import{CodexInitTemplate as a}from"./harnesses/codex.js";const r={claude:c,codex:a};export function buildInitRegistry(){const t=s();for(const e of Object.keys(r)){const i=o[e],n={...i,capabilities:i.capabilities.includes("init")?i.capabilities:[...i.capabilities,"init"],init:r[e]};t.unregister(e),t.register(n)}return t}
@@ -1 +1 @@
1
- import{t as m}from"./i18n/index.js";export class CommandParser{commands=new Map;globalOptions=[];constructor(){this.initGlobalOptions()}initGlobalOptions(){this.globalOptions=[{name:"help",short:"h",description:"flag.help",type:"boolean",default:!1},{name:"version",short:"V",description:"flag.version",type:"boolean",default:!1},{name:"verbose",short:"v",description:"flag.verbose",type:"boolean",default:!1},{name:"quiet",short:"q",description:"flag.quiet",type:"boolean",default:!1}]}registerCommand(s){if(this.commands.set(s.name,s),s.aliases)for(const t of s.aliases)this.commands.set(t,s)}getCommand(s){return this.commands.get(s)}getAllCommands(){const s=new Set;return Array.from(this.commands.values()).filter(t=>s.has(t)?!1:(s.add(t),!0))}parse(s){const t={command:[],flags:{_:[]},positional:[],raw:[...s]};let o;for(let r=0;r<s.length;r++){const i=s[r];if(i.startsWith("-"))break;if(t.command.length===0&&this.commands.has(i)){o=this.commands.get(i),t.command.push(i);continue}if(t.command.length===1&&o?.subcommands){const l=o.subcommands.find(h=>h.name===i||h.aliases?.includes(i));if(l){o=l,t.command.push(i);continue}}if(t.command.length===2&&o?.subcommands){const l=o.subcommands.find(h=>h.name===i||h.aliases?.includes(i));if(l){o=l,t.command.push(i);continue}}break}const c=this.buildAliases(o),n=this.booleanFlags(o);let a=!0,e=t.command.length;for(;e<s.length;){const r=s[e];if(r==="--"){a=!1,e++;continue}if(a&&r.startsWith("-")){const i=this.parseFlag(s,e,c,n);Object.assign(t.flags,i.flags),e=i.nextIndex;continue}t.positional.push(r),t.flags._.push(r),e++}return this.applyDefaults(t.flags,o),t}validateFlags(s,t){const o=[],c=[...this.globalOptions,...t?.options??[]];for(const n of c){const a=this.normalizeKey(n.name);if(n.required&&s[a]===void 0&&o.push(m("cli.missingRequired",{name:n.name})),n.choices&&s[a]!==void 0){const e=String(s[a]);n.choices.includes(e)||o.push(m("cli.invalidChoice",{name:n.name,value:e,choices:n.choices.join(", ")}))}if(n.validate&&s[a]!==void 0){const e=n.validate(s[a]);e!==!0&&o.push(e)}}return o}getGlobalOptions(){return[...this.globalOptions]}parseFlag(s,t,o,c){const n={},a=s[t];let e=t+1;if(a.startsWith("--")){const r=a.indexOf("=");if(r!==-1){const i=a.slice(2,r);n[this.normalizeKey(i)]=this.parseValue(a.slice(r+1))}else if(a.startsWith("--no-")){const i=a.slice(5);n[this.normalizeKey(i)]=!1}else{const i=a.slice(2),l=this.normalizeKey(i);c.has(l)?e<s.length&&this.isBooleanLiteral(s[e])?(n[l]=s[e].toLowerCase()==="true",e++):n[l]=!0:e<s.length&&this.isFlagValue(s[e])?(n[l]=this.parseValue(s[e]),e++):n[l]=!0}}else if(a.startsWith("-")){const r=a.slice(1);if(r.length===1){const i=o[r]||r,l=this.normalizeKey(i);c.has(l)?e<s.length&&this.isBooleanLiteral(s[e])?(n[l]=s[e].toLowerCase()==="true",e++):n[l]=!0:e<s.length&&this.isFlagValue(s[e])?(n[l]=this.parseValue(s[e]),e++):n[l]=!0}else for(const i of r){const l=o[i]||i;n[this.normalizeKey(l)]=!0}}return{flags:n,nextIndex:e}}isFlagValue(s){return s.startsWith("-")?/^-\d*\.?\d+(?:[eE][+-]?\d+)?$/.test(s):!0}isBooleanLiteral(s){const t=s.toLowerCase();return t==="true"||t==="false"}parseValue(s){if(s.toLowerCase()==="true")return!0;if(s.toLowerCase()==="false")return!1;const t=Number(s);return!isNaN(t)&&s.trim()!==""?t:s}normalizeKey(s){return s.replace(/-([a-z])/g,(t,o)=>o.toUpperCase())}buildAliases(s){const t={};for(const o of this.globalOptions)o.short&&(t[o.short]=o.name);if(s?.options)for(const o of s.options)o.short&&(t[o.short]=o.name);return t}booleanFlags(s){const t=new Set;for(const o of this.globalOptions)o.type==="boolean"&&t.add(this.normalizeKey(o.name));if(s?.options)for(const o of s.options)o.type==="boolean"?t.add(this.normalizeKey(o.name)):o.type&&t.delete(this.normalizeKey(o.name));return t}applyDefaults(s,t){const o=[];t?.options&&o.push(t.options),o.push(this.globalOptions);for(const c of o)for(const n of c){const a=this.normalizeKey(n.name);s[a]===void 0&&n.default!==void 0&&(s[a]=n.default)}}}
1
+ import{t as c}from"./i18n/index.js";export class CommandParser{commands=new Map;globalOptions=[];constructor(){this.initGlobalOptions()}initGlobalOptions(){this.globalOptions=[{name:"help",short:"h",description:"flag.help",type:"boolean",default:!1},{name:"version",short:"V",description:"flag.version",type:"boolean",default:!1},{name:"verbose",short:"v",description:"flag.verbose",type:"boolean",default:!1},{name:"quiet",short:"q",description:"flag.quiet",type:"boolean",default:!1}]}registerCommand(e){if(this.commands.set(e.name,e),e.aliases)for(const t of e.aliases)this.commands.set(t,e)}getCommand(e){return this.commands.get(e)}getAllCommands(){const e=new Set;return Array.from(this.commands.values()).filter(t=>e.has(t)?!1:(e.add(t),!0))}parse(e){const t={command:[],flags:{_:[]},positional:[],raw:[...e]};let s;for(let r=0;r<e.length;r++){const i=e[r];if(i.startsWith("-"))break;if(t.command.length===0&&this.commands.has(i)){s=this.commands.get(i),t.command.push(i);continue}if(t.command.length===1&&s?.subcommands){const l=s.subcommands.find(u=>u.name===i||u.aliases?.includes(i));if(l){s=l,t.command.push(i);continue}}if(t.command.length===2&&s?.subcommands){const l=s.subcommands.find(u=>u.name===i||u.aliases?.includes(i));if(l){s=l,t.command.push(i);continue}}break}const f=this.buildAliases(s),n=this.booleanFlags(s);let a=!0,o=t.command.length;for(;o<e.length;){const r=e[o];if(r==="--"){a=!1,o++;continue}if(a&&r.startsWith("-")){const i=this.parseFlag(e,o,f,n);Object.assign(t.flags,i.flags),o=i.nextIndex;continue}t.positional.push(r),t.flags._.push(r),o++}return this.applyDefaults(t.flags,s),t}validateFlags(e,t){const s=[],f=[...this.globalOptions,...t?.options??[]];for(const n of f){const a=this.normalizeKey(n.name);if(n.required&&e[a]===void 0&&s.push(c("cli.missingRequired",{name:n.name})),n.choices&&e[a]!==void 0){const o=String(e[a]);n.choices.includes(o)||s.push(c("cli.invalidChoice",{name:n.name,value:o,choices:n.choices.join(", ")}))}if(n.validate&&e[a]!==void 0){const o=n.validate(e[a]);o!==!0&&s.push(o)}}return s}getGlobalOptions(){return[...this.globalOptions]}parseFlag(e,t,s,f){const n={},a=e[t];let o=t+1;if(a.startsWith("--")){const r=a.indexOf("=");if(r!==-1){const i=a.slice(2,r);n[this.normalizeKey(i)]=this.parseValue(a.slice(r+1))}else if(a.startsWith("--no-")){const i=a.slice(5);n[this.normalizeKey(i)]=!1}else{const i=a.slice(2),l=this.normalizeKey(i);f.has(l)?o<e.length&&this.isBooleanLiteral(e[o])?(n[l]=e[o].toLowerCase()==="true",o++):n[l]=!0:o<e.length&&this.isFlagValue(e[o])?(n[l]=this.parseValue(e[o]),o++):n[l]=!0}}else if(a.startsWith("-")){const r=a.slice(1);if(r.length===1){const i=s[r]||r,l=this.normalizeKey(i);f.has(l)?o<e.length&&this.isBooleanLiteral(e[o])?(n[l]=e[o].toLowerCase()==="true",o++):n[l]=!0:o<e.length&&this.isFlagValue(e[o])?(n[l]=this.parseValue(e[o]),o++):n[l]=!0}else for(const i of r){const l=s[i]||i;n[this.normalizeKey(l)]=!0}}return{flags:n,nextIndex:o}}isFlagValue(e){return e.startsWith("-")?/^-\d*\.?\d+(?:[eE][+-]?\d+)?$/.test(e):!0}isBooleanLiteral(e){const t=e.toLowerCase();return t==="true"||t==="false"}parseValue(e){if(e.toLowerCase()==="true")return!0;if(e.toLowerCase()==="false")return!1;const t=Number(e);return!isNaN(t)&&e.trim()!==""?t:e}normalizeKey(e){return e.replace(/-([a-z])/g,(t,s)=>s.toUpperCase())}buildAliases(e){const t={};for(const s of this.globalOptions)s.short&&(t[s.short]=s.name);if(e?.options)for(const s of e.options)s.short&&(t[s.short]=s.name);return t}booleanFlags(e){const t=new Set;for(const s of this.globalOptions)s.type==="boolean"&&t.add(this.normalizeKey(s.name));if(e?.options)for(const s of e.options)s.type==="boolean"?t.add(this.normalizeKey(s.name)):s.type&&t.delete(this.normalizeKey(s.name));return t}applyDefaults(e,t){const s=[];t?.options&&s.push(t.options),s.push(this.globalOptions);for(const f of s)for(const n of f){const a=this.normalizeKey(n.name);e[a]===void 0&&n.default!==void 0&&(e[a]=n.default)}}}
@@ -1 +1 @@
1
- const m={31:"red",32:"green",33:"yellow",34:"blue",35:"magenta",36:"cyan",90:"gray"},p={41:"red",42:"green",43:"yellow",44:"blue",45:"magenta",46:"cyan",100:"gray"};function h(t,n,o){const e=u=>Math.max(0,Math.min(255,Math.round(u))).toString(16).padStart(2,"0");return`#${e(t)}${e(n)}${e(o)}`}export function toInkColor(t){const n="ansi256:";return t.startsWith(n)?`ansi256(${t.slice(n.length)})`:t}function b(t,n,o){if(t[n]!==o)return null;if(t[n+1]==="5"&&t[n+2]!==void 0){const e=Number(t[n+2]);return Number.isInteger(e)&&e>=0&&e<=255?{value:`ansi256:${e}`,next:n+3}:null}if(t[n+1]==="2"&&t[n+4]!==void 0){const[e,u,s]=[t[n+2],t[n+3],t[n+4]].map(Number);return[e,u,s].every(i=>Number.isFinite(i))?{value:h(e,u,s),next:n+5}:null}return null}export function parseAnsiSpans(t){const n=[];let o,e="";const u=()=>{o&&o.text&&n.push(o),o=void 0},s=()=>{e&&(n.push({text:e}),e="")},i=()=>(o||(s(),o={text:""}),o),d=t.split(/(\x1b\[[0-9;]*m)/);for(const c of d){const g=/^\x1b\[([0-9;]*)m$/.exec(c);if(!g){c&&(o?o.text+=c:e+=c);continue}const a=g[1].split(";").filter(r=>r!=="");for(let r=0;r<a.length;){const x=b(a,r,"38");if(x){i().color=x.value,r=x.next;continue}const f=b(a,r,"48");if(f){i().backgroundColor=f.value,r=f.next;continue}const l=a[r];l==="0"?u():l==="1"?i().bold=!0:l==="2"?i().dim=!0:m[l]?i().color=m[l]:p[l]&&(i().backgroundColor=p[l]),r++}}return u(),s(),n}export function stripAnsi(t){return t.replace(/\x1b\[[0-9;]*m/g,"")}
1
+ const m={31:"red",32:"green",33:"yellow",34:"blue",35:"magenta",36:"cyan",90:"gray"},p={41:"red",42:"green",43:"yellow",44:"blue",45:"magenta",46:"cyan",100:"gray"};function h(t,e,o){const n=i=>Math.max(0,Math.min(255,Math.round(i))).toString(16).padStart(2,"0");return`#${n(t)}${n(e)}${n(o)}`}export function toInkColor(t){const e="ansi256:";return t.startsWith(e)?`ansi256(${t.slice(e.length)})`:t}function b(t,e,o){if(t[e]!==o)return null;if(t[e+1]==="5"&&t[e+2]!==void 0){const n=Number(t[e+2]);return Number.isInteger(n)&&n>=0&&n<=255?{value:`ansi256:${n}`,next:e+3}:null}if(t[e+1]==="2"&&t[e+4]!==void 0){const[n,i,s]=[t[e+2],t[e+3],t[e+4]].map(Number);return[n,i,s].every(u=>Number.isFinite(u))?{value:h(n,i,s),next:e+5}:null}return null}export function parseAnsiSpans(t){const e=[];let o,n="";const i=()=>{o&&o.text&&e.push(o),o=void 0},s=()=>{n&&(e.push({text:n}),n="")},u=()=>(o||(s(),o={text:""}),o),d=t.split(/(\x1b\[[0-9;]*m)/);for(const c of d){const g=/^\x1b\[([0-9;]*)m$/.exec(c);if(!g){c&&(o?o.text+=c:n+=c);continue}const a=g[1].split(";").filter(r=>r!=="");for(let r=0;r<a.length;){const x=b(a,r,"38");if(x){u().color=x.value,r=x.next;continue}const f=b(a,r,"48");if(f){u().backgroundColor=f.value,r=f.next;continue}const l=a[r];l==="0"?i():l==="1"?u().bold=!0:l==="2"?u().dim=!0:m[l]?u().color=m[l]:p[l]&&(u().backgroundColor=p[l]),r++}}return i(),s(),e}export function stripAnsi(t){return t.replace(/\x1b\[[0-9;]*m/g,"")}
@@ -1,2 +1,2 @@
1
- import{mkdtempSync as _,writeFileSync as r}from"node:fs";import{tmpdir as a}from"node:os";import{join as n}from"node:path";export function writeFixtureTranscript(){const o=_(n(a(),"weave-sl-mock-")),t=n(o,"session.jsonl"),e=(s,i)=>`${JSON.stringify({type:"assistant",uuid:s,message:{id:s,usage:i}})}
1
+ import{mkdtempSync as _,writeFileSync as r}from"node:fs";import{tmpdir as a}from"node:os";import{join as s}from"node:path";export function writeFixtureTranscript(){const o=_(s(a(),"weave-sl-mock-")),t=s(o,"session.jsonl"),e=(n,i)=>`${JSON.stringify({type:"assistant",uuid:n,message:{id:n,usage:i}})}
2
2
  `;return r(t,e("msg_mock_1",{input_tokens:3e5,output_tokens:2e4,cache_read_input_tokens:1e5})+e("msg_mock_1",{input_tokens:3e5,output_tokens:2e4,cache_read_input_tokens:1e5})+e("msg_mock_2",{input_tokens:4e5,output_tokens:3e4,cache_read_input_tokens:110900})),t}export function buildMockInput(o,t=100,e=""){return{session_id:"mock-session",transcript_path:e,model:{display_name:"Fable 5",id:"claude-fable-5"},workspace:{current_dir:o},effort:{level:"high"},context_window:{used_percentage:42,remaining_percentage:58,context_window_size:1e6,total_input_tokens:42e4,total_output_tokens:0},cost:{total_cost_usd:1.234},rate_limits:{five_hour:{used_percentage:33,resets_at:0}},terminal:{columns:t}}}
@@ -1,3 +1,3 @@
1
- import{jsx as i,jsxs as w}from"react/jsx-runtime";import{spawnSync as Y}from"node:child_process";import _ from"node:path";import{useEffect as q,useState as b}from"react";import{render as U,Box as S,Text as a,useInput as V,useApp as X,useStdout as z}from"ink";import{applyStatuslineConfig as Q,generateStatuslineScript as W,readStatuslineConfig as Z,writeGlobalStatuslineConfig as ee}from"@weavecode/server";import{parseAnsiSpans as re,toInkColor as $}from"./ansi.js";import{buildMockInput as ne,writeFixtureTranscript as te}from"./mock-input.js";import{t as c}from"../i18n/index.js";const oe=["gray","red","green","yellow","blue","magenta","cyan"],le=["ansi256:196","ansi256:208","ansi256:39","#f7768e","#7aa2f7","#9ece6a"],x=[...oe,...le];export const COLOR_CYCLE=x;const I=[" \u2502 "," \xB7 "," \u2014 "," ",""],L=["left","center","right"],ie=["percent","bar","both"],A=[{fill:"\u2588",empty:"\u2591"},{fill:"\u25B0",empty:"\u25B1"},{fill:"=",empty:"\xB7"},{fill:"#",empty:"-"}],P=[": "," ",": "," \xBB "],ae={project:["","\u{1F4C1}"],git:["","\u{1F33F}"],git_user:["","\u{1F464}"],changes:["","\u270F\uFE0F"],model:["","\u{1F916}"],thinking:["","\u{1F9E9}"],context:["","\u{1F9E0}"],tokens:["","\u{1F522}"],cost:["","\u{1F4B8}"],rate:["","\u26A1"],time:["","\u{1F552}"]};let j;function ce(){return j===void 0&&(j=te()),j}export function runPreviewLines(e,r,t){const l=W(e).replace(/^#!.*\n/,""),h=JSON.stringify(ne(r,t,ce()));try{const n=Y(process.execPath,["-e",l],{input:h,encoding:"utf8",timeout:15e3,windowsHide:!0});return n.status!==0?{lines:[],error:(n.stderr||c("preview.scriptExit",{status:String(n.status)})).trim()}:{lines:(n.stdout??"").replace(/\r\n/g,`
1
+ import{jsx as i,jsxs as w}from"react/jsx-runtime";import{spawnSync as Y}from"node:child_process";import _ from"node:path";import{useEffect as q,useState as b}from"react";import{render as N,Box as S,Text as a,useInput as U,useApp as X,useStdout as z}from"ink";import{applyStatuslineConfig as Q,generateStatuslineScript as W,readStatuslineConfig as Z,writeGlobalStatuslineConfig as ee}from"@weavecode/server";import{parseAnsiSpans as re,toInkColor as $}from"./ansi.js";import{buildMockInput as ne,writeFixtureTranscript as te}from"./mock-input.js";import{t as c}from"../i18n/index.js";const oe=["gray","red","green","yellow","blue","magenta","cyan"],le=["ansi256:196","ansi256:208","ansi256:39","#f7768e","#7aa2f7","#9ece6a"],x=[...oe,...le];export const COLOR_CYCLE=x;const I=[" \u2502 "," \xB7 "," \u2014 "," ",""],L=["left","center","right"],ie=["percent","bar","both"],A=[{fill:"\u2588",empty:"\u2591"},{fill:"\u25B0",empty:"\u25B1"},{fill:"=",empty:"\xB7"},{fill:"#",empty:"-"}],P=[": "," ",": "," \xBB "],ae={project:["","\u{1F4C1}"],git:["","\u{1F33F}"],git_user:["","\u{1F464}"],changes:["","\u270F\uFE0F"],model:["","\u{1F916}"],thinking:["","\u{1F9E9}"],context:["","\u{1F9E0}"],tokens:["","\u{1F522}"],cost:["","\u{1F4B8}"],rate:["","\u26A1"],time:["","\u{1F552}"]};let j;function ce(){return j===void 0&&(j=te()),j}export function runPreviewLines(e,r,t){const l=W(e).replace(/^#!.*\n/,""),h=JSON.stringify(ne(r,t,ce()));try{const n=Y(process.execPath,["-e",l],{input:h,encoding:"utf8",timeout:15e3,windowsHide:!0});return n.status!==0?{lines:[],error:(n.stderr||c("preview.scriptExit",{status:String(n.status)})).trim()}:{lines:(n.stdout??"").replace(/\r\n/g,`
2
2
  `).split(`
3
- `).filter(v=>v!=="")}}catch(n){return{lines:[],error:String(n)}}}function y(e,r,t){return{...e,segments:{...e.segments,[r]:{...e.segments[r],...t}}}}export function toggleSegment(e,r){return y(e,r,{enabled:!e.segments[r].enabled})}export function cycleSegmentColor(e,r){const t=x.indexOf(e.segments[r].color);return y(e,r,{color:x[(t+1)%x.length]})}export function toggleSegmentBold(e,r){return y(e,r,{bold:!e.segments[r].bold})}export function toggleSegmentMerge(e,r){return y(e,r,{merge:!e.segments[r].merge})}export function cycleSegmentIcon(e,r){const t=ae[r]??[""],l=t.indexOf(e.segments[r].icon);return y(e,r,{icon:t[(l+1)%t.length]})}export function cycleContextStyle(e,r){if(r!=="context")return e;const t=ie,l=t.indexOf(e.segments[r].style??"both");return y(e,r,{style:t[(l+1)%t.length]})}export function cycleAlign(e){const r=L.indexOf(e.align);return{...e,align:L[(r+1)%L.length]}}export function togglePowerline(e){return{...e,powerline:{...e.powerline,enabled:!e.powerline.enabled}}}const k=["\uE0B0","\uE0B2","\uE0B4","\uE0B6"];export function cyclePowerlineGlyph(e){const r=e.powerline.separator??k[0],t=k.indexOf(r),l=k[(t+1)%k.length];return{...e,powerline:{...e.powerline,separator:l}}}export function cycleLogoColor(e){const r=x.indexOf(e.logoColor);return{...e,logoColor:x[(r+1)%x.length]}}export function cycleSeparator(e){const r=I.indexOf(e.separator);return{...e,separator:I[(r+1)%I.length]}}export function bumpRefreshInterval(e,r){return{...e,refreshInterval:Math.max(1,e.refreshInterval+r)}}export function setSegmentField(e,r,t,l){const h=l===""?{[t]:void 0}:{[t]:l};return y(e,r,h)}export function bumpBarCells(e,r){const t=Math.max(1,Math.min(40,e.bar.cells+r));return{...e,bar:{...e.bar,cells:t}}}export function cycleBarGlyph(e){const r=A.findIndex(l=>l.fill===e.bar.fill&&l.empty===e.bar.empty),t=A[(r+1)%A.length];return{...e,bar:{...e.bar,...t}}}export function cycleLabelSeparator(e){const r=P.indexOf(e.labelSeparator);return{...e,labelSeparator:P[(r+1)%P.length]}}export function clampCursor(e,r){const t=e.lines.length,l=Math.min(Math.max(r.row,0),t-1),h=e.lines[l]?.length??0,n=Math.min(Math.max(r.col,0),Math.max(0,h-1));return{row:l,col:n}}export function moveCursor(e,r,t,l){const h=e.lines.length;let n=Math.min(Math.max(r.row+t,0),h-1);for(;n!==r.row&&(e.lines[n]?.length??0)===0;)n-=Math.sign(n-r.row)||1;if((e.lines[n]?.length??0)===0)return r;const v=e.lines[n].length;let g=r.col+l;return g>=v&&(g=v-1),g<0&&(g=0),{row:n,col:g}}function se({line:e}){const r=re(e);return i(a,{children:r.map((t,l)=>i(a,{color:t.color?$(t.color):void 0,backgroundColor:t.backgroundColor?$(t.backgroundColor):void 0,bold:t.bold,dimColor:t.dim,children:t.text},l))})}function ue({segmentKey:e,seg:r,focused:t}){const l=`${r.enabled?"\u25CF":"\u25CB"}${r.icon?r.icon:""}${e}`;return i(a,{color:$(r.enabled?r.color:"gray"),bold:t,inverse:t,dimColor:!r.enabled,children:l})}function fe({initialConfig:e,projectPath:r,initialCursor:t}){const{exit:l}=X(),{stdout:h}=z(),[n,v]=b(e),[g,B]=b(t),[F,D]=b({lines:[]}),[J,T]=b(!1),[G,M]=b(null),[H,R]=b(!1),[m,C]=b(null),O=Math.max(60,h?.columns??100),f=n.lines[g.row]?.[g.col],p=s=>{v(s),T(!0),M(null)};q(()=>{const s=setTimeout(()=>{D(runPreviewLines(n,r,O))},60);return()=>clearTimeout(s)},[n,O,r]),V((s,u)=>{if(!H){if(m){if(u.escape){C(null);return}if(u.return){const{key:o,field:E,buf:K}=m;p(N=>setSegmentField(N,o,E,K)),C(null);return}if(u.backspace||u.delete){C({...m,buf:m.buf.slice(0,-1)});return}s&&!u.ctrl&&!u.meta&&C({...m,buf:m.buf+s});return}if(s==="q"){l();return}if(u.escape){l();return}if(u.upArrow){B(o=>moveCursor(n,o,-1,0));return}if(u.downArrow){B(o=>moveCursor(n,o,1,0));return}if(u.leftArrow){B(o=>moveCursor(n,o,0,-1));return}if(u.rightArrow){B(o=>moveCursor(n,o,0,1));return}if(!u.return){if(s==="B"){p(cycleBarGlyph);return}if(s==="L"){p(cycleLabelSeparator);return}if(s==="["){p(o=>bumpBarCells(o,-1));return}if(s==="]"){p(o=>bumpBarCells(o,1));return}if(f){if(s==="n"){C({key:f,field:"label",buf:n.segments[f].label??""});return}if(s==="f"){C({key:f,field:"format",buf:n.segments[f].format??""});return}switch(s.toLowerCase()){case" ":p(o=>toggleSegment(o,f));return;case"c":p(o=>cycleSegmentColor(o,f));return;case"b":p(o=>toggleSegmentBold(o,f));return;case"m":p(o=>toggleSegmentMerge(o,f));return;case"i":p(o=>cycleSegmentIcon(o,f));return;case"v":p(o=>cycleContextStyle(o,f));return;case"a":p(o=>cycleAlign(o));return;case"p":p(o=>togglePowerline(o));return;case"g":p(o=>cyclePowerlineGlyph(o));return;case"l":p(o=>cycleLogoColor(o));return;case"s":p(o=>cycleSeparator(o));return;case"r":D(runPreviewLines(n,r,O)),M(c("preview.reRendered"));return;case"w":(async()=>{R(!0);try{(n.source??"global")==="global"&&await ee(n),await Q(r,n),T(!1),M(c("preview.saved"))}catch(o){M(c("preview.writeFailed",{error:String(o)}))}finally{R(!1)}})();return;default:break}}}}});const d=f?n.segments[f]:void 0;return w(S,{flexDirection:"column",gap:0,children:[w(S,{children:[i(a,{bold:!0,color:"cyan",children:"weave statusline preview"}),w(a,{dimColor:!0,children:[" \u2014 ",_.basename(r)," "]}),i(a,{dimColor:!0,children:c("preview.headerMeta",{source:n.source??"global",refresh:n.refreshInterval,align:n.align,powerline:n.powerline.enabled?c("preview.on"):c("preview.off")})}),J&&i(a,{color:"yellow",children:c("preview.unsaved")})]}),i(S,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:1,marginY:0,children:F.error?i(a,{color:"red",children:c("preview.scriptError",{error:F.error})}):F.lines.length?F.lines.map((s,u)=>i(se,{line:s},u)):i(a,{dimColor:!0,children:c("preview.rendering")})}),w(S,{flexDirection:"column",children:[i(a,{dimColor:!0,children:c("preview.layoutHelp")}),n.lines.map((s,u)=>w(S,{gap:1,children:[i(a,{dimColor:!0,children:c("preview.rowLabel",{row:u+1})}),s.map((o,E)=>i(ue,{segmentKey:o,seg:n.segments[o],focused:g.row===u&&g.col===E},o))]},u))]}),w(S,{flexDirection:"column",gap:0,marginTop:1,children:[m?w(a,{children:[i(a,{bold:!0,color:"yellow",children:` ${m.key}.${m.field} `})," ",i(a,{children:m.buf}),i(a,{inverse:!0,children:" "}),i(a,{dimColor:!0,children:c("preview.editConfirm")})]}):d&&f?w(a,{children:[i(a,{bold:!0,inverse:!0,children:` ${f} `})," ",i(a,{dimColor:!0,children:c("preview.segDetail",{color:d.color,bold:d.bold?c("preview.on"):c("preview.off"),merge:d.merge?c("preview.on"):c("preview.off"),icon:d.icon||"\u2014",style:f==="context"?c("preview.styleSuffix",{style:d.style??"both"}):""})})]}):null,!m&&d&&f&&(d.label||d.format)?w(a,{dimColor:!0,children:[d.label?c("preview.labelValue",{value:`${d.label}${n.labelSeparator}`}):"",d.format?c("preview.formatValue",{value:d.format}):""]}):null,i(a,{dimColor:!0,children:c("preview.barLine",{cells:n.bar.cells,glyphs:`${n.bar.fill}${n.bar.empty}`,labelSep:JSON.stringify(n.labelSeparator)})}),i(a,{dimColor:!0,children:c("preview.keysHelp")}),G&&i(a,{color:"green",children:G}),H&&i(a,{color:"yellow",children:c("preview.writing")})]})]})}export async function runStatuslinePreview(e){const r=await Z(e),t=clampCursor(r,{row:0,col:0});await U(i(fe,{initialConfig:r,projectPath:e,initialCursor:t}),{exitOnCtrlC:!0}).waitUntilExit?.()}
3
+ `).filter(v=>v!=="")}}catch(n){return{lines:[],error:String(n)}}}function y(e,r,t){return{...e,segments:{...e.segments,[r]:{...e.segments[r],...t}}}}export function toggleSegment(e,r){return y(e,r,{enabled:!e.segments[r].enabled})}export function cycleSegmentColor(e,r){const t=x.indexOf(e.segments[r].color);return y(e,r,{color:x[(t+1)%x.length]})}export function toggleSegmentBold(e,r){return y(e,r,{bold:!e.segments[r].bold})}export function toggleSegmentMerge(e,r){return y(e,r,{merge:!e.segments[r].merge})}export function cycleSegmentIcon(e,r){const t=ae[r]??[""],l=t.indexOf(e.segments[r].icon);return y(e,r,{icon:t[(l+1)%t.length]})}export function cycleContextStyle(e,r){if(r!=="context")return e;const t=ie,l=t.indexOf(e.segments[r].style??"both");return y(e,r,{style:t[(l+1)%t.length]})}export function cycleAlign(e){const r=L.indexOf(e.align);return{...e,align:L[(r+1)%L.length]}}export function togglePowerline(e){return{...e,powerline:{...e.powerline,enabled:!e.powerline.enabled}}}const k=["\uE0B0","\uE0B2","\uE0B4","\uE0B6"];export function cyclePowerlineGlyph(e){const r=e.powerline.separator??k[0],t=k.indexOf(r),l=k[(t+1)%k.length];return{...e,powerline:{...e.powerline,separator:l}}}export function cycleLogoColor(e){const r=x.indexOf(e.logoColor);return{...e,logoColor:x[(r+1)%x.length]}}export function cycleSeparator(e){const r=I.indexOf(e.separator);return{...e,separator:I[(r+1)%I.length]}}export function bumpRefreshInterval(e,r){return{...e,refreshInterval:Math.max(1,e.refreshInterval+r)}}export function setSegmentField(e,r,t,l){const h=l===""?{[t]:void 0}:{[t]:l};return y(e,r,h)}export function bumpBarCells(e,r){const t=Math.max(1,Math.min(40,e.bar.cells+r));return{...e,bar:{...e.bar,cells:t}}}export function cycleBarGlyph(e){const r=A.findIndex(l=>l.fill===e.bar.fill&&l.empty===e.bar.empty),t=A[(r+1)%A.length];return{...e,bar:{...e.bar,...t}}}export function cycleLabelSeparator(e){const r=P.indexOf(e.labelSeparator);return{...e,labelSeparator:P[(r+1)%P.length]}}export function clampCursor(e,r){const t=e.lines.length,l=Math.min(Math.max(r.row,0),t-1),h=e.lines[l]?.length??0,n=Math.min(Math.max(r.col,0),Math.max(0,h-1));return{row:l,col:n}}export function moveCursor(e,r,t,l){const h=e.lines.length;let n=Math.min(Math.max(r.row+t,0),h-1);for(;n!==r.row&&(e.lines[n]?.length??0)===0;)n-=Math.sign(n-r.row)||1;if((e.lines[n]?.length??0)===0)return r;const v=e.lines[n].length;let g=r.col+l;return g>=v&&(g=v-1),g<0&&(g=0),{row:n,col:g}}function se({line:e}){const r=re(e);return i(a,{children:r.map((t,l)=>i(a,{color:t.color?$(t.color):void 0,backgroundColor:t.backgroundColor?$(t.backgroundColor):void 0,bold:t.bold,dimColor:t.dim,children:t.text},l))})}function ue({segmentKey:e,seg:r,focused:t}){const l=`${r.enabled?"\u25CF":"\u25CB"}${r.icon?r.icon:""}${e}`;return i(a,{color:$(r.enabled?r.color:"gray"),bold:t,inverse:t,dimColor:!r.enabled,children:l})}function fe({initialConfig:e,projectPath:r,initialCursor:t}){const{exit:l}=X(),{stdout:h}=z(),[n,v]=b(e),[g,B]=b(t),[F,D]=b({lines:[]}),[J,T]=b(!1),[G,M]=b(null),[H,R]=b(!1),[m,C]=b(null),O=Math.max(60,h?.columns??100),f=n.lines[g.row]?.[g.col],p=s=>{v(s),T(!0),M(null)};q(()=>{const s=setTimeout(()=>{D(runPreviewLines(n,r,O))},60);return()=>clearTimeout(s)},[n,O,r]),U((s,u)=>{if(!H){if(m){if(u.escape){C(null);return}if(u.return){const{key:o,field:E,buf:K}=m;p(V=>setSegmentField(V,o,E,K)),C(null);return}if(u.backspace||u.delete){C({...m,buf:m.buf.slice(0,-1)});return}s&&!u.ctrl&&!u.meta&&C({...m,buf:m.buf+s});return}if(s==="q"){l();return}if(u.escape){l();return}if(u.upArrow){B(o=>moveCursor(n,o,-1,0));return}if(u.downArrow){B(o=>moveCursor(n,o,1,0));return}if(u.leftArrow){B(o=>moveCursor(n,o,0,-1));return}if(u.rightArrow){B(o=>moveCursor(n,o,0,1));return}if(!u.return){if(s==="B"){p(cycleBarGlyph);return}if(s==="L"){p(cycleLabelSeparator);return}if(s==="["){p(o=>bumpBarCells(o,-1));return}if(s==="]"){p(o=>bumpBarCells(o,1));return}if(f){if(s==="n"){C({key:f,field:"label",buf:n.segments[f].label??""});return}if(s==="f"){C({key:f,field:"format",buf:n.segments[f].format??""});return}switch(s.toLowerCase()){case" ":p(o=>toggleSegment(o,f));return;case"c":p(o=>cycleSegmentColor(o,f));return;case"b":p(o=>toggleSegmentBold(o,f));return;case"m":p(o=>toggleSegmentMerge(o,f));return;case"i":p(o=>cycleSegmentIcon(o,f));return;case"v":p(o=>cycleContextStyle(o,f));return;case"a":p(o=>cycleAlign(o));return;case"p":p(o=>togglePowerline(o));return;case"g":p(o=>cyclePowerlineGlyph(o));return;case"l":p(o=>cycleLogoColor(o));return;case"s":p(o=>cycleSeparator(o));return;case"r":D(runPreviewLines(n,r,O)),M(c("preview.reRendered"));return;case"w":(async()=>{R(!0);try{(n.source??"global")==="global"&&await ee(n),await Q(r,n),T(!1),M(c("preview.saved"))}catch(o){M(c("preview.writeFailed",{error:String(o)}))}finally{R(!1)}})();return;default:break}}}}});const d=f?n.segments[f]:void 0;return w(S,{flexDirection:"column",gap:0,children:[w(S,{children:[i(a,{bold:!0,color:"cyan",children:"weave statusline preview"}),w(a,{dimColor:!0,children:[" \u2014 ",_.basename(r)," "]}),i(a,{dimColor:!0,children:c("preview.headerMeta",{source:n.source??"global",refresh:n.refreshInterval,align:n.align,powerline:n.powerline.enabled?c("preview.on"):c("preview.off")})}),J&&i(a,{color:"yellow",children:c("preview.unsaved")})]}),i(S,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:1,marginY:0,children:F.error?i(a,{color:"red",children:c("preview.scriptError",{error:F.error})}):F.lines.length?F.lines.map((s,u)=>i(se,{line:s},u)):i(a,{dimColor:!0,children:c("preview.rendering")})}),w(S,{flexDirection:"column",children:[i(a,{dimColor:!0,children:c("preview.layoutHelp")}),n.lines.map((s,u)=>w(S,{gap:1,children:[i(a,{dimColor:!0,children:c("preview.rowLabel",{row:u+1})}),s.map((o,E)=>i(ue,{segmentKey:o,seg:n.segments[o],focused:g.row===u&&g.col===E},o))]},u))]}),w(S,{flexDirection:"column",gap:0,marginTop:1,children:[m?w(a,{children:[i(a,{bold:!0,color:"yellow",children:` ${m.key}.${m.field} `})," ",i(a,{children:m.buf}),i(a,{inverse:!0,children:" "}),i(a,{dimColor:!0,children:c("preview.editConfirm")})]}):d&&f?w(a,{children:[i(a,{bold:!0,inverse:!0,children:` ${f} `})," ",i(a,{dimColor:!0,children:c("preview.segDetail",{color:d.color,bold:d.bold?c("preview.on"):c("preview.off"),merge:d.merge?c("preview.on"):c("preview.off"),icon:d.icon||"\u2014",style:f==="context"?c("preview.styleSuffix",{style:d.style??"both"}):""})})]}):null,!m&&d&&f&&(d.label||d.format)?w(a,{dimColor:!0,children:[d.label?c("preview.labelValue",{value:`${d.label}${n.labelSeparator}`}):"",d.format?c("preview.formatValue",{value:d.format}):""]}):null,i(a,{dimColor:!0,children:c("preview.barLine",{cells:n.bar.cells,glyphs:`${n.bar.fill}${n.bar.empty}`,labelSep:JSON.stringify(n.labelSeparator)})}),i(a,{dimColor:!0,children:c("preview.keysHelp")}),G&&i(a,{color:"green",children:G}),H&&i(a,{color:"yellow",children:c("preview.writing")})]})]})}export async function runStatuslinePreview(e){const r=await Z(e),t=clampCursor(r,{row:0,col:0});await N(i(fe,{initialConfig:r,projectPath:e,initialCursor:t}),{exitOnCtrlC:!0}).waitUntilExit?.()}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weavecode/cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "CLI entry point for weave — parser, commands, and init executor",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,9 +22,9 @@
22
22
  "node": ">=22.5.0"
23
23
  },
24
24
  "dependencies": {
25
- "@weavecode/core": "^0.1.3",
26
- "@weavecode/harness": "^0.1.3",
27
- "@weavecode/server": "^0.1.3",
28
- "@weavecode/templates": "^0.1.3"
25
+ "@weavecode/core": "^0.1.4",
26
+ "@weavecode/harness": "^0.1.4",
27
+ "@weavecode/server": "^0.1.4",
28
+ "@weavecode/templates": "^0.1.4"
29
29
  }
30
30
  }
@@ -1 +1 @@
1
- import i from"node:path";import{lstat as k,readFile as p,readlink as g,access as y}from"node:fs/promises";const c="CLAUDE.md",u="AGENTS.md",d=".claude/helpers/statusline.cjs",w=".claude/settings.json";async function f(n){try{return await y(n),!0}catch{return!1}}async function l(n){try{if(!(await k(n)).isSymbolicLink())return"file";const t=i.resolve(i.dirname(n),await g(n));return await f(t)?"link":"dangling"}catch{return"absent"}}async function j(n){const t=i.join(n,u);if(await l(t)!=="file")return null;const a=(await p(t,"utf-8").catch(()=>"")).trim();return{id:"instruction-link-not-materialised",params:{agents:u,claude:c},ok:a!==c}}async function b(n){const t=await l(i.join(n,c)),a=await l(i.join(n,u));return t==="absent"||a==="absent"?null:{id:"instruction-files-duplicated",params:{claude:c,agents:u},ok:!(t==="file"&&a==="file")}}async function v(n){const t=[];for(const a of[c,u]){const s=await l(i.join(n,a));if(s==="dangling"){t.push({id:"instruction-link-dangling",params:{name:a},ok:!1});break}s==="link"&&t.push({id:"instruction-link-dangling",params:{name:a},ok:!0})}return t}function L(n){const t=/"([^"]+)"/.exec(n);if(t)return t[1];const a=n.trim().split(/\s+/),s=a[a.length-1];return s&&m(s).includes(d)?s:null}function m(n){return n.replace(/\\/g,"/")}async function S(n){const t=i.join(n,w);let a;try{a=JSON.parse(await p(t,"utf-8"))}catch{return[]}const s=a.statusLine;if(!s||typeof s!="object")return[];const r=s.command;if(typeof r!="string"||!m(r).includes(d))return[];const e=L(r);if(!e)return[{id:"statusline-path-unresolved",params:{command:r},ok:!1}];const o=[{id:"statusline-path-unresolved",params:{command:r},ok:!0}],h=i.resolve(n)+i.sep;return i.resolve(e).startsWith(h)?(o.push({id:"statusline-path-foreign",params:{path:e},ok:!0}),o.push({id:"statusline-script-missing",params:{path:e},ok:await f(e)}),o):(o.push({id:"statusline-path-foreign",params:{path:e},ok:!1}),o)}export async function checkHarness(n){const[t,a,s,r]=await Promise.all([j(n),b(n),v(n),S(n)]);return[t,a,...s,...r].filter(e=>e!==null)}
1
+ import a from"node:path";import{lstat as g,readFile as f,readlink as m,access as y}from"node:fs/promises";const o="CLAUDE.md",u="AGENTS.md",p=".claude/helpers/statusline.cjs",w=".claude/settings.json";async function h(t){try{return await y(t),!0}catch{return!1}}async function l(t){try{if(!(await g(t)).isSymbolicLink())return"file";const n=a.resolve(a.dirname(t),await m(t));return await h(n)?"link":"dangling"}catch{return"absent"}}async function S(t){const s=a.join(t,u);if(await l(s)!=="file")return null;const n=(await f(s,"utf-8").catch(()=>"")).trim();return{id:"instruction-link-not-materialised",params:{agents:u,claude:o},ok:n!==o}}async function j(t){const s=await l(a.join(t,o)),n=await l(a.join(t,u));return s==="absent"||n==="absent"?null:{id:"instruction-files-duplicated",params:{claude:o,agents:u},ok:!(s==="file"&&n==="file")}}async function E(t){const s=[];for(const n of[o,u]){const e=await l(a.join(t,n));if(e==="dangling"){s.push({id:"instruction-link-dangling",params:{name:n},ok:!1});break}e==="link"&&s.push({id:"instruction-link-dangling",params:{name:n},ok:!0})}return s}function L(t){const s=/"([^"]+)"/.exec(t);if(s)return s[1];const n=t.trim().split(/\s+/),e=n[n.length-1];return e&&d(e).includes(p)?e:null}function d(t){return t.replace(/\\/g,"/")}async function b(t){const s=a.join(t,w);let n;try{n=JSON.parse(await f(s,"utf-8"))}catch{return[]}const e=n.statusLine;if(!e||typeof e!="object")return[];const r=e.command;if(typeof r!="string"||!d(r).includes(p))return[];const i=L(r);if(!i)return[{id:"statusline-path-unresolved",params:{command:r},ok:!1}];const c=[{id:"statusline-path-unresolved",params:{command:r},ok:!0}],k=a.resolve(t)+a.sep;return a.resolve(i).startsWith(k)?(c.push({id:"statusline-path-foreign",params:{path:i},ok:!0}),c.push({id:"statusline-script-missing",params:{path:i},ok:await h(i)}),c):(c.push({id:"statusline-path-foreign",params:{path:i},ok:!1}),c)}export async function checkHarness(t){const[s,n,e,r]=await Promise.all([S(t),j(t),E(t),b(t)]);return[s,n,...e,...r].filter(i=>i!==null)}
@@ -30,7 +30,19 @@ export declare const HARNESS_EVENTS: {
30
30
  * codex 的线名(`Interrupt` / `task_complete` / …)由 adapter 归一,服务端与 web
31
31
  * 只认这一列。0.163 的 hooks 引擎载荷与 claude 逐字同形。
32
32
  */
33
- codex: readonly ["SessionStart", "UserPromptSubmit", "Stop", "TurnAborted", "PostToolUse", "SessionEnd", "PreCompact", "PostCompact", "SubagentStart", "SubagentStop"];
33
+ codex: readonly ["SessionStart", "UserPromptSubmit", "Stop", "TurnAborted", "PostToolUse", "SessionEnd", "PreCompact", "PostCompact", "SubagentStart", "SubagentStop", "PermissionRequest"];
34
+ };
35
+ /**
36
+ * 回合内事件表——「工具正在执行」的正面信号(turnOpen 的补充判据):
37
+ * claude 宿主对「回合运行中发来的消息」先发 UPS(入队时刻)、再收上一回合的
38
+ * Stop,出队开跑的新回合**不再发第二条 UPS** ⇒ 「最后 UPS 晚于最后 Stop」在这类
39
+ * 排队回合上误判已关。最后收尾之后仍有工具事件 = 回合实际还开着。
40
+ * 只收工具执行三态——Notification(idle 提示)/ SubagentStop(away 总结)在
41
+ * 回合收尾后也会来,不算回合在跑。
42
+ */
43
+ export declare const HARNESS_TOOL_EVENTS: {
44
+ claude: readonly ["PreToolUse", "PostToolUse", "PostToolUseFailure"];
45
+ codex: readonly ["PostToolUse"];
34
46
  };
35
47
  /**
36
48
  * inject(同步 additionalContext)白名单——按 harness 分表。
@@ -1 +1 @@
1
- export const HARNESS_NAMES=["claude","codex"];export function isHarness(e){return typeof e=="string"&&HARNESS_NAMES.includes(e)}export const HARNESS_EVENTS={claude:["PreToolUse","PostToolUse","UserPromptSubmit","SessionStart","Stop","StopFailure","SubagentStop","Notification","PostToolUseFailure","PermissionRequest","PermissionDenied","SubagentStart","PreCompact","SessionEnd","PreModelSwitch","PostModelSwitch"],codex:["SessionStart","UserPromptSubmit","Stop","TurnAborted","PostToolUse","SessionEnd","PreCompact","PostCompact","SubagentStart","SubagentStop"]},INJECTABLE_EVENTS={claude:["PostToolUse","UserPromptSubmit","SessionStart","Stop","SubagentStop"],codex:[]},TITLE_EFFECTIVE_EVENTS={claude:["SessionStart","UserPromptSubmit"],codex:[]},HARNESS_EVENT_UNION=[...new Set(Object.values(HARNESS_EVENTS).flat())],HARNESS_DIRS={claude:{projectDir:".claude",userDir:".claude"},codex:{projectDir:".codex",userDir:".codex"}},HARNESS_INSTRUCTION_FILES={claude:["CLAUDE.md"],codex:["AGENTS.md"]},HARNESS_LIFECYCLE={claude:{open:"UserPromptSubmit",close:["Stop","StopFailure"],closeFailed:["StopFailure"],sessionMarkers:["SessionStart","SessionEnd"],subagentStop:"SubagentStop",questionTools:["AskUserQuestion","ExitPlanMode"],sessionExit:"SessionEnd"},codex:{open:"UserPromptSubmit",close:["Stop","TurnAborted"],closeFailed:[],sessionMarkers:["SessionStart","SessionEnd"],subagentStop:"SubagentStop",questionTools:[],sessionExit:"SessionEnd"}},HARNESS_COMPACTION={claude:{start:"PreCompact",end:"SessionStart",endSource:"compact"},codex:{start:null,end:null,endSource:null}},HARNESS_SESSION_CONTROL={claude:{modeNames:["default","acceptEdits","plan","auto","dontAsk","bypassPermissions"],modelNames:["default","opus","sonnet","haiku","fable"],modelFactEvents:["PostModelSwitch","SessionStart"],effortLevels:["low","medium","high","xhigh","max"]},codex:{modeNames:[],modelNames:[],modelFactEvents:[],effortLevels:[]}},HARNESS_KEYS=HARNESS_NAMES,INSTRUCTION_FILES=[...new Set(HARNESS_KEYS.flatMap(e=>[...HARNESS_INSTRUCTION_FILES[e]]))];
1
+ export const HARNESS_NAMES=["claude","codex"];export function isHarness(e){return typeof e=="string"&&HARNESS_NAMES.includes(e)}export const HARNESS_EVENTS={claude:["PreToolUse","PostToolUse","UserPromptSubmit","SessionStart","Stop","StopFailure","SubagentStop","Notification","PostToolUseFailure","PermissionRequest","PermissionDenied","SubagentStart","PreCompact","SessionEnd","PreModelSwitch","PostModelSwitch"],codex:["SessionStart","UserPromptSubmit","Stop","TurnAborted","PostToolUse","SessionEnd","PreCompact","PostCompact","SubagentStart","SubagentStop","PermissionRequest"]},HARNESS_TOOL_EVENTS={claude:["PreToolUse","PostToolUse","PostToolUseFailure"],codex:["PostToolUse"]},INJECTABLE_EVENTS={claude:["PostToolUse","UserPromptSubmit","SessionStart","Stop","SubagentStop"],codex:[]},TITLE_EFFECTIVE_EVENTS={claude:["SessionStart","UserPromptSubmit"],codex:[]},HARNESS_EVENT_UNION=[...new Set(Object.values(HARNESS_EVENTS).flat())],HARNESS_DIRS={claude:{projectDir:".claude",userDir:".claude"},codex:{projectDir:".codex",userDir:".codex"}},HARNESS_INSTRUCTION_FILES={claude:["CLAUDE.md"],codex:["AGENTS.md"]},HARNESS_LIFECYCLE={claude:{open:"UserPromptSubmit",close:["Stop","StopFailure"],closeFailed:["StopFailure"],sessionMarkers:["SessionStart","SessionEnd"],subagentStop:"SubagentStop",questionTools:["AskUserQuestion","ExitPlanMode"],sessionExit:"SessionEnd"},codex:{open:"UserPromptSubmit",close:["Stop","TurnAborted"],closeFailed:[],sessionMarkers:["SessionStart","SessionEnd"],subagentStop:"SubagentStop",questionTools:[],sessionExit:"SessionEnd"}},HARNESS_COMPACTION={claude:{start:"PreCompact",end:"SessionStart",endSource:"compact"},codex:{start:null,end:null,endSource:null}},HARNESS_SESSION_CONTROL={claude:{modeNames:["default","acceptEdits","plan","auto","dontAsk","bypassPermissions"],modelNames:["default","opus","sonnet","haiku","fable"],modelFactEvents:["PostModelSwitch","SessionStart"],effortLevels:["low","medium","high","xhigh","max"]},codex:{modeNames:[],modelNames:[],modelFactEvents:[],effortLevels:[]}},HARNESS_KEYS=HARNESS_NAMES,INSTRUCTION_FILES=[...new Set(HARNESS_KEYS.flatMap(e=>[...HARNESS_INSTRUCTION_FILES[e]]))];
@@ -4,7 +4,7 @@ export type { HookRule, HookRuleSource, HookRuleFilter, HookRuleOrigin, HandlerC
4
4
  export { HookRuleSchema, HookRuleSourceSchema, HookRuleFilterSchema, HookRuleOriginSchema, HandlerConfigSchema, HookDispatchStatusSchema, HookDispatchModeSchema, PluginRuleEntrySchema, WeavePluginManifestSchema, WEAVE_PLUGIN_MANIFEST, CLAUDE_HOOK_EVENTS, INJECTABLE_HOOK_EVENTS, } from './types.js';
5
5
  export { InitOptionsSchema, PresetSchema, resolveComponents } from './types.js';
6
6
  export { normalizeHookRuleSource, hookSourceHarness } from './types.js';
7
- export { type Harness, type InstructionFile, HARNESS_EVENTS, HARNESS_KEYS, HARNESS_NAMES, HARNESS_EVENT_UNION, HARNESS_INSTRUCTION_FILES, INSTRUCTION_FILES, INJECTABLE_EVENTS, TITLE_EFFECTIVE_EVENTS, HARNESS_DIRS, HARNESS_LIFECYCLE, HARNESS_COMPACTION, HARNESS_SESSION_CONTROL, type HarnessCompaction, isHarness, } from './harness.js';
7
+ export { type Harness, type InstructionFile, HARNESS_EVENTS, HARNESS_KEYS, HARNESS_NAMES, HARNESS_EVENT_UNION, HARNESS_TOOL_EVENTS, HARNESS_INSTRUCTION_FILES, INSTRUCTION_FILES, INJECTABLE_EVENTS, TITLE_EFFECTIVE_EVENTS, HARNESS_DIRS, HARNESS_LIFECYCLE, HARNESS_COMPACTION, HARNESS_SESSION_CONTROL, type HarnessCompaction, isHarness, } from './harness.js';
8
8
  export { TERMINAL_LOCATOR_ENV, TERMINAL_LOCATOR_ENV_KEYS } from './terminal.js';
9
9
  export { type ToolScope, type ToolCategory, type EnableOverride, type InstallState, type ToolStateRow, } from './tool.js';
10
10
  export { DEFAULT_COMPONENTS, FULL_COMPONENTS, MINIMAL_COMPONENTS } from './types.js';
@@ -1 +1 @@
1
- export{HookRuleSchema,HookRuleSourceSchema,HookRuleFilterSchema,HookRuleOriginSchema,HandlerConfigSchema,HookDispatchStatusSchema,HookDispatchModeSchema,PluginRuleEntrySchema,WeavePluginManifestSchema,WEAVE_PLUGIN_MANIFEST,CLAUDE_HOOK_EVENTS,INJECTABLE_HOOK_EVENTS}from"./types.js";export{InitOptionsSchema,PresetSchema,resolveComponents}from"./types.js";export{normalizeHookRuleSource,hookSourceHarness}from"./types.js";export{HARNESS_EVENTS,HARNESS_KEYS,HARNESS_NAMES,HARNESS_EVENT_UNION,HARNESS_INSTRUCTION_FILES,INSTRUCTION_FILES,INJECTABLE_EVENTS,TITLE_EFFECTIVE_EVENTS,HARNESS_DIRS,HARNESS_LIFECYCLE,HARNESS_COMPACTION,HARNESS_SESSION_CONTROL,isHarness}from"./harness.js";export{TERMINAL_LOCATOR_ENV,TERMINAL_LOCATOR_ENV_KEYS}from"./terminal.js";export{DEFAULT_COMPONENTS,FULL_COMPONENTS,MINIMAL_COMPONENTS}from"./types.js";export{DEFAULT_HOOKS,DEFAULT_SKILLS,DEFAULT_COMMANDS,DEFAULT_AGENTS,DEFAULT_MCP}from"./types.js";export{detectPlatform}from"./platform.js";export{checkHarness}from"./harness-checks.js";export{ensureDir,writeFileIfAbsent,fileExists}from"./utils/fs.js";export{logger,formatTable}from"./utils/logger.js";
1
+ export{HookRuleSchema,HookRuleSourceSchema,HookRuleFilterSchema,HookRuleOriginSchema,HandlerConfigSchema,HookDispatchStatusSchema,HookDispatchModeSchema,PluginRuleEntrySchema,WeavePluginManifestSchema,WEAVE_PLUGIN_MANIFEST,CLAUDE_HOOK_EVENTS,INJECTABLE_HOOK_EVENTS}from"./types.js";export{InitOptionsSchema,PresetSchema,resolveComponents}from"./types.js";export{normalizeHookRuleSource,hookSourceHarness}from"./types.js";export{HARNESS_EVENTS,HARNESS_KEYS,HARNESS_NAMES,HARNESS_EVENT_UNION,HARNESS_TOOL_EVENTS,HARNESS_INSTRUCTION_FILES,INSTRUCTION_FILES,INJECTABLE_EVENTS,TITLE_EFFECTIVE_EVENTS,HARNESS_DIRS,HARNESS_LIFECYCLE,HARNESS_COMPACTION,HARNESS_SESSION_CONTROL,isHarness}from"./harness.js";export{TERMINAL_LOCATOR_ENV,TERMINAL_LOCATOR_ENV_KEYS}from"./terminal.js";export{DEFAULT_COMPONENTS,FULL_COMPONENTS,MINIMAL_COMPONENTS}from"./types.js";export{DEFAULT_HOOKS,DEFAULT_SKILLS,DEFAULT_COMMANDS,DEFAULT_AGENTS,DEFAULT_MCP}from"./types.js";export{detectPlatform}from"./platform.js";export{checkHarness}from"./harness-checks.js";export{ensureDir,writeFileIfAbsent,fileExists}from"./utils/fs.js";export{logger,formatTable}from"./utils/logger.js";
@@ -1 +1 @@
1
- import n from"node:os";import i from"node:path";export function detectPlatform(){const c=n.platform(),a=n.arch(),e=n.homedir();let s,o,r;switch(c){case"win32":s="windows",o=process.env.PSModulePath?"powershell":"cmd",r=process.env.APPDATA||i.join(e,"AppData","Roaming");break;case"darwin":s="darwin",o=process.env.SHELL?.includes("zsh")?"zsh":"bash",r=i.join(e,"Library","Application Support");break;default:s="linux",o=process.env.SHELL?.includes("zsh")?"zsh":process.env.SHELL?.includes("bash")?"bash":"sh",r=process.env.XDG_CONFIG_HOME||i.join(e,".config")}return{os:s,arch:a,nodeVersion:process.version,shell:o,homeDir:e,configDir:r}}
1
+ import n from"node:os";import i from"node:path";export function detectPlatform(){const c=n.platform(),a=n.arch(),s=n.homedir();let e,o,r;switch(c){case"win32":e="windows",o=process.env.PSModulePath?"powershell":"cmd",r=process.env.APPDATA||i.join(s,"AppData","Roaming");break;case"darwin":e="darwin",o=process.env.SHELL?.includes("zsh")?"zsh":"bash",r=i.join(s,"Library","Application Support");break;default:e="linux",o=process.env.SHELL?.includes("zsh")?"zsh":process.env.SHELL?.includes("bash")?"bash":"sh",r=process.env.XDG_CONFIG_HOME||i.join(s,".config")}return{os:e,arch:a,nodeVersion:process.version,shell:o,homeDir:s,configDir:r}}
@@ -1 +1 @@
1
- import{z as e}from"zod";import{HARNESS_EVENTS as r,HARNESS_NAMES as a,INJECTABLE_EVENTS as s}from"./harness.js";export const PresetSchema=e.enum(["minimal","default","full"]),InitComponentsSchema=e.object({settings:e.boolean(),skills:e.boolean(),commands:e.boolean(),agents:e.boolean(),helpers:e.boolean(),mcp:e.boolean(),claudeMd:e.boolean(),agentsMd:e.boolean()}),HooksConfigSchema=e.object({preToolUse:e.boolean(),postToolUse:e.boolean(),userPromptSubmit:e.boolean(),sessionStart:e.boolean(),stop:e.boolean(),stopFailure:e.boolean(),subagentStop:e.boolean(),subagentStart:e.boolean(),notification:e.boolean(),postToolUseFailure:e.boolean(),permissionRequest:e.boolean(),permissionDenied:e.boolean(),preCompact:e.boolean(),sessionEnd:e.boolean(),preModelSwitch:e.boolean(),timeout:e.number().default(5e3),continueOnError:e.boolean().default(!0)}),CLAUDE_HOOK_EVENTS=r.claude,INJECTABLE_HOOK_EVENTS=s.claude;const i=e.enum(a),l=e.enum([...a,"any"]);export const HookRuleSourceSchema=e.discriminatedUnion("kind",[e.object({kind:e.literal("hook-event"),harness:l,event:e.string().min(1)}),e.object({kind:e.literal("webhook"),routeId:e.string().min(1)}),e.object({kind:e.literal("claude-event"),event:e.string().min(1)})]);export function normalizeHookRuleSource(n){return n.kind==="claude-event"?{kind:"hook-event",harness:"claude",event:n.event}:n}export function hookSourceHarness(n){return n.kind==="claude-event"?"claude":n.kind==="hook-event"?n.harness:null}export const HookRuleFilterSchema=e.object({toolNames:e.array(e.string().min(1)).optional(),pathGlobs:e.array(e.string().min(1)).optional(),crossProjectOnly:e.boolean().optional()}),HandlerConfigSchema=e.discriminatedUnion("type",[e.object({type:e.literal("log")}),e.object({type:e.literal("webhook"),url:e.string().url(),secret:e.string().optional(),headers:e.record(e.string(),e.string()).optional()}),e.object({type:e.literal("inject"),template:e.string().min(1)}),e.object({type:e.literal("manual"),template:e.string().min(1)}),e.object({type:e.literal("plugin"),pluginId:e.string().min(1),handlerType:e.string().min(1),config:e.record(e.string(),e.unknown()).optional()}),e.object({type:e.literal("classify"),prompt:e.string().min(1),prefilter:e.array(e.string().min(1)).optional(),cooldownMs:e.number().int().positive().optional(),routes:e.array(e.object({label:e.string().min(1),url:e.string().url(),secret:e.string().optional(),headers:e.record(e.string(),e.string()).optional()})).min(1)})]),HookRuleOriginSchema=e.enum(["user","plugin","builtin"]),HookRuleSchema=e.object({id:e.string().min(1),name:e.string().min(1),enabled:e.boolean(),priority:e.number().int(),projectId:e.number().int().nullable(),source:HookRuleSourceSchema,filter:HookRuleFilterSchema.default({}),handler:HandlerConfigSchema,timeoutMs:e.number().int().positive().default(5e3),record:e.boolean().default(!0),origin:HookRuleOriginSchema.default("user"),pluginId:e.string().min(1).nullable().default(null)}),WEAVE_PLUGIN_MANIFEST="weave-plugin.json",PluginRuleEntrySchema=HookRuleSchema.omit({id:!0,projectId:!0}).extend({enabled:e.boolean().optional(),priority:e.number().int().optional()}),WeavePluginManifestSchema=e.object({manifestVersion:e.literal(1),id:e.string().regex(/^[a-z][a-z0-9-]{0,63}$/),name:e.string().min(1),version:e.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/),description:e.string().optional(),author:e.string().optional(),engines:e.object({weave:e.string().optional()}).optional(),rules:e.array(e.string().min(1)).default([]),handlers:e.array(e.object({type:e.string().min(1),entry:e.string().min(1)})).default([]),requires:e.object({events:e.array(e.string().min(1)).optional()}).optional(),templates:e.object({skills:e.array(e.string().min(1)).optional(),commands:e.array(e.string().min(1)).optional(),agents:e.array(e.string().min(1)).optional()}).optional(),mcpServers:e.record(e.string(),e.unknown()).optional(),subscribe:e.object({events:e.array(e.string().min(1)),entry:e.string().min(1)}).optional(),statusline:e.object({entry:e.string().min(1)}).optional(),config:e.record(e.string(),e.unknown()).optional()}),HookDispatchStatusSchema=e.enum(["pending","injected","running","succeeded","failed","timeout"]),HookDispatchModeSchema=e.enum(["auto","manual"]),SkillsConfigSchema=e.object({core:e.boolean()}),CommandsConfigSchema=e.object({core:e.boolean()}),AgentsConfigSchema=e.object({core:e.boolean()}),MCPConfigSchema=e.object({weave:e.boolean(),autoStart:e.boolean().default(!1)}),RuntimeConfigSchema=e.object({initVersion:e.string(),initTimestamp:e.string(),preset:PresetSchema,harnesses:e.array(i).optional(),components:InitComponentsSchema,hooks:HooksConfigSchema.partial().optional(),mcp:MCPConfigSchema.partial().optional()}),PlatformInfoSchema=e.object({os:e.enum(["windows","darwin","linux"]),arch:e.enum(["x64","arm64"]),nodeVersion:e.string(),shell:e.enum(["powershell","cmd","bash","zsh","sh"]),homeDir:e.string(),configDir:e.string()}),InitOptionsSchema=e.object({targetDir:e.string().default(process.cwd()),force:e.boolean().default(!1),interactive:e.boolean().default(!0),preset:PresetSchema.default("default"),harnesses:e.array(i).optional(),components:InitComponentsSchema.partial().default({}),hooks:HooksConfigSchema.partial().default({}),skills:SkillsConfigSchema.partial().default({}),commands:CommandsConfigSchema.partial().default({}),agents:AgentsConfigSchema.partial().default({}),mcp:MCPConfigSchema.partial().default({})}),InitResultSchema=e.object({success:e.boolean(),platform:PlatformInfoSchema,created:e.object({directories:e.array(e.string()),files:e.array(e.string())}),skipped:e.array(e.string()),merged:e.array(e.string()),updated:e.array(e.string()),errors:e.array(e.string()),removed:e.array(e.string()),summary:e.object({skillsCount:e.number(),commandsCount:e.number(),agentsCount:e.number(),hooksEnabled:e.number()})}),MINIMAL_COMPONENTS={settings:!0,skills:!0,commands:!1,agents:!1,helpers:!1,mcp:!1,claudeMd:!0,agentsMd:!0},DEFAULT_COMPONENTS={settings:!0,skills:!0,commands:!1,agents:!1,helpers:!0,mcp:!0,claudeMd:!0,agentsMd:!0},FULL_COMPONENTS={settings:!0,skills:!0,commands:!0,agents:!0,helpers:!0,mcp:!0,claudeMd:!0,agentsMd:!0},DEFAULT_HOOKS={preToolUse:!0,postToolUse:!0,userPromptSubmit:!0,sessionStart:!0,stop:!0,stopFailure:!0,subagentStop:!0,subagentStart:!0,notification:!0,postToolUseFailure:!0,permissionRequest:!0,permissionDenied:!0,preCompact:!0,sessionEnd:!0,preModelSwitch:!0,timeout:5e3,continueOnError:!0},DEFAULT_SKILLS={core:!0},DEFAULT_COMMANDS={core:!0},DEFAULT_AGENTS={core:!0},DEFAULT_MCP={weave:!1,autoStart:!1};export function resolveComponents(n,o){const t=n==="minimal"?MINIMAL_COMPONENTS:n==="full"?FULL_COMPONENTS:DEFAULT_COMPONENTS;return o?{...t,...o}:{...t}}
1
+ import{z as e}from"zod";import{HARNESS_EVENTS as i,HARNESS_NAMES as r,INJECTABLE_EVENTS as s}from"./harness.js";export const PresetSchema=e.enum(["minimal","default","full"]),InitComponentsSchema=e.object({settings:e.boolean(),skills:e.boolean(),commands:e.boolean(),agents:e.boolean(),helpers:e.boolean(),mcp:e.boolean(),claudeMd:e.boolean(),agentsMd:e.boolean()}),HooksConfigSchema=e.object({preToolUse:e.boolean(),postToolUse:e.boolean(),userPromptSubmit:e.boolean(),sessionStart:e.boolean(),stop:e.boolean(),stopFailure:e.boolean(),subagentStop:e.boolean(),subagentStart:e.boolean(),notification:e.boolean(),postToolUseFailure:e.boolean(),permissionRequest:e.boolean(),permissionDenied:e.boolean(),preCompact:e.boolean(),sessionEnd:e.boolean(),preModelSwitch:e.boolean(),timeout:e.number().default(5e3),continueOnError:e.boolean().default(!0)}),CLAUDE_HOOK_EVENTS=i.claude,INJECTABLE_HOOK_EVENTS=s.claude;const a=e.enum(r),l=e.enum([...r,"any"]);export const HookRuleSourceSchema=e.discriminatedUnion("kind",[e.object({kind:e.literal("hook-event"),harness:l,event:e.string().min(1)}),e.object({kind:e.literal("webhook"),routeId:e.string().min(1)}),e.object({kind:e.literal("claude-event"),event:e.string().min(1)})]);export function normalizeHookRuleSource(t){return t.kind==="claude-event"?{kind:"hook-event",harness:"claude",event:t.event}:t}export function hookSourceHarness(t){return t.kind==="claude-event"?"claude":t.kind==="hook-event"?t.harness:null}export const HookRuleFilterSchema=e.object({toolNames:e.array(e.string().min(1)).optional(),pathGlobs:e.array(e.string().min(1)).optional(),crossProjectOnly:e.boolean().optional()}),HandlerConfigSchema=e.discriminatedUnion("type",[e.object({type:e.literal("log")}),e.object({type:e.literal("webhook"),url:e.string().url(),secret:e.string().optional(),headers:e.record(e.string(),e.string()).optional()}),e.object({type:e.literal("inject"),template:e.string().min(1)}),e.object({type:e.literal("manual"),template:e.string().min(1)}),e.object({type:e.literal("plugin"),pluginId:e.string().min(1),handlerType:e.string().min(1),config:e.record(e.string(),e.unknown()).optional()}),e.object({type:e.literal("classify"),prompt:e.string().min(1),prefilter:e.array(e.string().min(1)).optional(),cooldownMs:e.number().int().positive().optional(),routes:e.array(e.object({label:e.string().min(1),url:e.string().url(),secret:e.string().optional(),headers:e.record(e.string(),e.string()).optional()})).min(1)})]),HookRuleOriginSchema=e.enum(["user","plugin","builtin"]),HookRuleSchema=e.object({id:e.string().min(1),name:e.string().min(1),enabled:e.boolean(),priority:e.number().int(),projectId:e.number().int().nullable(),source:HookRuleSourceSchema,filter:HookRuleFilterSchema.default({}),handler:HandlerConfigSchema,timeoutMs:e.number().int().positive().default(5e3),record:e.boolean().default(!0),origin:HookRuleOriginSchema.default("user"),pluginId:e.string().min(1).nullable().default(null)}),WEAVE_PLUGIN_MANIFEST="weave-plugin.json",PluginRuleEntrySchema=HookRuleSchema.omit({id:!0,projectId:!0}).extend({enabled:e.boolean().optional(),priority:e.number().int().optional()}),WeavePluginManifestSchema=e.object({manifestVersion:e.literal(1),id:e.string().regex(/^[a-z][a-z0-9-]{0,63}$/),name:e.string().min(1),version:e.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/),description:e.string().optional(),author:e.string().optional(),engines:e.object({weave:e.string().optional()}).optional(),rules:e.array(e.string().min(1)).default([]),handlers:e.array(e.object({type:e.string().min(1),entry:e.string().min(1)})).default([]),requires:e.object({events:e.array(e.string().min(1)).optional()}).optional(),templates:e.object({skills:e.array(e.string().min(1)).optional(),commands:e.array(e.string().min(1)).optional(),agents:e.array(e.string().min(1)).optional()}).optional(),mcpServers:e.record(e.string(),e.unknown()).optional(),subscribe:e.object({events:e.array(e.string().min(1)),entry:e.string().min(1)}).optional(),statusline:e.object({entry:e.string().min(1)}).optional(),config:e.record(e.string(),e.unknown()).optional()}),HookDispatchStatusSchema=e.enum(["pending","injected","running","succeeded","failed","timeout"]),HookDispatchModeSchema=e.enum(["auto","manual"]),SkillsConfigSchema=e.object({core:e.boolean()}),CommandsConfigSchema=e.object({core:e.boolean()}),AgentsConfigSchema=e.object({core:e.boolean()}),MCPConfigSchema=e.object({weave:e.boolean(),autoStart:e.boolean().default(!1)}),RuntimeConfigSchema=e.object({initVersion:e.string(),initTimestamp:e.string(),preset:PresetSchema,harnesses:e.array(a).optional(),components:InitComponentsSchema,hooks:HooksConfigSchema.partial().optional(),mcp:MCPConfigSchema.partial().optional()}),PlatformInfoSchema=e.object({os:e.enum(["windows","darwin","linux"]),arch:e.enum(["x64","arm64"]),nodeVersion:e.string(),shell:e.enum(["powershell","cmd","bash","zsh","sh"]),homeDir:e.string(),configDir:e.string()}),InitOptionsSchema=e.object({targetDir:e.string().default(process.cwd()),force:e.boolean().default(!1),interactive:e.boolean().default(!0),preset:PresetSchema.default("default"),harnesses:e.array(a).optional(),components:InitComponentsSchema.partial().default({}),hooks:HooksConfigSchema.partial().default({}),skills:SkillsConfigSchema.partial().default({}),commands:CommandsConfigSchema.partial().default({}),agents:AgentsConfigSchema.partial().default({}),mcp:MCPConfigSchema.partial().default({})}),InitResultSchema=e.object({success:e.boolean(),platform:PlatformInfoSchema,created:e.object({directories:e.array(e.string()),files:e.array(e.string())}),skipped:e.array(e.string()),merged:e.array(e.string()),updated:e.array(e.string()),errors:e.array(e.string()),removed:e.array(e.string()),summary:e.object({skillsCount:e.number(),commandsCount:e.number(),agentsCount:e.number(),hooksEnabled:e.number()})}),MINIMAL_COMPONENTS={settings:!0,skills:!0,commands:!1,agents:!1,helpers:!1,mcp:!1,claudeMd:!0,agentsMd:!0},DEFAULT_COMPONENTS={settings:!0,skills:!0,commands:!1,agents:!1,helpers:!0,mcp:!0,claudeMd:!0,agentsMd:!0},FULL_COMPONENTS={settings:!0,skills:!0,commands:!0,agents:!0,helpers:!0,mcp:!0,claudeMd:!0,agentsMd:!0},DEFAULT_HOOKS={preToolUse:!0,postToolUse:!0,userPromptSubmit:!0,sessionStart:!0,stop:!0,stopFailure:!0,subagentStop:!0,subagentStart:!0,notification:!0,postToolUseFailure:!0,permissionRequest:!0,permissionDenied:!0,preCompact:!0,sessionEnd:!0,preModelSwitch:!0,timeout:5e3,continueOnError:!0},DEFAULT_SKILLS={core:!0},DEFAULT_COMMANDS={core:!0},DEFAULT_AGENTS={core:!0},DEFAULT_MCP={weave:!1,autoStart:!1};export function resolveComponents(t,o){const n=t==="minimal"?MINIMAL_COMPONENTS:t==="full"?FULL_COMPONENTS:DEFAULT_COMPONENTS;return o?{...n,...o}:{...n}}
@@ -1 +1 @@
1
- import{mkdir as i,readFile as e,writeFile as n,stat as s}from"node:fs/promises";import c from"node:path";export async function ensureDir(t){await i(t,{recursive:!0})}export async function writeFileIfAbsent(t,r,a){try{if(await e(t,"utf-8"),!a)return!1}catch{}return await ensureDir(c.dirname(t)),await n(t,r,"utf-8"),!0}export async function fileExists(t){try{return await s(t),!0}catch{return!1}}
1
+ import{mkdir as i,readFile as a,writeFile as n,stat as u}from"node:fs/promises";import c from"node:path";export async function ensureDir(t){await i(t,{recursive:!0})}export async function writeFileIfAbsent(t,r,e){try{if(await a(t,"utf-8"),!e)return!1}catch{}return await ensureDir(c.dirname(t)),await n(t,r,"utf-8"),!0}export async function fileExists(t){try{return await u(t),!0}catch{return!1}}
@@ -1,2 +1,2 @@
1
- const l={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",cyan:"\x1B[36m"};function o(e,n){return process.env.NO_COLOR?e:`${l[n]}${e}${l.reset}`}export const logger={info(e){console.log(o(e,"cyan"))},success(e){console.log(o(e,"green"))},warn(e){console.log(o(e,"yellow"))},error(e){console.error(o(e,"red"))},dim(e){console.log(o(e,"dim"))}};export function formatTable(e){const n=Math.max(...e.map(([r])=>r.length));return e.map(([r,c])=>` ${r.padEnd(n+2)}${c}`).join(`
1
+ const l={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",cyan:"\x1B[36m"};function e(o,n){return process.env.NO_COLOR?o:`${l[n]}${o}${l.reset}`}export const logger={info(o){console.log(e(o,"cyan"))},success(o){console.log(e(o,"green"))},warn(o){console.log(e(o,"yellow"))},error(o){console.error(e(o,"red"))},dim(o){console.log(e(o,"dim"))}};export function formatTable(o){const n=Math.max(...o.map(([r])=>r.length));return o.map(([r,c])=>` ${r.padEnd(n+2)}${c}`).join(`
2
2
  `)}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weavecode/core",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Core types, schemas, and utilities for weave",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,4 +1,4 @@
1
- import{readFile as j,writeFile as u}from"node:fs/promises";import c from"node:path";import{FILE_ASSET_SPECS as m}from"../shared/file-specs.js";const l=".mcp.json",p=".claude.json";export class ClaudeJsonCorruptError extends Error{constructor(r){super(r),this.name="ClaudeJsonCorruptError"}}function f(e){if(!e||e.includes("/")||e.includes("\\")||e.includes(".."))throw new Error(`Invalid asset name: "${e}"`)}async function d(e){try{const r=JSON.parse(await j(e,"utf-8"));return r&&typeof r=="object"?r:{}}catch{return{}}}export async function readClaudeJson(e){const r=c.join(e,p);let o;try{o=await j(r,"utf-8")}catch{return{}}let t;try{t=JSON.parse(o)}catch(s){throw new ClaudeJsonCorruptError(`~/.claude.json is not valid JSON \u2014 refusing to write: ${s instanceof Error?s.message:String(s)}`)}if(!t||typeof t!="object"||Array.isArray(t))throw new ClaudeJsonCorruptError("~/.claude.json is not a JSON object \u2014 refusing to write");return t}export const CLAUDE_ASSETS={harness:"claude",targetDir(e,r,o,t){const s=m[e].dirs.claude;if(r==="user"){if(!s?.user)throw new Error(`"${e}" is project-scoped only (no user-level directory)`);return c.join(t,...s.user.split("/"))}if(!s?.project)throw new Error(`"${e}" has no Claude project surface`);return c.join(o,...s.project.split("/"))},projectSkillsRoots:()=>[".claude/skills"],globalSkillsRoots:e=>[c.join(e,...".claude/skills".split("/"))],userConfigFile:e=>c.join(e,".claude","settings.json"),mcpScopes:()=>["project","user"],mcpDest:(e,r)=>e==="project"?".mcp.json":c.join(r,".claude.json"),pluginCacheDir:e=>c.join(e,".claude","plugins","cache"),async mcpRead(e,r,o){if(e==="project")return(await d(c.join(r,l))).mcpServers??{};const t=(await readClaudeJson(o)).mcpServers;return!t||typeof t!="object"||Array.isArray(t)?{}:t},async mcpWrite(e,r,o,t,s){if(f(t),e==="project"){const a=c.join(r,l),i=await d(a);i.mcpServers={...i.mcpServers??{},[t]:s},await u(a,`${JSON.stringify(i,null,2)}
2
- `,"utf-8");return}const n=await readClaudeJson(o);n.mcpServers={...n.mcpServers??{},[t]:s},await u(c.join(o,p),`${JSON.stringify(n,null,2)}
3
- `,"utf-8")},async mcpRemove(e,r,o,t){f(t);const s=e==="project"?c.join(r,l):c.join(o,p),n=e==="project"?await d(s):await readClaudeJson(o),a=n.mcpServers??{};return t in a?(delete a[t],n.mcpServers=a,await u(s,`${JSON.stringify(n,null,2)}
4
- `,"utf-8"),!0):!1},classify(e){return e===".claude"||e.startsWith(".claude/")||e===".mcp.json"?!0:e.slice(e.lastIndexOf("/")+1)==="CLAUDE.md"},ignore(e){return e===".claude"||e.startsWith(".claude/")?e===".claude/projects"||e.startsWith(".claude/projects/")||e===".claude/cache"||e.startsWith(".claude/cache/"):e!==".mcp.json"&&e!=="CLAUDE.md"}};
1
+ import{readFile as d,writeFile as u}from"node:fs/promises";import n from"node:path";import{FILE_ASSET_SPECS as S}from"../shared/file-specs.js";const l=".mcp.json",p=".claude.json";export class ClaudeJsonCorruptError extends Error{constructor(t){super(t),this.name="ClaudeJsonCorruptError"}}function f(r){if(!r||r.includes("/")||r.includes("\\")||r.includes(".."))throw new Error(`Invalid asset name: "${r}"`)}async function j(r){try{const t=JSON.parse(await d(r,"utf-8"));return t&&typeof t=="object"?t:{}}catch{return{}}}export async function readClaudeJson(r){const t=n.join(r,p);let o;try{o=await d(t,"utf-8")}catch{return{}}let e;try{e=JSON.parse(o)}catch(s){throw new ClaudeJsonCorruptError(`~/.claude.json is not valid JSON \u2014 refusing to write: ${s instanceof Error?s.message:String(s)}`)}if(!e||typeof e!="object"||Array.isArray(e))throw new ClaudeJsonCorruptError("~/.claude.json is not a JSON object \u2014 refusing to write");return e}export const CLAUDE_ASSETS={harness:"claude",targetDir(r,t,o,e){const s=S[r].dirs.claude;if(t==="user"){if(!s?.user)throw new Error(`"${r}" is project-scoped only (no user-level directory)`);return n.join(e,...s.user.split("/"))}if(!s?.project)throw new Error(`"${r}" has no Claude project surface`);return n.join(o,...s.project.split("/"))},projectSkillsRoots:()=>[".claude/skills"],globalSkillsRoots:r=>[n.join(r,...".claude/skills".split("/"))],userConfigFile:r=>n.join(r,".claude","settings.json"),mcpScopes:()=>["project","user"],mcpDest:(r,t)=>r==="project"?".mcp.json":n.join(t,".claude.json"),pluginCacheDir:r=>n.join(r,".claude","plugins","cache"),async mcpRead(r,t,o){if(r==="project")return(await j(n.join(t,l))).mcpServers??{};const e=(await readClaudeJson(o)).mcpServers;return!e||typeof e!="object"||Array.isArray(e)?{}:e},async mcpWrite(r,t,o,e,s){if(f(e),r==="project"){const i=n.join(t,l),a=await j(i);a.mcpServers={...a.mcpServers??{},[e]:s},await u(i,`${JSON.stringify(a,null,2)}
2
+ `,"utf-8");return}const c=await readClaudeJson(o);c.mcpServers={...c.mcpServers??{},[e]:s},await u(n.join(o,p),`${JSON.stringify(c,null,2)}
3
+ `,"utf-8")},async mcpRemove(r,t,o,e){f(e);const s=r==="project"?n.join(t,l):n.join(o,p),c=r==="project"?await j(s):await readClaudeJson(o),i=c.mcpServers??{};return e in i?(delete i[e],c.mcpServers=i,await u(s,`${JSON.stringify(c,null,2)}
4
+ `,"utf-8"),!0):!1},classify(r){return r===".claude"||r.startsWith(".claude/")||r===".mcp.json"?!0:r.slice(r.lastIndexOf("/")+1)==="CLAUDE.md"},ignore(r){return r===".claude"||r.startsWith(".claude/")?r===".claude/projects"||r.startsWith(".claude/projects/")||r===".claude/cache"||r.startsWith(".claude/cache/"):r!==".mcp.json"&&r!=="CLAUDE.md"}};