@weavecode/weave 0.1.6 → 0.1.7

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 (340) hide show
  1. package/node_modules/@weavecode/cli/dist/cli.js +3 -3
  2. package/node_modules/@weavecode/cli/dist/commands/chpass.js +1 -1
  3. package/node_modules/@weavecode/cli/dist/commands/daemon-auth.js +1 -1
  4. package/node_modules/@weavecode/cli/dist/commands/daemon.js +2 -2
  5. package/node_modules/@weavecode/cli/dist/commands/dashboard.js +2 -2
  6. package/node_modules/@weavecode/cli/dist/commands/doctor.js +1 -1
  7. package/node_modules/@weavecode/cli/dist/commands/init.js +1 -1
  8. package/node_modules/@weavecode/cli/dist/commands/msg.js +2 -2
  9. package/node_modules/@weavecode/cli/dist/commands/scan.js +1 -1
  10. package/node_modules/@weavecode/cli/dist/commands/status.js +2 -2
  11. package/node_modules/@weavecode/cli/dist/commands/uninstall.js +1 -1
  12. package/node_modules/@weavecode/cli/dist/i18n/dict/en.js +1 -1
  13. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +1 -0
  14. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +2 -2
  15. package/node_modules/@weavecode/cli/dist/i18n/index.js +1 -1
  16. package/node_modules/@weavecode/cli/dist/i18n/t.js +1 -1
  17. package/node_modules/@weavecode/cli/dist/init/claudemd-gen.js +3 -3
  18. package/node_modules/@weavecode/cli/dist/init/executor.js +3 -3
  19. package/node_modules/@weavecode/cli/dist/init/git-commit.js +2 -2
  20. package/node_modules/@weavecode/cli/dist/init/harnesses/claude.js +7 -7
  21. package/node_modules/@weavecode/cli/dist/init/harnesses/codex.js +1 -1
  22. package/node_modules/@weavecode/cli/dist/init/instruction-link.js +1 -1
  23. package/node_modules/@weavecode/cli/dist/init/plugin-templates.js +1 -1
  24. package/node_modules/@weavecode/cli/dist/init/prompt.js +4 -4
  25. package/node_modules/@weavecode/cli/dist/init/provision.js +1 -1
  26. package/node_modules/@weavecode/cli/dist/init/uninstall.js +6 -6
  27. package/node_modules/@weavecode/cli/dist/init/wiring.js +1 -1
  28. package/node_modules/@weavecode/cli/dist/parser.js +1 -1
  29. package/node_modules/@weavecode/cli/dist/statusline/ansi.js +1 -1
  30. package/node_modules/@weavecode/cli/dist/statusline/mock-input.js +1 -1
  31. package/node_modules/@weavecode/cli/dist/statusline/preview.js +2 -2
  32. package/node_modules/@weavecode/cli/package.json +5 -5
  33. package/node_modules/@weavecode/core/dist/harness-checks.js +1 -1
  34. package/node_modules/@weavecode/core/dist/harness.d.ts +11 -0
  35. package/node_modules/@weavecode/core/dist/harness.js +1 -1
  36. package/node_modules/@weavecode/core/dist/platform.js +1 -1
  37. package/node_modules/@weavecode/core/dist/types.js +1 -1
  38. package/node_modules/@weavecode/core/dist/utils/fs.js +1 -1
  39. package/node_modules/@weavecode/core/dist/utils/logger.js +1 -1
  40. package/node_modules/@weavecode/core/package.json +1 -1
  41. package/node_modules/@weavecode/harness/dist/claude/assets.js +4 -4
  42. package/node_modules/@weavecode/harness/dist/claude/capture.js +9 -9
  43. package/node_modules/@weavecode/harness/dist/claude/commands.js +2 -2
  44. package/node_modules/@weavecode/harness/dist/claude/config.js +2 -2
  45. package/node_modules/@weavecode/harness/dist/claude/detect.js +1 -1
  46. package/node_modules/@weavecode/harness/dist/claude/edits.js +1 -1
  47. package/node_modules/@weavecode/harness/dist/claude/event-source.js +1 -1
  48. package/node_modules/@weavecode/harness/dist/claude/images.js +2 -2
  49. package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
  50. package/node_modules/@weavecode/harness/dist/claude/liveness.js +1 -1
  51. package/node_modules/@weavecode/harness/dist/claude/mcp-gen.js +1 -1
  52. package/node_modules/@weavecode/harness/dist/claude/messaging.js +2 -2
  53. package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -1
  54. package/node_modules/@weavecode/harness/dist/claude/narration.js +1 -1
  55. package/node_modules/@weavecode/harness/dist/claude/peers.js +1 -1
  56. package/node_modules/@weavecode/harness/dist/claude/plan.js +1 -1
  57. package/node_modules/@weavecode/harness/dist/claude/plugins.js +4 -4
  58. package/node_modules/@weavecode/harness/dist/claude/prompt-inbox.js +1 -1
  59. package/node_modules/@weavecode/harness/dist/claude/prompt.js +3 -3
  60. package/node_modules/@weavecode/harness/dist/claude/questions.js +2 -2
  61. package/node_modules/@weavecode/harness/dist/claude/resume.js +1 -1
  62. package/node_modules/@weavecode/harness/dist/claude/rewind.js +1 -1
  63. package/node_modules/@weavecode/harness/dist/claude/settings-gen.js +1 -1
  64. package/node_modules/@weavecode/harness/dist/claude/side-question.js +2 -2
  65. package/node_modules/@weavecode/harness/dist/claude/statusline/generator.js +14 -14
  66. package/node_modules/@weavecode/harness/dist/claude/statusline/git-cache.js +1 -1
  67. package/node_modules/@weavecode/harness/dist/claude/statusline/surface.js +2 -2
  68. package/node_modules/@weavecode/harness/dist/claude/transcript-cursor.js +2 -2
  69. package/node_modules/@weavecode/harness/dist/claude/transcript.js +7 -7
  70. package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
  71. package/node_modules/@weavecode/harness/dist/codex/capture.js +2 -2
  72. package/node_modules/@weavecode/harness/dist/codex/commands.js +4 -4
  73. package/node_modules/@weavecode/harness/dist/codex/config.js +2 -2
  74. package/node_modules/@weavecode/harness/dist/codex/detect.js +1 -1
  75. package/node_modules/@weavecode/harness/dist/codex/event-source.js +2 -2
  76. package/node_modules/@weavecode/harness/dist/codex/images.js +1 -1
  77. package/node_modules/@weavecode/harness/dist/codex/index.js +1 -1
  78. package/node_modules/@weavecode/harness/dist/codex/liveness.js +1 -1
  79. package/node_modules/@weavecode/harness/dist/codex/mcp.js +1 -1
  80. package/node_modules/@weavecode/harness/dist/codex/messaging.js +2 -2
  81. package/node_modules/@weavecode/harness/dist/codex/narration.js +1 -1
  82. package/node_modules/@weavecode/harness/dist/codex/plugin-state.js +1 -1
  83. package/node_modules/@weavecode/harness/dist/codex/plugins.js +3 -3
  84. package/node_modules/@weavecode/harness/dist/codex/provision.js +1 -1
  85. package/node_modules/@weavecode/harness/dist/codex/questions.js +2 -2
  86. package/node_modules/@weavecode/harness/dist/codex/rollout.js +5 -5
  87. package/node_modules/@weavecode/harness/dist/codex/side-question.js +4 -4
  88. package/node_modules/@weavecode/harness/dist/codex/titles.js +4 -4
  89. package/node_modules/@weavecode/harness/dist/codex/toml.js +13 -13
  90. package/node_modules/@weavecode/harness/dist/codex/transcript.js +2 -2
  91. package/node_modules/@weavecode/harness/dist/driver.d.ts +7 -0
  92. package/node_modules/@weavecode/harness/dist/driver.js +1 -1
  93. package/node_modules/@weavecode/harness/dist/init/generated.js +2 -2
  94. package/node_modules/@weavecode/harness/dist/init/pipeline.js +1 -1
  95. package/node_modules/@weavecode/harness/dist/registry-wiring.js +1 -1
  96. package/node_modules/@weavecode/harness/dist/shared/install-link.js +1 -1
  97. package/node_modules/@weavecode/harness/dist/shared/json-cap.js +1 -1
  98. package/node_modules/@weavecode/harness/dist/zcode/assets.js +1 -1
  99. package/node_modules/@weavecode/harness/dist/zcode/capture.js +3 -3
  100. package/node_modules/@weavecode/harness/dist/zcode/mcp.js +2 -2
  101. package/node_modules/@weavecode/harness/package.json +2 -2
  102. package/node_modules/@weavecode/server/dist/config/dotted.js +1 -1
  103. package/node_modules/@weavecode/server/dist/config/profiles.js +2 -2
  104. package/node_modules/@weavecode/server/dist/daemon/ai-config.js +2 -2
  105. package/node_modules/@weavecode/server/dist/daemon/ai-context.js +6 -6
  106. package/node_modules/@weavecode/server/dist/daemon/ai-routes.js +4 -4
  107. package/node_modules/@weavecode/server/dist/daemon/api-log.js +3 -3
  108. package/node_modules/@weavecode/server/dist/daemon/auth-routes.js +1 -1
  109. package/node_modules/@weavecode/server/dist/daemon/auto-start.js +6 -6
  110. package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
  111. package/node_modules/@weavecode/server/dist/daemon/config-routes.js +1 -1
  112. package/node_modules/@weavecode/server/dist/daemon/cron.js +1 -1
  113. package/node_modules/@weavecode/server/dist/daemon/dashboard-auth.js +2 -2
  114. package/node_modules/@weavecode/server/dist/daemon/dashboard-pusher.js +1 -1
  115. package/node_modules/@weavecode/server/dist/daemon/data-bus.js +1 -1
  116. package/node_modules/@weavecode/server/dist/daemon/decision-config.js +2 -2
  117. package/node_modules/@weavecode/server/dist/daemon/dev-entry.js +1 -1
  118. package/node_modules/@weavecode/server/dist/daemon/entry.js +2 -2
  119. package/node_modules/@weavecode/server/dist/daemon/fs-browser.js +1 -1
  120. package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.js +1 -1
  121. package/node_modules/@weavecode/server/dist/daemon/hooks-routes.js +1 -1
  122. package/node_modules/@weavecode/server/dist/daemon/http.js +1 -1
  123. package/node_modules/@weavecode/server/dist/daemon/liveness.js +1 -1
  124. package/node_modules/@weavecode/server/dist/daemon/mcp-orchestration.js +1 -1
  125. package/node_modules/@weavecode/server/dist/daemon/narration-watcher.js +2 -2
  126. package/node_modules/@weavecode/server/dist/daemon/opener/backend-ghostty.js +1 -1
  127. package/node_modules/@weavecode/server/dist/daemon/opener/backend-iterm.js +1 -1
  128. package/node_modules/@weavecode/server/dist/daemon/opener/backend-konsole.js +2 -2
  129. package/node_modules/@weavecode/server/dist/daemon/opener/backend-terminal-app.js +1 -1
  130. package/node_modules/@weavecode/server/dist/daemon/opener/backend-wezterm.js +1 -1
  131. package/node_modules/@weavecode/server/dist/daemon/opener/backend-wt.js +1 -1
  132. package/node_modules/@weavecode/server/dist/daemon/opener/backend.js +1 -1
  133. package/node_modules/@weavecode/server/dist/daemon/opener/launch.js +1 -1
  134. package/node_modules/@weavecode/server/dist/daemon/opener/pty-terminals.js +4 -4
  135. package/node_modules/@weavecode/server/dist/daemon/opener/shared.js +1 -1
  136. package/node_modules/@weavecode/server/dist/daemon/opener/wezterm-mux.js +1 -1
  137. package/node_modules/@weavecode/server/dist/daemon/opener/wt.js +3 -3
  138. package/node_modules/@weavecode/server/dist/daemon/opener.js +1 -1
  139. package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
  140. package/node_modules/@weavecode/server/dist/daemon/project-files.js +2 -2
  141. package/node_modules/@weavecode/server/dist/daemon/project-harnesses.js +2 -2
  142. package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.js +1 -1
  143. package/node_modules/@weavecode/server/dist/daemon/prompt-images.js +1 -1
  144. package/node_modules/@weavecode/server/dist/daemon/routes/hooks-admin.js +1 -1
  145. package/node_modules/@weavecode/server/dist/daemon/routes/market.js +1 -1
  146. package/node_modules/@weavecode/server/dist/daemon/routes/orchestration.js +1 -1
  147. package/node_modules/@weavecode/server/dist/daemon/routes/path-refs.js +1 -1
  148. package/node_modules/@weavecode/server/dist/daemon/routes/project-files.js +1 -1
  149. package/node_modules/@weavecode/server/dist/daemon/routes/projects.js +1 -1
  150. package/node_modules/@weavecode/server/dist/daemon/routes/search.js +1 -1
  151. package/node_modules/@weavecode/server/dist/daemon/routes/session-control.js +1 -1
  152. package/node_modules/@weavecode/server/dist/daemon/routes/session-insights.js +1 -1
  153. package/node_modules/@weavecode/server/dist/daemon/routes/settings-statusline.js +1 -1
  154. package/node_modules/@weavecode/server/dist/daemon/routes/uploads.js +1 -1
  155. package/node_modules/@weavecode/server/dist/daemon/routes/visualizations.js +1 -1
  156. package/node_modules/@weavecode/server/dist/daemon/routes/watches.js +1 -1
  157. package/node_modules/@weavecode/server/dist/daemon/server.js +8 -8
  158. package/node_modules/@weavecode/server/dist/daemon/session-open.d.ts +17 -0
  159. package/node_modules/@weavecode/server/dist/daemon/session-open.js +1 -1
  160. package/node_modules/@weavecode/server/dist/daemon/session-probe.js +1 -1
  161. package/node_modules/@weavecode/server/dist/daemon/settings.js +2 -2
  162. package/node_modules/@weavecode/server/dist/daemon/snapshot-refresher.js +1 -1
  163. package/node_modules/@weavecode/server/dist/daemon/sse-hub.js +1 -1
  164. package/node_modules/@weavecode/server/dist/daemon/start.js +1 -1
  165. package/node_modules/@weavecode/server/dist/daemon/state.js +2 -2
  166. package/node_modules/@weavecode/server/dist/daemon/static.js +1 -1
  167. package/node_modules/@weavecode/server/dist/daemon/terminal-topology-refresher.js +1 -1
  168. package/node_modules/@weavecode/server/dist/daemon/tls.js +1 -1
  169. package/node_modules/@weavecode/server/dist/daemon/toolkit-routes.js +1 -1
  170. package/node_modules/@weavecode/server/dist/daemon/upload-sessions.js +1 -1
  171. package/node_modules/@weavecode/server/dist/db/db.js +2 -2
  172. package/node_modules/@weavecode/server/dist/db/layout.js +1 -1
  173. package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
  174. package/node_modules/@weavecode/server/dist/hooks/bus.js +1 -1
  175. package/node_modules/@weavecode/server/dist/hooks/dashboard-rate.js +1 -1
  176. package/node_modules/@weavecode/server/dist/hooks/decision-judge.js +1 -1
  177. package/node_modules/@weavecode/server/dist/hooks/delivery/ack-gate.js +1 -1
  178. package/node_modules/@weavecode/server/dist/hooks/delivery/channels.js +1 -1
  179. package/node_modules/@weavecode/server/dist/hooks/delivery/keys.js +1 -1
  180. package/node_modules/@weavecode/server/dist/hooks/delivery/queue.js +1 -1
  181. package/node_modules/@weavecode/server/dist/hooks/delivery/relay.js +1 -1
  182. package/node_modules/@weavecode/server/dist/hooks/delivery/send.js +2 -2
  183. package/node_modules/@weavecode/server/dist/hooks/delivery/views.d.ts +3 -1
  184. package/node_modules/@weavecode/server/dist/hooks/delivery/views.js +1 -1
  185. package/node_modules/@weavecode/server/dist/hooks/dispatcher.js +6 -6
  186. package/node_modules/@weavecode/server/dist/hooks/edge-extract.js +1 -1
  187. package/node_modules/@weavecode/server/dist/hooks/handlers/webhook.js +1 -1
  188. package/node_modules/@weavecode/server/dist/hooks/headless-runner.js +2 -2
  189. package/node_modules/@weavecode/server/dist/hooks/inbox-socket.js +2 -2
  190. package/node_modules/@weavecode/server/dist/hooks/inbox-worker.js +3 -3
  191. package/node_modules/@weavecode/server/dist/hooks/match.js +1 -1
  192. package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +5 -5
  193. package/node_modules/@weavecode/server/dist/hooks/mirror.js +4 -4
  194. package/node_modules/@weavecode/server/dist/hooks/orchestration-engine.js +7 -7
  195. package/node_modules/@weavecode/server/dist/hooks/orchestration-graph.js +1 -1
  196. package/node_modules/@weavecode/server/dist/hooks/plugin-installer.js +3 -3
  197. package/node_modules/@weavecode/server/dist/hooks/plugin-loader.js +1 -1
  198. package/node_modules/@weavecode/server/dist/hooks/plugin-project-state.js +1 -1
  199. package/node_modules/@weavecode/server/dist/hooks/prompt-flusher.js +1 -1
  200. package/node_modules/@weavecode/server/dist/hooks/promptbox.js +8 -8
  201. package/node_modules/@weavecode/server/dist/hooks/push-notify.js +2 -2
  202. package/node_modules/@weavecode/server/dist/hooks/question-tracker.js +1 -1
  203. package/node_modules/@weavecode/server/dist/hooks/registry.js +1 -1
  204. package/node_modules/@weavecode/server/dist/hooks/resume-runner.js +1 -1
  205. package/node_modules/@weavecode/server/dist/hooks/session-purge.js +1 -1
  206. package/node_modules/@weavecode/server/dist/hooks/side-questions.js +1 -1
  207. package/node_modules/@weavecode/server/dist/hooks/synthetic-sessions.js +1 -1
  208. package/node_modules/@weavecode/server/dist/hooks/toolkit-scan.js +1 -1
  209. package/node_modules/@weavecode/server/dist/hooks/toolkit.js +5 -5
  210. package/node_modules/@weavecode/server/dist/hooks/watch-engine.js +1 -1
  211. package/node_modules/@weavecode/server/dist/install/apply-update.js +1 -1
  212. package/node_modules/@weavecode/server/dist/install/capabilities.js +1 -1
  213. package/node_modules/@weavecode/server/dist/install/codex-toml.js +1 -1
  214. package/node_modules/@weavecode/server/dist/install/file-assets.js +1 -1
  215. package/node_modules/@weavecode/server/dist/install/fingerprint.js +1 -1
  216. package/node_modules/@weavecode/server/dist/install/global-config.js +1 -1
  217. package/node_modules/@weavecode/server/dist/install/global-file-assets.js +1 -1
  218. package/node_modules/@weavecode/server/dist/install/init-files.js +2 -2
  219. package/node_modules/@weavecode/server/dist/install/install-ledger.js +1 -1
  220. package/node_modules/@weavecode/server/dist/install/installer.js +1 -1
  221. package/node_modules/@weavecode/server/dist/install/library-index.js +1 -1
  222. package/node_modules/@weavecode/server/dist/install/mcp-rows.js +1 -1
  223. package/node_modules/@weavecode/server/dist/install/plugin-install.js +1 -1
  224. package/node_modules/@weavecode/server/dist/install/plugin-rows.js +1 -1
  225. package/node_modules/@weavecode/server/dist/install/plugin-templates.js +1 -1
  226. package/node_modules/@weavecode/server/dist/install/project-config.js +1 -1
  227. package/node_modules/@weavecode/server/dist/install/reader.js +1 -1
  228. package/node_modules/@weavecode/server/dist/install/scan-cache.js +1 -1
  229. package/node_modules/@weavecode/server/dist/install/scanner.js +1 -1
  230. package/node_modules/@weavecode/server/dist/install/settings-mcp.js +2 -2
  231. package/node_modules/@weavecode/server/dist/install/updates.js +1 -1
  232. package/node_modules/@weavecode/server/dist/market/builtin.js +1 -1
  233. package/node_modules/@weavecode/server/dist/market/identity.js +1 -1
  234. package/node_modules/@weavecode/server/dist/market/import.js +2 -2
  235. package/node_modules/@weavecode/server/dist/market/refresh.js +1 -1
  236. package/node_modules/@weavecode/server/dist/market/resolve.js +1 -1
  237. package/node_modules/@weavecode/server/dist/market/updates.js +1 -1
  238. package/node_modules/@weavecode/server/dist/registry.js +2 -2
  239. package/node_modules/@weavecode/server/dist/repositories/hook-dispatches.js +5 -5
  240. package/node_modules/@weavecode/server/dist/repositories/hook-events.js +4 -4
  241. package/node_modules/@weavecode/server/dist/repositories/hook-rules.js +4 -4
  242. package/node_modules/@weavecode/server/dist/repositories/libraries.js +1 -1
  243. package/node_modules/@weavecode/server/dist/repositories/orchestrations.js +7 -7
  244. package/node_modules/@weavecode/server/dist/repositories/plugin-states.js +1 -1
  245. package/node_modules/@weavecode/server/dist/repositories/projects.js +2 -2
  246. package/node_modules/@weavecode/server/dist/repositories/push-subscriptions.js +2 -2
  247. package/node_modules/@weavecode/server/dist/repositories/session-watches.js +4 -4
  248. package/node_modules/@weavecode/server/dist/repositories/sessions.js +2 -2
  249. package/node_modules/@weavecode/server/dist/repositories/uploads.js +11 -11
  250. package/node_modules/@weavecode/server/dist/statusline/cache-sweeper.js +1 -1
  251. package/node_modules/@weavecode/server/dist/statusline/generator.js +1 -1
  252. package/node_modules/@weavecode/server/dist/statusline/manager.js +3 -3
  253. package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
  254. package/node_modules/@weavecode/server/dist/watch/cache.js +1 -1
  255. package/node_modules/@weavecode/server/dist/watch/classifier.js +1 -1
  256. package/node_modules/@weavecode/server/dist/watch/plugin-mods.js +1 -1
  257. package/node_modules/@weavecode/server/dist/watch/sync-scheduler.js +1 -1
  258. package/node_modules/@weavecode/server/dist/watch/watch-service.js +1 -1
  259. package/node_modules/@weavecode/server/package.json +4 -4
  260. package/node_modules/@weavecode/server/web/dist/assets/{abnfDiagram-WEYOIA3C-CbIFQh0R.js → abnfDiagram-WEYOIA3C-DDeQkTf5.js} +1 -1
  261. package/node_modules/@weavecode/server/web/dist/assets/{arc-DH8-rYAa.js → arc-CRZTRyjb.js} +1 -1
  262. package/node_modules/@weavecode/server/web/dist/assets/{architectureDiagram-ZHVYKT53-qnv6S0sc.js → architectureDiagram-ZHVYKT53-Dj54DE3O.js} +1 -1
  263. package/node_modules/@weavecode/server/web/dist/assets/{blockDiagram-RJAE7QA3-pT5eO-cB.js → blockDiagram-RJAE7QA3-BIH8mSIZ.js} +1 -1
  264. package/node_modules/@weavecode/server/web/dist/assets/{c4Diagram-XDPPPE54-DHDBDMb1.js → c4Diagram-XDPPPE54-5YoKWFOD.js} +1 -1
  265. package/node_modules/@weavecode/server/web/dist/assets/channel-5VM93AJ8.js +1 -0
  266. package/node_modules/@weavecode/server/web/dist/assets/{chunk-2E7WHVMD-CT951PH5.js → chunk-2E7WHVMD-B653kMXt.js} +1 -1
  267. package/node_modules/@weavecode/server/web/dist/assets/{chunk-2Q5K7J3B-E5AD7_ZY.js → chunk-2Q5K7J3B-f_A4_eDz.js} +1 -1
  268. package/node_modules/@weavecode/server/web/dist/assets/{chunk-4EMNKR2T-DWz9qkcy.js → chunk-4EMNKR2T-v5j5qNGj.js} +1 -1
  269. package/node_modules/@weavecode/server/web/dist/assets/{chunk-55XCU76K-D-SgWD8w.js → chunk-55XCU76K-CgEqeP7j.js} +1 -1
  270. package/node_modules/@weavecode/server/web/dist/assets/{chunk-5VM5RSS4-ci6YzbO5.js → chunk-5VM5RSS4-BeROhLXN.js} +1 -1
  271. package/node_modules/@weavecode/server/web/dist/assets/{chunk-JWPE2WC7-CY4mr2f4.js → chunk-JWPE2WC7-D6dXb_jr.js} +1 -1
  272. package/node_modules/@weavecode/server/web/dist/assets/{chunk-VQ5W62QI-CON8zyg8.js → chunk-VQ5W62QI-CnHdSEMi.js} +1 -1
  273. package/node_modules/@weavecode/server/web/dist/assets/{chunk-XXDRQBXY-DXXXZ4pW.js → chunk-XXDRQBXY-BkG_e6PE.js} +1 -1
  274. package/node_modules/@weavecode/server/web/dist/assets/{chunk-ZCHMQSOR-CukvPvkM.js → chunk-ZCHMQSOR-DxR-fxzs.js} +2 -2
  275. package/node_modules/@weavecode/server/web/dist/assets/{classDiagram-v2-4MYWR3UA-GiWZ9xtF.js → classDiagram-v2-4MYWR3UA-DQe1b_k8.js} +1 -1
  276. package/node_modules/@weavecode/server/web/dist/assets/{cose-bilkent-JH36ORCC-D7aJ-akq.js → cose-bilkent-JH36ORCC-DThrA8S5.js} +1 -1
  277. package/node_modules/@weavecode/server/web/dist/assets/{cynefin-EF2NZ3EQ-9B__MaRM.js → cynefin-EF2NZ3EQ-OZotFKUu.js} +1 -1
  278. package/node_modules/@weavecode/server/web/dist/assets/{cynefinDiagram-WF24UDRP-B2ujZh2k.js → cynefinDiagram-WF24UDRP-DJjq2hfT.js} +1 -1
  279. package/node_modules/@weavecode/server/web/dist/assets/{dagre-NK4GIZVX-nHaB6IWf.js → dagre-NK4GIZVX-C2vH93HT.js} +1 -1
  280. package/node_modules/@weavecode/server/web/dist/assets/{diagram-CBK3MWTC-xKfjDvgr.js → diagram-CBK3MWTC-DrF_ScM-.js} +1 -1
  281. package/node_modules/@weavecode/server/web/dist/assets/{diagram-I5XIIV2D-BHT2-5mY.js → diagram-I5XIIV2D-D1qoUJ4t.js} +1 -1
  282. package/node_modules/@weavecode/server/web/dist/assets/{diagram-ODIL2UCW-CckywF4W.js → diagram-ODIL2UCW-D9A6W8oB.js} +1 -1
  283. package/node_modules/@weavecode/server/web/dist/assets/{diagram-PFBEJUXE-Dpjlc7Wh.js → diagram-PFBEJUXE-PeI-eyu2.js} +1 -1
  284. package/node_modules/@weavecode/server/web/dist/assets/{diagram-RJA3I4VV-M6WznOaW.js → diagram-RJA3I4VV-DITY0Rd8.js} +1 -1
  285. package/node_modules/@weavecode/server/web/dist/assets/{diagram-TYUNFSNR-DgRJ3zL1.js → diagram-TYUNFSNR-D5KieEw5.js} +1 -1
  286. package/node_modules/@weavecode/server/web/dist/assets/{ebnfDiagram-V4P3TTPT-BzzVN__a.js → ebnfDiagram-V4P3TTPT-DDylK-gz.js} +1 -1
  287. package/node_modules/@weavecode/server/web/dist/assets/{elk-QONTBCTQ-Ch6Gs9G9.js → elk-QONTBCTQ-D3xrVg0U.js} +1 -1
  288. package/node_modules/@weavecode/server/web/dist/assets/{erDiagram-KYQIGQAA-COxT-Pxb.js → erDiagram-KYQIGQAA-y_V1cor7.js} +1 -1
  289. package/node_modules/@weavecode/server/web/dist/assets/{flowDiagram-IUGLLWBU-CJVWnTBa.js → flowDiagram-IUGLLWBU-BJ8Z0MkF.js} +1 -1
  290. package/node_modules/@weavecode/server/web/dist/assets/{ganttDiagram-R7GPNTJY-BkRpWPUl.js → ganttDiagram-R7GPNTJY-C0q-CS1T.js} +1 -1
  291. package/node_modules/@weavecode/server/web/dist/assets/{gitGraphDiagram-PDYL7XHY-Ba8BJcvZ.js → gitGraphDiagram-PDYL7XHY-BYTComiB.js} +1 -1
  292. package/node_modules/@weavecode/server/web/dist/assets/index-BKxAxaVG.js +1091 -0
  293. package/node_modules/@weavecode/server/web/dist/assets/index-C0Sd4MH7.css +11 -0
  294. package/node_modules/@weavecode/server/web/dist/assets/{infoDiagram-MVDRKAX5-HTQ5FUNK.js → infoDiagram-MVDRKAX5-DtixgjLP.js} +1 -1
  295. package/node_modules/@weavecode/server/web/dist/assets/{ishikawaDiagram-HPEHV2GE-BNjEDIZy.js → ishikawaDiagram-HPEHV2GE-ChEnND76.js} +1 -1
  296. package/node_modules/@weavecode/server/web/dist/assets/{journeyDiagram-BOSHW7O7-Cao6h91a.js → journeyDiagram-BOSHW7O7-DHcNtpYF.js} +1 -1
  297. package/node_modules/@weavecode/server/web/dist/assets/{kanban-definition-FNSA4HC5-CXIx2CHQ.js → kanban-definition-FNSA4HC5-Dft7qpW5.js} +1 -1
  298. package/node_modules/@weavecode/server/web/dist/assets/{linear-65WmlvQb.js → linear-DEo11t-X.js} +1 -1
  299. package/node_modules/@weavecode/server/web/dist/assets/{mermaid.core-D39fi_iR.js → mermaid.core-D_Dp_Kl2.js} +4 -4
  300. package/node_modules/@weavecode/server/web/dist/assets/{mindmap-definition-6OY57UG3-DHqpz_AK.js → mindmap-definition-6OY57UG3-CM6OAd_-.js} +1 -1
  301. package/node_modules/@weavecode/server/web/dist/assets/{pegDiagram-ECIUJNBX-Cpy1nsER.js → pegDiagram-ECIUJNBX-_QkY0h8Q.js} +1 -1
  302. package/node_modules/@weavecode/server/web/dist/assets/{pieDiagram-GNMPY74T-B1IyNqzr.js → pieDiagram-GNMPY74T-ZGr5vtDj.js} +1 -1
  303. package/node_modules/@weavecode/server/web/dist/assets/{quadrantDiagram-D57K4MC3-zSM6o7mB.js → quadrantDiagram-D57K4MC3-D8pQ_PU2.js} +1 -1
  304. package/node_modules/@weavecode/server/web/dist/assets/{railroadDiagram-Y72NRBL7-oM4XJIwA.js → railroadDiagram-Y72NRBL7-DUIo-WmA.js} +1 -1
  305. package/node_modules/@weavecode/server/web/dist/assets/{requirementDiagram-EQYSW5RA-CbCLBjHf.js → requirementDiagram-EQYSW5RA-C90DU5Ny.js} +1 -1
  306. package/node_modules/@weavecode/server/web/dist/assets/{sankeyDiagram-SY24JHO5-BucVk6EP.js → sankeyDiagram-SY24JHO5-B_poYGgJ.js} +1 -1
  307. package/node_modules/@weavecode/server/web/dist/assets/{sequenceDiagram-BLEHNHQU-Dg8CYEnT.js → sequenceDiagram-BLEHNHQU-DDW7b2Dn.js} +1 -1
  308. package/node_modules/@weavecode/server/web/dist/assets/{sizeCapture-INFHLROL-C51zb7Oc.js → sizeCapture-INFHLROL-CmKoqX6K.js} +1 -1
  309. package/node_modules/@weavecode/server/web/dist/assets/{stateDiagram-v2-A6IESKWZ-BvK2l3is.js → stateDiagram-v2-A6IESKWZ-CkVMAyxG.js} +1 -1
  310. package/node_modules/@weavecode/server/web/dist/assets/{swimlanes-B3ENRKFQ-Ds7QOfXW.js → swimlanes-B3ENRKFQ-Dm_Omzky.js} +1 -1
  311. package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-Bjj8ZA4d.js +8 -0
  312. package/node_modules/@weavecode/server/web/dist/assets/{timeline-definition-JXYKGLGB-CadU4Qq4.js → timeline-definition-JXYKGLGB-DnhkRGLb.js} +1 -1
  313. package/node_modules/@weavecode/server/web/dist/assets/{usecaseDiagram-WPOLBNNX-BYuZwTDZ.js → usecaseDiagram-WPOLBNNX-_TdIjC6Z.js} +1 -1
  314. package/node_modules/@weavecode/server/web/dist/assets/{vennDiagram-Q3Y3IDCW-C7zgxe07.js → vennDiagram-Q3Y3IDCW-FzgsymXB.js} +1 -1
  315. package/node_modules/@weavecode/server/web/dist/assets/{wardleyDiagram-IVAIDKWA-DA4Otf4s.js → wardleyDiagram-IVAIDKWA-BwqimStC.js} +1 -1
  316. package/node_modules/@weavecode/server/web/dist/assets/{xychartDiagram-4URNHDU4-Bs5YGwMU.js → xychartDiagram-4URNHDU4-CFjjVPIV.js} +1 -1
  317. package/node_modules/@weavecode/server/web/dist/icons/apple-touch-icon.png +0 -0
  318. package/node_modules/@weavecode/server/web/dist/icons/icon-192.png +0 -0
  319. package/node_modules/@weavecode/server/web/dist/icons/icon-512.png +0 -0
  320. package/node_modules/@weavecode/server/web/dist/icons/icon-maskable-512.png +0 -0
  321. package/node_modules/@weavecode/server/web/dist/index.html +11 -2
  322. package/node_modules/@weavecode/server/web/dist/manifest.webmanifest +16 -0
  323. package/node_modules/@weavecode/templates/package.json +2 -2
  324. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/README.md +3 -8
  325. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/package.json +1 -1
  326. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.d.ts +4 -2
  327. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.es6.js +10 -1
  328. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.es6.mjs +10 -1
  329. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/tslib/tslib.js +10 -1
  330. package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/README.md +3 -8
  331. package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/package.json +1 -1
  332. package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.d.ts +4 -2
  333. package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.es6.js +10 -1
  334. package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.es6.mjs +10 -1
  335. package/node_modules/selfsigned/node_modules/pkijs/node_modules/tslib/tslib.js +10 -1
  336. package/package.json +6 -6
  337. package/node_modules/@weavecode/server/web/dist/assets/channel-BHPeeuzN.js +0 -1
  338. package/node_modules/@weavecode/server/web/dist/assets/index-CtifxEiF.css +0 -11
  339. package/node_modules/@weavecode/server/web/dist/assets/index-FwH9INgS.js +0 -1090
  340. package/node_modules/@weavecode/server/web/dist/assets/swimlanesDiagram-AYQRV4AK-ByBF02UJ.js +0 -8
@@ -1 +1 @@
1
- import{createReadStream as _}from"node:fs";import{createInterface as g}from"node:readline";const E=new Set(["Edit","Write","MultiEdit"]),n=t=>typeof t=="string"?t:null,p=t=>t&&typeof t=="object"?t:{};function w(t,e){if(t==="Write"){const r=n(e.content);return r===null?[]:[{before:"",after:r}]}if(t==="MultiEdit")return(Array.isArray(e.edits)?e.edits:[]).flatMap(r=>{const o=p(r),c=n(o.old_string),a=n(o.new_string);return c===null||a===null?[]:[{before:c,after:a}]});const i=n(e.old_string),s=n(e.new_string);return i===null||s===null?[]:[{before:i,after:s}]}export const CLAUDE_EDITS={async sessionEdits({transcriptPath:t}){if(!t)return null;const e=[],i=new Set,s=g({input:_(t,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const r of s){if(!r.includes('"tool_use"'))continue;let o;try{o=JSON.parse(r)}catch{continue}const c=o.message?.content;if(Array.isArray(c))for(const a of c){const f=p(a);if(f.type!=="tool_use")continue;const l=n(f.name);if(!l||!E.has(l))continue;const u=n(f.id);if(u){if(i.has(u))continue;i.add(u)}const d=p(f.input),y=n(d.file_path);if(!y)continue;const h=n(o.timestamp);for(const m of w(l,d))e.push({path:y,hunk:m,at:h})}}}catch{return null}finally{s.close()}return e}};
1
+ import{createReadStream as h}from"node:fs";import{createInterface as g}from"node:readline";const E=new Set(["Edit","Write","MultiEdit"]),n=t=>typeof t=="string"?t:null,d=t=>t&&typeof t=="object"?t:{};function w(t,e){if(t==="Write"){const r=n(e.content);return r===null?[]:[{before:"",after:r}]}if(t==="MultiEdit")return(Array.isArray(e.edits)?e.edits:[]).flatMap(c=>{const f=d(c),l=n(f.old_string),o=n(f.new_string);return l===null||o===null?[]:[{before:l,after:o}]});const s=n(e.old_string),i=n(e.new_string);return s===null||i===null?[]:[{before:s,after:i}]}export const CLAUDE_EDITS={async sessionEdits({transcriptPath:t}){if(!t)return null;const e=[],s=new Set,i=g({input:h(t,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const r of i){if(!r.includes('"tool_use"'))continue;let c;try{c=JSON.parse(r)}catch{continue}const f=c.message?.content;if(Array.isArray(f))for(const l of f){const o=d(l);if(o.type!=="tool_use")continue;const u=n(o.name);if(!u||!E.has(u))continue;const a=n(o.id);if(a){if(s.has(a))continue;s.add(a)}const y=d(o.input),p=n(y.file_path);if(!p)continue;const m=n(c.timestamp);for(const _ of w(u,y))e.push({path:p,hunk:_,at:m})}}}catch{return null}finally{i.close()}return e}};
@@ -1 +1 @@
1
- import{HARNESS_EVENTS as d}from"@weavecode/core";import{capFields as l}from"../shared/json-cap.js";import{CLAUDE_PLAN as y}from"./plan.js";function _(o){try{const t=JSON.parse(o);return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function c(o,...t){for(const e of t)if(o[e]!=null)return o[e];return null}const g=[["toolName",["tool_name","toolName"]],["toolInput",["tool_input","toolInput"]],["toolResponse",["tool_response","toolResponse"]],["cwd",["cwd"]],["transcriptPath",["transcript_path","transcriptPath"]]],m=/^<\$\.([A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*)>$/;function A(o,t,e){return typeof o!="string"?null:y.draftOf(o,t,e)?.text?{input:t,response:e}:null}function w(o){const t={...o};for(const[e,n]of g)for(const s of n)s in t&&(t[s]=`<$.${e}>`);return t}export function expandPayloadRefs(o){const t=o.raw;if(!t||typeof t!="object"||Array.isArray(t))return o;const e={...t};for(const[n,s]of Object.entries(e)){const a=typeof s=="string"?m.exec(s):null;a&&(e[n]=I(o,a[1]))}return{...o,raw:e}}function I(o,t){let e=o;for(const n of t.split(".")){if(!e||typeof e!="object")return null;e=e[n]}return e??null}export class ClaudeEventSource{source="claude";events=d.claude;normalize(t,e){const n=_(t.payload),s=t.eventType||String(n.hook_event_name??"unknown"),a=t.sessionId??c(n,"session_id","sessionId"),i=c(n,"tool_name","toolName"),r=c(n,"tool_input","toolInput"),p=c(n,"tool_response","toolResponse"),u=A(i,r,p),f={eventType:s,toolName:i,toolInput:u?.input??l(r),toolResponse:u?.response??l(p),cwd:t.cwd??c(n,"cwd"),transcriptPath:c(n,"transcript_path","transcriptPath"),raw:w(n)};return{projectId:e,source:"claude",eventType:s,sessionId:a??void 0,payload:JSON.stringify(f)}}}export const CLAUDE_EVENT_SOURCE=new ClaudeEventSource;export function frameFacts(o){const t=o?.raw,e=t&&typeof t=="object"&&typeof t.agent_id=="string"?t.agent_id:void 0;let n;if(o?.eventType==="PostToolUse"&&o.toolName==="Agent"){const r=o.toolResponse;r?.isAsync&&typeof r.agentId=="string"&&(n=r.agentId)}let s;Array.isArray(t&&typeof t=="object"?t.background_tasks:void 0)&&(s=t.background_tasks.filter(r=>r&&typeof r.id=="string"&&typeof r.status=="string").map(r=>({id:r.id,status:r.status})));const a={};e&&(a.agentId=e),n&&(a.spawnAgentId=n),s&&(a.backgroundTasks=s);const i=t&&typeof t=="object"&&typeof t.source=="string"?t.source:void 0;return i&&(a.rawSource=i),a}
1
+ import{HARNESS_EVENTS as d}from"@weavecode/core";import{capFields as p}from"../shared/json-cap.js";import{CLAUDE_PLAN as y}from"./plan.js";function g(o){try{const t=JSON.parse(o);return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}catch{return{}}}function a(o,...t){for(const n of t)if(o[n]!=null)return o[n];return null}const _=[["toolName",["tool_name","toolName"]],["toolInput",["tool_input","toolInput"]],["toolResponse",["tool_response","toolResponse"]],["cwd",["cwd"]],["transcriptPath",["transcript_path","transcriptPath"]]],m=/^<\$\.([A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*)>$/;function w(o,t,n){return typeof o!="string"?null:y.draftOf(o,t,n)?.text?{input:t,response:n}:null}function A(o){const t={...o};for(const[n,e]of _)for(const r of e)r in t&&(t[r]=`<$.${n}>`);return t}export function expandPayloadRefs(o){const t=o.raw;if(!t||typeof t!="object"||Array.isArray(t))return o;const n={...t};for(const[e,r]of Object.entries(n)){const c=typeof r=="string"?m.exec(r):null;c&&(n[e]=k(o,c[1]))}return{...o,raw:n}}function k(o,t){let n=o;for(const e of t.split(".")){if(!n||typeof n!="object")return null;n=n[e]}return n??null}export class ClaudeEventSource{source="claude";events=d.claude;normalize(t,n){const e=g(t.payload),r=t.eventType||String(e.hook_event_name??"unknown"),c=t.sessionId??a(e,"session_id","sessionId"),i=a(e,"tool_name","toolName"),s=a(e,"tool_input","toolInput"),u=a(e,"tool_response","toolResponse"),f=w(i,s,u),l={eventType:r,toolName:i,toolInput:f?.input??p(s),toolResponse:f?.response??p(u),cwd:t.cwd??a(e,"cwd"),transcriptPath:a(e,"transcript_path","transcriptPath"),raw:A(e)};return{projectId:n,source:"claude",eventType:r,sessionId:c??void 0,payload:JSON.stringify(l)}}}export const CLAUDE_EVENT_SOURCE=new ClaudeEventSource;export function frameFacts(o){const t=o?.raw,n=t&&typeof t=="object"&&typeof t.agent_id=="string"?t.agent_id:void 0;let e;if(o?.eventType==="PostToolUse"&&o.toolName==="Agent"){const s=o.toolResponse;s?.isAsync&&typeof s.agentId=="string"&&(e=s.agentId)}let r;Array.isArray(t&&typeof t=="object"?t.background_tasks:void 0)&&(r=t.background_tasks.filter(s=>s&&typeof s.id=="string"&&typeof s.status=="string").map(s=>({id:s.id,status:s.status})));const c={};n&&(c.agentId=n),e&&(c.spawnAgentId=e),r&&(c.backgroundTasks=r);const i=t&&typeof t=="object"&&typeof t.source=="string"?t.source:void 0;return i&&(c.rawSource=i),c}
@@ -1,2 +1,2 @@
1
- import{createReadStream as f}from"node:fs";import{createInterface as p}from"node:readline";const u=new Set(["image/png","image/jpeg","image/gif","image/webp"]),l=10*1024*1024,o=e=>e&&typeof e=="object"?e:{};function m(e){if(!Array.isArray(e))return[];const t=[];for(const s of e){const a=o(s);if(a.type!=="image")continue;const n=o(a.source),r=typeof n.media_type=="string"?n.media_type:null,i=typeof n.data=="string"?n.data:null;if(!r||!i||!u.has(r))continue;const c=Buffer.from(i,"base64");c.length===0||c.length>l||t.push({mediaType:r,bytes:c})}return t}function y(e){return Array.isArray(e)?e.map(o).filter(t=>t.type==="text"&&typeof t.text=="string").map(t=>t.text).join(`
2
- `):""}export const CLAUDE_IMAGES={async sessionImages({transcriptPath:e}){if(!e)return null;const t=[],s=p({input:f(e,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const a of s){if(!a.includes('"type":"image"'))continue;const n=JSON.parse(a);if(n.type!=="user"||n.toolUseResult!=null)continue;const r=o(n.message).content,i=m(r);i.length!==0&&t.push({text:y(r),at:typeof n.timestamp=="string"?n.timestamp:null,images:i})}}catch{return null}finally{s.close()}return t}};
1
+ import{createReadStream as f}from"node:fs";import{createInterface as u}from"node:readline";const l=new Set(["image/png","image/jpeg","image/gif","image/webp"]),m=10*1024*1024,a=t=>t&&typeof t=="object"?t:{};function p(t){if(!Array.isArray(t))return[];const e=[];for(const s of t){const i=a(s);if(i.type!=="image")continue;const n=a(i.source),o=typeof n.media_type=="string"?n.media_type:null,r=typeof n.data=="string"?n.data:null;if(!o||!r||!l.has(o))continue;const c=Buffer.from(r,"base64");c.length===0||c.length>m||e.push({mediaType:o,bytes:c})}return e}function y(t){return Array.isArray(t)?t.map(a).filter(e=>e.type==="text"&&typeof e.text=="string").map(e=>e.text).join(`
2
+ `):""}export const CLAUDE_IMAGES={async sessionImages({transcriptPath:t}){if(!t)return null;const e=[],s=u({input:f(t,{encoding:"utf8"}),crlfDelay:1/0});try{for await(const i of s){if(!i.includes('"type":"image"'))continue;const n=JSON.parse(i);if(n.type!=="user"||n.toolUseResult!=null)continue;const o=a(n.message).content,r=p(o);r.length!==0&&e.push({text:y(o),at:typeof n.timestamp=="string"?n.timestamp:null,images:r})}}catch{return null}finally{s.close()}return e}};
@@ -1 +1 @@
1
- import{CLAUDE_ASSETS as e}from"./assets.js";import{CLAUDE_CAPTURE as r}from"./capture.js";import{CLAUDE_EVENT_SOURCE as o}from"./event-source.js";import{CLAUDE_MESSAGING as t}from"./messaging.js";import{CLAUDE_PLUGINS as s}from"./plugins.js";import{CLAUDE_PLUGIN_STATE as a}from"./plugin-state.js";import{CLAUDE_BLOCKING_PROMPT as E}from"./questions.js";import{CLAUDE_RESUME as m}from"./resume.js";import{CLAUDE_DETECTOR as p}from"./detect.js";import{CLAUDE_STATUSLINE as A}from"./statusline/surface.js";import{CLAUDE_CONFIG as i}from"./config.js";import{CLAUDE_EDITS as C}from"./edits.js";import{CLAUDE_IMAGES as n}from"./images.js";import{CLAUDE_NARRATION as f}from"./narration.js";import{CLAUDE_COMMANDS as L}from"./commands.js";import{CLAUDE_LIVENESS as U}from"./liveness.js";import{CLAUDE_REWIND as _}from"./rewind.js";export{ClaudeEventSource,CLAUDE_EVENT_SOURCE,frameFacts,expandPayloadRefs}from"./event-source.js";export{CLAUDE_ASSETS,ClaudeJsonCorruptError,readClaudeJson}from"./assets.js";export{CLAUDE_PLUGINS,createClaudePluginSurface,WEAVE_MARKETPLACE}from"./plugins.js";export{CLAUDE_PLUGIN_STATE}from"./plugin-state.js";export{CLAUDE_RESUME}from"./resume.js";export{CLAUDE_DETECTOR}from"./detect.js";export{CLAUDE_MESSAGING}from"./messaging.js";export{CLAUDE_BLOCKING_PROMPT}from"./questions.js";export{CLAUDE_PROMPT_RELAY}from"./prompt.js";export{CLAUDE_PROMPT_INBOX}from"./prompt-inbox.js";export{CLAUDE_SIDE_QUESTION}from"./side-question.js";export{interruptMarkerAt,currentModelAt,currentModeAt,currentEffortAt,currentContextTokensAt,preQuestionTextAt}from"./transcript.js";export{CLAUDE_EDITS}from"./edits.js";export{CLAUDE_IMAGES}from"./images.js";export{CLAUDE_NARRATION}from"./narration.js";export{CLAUDE_REWIND,parseRewindLine}from"./rewind.js";export{CLAUDE_COMMANDS,commandExecutions}from"./commands.js";export{CLAUDE_LIVENESS,claudeLivenessById,parseClaudeSessionReg,pidAlive,pidAliveOf,shellDiscardedByClaude,CLAUDE_REG_GRACE_MS}from"./liveness.js";export{modelAliasTargets,aliasOfModel,bareModelName,defaultModelOf,startedModelOf,switchedModelOf,effortLevelOf,permissionModeOf}from"./model-aliases.js";export{resolveClaudePeer}from"./peers.js";export{CLAUDE_CAPTURE,generateHookHandler,captureHookGroup,sweepWeaveHookEvents,groupIsWeave,captureGroupsPresent,readUserCapture,installUserCapture,uninstallUserCapture,stripProjectCapture,HOOK_HANDLER_MARKER}from"./capture.js";export{generateSettingsJson,mergeSettingsJson,stripWeaveSettings}from"./settings-gen.js";export{generateMcpJson,mergeMcpJson,stripWeaveMcp}from"./mcp-gen.js";export{generateAutoMemoryHook}from"./helpers-gen.js";export{CLAUDE_STATUSLINE}from"./statusline/surface.js";export{CLAUDE_CONFIG,ensureTrustAccepted as ensureClaudeTrustAccepted}from"./config.js";export{generateStatuslineScript}from"./statusline/generator.js";export*from"./statusline/config.js";export const CLAUDE_DRIVER={id:"claude",displayName:"Claude Code",capabilities:["assets","events","resume","detect","plugins","pluginState","messaging","questions","capture","statusline","config","edits","images","narration","commands","liveness","rewind"],assets:e,events:o,resume:m,detect:p,plugins:s,pluginState:a,messaging:t,questions:E,capture:r,statusline:A,config:i,edits:C,images:n,narration:f,commands:L,liveness:U,rewind:_};
1
+ import{CLAUDE_ASSETS as e}from"./assets.js";import{CLAUDE_CAPTURE as r}from"./capture.js";import{CLAUDE_EVENT_SOURCE as o}from"./event-source.js";import{CLAUDE_MESSAGING as t}from"./messaging.js";import{CLAUDE_PLUGINS as E}from"./plugins.js";import{CLAUDE_PLUGIN_STATE as s}from"./plugin-state.js";import{CLAUDE_BLOCKING_PROMPT as m}from"./questions.js";import{CLAUDE_RESUME as p}from"./resume.js";import{CLAUDE_DETECTOR as A}from"./detect.js";import{CLAUDE_STATUSLINE as a}from"./statusline/surface.js";import{CLAUDE_CONFIG as i}from"./config.js";import{CLAUDE_EDITS as C}from"./edits.js";import{CLAUDE_IMAGES as n}from"./images.js";import{CLAUDE_NARRATION as f}from"./narration.js";import{CLAUDE_COMMANDS as U}from"./commands.js";import{CLAUDE_LIVENESS as L}from"./liveness.js";import{CLAUDE_REWIND as _}from"./rewind.js";export{ClaudeEventSource,CLAUDE_EVENT_SOURCE,frameFacts,expandPayloadRefs}from"./event-source.js";export{CLAUDE_ASSETS,ClaudeJsonCorruptError,readClaudeJson}from"./assets.js";export{CLAUDE_PLUGINS,createClaudePluginSurface,WEAVE_MARKETPLACE}from"./plugins.js";export{CLAUDE_PLUGIN_STATE}from"./plugin-state.js";export{CLAUDE_RESUME}from"./resume.js";export{CLAUDE_DETECTOR}from"./detect.js";export{CLAUDE_MESSAGING}from"./messaging.js";export{CLAUDE_BLOCKING_PROMPT}from"./questions.js";export{CLAUDE_PROMPT_RELAY}from"./prompt.js";export{CLAUDE_PROMPT_INBOX}from"./prompt-inbox.js";export{CLAUDE_SIDE_QUESTION}from"./side-question.js";export{interruptMarkerAt,currentModelAt,currentModeAt,currentEffortAt,currentContextTokensAt,preQuestionTextAt}from"./transcript.js";export{CLAUDE_EDITS}from"./edits.js";export{CLAUDE_IMAGES}from"./images.js";export{CLAUDE_NARRATION}from"./narration.js";export{CLAUDE_REWIND,parseRewindLine}from"./rewind.js";export{CLAUDE_COMMANDS,commandExecutions}from"./commands.js";export{CLAUDE_LIVENESS,claudeLivenessById,parseClaudeSessionReg,pidAlive,pidAliveOf,shellDiscardedByClaude,CLAUDE_REG_GRACE_MS}from"./liveness.js";export{modelAliasTargets,aliasOfModel,bareModelName,defaultModelOf,startedModelOf,switchedModelOf,effortLevelOf,permissionModeOf}from"./model-aliases.js";export{resolveClaudePeer}from"./peers.js";export{CLAUDE_CAPTURE,generateHookHandler,captureHookGroup,sweepWeaveHookEvents,groupIsWeave,captureGroupsPresent,readUserCapture,installUserCapture,uninstallUserCapture,stripProjectCapture,HOOK_HANDLER_MARKER}from"./capture.js";export{generateSettingsJson,mergeSettingsJson,stripWeaveSettings}from"./settings-gen.js";export{generateMcpJson,mergeMcpJson,stripWeaveMcp}from"./mcp-gen.js";export{generateAutoMemoryHook}from"./helpers-gen.js";export{CLAUDE_STATUSLINE}from"./statusline/surface.js";export{CLAUDE_CONFIG,ensureTrustAccepted as ensureClaudeTrustAccepted}from"./config.js";export{generateStatuslineScript}from"./statusline/generator.js";export*from"./statusline/config.js";export const CLAUDE_DRIVER={id:"claude",displayName:"Claude Code",capabilities:["assets","events","resume","detect","plugins","pluginState","messaging","questions","capture","statusline","config","edits","images","narration","commands","liveness","rewind"],assets:e,events:o,resume:p,detect:A,plugins:E,pluginState:s,messaging:t,questions:m,capture:r,statusline:a,config:i,edits:C,images:n,narration:f,commands:U,liveness:L,rewind:_};
@@ -1 +1 @@
1
- import{readdirSync as u,readFileSync as a}from"node:fs";import{join as c}from"node:path";export function parseClaudeSessionReg(e){let n;try{n=JSON.parse(e)}catch{return null}const t=n;return typeof t?.pid!="number"||!Number.isInteger(t.pid)||t.pid<0||typeof t.sessionId!="string"||!t.sessionId?null:{pid:t.pid,sessionId:t.sessionId}}export function pidAlive(e){try{return process.kill(e,0),!0}catch(n){return n.code!=="ESRCH"}}export const CLAUDE_REG_GRACE_MS=9e4;export function pidAliveOf(e,n,t=Date.now()){const s=n.get(e.sessionId);if(s!==void 0)return s;if(e.harness!=="claude"||e.lastEventType==="SessionStart"&&(e.eventCount??0)<=1)return null;const r=Date.parse(e.lastSeenAt);return!Number.isFinite(r)||t-r<CLAUDE_REG_GRACE_MS?null:!1}export function shellDiscardedByClaude(e,n,t=Date.now()){if(e.harness!=="claude"||e.lastEventType!=="SessionStart"||(e.eventCount??0)>1||n.has(e.sessionId))return!1;const s=Date.parse(e.lastSeenAt);return Number.isFinite(s)&&t-s>=CLAUDE_REG_GRACE_MS}export function claudeLivenessById(e=null){const n=e??l(),t=new Map;if(!n)return t;let s;try{s=u(n)}catch{return t}for(const r of s){if(!/^\d+\.json$/.test(r))continue;let i;try{i=a(c(n,r),"utf8")}catch{continue}const o=parseClaudeSessionReg(i);o&&t.set(o.sessionId,pidAlive(o.pid))}return t}function l(){const e=process.platform==="win32"?process.env.USERPROFILE:process.env.HOME;return e?c(e,".claude","sessions"):null}export const CLAUDE_LIVENESS={harness:"claude",async alive(e){const n=claudeLivenessById();if(!e)return n;const t=new Map;for(const s of e){const r=n.get(s);r!==void 0&&t.set(s,r)}return t}};
1
+ import{readdirSync as a,readFileSync as c}from"node:fs";import{join as u}from"node:path";export function parseClaudeSessionReg(e){let t;try{t=JSON.parse(e)}catch{return null}const n=t;return typeof n?.pid!="number"||!Number.isInteger(n.pid)||n.pid<0||typeof n.sessionId!="string"||!n.sessionId?null:{pid:n.pid,sessionId:n.sessionId}}export function pidAlive(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}export const CLAUDE_REG_GRACE_MS=9e4;export function pidAliveOf(e,t,n=Date.now()){const s=t.get(e.sessionId);if(s!==void 0)return s;if(e.harness!=="claude"||e.lastEventType==="SessionStart"&&(e.eventCount??0)<=1)return null;const r=Date.parse(e.lastSeenAt);return!Number.isFinite(r)||n-r<CLAUDE_REG_GRACE_MS?null:!1}export function shellDiscardedByClaude(e,t,n=Date.now()){if(e.harness!=="claude"||e.lastEventType!=="SessionStart"||(e.eventCount??0)>1||t.has(e.sessionId))return!1;const s=Date.parse(e.lastSeenAt);return Number.isFinite(s)&&n-s>=CLAUDE_REG_GRACE_MS}export function claudeLivenessById(e=null){const t=e??l(),n=new Map;if(!t)return n;let s;try{s=a(t)}catch{return n}for(const r of s){if(!/^\d+\.json$/.test(r))continue;let o;try{o=c(u(t,r),"utf8")}catch{continue}const i=parseClaudeSessionReg(o);i&&n.set(i.sessionId,pidAlive(i.pid))}return n}function l(){const e=process.platform==="win32"?process.env.USERPROFILE:process.env.HOME;return e?u(e,".claude","sessions"):null}export const CLAUDE_LIVENESS={harness:"claude",async alive(e){const t=claudeLivenessById();if(!e)return t;const n=new Map;for(const s of e){const r=t.get(s);r!==void 0&&n.set(s,r)}return n}};
@@ -1 +1 @@
1
- export function generateMcpJson(e){const r={};if(e.includeWeaveServer){const t=e.platform.os==="windows"?"cmd":"npx",c=e.platform.os==="windows"?["/c","npx","weave","mcp","start"]:["weave","mcp","start"];r.weave={command:t,args:c,env:{WEAVE_MCP:"true"}}}return{mcpServers:r}}export function mergeMcpJson(e,r){const t={...e},c=o(r.mcpServers)?r.mcpServers:{},n=o(t.mcpServers)?{...t.mcpServers}:{};for(const[s,p]of Object.entries(c))(s==="weave"||n[s]===void 0)&&(n[s]=p);return t.mcpServers=n,t}function o(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}export function stripWeaveMcp(e){const r={...e};if(o(r.mcpServers)){const t={...r.mcpServers};delete t.weave,Object.keys(t).length>0?r.mcpServers=t:delete r.mcpServers}return r}
1
+ export function generateMcpJson(e){const r={};if(e.includeWeaveServer){const s=e.platform.os==="windows"?"cmd":"npx",c=e.platform.os==="windows"?["/c","npx","weave","mcp","start"]:["weave","mcp","start"];r.weave={command:s,args:c,env:{WEAVE_MCP:"true"}}}return{mcpServers:r}}export function mergeMcpJson(e,r){const s={...e},c=o(r.mcpServers)?r.mcpServers:{},n=o(s.mcpServers)?{...s.mcpServers}:{};for(const[t,p]of Object.entries(c))(t==="weave"||n[t]===void 0)&&(n[t]=p);return s.mcpServers=n,s}function o(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}export function stripWeaveMcp(e){const r={...e};if(o(r.mcpServers)){const s={...r.mcpServers};delete s.weave,Object.keys(s).length>0?r.mcpServers=s:delete r.mcpServers}return r}
@@ -1,4 +1,4 @@
1
- import{HARNESS_LIFECYCLE as m,INJECTABLE_EVENTS as E}from"@weavecode/core";import{CLAUDE_PROMPT_INBOX as f}from"./prompt-inbox.js";import{CLAUDE_PROMPT_RELAY as A}from"./prompt.js";import{CLAUDE_RESUME as L}from"./resume.js";import{CLAUDE_SIDE_QUESTION as g}from"./side-question.js";export const CLAUDE_ATTACH={kinds:["image","file"],composePrompt(e,l){const s=l.filter(n=>!e.includes(n.path));if(s.length===0)return e;const t=s.map(n=>n.path).join(`
1
+ import{HARNESS_LIFECYCLE as h,INJECTABLE_EVENTS as E}from"@weavecode/core";import{CLAUDE_PROMPT_INBOX as p}from"./prompt-inbox.js";import{CLAUDE_PROMPT_RELAY as A}from"./prompt.js";import{CLAUDE_RESUME as L}from"./resume.js";import{CLAUDE_SIDE_QUESTION as g}from"./side-question.js";export const CLAUDE_ATTACH={kinds:["image","file"],composePrompt(e,c){const t=c.filter(s=>!e.includes(s.path));if(t.length===0)return e;const n=t.map(s=>s.path).join(`
2
2
  `);return e?`${e}
3
3
 
4
- ${t}`:t}};const _={kinds:["file","dir"],lines:!0,expression:({path:e,kind:l,lines:s})=>{const t=/\s/.test(e)?`"${e}"`:e;return l==="dir"?`@${t}/`:s?s.start===s.end?`@${t}#L${s.start}`:`@${t}#L${s.start}-${s.end}`:`@${t}`},recognize:e=>{const l=[];for(const s of e.matchAll(/(?:^|\s)@"([^"@,。;:!?、()【】「」『』《》…]+)"/g)){const t=s[1],n=s.index+s[0].length-t.length-3;let i=n+t.length+3;const r=/#L(\d+)(?:-(\d+))?/.exec(e.slice(i,i+16));r&&r.index===0&&(i+=r[0].length);const o=e[i];o!==void 0&&!/\s/.test(o)||!t||t.startsWith("/")||t.includes(":")||t.includes("#")||l.push({start:n,end:i,ref:e.slice(n,i),path:t,kind:"file",...r?{lines:{start:Number(r[1]),end:Number(r[2]??r[1])}}:{}})}for(const s of e.matchAll(/(?:^|\s)@([^\s@,。;:!?、()【】「」『』《》“”‘’…]+)/g)){const t=s[1],n=s.index+s[0].length-t.length-1,i=n+1+t.length,r=e[i];if(r!==void 0&&!/\s/.test(r))continue;const o=/#L(\d+)(?:-(\d+))?$/.exec(t),d=o?t.slice(0,o.index):t,u=d.endsWith("/"),c=u?d.slice(0,-1):d;if(!c||c.startsWith("/")||c.includes(":")||c.includes("#")||c.startsWith('"')||l.some(h=>n>=h.start&&i<=h.end))continue;const a=o?Number(o[1]):null,p=o?.[2]?Number(o[2]):a;l.push({start:n,end:i,ref:e.slice(n,i),path:c,kind:u?"dir":"file",...a!=null?{lines:{start:a,end:p}}:{}})}return l.sort((s,t)=>s.start-t.start)}};export const CLAUDE_MESSAGING={harness:"claude",discovery:!0,prompt:A,promptInbox:f,queuedPrompt:null,inject:{rideEvents:E.claude},headless:L,idleSignals:[...m.claude.close,"SessionEnd"],paneEnvSource:"hook",attach:CLAUDE_ATTACH,pathRefs:_,sideQuestion:g};
4
+ ${n}`:n}};const _={kinds:["file","dir"],lines:!0,expression:({path:e,kind:c,lines:t})=>{const n=/\s/.test(e)?`"${e}"`:e;return c==="dir"?`@${n}/`:t?t.start===t.end?`@${n}#L${t.start}`:`@${n}#L${t.start}-${t.end}`:`@${n}`},recognize:e=>{const c=[];for(const t of e.matchAll(/(?:^|\s)@"([^"@,。;:!?、()【】「」『』《》…]+)"/g)){const n=t[1],s=t.index+t[0].length-n.length-3;let o=s+n.length+3;const i=/#L(\d+)(?:-(\d+))?/.exec(e.slice(o,o+16));i&&i.index===0&&(o+=i[0].length);const r=e[o];r!==void 0&&!/\s/.test(r)||!n||n.startsWith("/")||n.includes(":")||n.includes("#")||c.push({start:s,end:o,ref:e.slice(s,o),path:n,kind:"file",...i?{lines:{start:Number(i[1]),end:Number(i[2]??i[1])}}:{}})}for(const t of e.matchAll(/(?:^|\s)@([^\s@,。;:!?、()【】「」『』《》“”‘’…]+)/g)){const n=t[1],s=t.index+t[0].length-n.length-1,o=s+1+n.length,i=e[o];if(i!==void 0&&!/\s/.test(i))continue;const r=/#L(\d+)(?:-(\d+))?$/.exec(n),l=r?n.slice(0,r.index):n,a=l.endsWith("/"),d=a?l.slice(0,-1):l;if(!d||d.startsWith("/")||d.includes(":")||d.includes("#")||d.startsWith('"')||c.some(f=>s>=f.start&&o<=f.end))continue;const u=r?Number(r[1]):null,m=r?.[2]?Number(r[2]):u;c.push({start:s,end:o,ref:e.slice(s,o),path:d,kind:a?"dir":"file",...u!=null?{lines:{start:u,end:m}}:{}})}return c.sort((t,n)=>t.start-n.start)}};export const CLAUDE_MESSAGING={harness:"claude",discovery:!0,prompt:A,promptInbox:p,queuedPrompt:null,inject:{rideEvents:E.claude},headless:L,idleSignals:[...h.claude.close,"SessionEnd"],paneEnvSource:"hook",attach:CLAUDE_ATTACH,pathRefs:_,sideQuestion:g};
@@ -1 +1 @@
1
- import c from"node:fs";import i from"node:os";import{CLAUDE_ASSETS as p}from"./assets.js";export function modelAliasTargets(t,e=process.env,r=i.homedir()){const o=f(r);return t.map(n=>{const s=`ANTHROPIC_DEFAULT_${n.toUpperCase()}_MODEL`,l=o[s]??o[`${s}_NAME`]??e[s]??e[`${s}_NAME`]??n;return{alias:n,actual:l}})}export function switchedModelOf(t,e){if(t!=="PostModelSwitch")return null;const r=e,o=r?.to_model;if(typeof o!="string"||!o)return null;const n=r?.from_model;return{from:typeof n=="string"&&n?n:null,to:o}}export function defaultModelOf(t=i.homedir(),e=process.env){const r=f(t).ANTHROPIC_MODEL??e.ANTHROPIC_MODEL;if(r)return r;const o=u(t)?.model;return modelAliasTargets([typeof o=="string"&&o?o:"sonnet"],e,t)[0].actual}export function startedModelOf(t,e,r=i.homedir(),o=process.env){if(t!=="SessionStart")return null;const n=e??{},s=n.model;if(typeof s=="string"&&s)return{model:s};const l=typeof n.source=="string"?n.source:null;return l!=null&&!a.has(l)?null:{model:defaultModelOf(r,o)}}const a=new Set(["startup","resume","compact","clear"]);export function effortLevelOf(t){const e=t?.effort?.level;return typeof e=="string"&&e?e:null}export function permissionModeOf(t){const e=t?.permission_mode;return typeof e=="string"&&e?e:null}export function bareModelName(t){return t.slice(t.lastIndexOf("/")+1).replace(/\[1m\]$/i,"")}export function aliasOfModel(t,e){if(!e)return null;const r=bareModelName(e);return t.find(o=>bareModelName(o.actual)===r)?.alias??null}export function defaultPermissionModeOf(t=i.homedir()){const e=u(t)?.permissions?.defaultMode;return typeof e=="string"&&e!==""?e:null}function u(t){try{return JSON.parse(c.readFileSync(p.userConfigFile(t),"utf8"))}catch{return null}}function f(t){const e=u(t),r={};for(const[o,n]of Object.entries(e?.env??{}))typeof n=="string"&&(r[o]=n);return r}
1
+ import l from"node:fs";import f from"node:os";import{CLAUDE_ASSETS as p}from"./assets.js";export function modelAliasTargets(t,e=process.env,o=f.homedir()){const r=c(o);return t.map(n=>{const s=`ANTHROPIC_DEFAULT_${n.toUpperCase()}_MODEL`,i=r[s]??r[`${s}_NAME`]??e[s]??e[`${s}_NAME`]??n;return{alias:n,actual:i}})}export function switchedModelOf(t,e){if(t!=="PostModelSwitch")return null;const o=e,r=o?.to_model;if(typeof r!="string"||!r)return null;const n=o?.from_model;return{from:typeof n=="string"&&n?n:null,to:r}}export function defaultModelOf(t=f.homedir(),e=process.env){const r=c(t).ANTHROPIC_MODEL??e.ANTHROPIC_MODEL;if(r)return r;const n=u(t)?.model;return modelAliasTargets([typeof n=="string"&&n?n:"sonnet"],e,t)[0].actual}export function startedModelOf(t,e,o=f.homedir(),r=process.env){if(t!=="SessionStart")return null;const n=e??{},s=n.model;if(typeof s=="string"&&s)return{model:s};const i=typeof n.source=="string"?n.source:null;return i!=null&&!m.has(i)?null:{model:defaultModelOf(o,r)}}const m=new Set(["startup","resume","compact","clear"]);export function effortLevelOf(t){const e=t?.effort?.level;return typeof e=="string"&&e?e:null}export function permissionModeOf(t){const e=t?.permission_mode;return typeof e=="string"&&e?e:null}export function bareModelName(t){return t.slice(t.lastIndexOf("/")+1).replace(/\[1m\]$/i,"")}export function aliasOfModel(t,e){if(!e)return null;const o=bareModelName(e);return t.find(r=>bareModelName(r.actual)===o)?.alias??null}export function defaultPermissionModeOf(t=f.homedir()){const o=u(t)?.permissions?.defaultMode;return typeof o=="string"&&o!==""?o:null}function u(t){try{return JSON.parse(l.readFileSync(p.userConfigFile(t),"utf8"))}catch{return null}}function c(t){const e=u(t),o={};for(const[r,n]of Object.entries(e?.env??{}))typeof n=="string"&&(o[r]=n);return o}
@@ -1 +1 @@
1
- import{readNewLines as a,transcriptSize as c}from"./transcript-cursor.js";const r=new Map,f=64;export const CLAUDE_NARRATION={async sessionNarration({transcriptPath:t}){if(!t)return null;const e=c(t);if(e===null)return r.delete(t),null;const i=r.get(t);r.delete(t);const n=i??{cur:{offset:0},segs:[]};e<n.cur.offset&&(n.cur.offset=0,n.segs=[]);const s=a(t,n.cur,e);if(s===null)return null;for(const l of s){const o=u(l);o&&n.segs.push(o)}if(r.size>=f){const l=r.keys().next().value;l!==void 0&&r.delete(l)}return r.set(t,n),n.segs},lineParser:u};function u(t){if(!t.includes('"type":"assistant"'))return null;let e;try{e=JSON.parse(t)}catch{return null}if(e.type!=="assistant"||e.isSidechain===!0)return null;const i=e.message?.content;if(!Array.isArray(i))return null;const n=i.filter(s=>!!s&&typeof s=="object"&&s.type==="text"&&typeof s.text=="string").map(s=>s.text).join("").trim();return n?{at:typeof e.timestamp=="string"?e.timestamp:null,text:n}:null}
1
+ import{readNewLines as f,transcriptSize as c}from"./transcript-cursor.js";const r=new Map,y=64;export const CLAUDE_NARRATION={async sessionNarration({transcriptPath:e}){if(!e)return null;const t=c(e);if(t===null)return r.delete(e),null;const i=r.get(e);r.delete(e);const n=i??{cur:{offset:0},segs:[]};t<n.cur.offset&&(n.cur.offset=0,n.segs=[]);const s=f(e,n.cur,t);if(s===null)return null;for(const l of s){const o=u(l);o&&n.segs.push(o)}if(r.size>=y){const l=r.keys().next().value;l!==void 0&&r.delete(l)}return r.set(e,n),n.segs},lineParser:u};function u(e){if(!e.includes('"type":"assistant"'))return null;let t;try{t=JSON.parse(e)}catch{return null}if(t.type!=="assistant"||t.isSidechain===!0)return null;const i=t.message?.content;if(!Array.isArray(i))return null;const n=i.filter(s=>!!s&&typeof s=="object"&&s.type==="text"&&typeof s.text=="string").map(s=>s.text).join("").trim();return n?{at:typeof t.timestamp=="string"?t.timestamp:null,text:n}:null}
@@ -1 +1 @@
1
- import{readdirSync as i,readFileSync as c}from"node:fs";import{homedir as m}from"node:os";import{join as s}from"node:path";export function resolveClaudePeer(a,r=s(m(),".claude","sessions")){let t;try{t=i(r)}catch{return null}for(const n of t){if(!/^\d+\.json$/.test(n))continue;let o;try{o=JSON.parse(c(s(r,n),"utf8"))}catch{continue}const e=o;if(e?.sessionId===a&&typeof e.name=="string"&&e.name)return{name:e.name}}return null}
1
+ import{readdirSync as a,readFileSync as c}from"node:fs";import{homedir as m}from"node:os";import{join as i}from"node:path";export function resolveClaudePeer(s,n=i(m(),".claude","sessions")){let r;try{r=a(n)}catch{return null}for(const t of r){if(!/^\d+\.json$/.test(t))continue;let o;try{o=JSON.parse(c(i(n,t),"utf8"))}catch{continue}const e=o;if(e?.sessionId===s&&typeof e.name=="string"&&e.name)return{name:e.name}}return null}
@@ -1 +1 @@
1
- const f=/[\\/]plans[\\/][^\\/]+\.md$/i,l=t=>typeof t=="string"&&t.trim()?t:null,o=t=>t&&typeof t=="object"?t:{};export const CLAUDE_PLAN={tool:"ExitPlanMode",writeTools:["Write","Edit","MultiEdit"],fileHint:"plans",draftOf(t,a,r){const e=o(a),n=o(r);if(t==="ExitPlanMode")return{text:l(e.plan)??l(n.plan),filePath:l(e.planFilePath)??l(n.filePath)};if(t==null||!CLAUDE_PLAN.writeTools.includes(t))return null;const i=l(e.file_path)??l(n.filePath);return!i||!f.test(i)?null:{text:l(e.content),filePath:i}}};
1
+ const f=/[\\/]plans[\\/][^\\/]+\.md$/i,n=t=>typeof t=="string"&&t.trim()?t:null,r=t=>t&&typeof t=="object"?t:{};export const CLAUDE_PLAN={tool:"ExitPlanMode",writeTools:["Write","Edit","MultiEdit"],fileHint:"plans",draftOf(t,s,o){const e=r(s),i=r(o);if(t==="ExitPlanMode")return{text:n(e.plan)??n(i.plan),filePath:n(e.planFilePath)??n(i.filePath)};if(t==null||!CLAUDE_PLAN.writeTools.includes(t))return null;const l=n(e.file_path)??n(i.filePath);return!l||!f.test(l)?null:{text:n(e.content),filePath:l}}};
@@ -1,4 +1,4 @@
1
- import{spawn as _}from"node:child_process";import{homedir as P}from"node:os";import{cp as U,lstat as D,mkdir as x,readFile as M,readdir as H,writeFile as N}from"node:fs/promises";import s from"node:path";import{linkOrCopy as V,removeInstalled as q}from"../shared/install-link.js";import{CLAUDE_ASSETS as B}from"./assets.js";export const WEAVE_MARKETPLACE="weave";const R="weave-marketplace",W=6e4,T=2e3,G=64*1024;export function claudeCommandLine(o){return["claude",...o.map(p=>`"${p.replace(/"/g,'\\"')}"`)].join(" ")}function z(o){if(!(o.exitCode!==null||o.signalCode!==null)){if(process.platform==="win32"&&o.pid!==void 0){_("taskkill",["/pid",String(o.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref();return}o.kill("SIGKILL")}}function S(o){return o.length>T?`${o.slice(0,T)}\u2026`:o}function J(o){try{const p=JSON.parse(o);return p&&typeof p=="object"&&!Array.isArray(p)?p:null}catch{return null}}export const execCli=(o,p)=>new Promise((b,h)=>{const $=process.platform==="win32",g=_($?process.env.ComSpec||"cmd.exe":"claude",$?["/d","/s","/c",claudeCommandLine(o)]:o,{windowsHide:!0,windowsVerbatimArguments:$,stdio:["ignore","pipe","pipe"]}),w=`claude ${o.join(" ")}`;let v="",m="",l=!1;const y=u=>{l||(l=!0,clearTimeout(j),h(new Error(S(u))))},j=setTimeout(()=>{z(g),y(`${w}: timed out after ${p.timeoutMs}ms`)},p.timeoutMs);g.stdout?.setEncoding("utf8"),g.stdout?.on("data",u=>{v.length<G&&(v+=u)}),g.stderr?.setEncoding("utf8"),g.stderr?.on("data",u=>{m.length<G&&(m+=u)}),g.on("error",u=>y(`${w}: ${u.message}`)),g.on("close",u=>{if(l)return;if(l=!0,clearTimeout(j),u===0){b({stdout:v,stderr:m});return}const A=[m,v].filter(Boolean).join(`
2
- `).trim()||`exit ${u}`;h(new Error(S(`${w}: ${A}`)))})});export function createClaudePluginSurface(o={}){const p=o.exec??execCli,b=e=>p(e,{timeoutMs:W}),h=()=>B.userConfigFile(P()),$=()=>s.join(P(),".claude","plugins","installed_plugins.json"),g=()=>s.join(P(),".claude",R),w=e=>s.join(e,".claude","settings.json"),v=e=>s.join(e,".claude","settings.local.json"),m=(e,n)=>`${e}@${n??WEAVE_MARKETPLACE}`,l=async e=>{try{const n=JSON.parse(await M(e,"utf8"));return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}catch{return{}}},y=async(e,n)=>{await x(s.dirname(e),{recursive:!0}),await N(e,`${JSON.stringify(n,null,2)}
3
- `,"utf8")},j=e=>{const n=e.enabledPlugins;return!n||typeof n!="object"||Array.isArray(n)?{}:Object.fromEntries(Object.entries(n).filter(([,a])=>typeof a=="boolean"))},u=e=>{const n=e.enabledPlugins;return n&&typeof n=="object"&&!Array.isArray(n)?{...n}:{}},A=async()=>{const e=(await l($())).plugins;if(!e||typeof e!="object"||Array.isArray(e))return{};const n={};for(const[a,t]of Object.entries(e))Array.isArray(t)&&(n[a]=t);return n},O=(e,n,a)=>{const t=n?.[n.length-1];return{key:e,alreadyInstalled:a,...t?.scope?{scope:t.scope}:{},...t?.installPath?{installPath:t.installPath}:{},...t?.version?{version:t.version}:{}}},K=async(e,n,a={})=>{const t=g(),i=s.join(t,"plugins",n);await q(i),await x(s.dirname(i),{recursive:!0});const r=await M(s.join(e,".claude-plugin","plugin.json"),"utf8").then(()=>!0,()=>!1),d=await H(e).catch(()=>[]);if(r&&!d.includes("node_modules")&&!d.includes(".git"))await V(e,i);else if(await U(e,i,{recursive:!0,filter:k=>{const L=s.basename(k);return L!=="node_modules"&&L!==".git"}}),!r){const k=s.join(i,".claude-plugin","plugin.json");await x(s.dirname(k),{recursive:!0}),await N(k,JSON.stringify({name:n,version:a.version??"0.0.0",...a.description?{description:a.description}:{}},null,2)+`
4
- `,"utf8")}const f=s.join(t,".claude-plugin","marketplace.json"),c=await l(f),E=Array.isArray(c.plugins)?[...c.plugins]:[],C={name:n,source:`./plugins/${n}`},I=E.findIndex(k=>k?.name===n);return I>=0?E[I]=C:E.push(C),c.name=WEAVE_MARKETPLACE,c.owner||(c.owner={name:"weave"}),c.plugins=E,await y(f,c),t},F=async(e,n,a)=>{if(!e.dir)throw new Error(`marketplace dir required for ${n}@${e.name}`);if((await D(e.dir)).isSymbolicLink())return;const t=s.join(e.dir,".claude-plugin","marketplace.json"),i=await l(t),r=Array.isArray(i.plugins)?[...i.plugins]:[],d=`./${s.relative(e.dir,a).split(s.sep).join("/")}`,f={name:n,source:d},c=r.findIndex(E=>E?.name===n);c>=0?r[c]=f:r.push(f),i.name=e.name,i.owner||(i.owner={name:"weave"}),i.plugins=r,await y(t,i)};return{projectPluginDir:e=>s.join(e,".claude","plugins"),pluginKey:m,parsePluginKey(e){const n=e.lastIndexOf("@");return n>0?{name:e.slice(0,n),market:e.slice(n+1)}:{name:e,market:WEAVE_MARKETPLACE}},async globalInstall(e,n={}){let a=n.name;if(!a){const c=await l(s.join(e,".claude-plugin","plugin.json"));a=typeof c.name=="string"?c.name:void 0}if(!a)throw new Error(`plugin manifest missing name: ${e}`);const t=n.marketplace,i=m(a,t?.name),r=(await A())[i];if(r&&r.length>0)return O(i,r,!0);if(t)await F(t,a,e),await b(["plugin","marketplace","add",t.dir??""]);else{const c=await K(e,a,n);await b(["plugin","marketplace","add",c])}const{stdout:d}=await b(["plugin","install",i,"--scope","user","--json"]),f=J(d);if(f?.outcome==="failed")throw new Error(S(String(f.message??"plugin install failed")));return O(i,(await A())[i],!1)},readInstalled:A,async isInstalled(e,n){const a=(await A())[m(e,n)];return!!a&&a.length>0},async uninstall(e,n){const a=m(e,n),t=(await A())[a];if(!t||t.length===0)return;const i=[...new Set(t.map(r=>r.scope??"user"))];for(const r of i){const{stdout:d}=await b(["plugin","uninstall",a,"--scope",r,"--json"]),f=J(d);if(f?.outcome==="failed")throw new Error(S(String(f.message??"plugin uninstall failed")))}},async removeMarketplace(e){const n=await l(s.join(P(),".claude","plugins","known_marketplaces.json")),a=s.resolve(e),t=Object.entries(n).find(([,i])=>i&&typeof i=="object"&&typeof i.installLocation=="string"&&s.resolve(i.installLocation)===a)?.[0];t&&await b(["plugin","marketplace","remove",t])},async readProjectEnabled(e,n,a){return j(await l(w(e)))[m(n,a)]??!1},async setProjectEnabled(e,n,a,t){const i=w(e),r=await l(i);r.enabledPlugins={...u(r),[m(n,t)]:a},await y(i,r)},async readGlobalEnabled(){return j(await l(h()))},async writeGlobalEnabled(e,n){const a=h(),t=await l(a);t.enabledPlugins={...u(t),[e]:n},await y(a,t)},pluginScopes:()=>["user","project","local"],async readEnabledOverrides(e){const[n,a,t]=await Promise.all([l(h()).then(j),l(w(e)).then(j),l(v(e)).then(j)]);return{user:n,project:a,local:t}},async setEnabledOverride(e,n,a,t){const i=n==="user"?h():n==="project"?w(e):v(e),r=await l(i),d=u(r);t==="inherit"?delete d[a]:d[a]=t==="on",r.enabledPlugins=d,await y(i,r)}}}export const CLAUDE_PLUGINS=createClaudePluginSurface();
1
+ import{spawn as C}from"node:child_process";import{homedir as O}from"node:os";import{cp as R,lstat as H,mkdir as x,readFile as L,readdir as V,writeFile as F}from"node:fs/promises";import r from"node:path";import{linkOrCopy as q,removeInstalled as B}from"../shared/install-link.js";import{CLAUDE_ASSETS as W}from"./assets.js";export const WEAVE_MARKETPLACE="weave";const z="weave-marketplace",Q=6e4,U=2e3,J=64*1024;export function claudeCommandLine(o){return["claude",...o.map(d=>`"${d.replace(/"/g,'\\"')}"`)].join(" ")}function X(o){if(!(o.exitCode!==null||o.signalCode!==null)){if(process.platform==="win32"&&o.pid!==void 0){C("taskkill",["/pid",String(o.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref();return}o.kill("SIGKILL")}}function $(o){return o.length>U?`${o.slice(0,U)}\u2026`:o}function K(o){try{const d=JSON.parse(o);return d&&typeof d=="object"&&!Array.isArray(d)?d:null}catch{return null}}export const execCli=(o,d)=>new Promise((E,A)=>{const v=process.platform==="win32",g=C(v?process.env.ComSpec||"cmd.exe":"claude",v?["/d","/s","/c",claudeCommandLine(o)]:o,{windowsHide:!0,windowsVerbatimArguments:v,stdio:["ignore","pipe","pipe"]}),y=`claude ${o.join(" ")}`;let k="",p="",l=!1;const j=c=>{l||(l=!0,clearTimeout(b),A(new Error($(c))))},b=setTimeout(()=>{X(g),j(`${y}: timed out after ${d.timeoutMs}ms`)},d.timeoutMs);g.stdout?.setEncoding("utf8"),g.stdout?.on("data",c=>{k.length<J&&(k+=c)}),g.stderr?.setEncoding("utf8"),g.stderr?.on("data",c=>{p.length<J&&(p+=c)}),g.on("error",c=>j(`${y}: ${c.message}`)),g.on("close",c=>{if(l)return;if(l=!0,clearTimeout(b),c===0){E({stdout:k,stderr:p});return}const h=[p,k].filter(Boolean).join(`
2
+ `).trim()||`exit ${c}`;A(new Error($(`${y}: ${h}`)))})});export function createClaudePluginSurface(o={}){const d=o.exec??execCli,E=e=>d(e,{timeoutMs:Q}),A=()=>W.userConfigFile(O()),v=()=>r.join(O(),".claude","plugins","installed_plugins.json"),g=()=>r.join(O(),".claude",z),y=e=>r.join(e,".claude","settings.json"),k=e=>r.join(e,".claude","settings.local.json"),p=(e,n)=>`${e}@${n??WEAVE_MARKETPLACE}`,l=async e=>{try{const n=JSON.parse(await L(e,"utf8"));return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}catch{return{}}},j=async(e,n)=>{await x(r.dirname(e),{recursive:!0}),await F(e,`${JSON.stringify(n,null,2)}
3
+ `,"utf8")},b=e=>{const n=e.enabledPlugins;return!n||typeof n!="object"||Array.isArray(n)?{}:Object.fromEntries(Object.entries(n).filter(([,t])=>typeof t=="boolean"))},c=e=>{const n=e.enabledPlugins;return n&&typeof n=="object"&&!Array.isArray(n)?{...n}:{}},h=async()=>{const n=(await l(v())).plugins;if(!n||typeof n!="object"||Array.isArray(n))return{};const t={};for(const[i,s]of Object.entries(n))Array.isArray(s)&&(t[i]=s);return t},I=(e,n,t)=>{const i=n?.[n.length-1];return{key:e,alreadyInstalled:t,...i?.scope?{scope:i.scope}:{},...i?.installPath?{installPath:i.installPath}:{},...i?.version?{version:i.version}:{}}},N=async(e,n,t={})=>{const i=g(),s=r.join(i,"plugins",n);await B(s),await x(r.dirname(s),{recursive:!0});const a=await L(r.join(e,".claude-plugin","plugin.json"),"utf8").then(()=>!0,()=>!1),u=await V(e).catch(()=>[]);if(a&&!u.includes("node_modules")&&!u.includes(".git"))await q(e,s);else if(await R(e,s,{recursive:!0,filter:S=>{const _=r.basename(S);return _!=="node_modules"&&_!==".git"}}),!a){const S=r.join(s,".claude-plugin","plugin.json");await x(r.dirname(S),{recursive:!0}),await F(S,JSON.stringify({name:n,version:t.version??"0.0.0",...t.description?{description:t.description}:{}},null,2)+`
4
+ `,"utf8")}const f=r.join(i,".claude-plugin","marketplace.json"),w=await l(f),P=Array.isArray(w.plugins)?[...w.plugins]:[],M={name:n,source:`./plugins/${n}`},T=P.findIndex(S=>S?.name===n);return T>=0?P[T]=M:P.push(M),w.name=WEAVE_MARKETPLACE,w.owner||(w.owner={name:"weave"}),w.plugins=P,await j(f,w),i},G=async(e,n,t)=>{if(!e.dir)throw new Error(`marketplace dir required for ${n}@${e.name}`);if((await H(e.dir)).isSymbolicLink())return;const i=r.join(e.dir,".claude-plugin","marketplace.json"),s=await l(i),a=Array.isArray(s.plugins)?[...s.plugins]:[],u=`./${r.relative(e.dir,t).split(r.sep).join("/")}`,m={name:n,source:u},f=a.findIndex(w=>w?.name===n);f>=0?a[f]=m:a.push(m),s.name=e.name,s.owner||(s.owner={name:"weave"}),s.plugins=a,await j(i,s)};return{projectPluginDir:e=>r.join(e,".claude","plugins"),pluginKey:p,parsePluginKey(e){const n=e.lastIndexOf("@");return n>0?{name:e.slice(0,n),market:e.slice(n+1)}:{name:e,market:WEAVE_MARKETPLACE}},async globalInstall(e,n={}){let t=n.name;if(!t){const f=await l(r.join(e,".claude-plugin","plugin.json"));t=typeof f.name=="string"?f.name:void 0}if(!t)throw new Error(`plugin manifest missing name: ${e}`);const i=n.marketplace,s=p(t,i?.name),a=(await h())[s];if(a&&a.length>0)return I(s,a,!0);if(i)await G(i,t,e),await E(["plugin","marketplace","add",i.dir??""]);else{const f=await N(e,t,n);await E(["plugin","marketplace","add",f])}const{stdout:u}=await E(["plugin","install",s,"--scope","user","--json"]),m=K(u);if(m?.outcome==="failed")throw new Error($(String(m.message??"plugin install failed")));return I(s,(await h())[s],!1)},readInstalled:h,async isInstalled(e,n){const t=(await h())[p(e,n)];return!!t&&t.length>0},async uninstall(e,n){const t=p(e,n),i=(await h())[t];if(!i||i.length===0)return;const s=[...new Set(i.map(a=>a.scope??"user"))];for(const a of s){const{stdout:u}=await E(["plugin","uninstall",t,"--scope",a,"--json"]),m=K(u);if(m?.outcome==="failed")throw new Error($(String(m.message??"plugin uninstall failed")))}},async removeMarketplace(e){const n=await l(r.join(O(),".claude","plugins","known_marketplaces.json")),t=r.resolve(e),i=Object.entries(n).find(([,s])=>s&&typeof s=="object"&&typeof s.installLocation=="string"&&r.resolve(s.installLocation)===t)?.[0];i&&await E(["plugin","marketplace","remove",i])},async readProjectEnabled(e,n,t){return b(await l(y(e)))[p(n,t)]??!1},async setProjectEnabled(e,n,t,i){const s=y(e),a=await l(s);a.enabledPlugins={...c(a),[p(n,i)]:t},await j(s,a)},async readGlobalEnabled(){return b(await l(A()))},async writeGlobalEnabled(e,n){const t=A(),i=await l(t);i.enabledPlugins={...c(i),[e]:n},await j(t,i)},pluginScopes:()=>["user","project","local"],async readEnabledOverrides(e){const[n,t,i]=await Promise.all([l(A()).then(b),l(y(e)).then(b),l(k(e)).then(b)]);return{user:n,project:t,local:i}},async setEnabledOverride(e,n,t,i){const s=n==="user"?A():n==="project"?y(e):k(e),a=await l(s),u=c(a);i==="inherit"?delete u[t]:u[t]=i==="on",a.enabledPlugins=u,await j(s,a)}}}export const CLAUDE_PLUGINS=createClaudePluginSurface();
@@ -1,3 +1,3 @@
1
- export const CLAUDE_PROMPT_INBOX={socketEnv:"CLAUDE_CODE_MESSAGING_SOCKET",tokenEnv:"CLAUDE_CODE_MESSAGING_TOKEN",requiresAuthOn:t=>t==="win32",frame:({token:t,text:n})=>{const e=[];return t&&e.push(JSON.stringify({type:"auth",token:t})),e.push(JSON.stringify({type:"user",message:{role:"user",content:n}})),e.join(`
1
+ export const CLAUDE_PROMPT_INBOX={socketEnv:"CLAUDE_CODE_MESSAGING_SOCKET",tokenEnv:"CLAUDE_CODE_MESSAGING_TOKEN",requiresAuthOn:e=>e==="win32",frame:({token:e,text:s})=>{const n=[];return e&&n.push(JSON.stringify({type:"auth",token:e})),n.push(JSON.stringify({type:"user",message:{role:"user",content:s}})),n.join(`
2
2
  `)+`
3
3
  `}};
@@ -1,5 +1,5 @@
1
- import{resolveClaudePeer as t}from"./peers.js";const n="[weave one-way injection \u2014 no reply is expected: do not call SendMessage or ListAgents, just act on this prompt in this session.]";export const CLAUDE_PROMPT_RELAY={bin:"claude",args:["-p","--no-session-persistence","--strict-mcp-config","--disable-slash-commands","--tools","SendMessage,ListAgents","-n","weave"],senderName:"weave",instruction:(e,s,o)=>`Send the following message verbatim to the Claude session named "${e}" using the SendMessage tool, then stop immediately. Do not use any other tool and do not wait for a reply \u2014 the handover is done once the tool call returns, so this process must exit promptly.
1
+ import{resolveClaudePeer as n}from"./peers.js";const t="[weave one-way injection \u2014 no reply is expected: do not call SendMessage or ListAgents, just act on this prompt in this session.]";export const CLAUDE_PROMPT_RELAY={bin:"claude",args:["-p","--no-session-persistence","--strict-mcp-config","--disable-slash-commands","--tools","SendMessage,ListAgents","-n","weave"],senderName:"weave",instruction:(e,s,o)=>`Send the following message verbatim to the Claude session named "${e}" using the SendMessage tool, then stop immediately. Do not use any other tool and do not wait for a reply \u2014 the handover is done once the tool call returns, so this process must exit promptly.
2
2
 
3
- ${o.oneWay?`${n}
3
+ ${o.oneWay?`${t}
4
4
 
5
- `:""}${s}`,resolve:t};
5
+ `:""}${s}`,resolve:n};
@@ -1,2 +1,2 @@
1
- import{HARNESS_LIFECYCLE as b}from"@weavecode/core";import{CLAUDE_PLAN as k}from"./plan.js";import{defaultPermissionModeOf as g}from"./model-aliases.js";import{preQuestionTextAt as w}from"./transcript.js";import{readTail as S}from"./transcript-cursor.js";const v=512*1024,m="\x1B[B",u=" ",A="\x1B[Z",x=2e3,f="(preview cannot be shown in full \u2014 compare the option labels and descriptions instead)",T="No preview available",N="n",C="press n to add notes",P=/[\p{M}\u200b-\u200f\u2028-\u202e\u2060-\u206f\u180b-\u180f\ufe0e\ufe0f]/u,q=[{keys:["1"],label:"Yes, and switch to default (ask each time) for this session"},{keys:["2"],label:"No"}],Y={bypassPermissions:"BYPASS PERMISSIONS (no further prompts)"};export function planApprovalOptions(e){return e==null||e==="default"||e==="plan"?q.map(t=>({...t})):[{keys:["1"],label:`Yes, and switch to ${Y[e]??e} for this session`},{keys:["2"],label:"Yes, manually approve edits"},{keys:["3"],label:"Tell Claude what to change",description:"shift+tab to approve with this feedback",input:!0,textTail:[A]}]}const $=[{keys:["1"],label:"Yes"},{keys:["2"],label:"Yes, and don't ask again for this tool"},{keys:["3"],label:"No, and tell Claude what to do differently (esc)"}],M=[{keys:["1"],label:"Yes, and tell Claude what to do next"},{keys:["2"],label:"No"}],h={key:"AskUserQuestion:opaque",header:null,question:"The session is asking a question (options unavailable \u2014 answer in its terminal)",multiSelect:!1,options:[]};function Q(e){if(!e||typeof e!="object")return null;const t=e,n=r(t.to_model),s=r(t.from_model);return!n||!s||n===s||t.prompt_cache_warm!==!0?null:{key:"model:switch",header:"Switch model?",question:`Your next response will be slower and use more tokens. This conversation is cached for the current model. Switching to ${n} means the full history gets re-read on your next message.`,multiSelect:!1,options:[{keys:["1"],label:`Yes, switch to ${n}`},{keys:["2"],label:"No, go back"}]}}function _(e){if(e==null||typeof e!="object")return"";try{const t=JSON.stringify(e);return!t||t==="{}"?"":t.length>160?`${t.slice(0,160)}\u2026`:t}catch{return""}}function E(e,t){return[t?{keys:[String(e+1)],label:"Type something",input:!0,textFocus:Array.from({length:e},()=>m),textTail:[u,"\r"]}:{keys:[String(e+1)],label:"Type something",input:!0,textTail:["\r"]},{keys:[String(e+2)],label:"Chat about this",chat:!0}]}function I(){return{key:"AskUserQuestion:submit",header:"Submit",question:"Review your answers",multiSelect:!1,submit:!0,options:[{keys:[u,"1"],label:"Submit answers"},{keys:[u,"2"],label:"Cancel"}]}}function r(e){return typeof e=="string"&&e?e:null}function L(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){if(!n||typeof n!="object")continue;const s=r(n.label);if(!s)continue;const o=n.description;t.push({keys:[String(t.length+1)],label:s,description:typeof o=="string"&&o?o:null,preview:O(n.preview)})}return t}function O(e){return typeof e!="string"?null:e.length>x?f:e.replace(/�/g,"").trim()?P.test(e)?f:e:null}function U(e,t){return t<2?[String(e+1)]:[String(e===0?2:1),String(e+1)]}function B(e){return e.map((t,n)=>({keys:U(n,e.length),commit:["\r"],label:t.label,description:t.description,preview:t.preview??T}))}function j(e){const t=[];return e>=2&&t.push({keys:[N],label:"Notes:",description:C,input:!0,textTail:["\r"]}),t.push({keys:[String(e),m,"\r"],label:"Chat about this",chat:!0}),t}export const CLAUDE_BLOCKING_PROMPT={plan:k,blockingTools:b.claude.questionTools,permissionNotificationType:"permission_prompt",silentPermissionModes:["bypassPermissions","dontAsk"],permissionQuestion(e){const t=e.toolName?`${e.toolName}${e.toolInput?` ${_(e.toolInput)}`:""}`:"",n=e.permissionMode==="auto"||/classifier/i.test(e.message??""),s=e.message?.trim()||"Claude needs your permission";return{key:"permission:confirm",header:n?"Permission (auto mode)":"Permission",question:t?`${s}
2
- ${t}`:s,multiSelect:!1,options:[...n?M:$]}},parseQuestions(e,t){if(e==="AskUserQuestion"){const n=t&&typeof t=="object"?t.questions:void 0;if(!Array.isArray(n))return[h];const s=[];for(const o of n){if(!o||typeof o!="object")continue;const l=r(o.question),p=r(o.header),a=o.multiSelect===!0,i=L(o.options);if(!l||i.length===0)continue;const d=p??l.slice(0,24),c=!a&&i.some(y=>y.preview!=null);s.push({key:`AskUserQuestion:${d}`,header:p,question:l,options:c?[...B(i),...j(i.length)]:[...i,...E(i.length,a)],multiSelect:a,previewMode:c})}return s.length===0?[h]:((s.length>=2||s.some(o=>o.multiSelect))&&s.push(I()),s)}return[{key:"ExitPlanMode:approve",header:"Exit plan mode?",question:"Claude wants to exit plan mode",multiSelect:!1,options:planApprovalOptions(g())}]},eventQuestion(e,t){return e==="PreModelSwitch"?Q(t.raw):null},async preQuestion(e){if(!e)return null;const t=S(e,v);return t===null?null:w(t)}};
1
+ import{HARNESS_LIFECYCLE as b}from"@weavecode/core";import{CLAUDE_PLAN as S}from"./plan.js";import{defaultPermissionModeOf as k}from"./model-aliases.js";import{preQuestionTextAt as g}from"./transcript.js";import{readTail as T}from"./transcript-cursor.js";const w=512*1024,f="\x1B[B",a=" ",A="\x1B[Z",N=2e3,m="(preview cannot be shown in full \u2014 compare the option labels and descriptions instead)",E="No preview available",_="n",O="press n to add notes",P=/[\p{M}\u200b-\u200f\u2028-\u202e\u2060-\u206f\u180b-\u180f\ufe0e\ufe0f]/u,I=[{keys:["1"],label:"Yes, and switch to default (ask each time) for this session"},{keys:["2"],label:"No"}],v={bypassPermissions:"BYPASS PERMISSIONS (no further prompts)"};export function planApprovalOptions(e){return e==null||e==="default"||e==="plan"?I.map(t=>({...t})):[{keys:["1"],label:`Yes, and switch to ${v[e]??e} for this session`},{keys:["2"],label:"Yes, manually approve edits"},{keys:["3"],label:"Tell Claude what to change",description:"shift+tab to approve with this feedback",input:!0,textTail:[A]}]}const C=[{keys:["1"],label:"Yes"},{keys:["2"],label:"Yes, and don't ask again for this tool"},{keys:["3"],label:"No, and tell Claude what to do differently (esc)"}],L=[{keys:["1"],label:"Yes, and tell Claude what to do next"},{keys:["2"],label:"No"}],h={key:"AskUserQuestion:opaque",header:null,question:"The session is asking a question (options unavailable \u2014 answer in its terminal)",multiSelect:!1,options:[]};function R(e){if(!e||typeof e!="object")return null;const t=e,s=r(t.to_model),n=r(t.from_model);return!s||!n||s===n||t.prompt_cache_warm!==!0?null:{key:"model:switch",header:"Switch model?",question:`Your next response will be slower and use more tokens. This conversation is cached for the current model. Switching to ${s} means the full history gets re-read on your next message.`,multiSelect:!1,options:[{keys:["1"],label:`Yes, switch to ${s}`},{keys:["2"],label:"No, go back"}]}}function Q(e){if(e==null||typeof e!="object")return"";try{const t=JSON.stringify(e);return!t||t==="{}"?"":t.length>160?`${t.slice(0,160)}\u2026`:t}catch{return""}}function q(e,t){return[t?{keys:[String(e+1)],label:"Type something",input:!0,textFocus:Array.from({length:e},()=>f),textTail:[a,"\r"]}:{keys:[String(e+1)],label:"Type something",input:!0,textTail:["\r"]},{keys:[String(e+2)],label:"Chat about this",chat:!0}]}function Y(){return{key:"AskUserQuestion:submit",header:"Submit",question:"Review your answers",multiSelect:!1,submit:!0,options:[{keys:[a,"1"],label:"Submit answers"},{keys:[a,"2"],label:"Cancel"}]}}function r(e){return typeof e=="string"&&e?e:null}function U(e){if(!Array.isArray(e))return[];const t=[];for(const s of e){if(!s||typeof s!="object")continue;const n=r(s.label);if(!n)continue;const o=s.description;t.push({keys:[String(t.length+1)],label:n,description:typeof o=="string"&&o?o:null,preview:x(s.preview)})}return t}function x(e){return typeof e!="string"?null:e.length>N?m:e.replace(/�/g,"").trim()?P.test(e)?m:e:null}function $(e,t){return t<2?[String(e+1)]:[String(e===0?2:1),String(e+1)]}function M(e){return e.map((t,s)=>({keys:$(s,e.length),commit:["\r"],label:t.label,description:t.description,preview:t.preview??E}))}function B(e){const t=[];return e>=2&&t.push({keys:[_],label:"Notes:",description:O,input:!0,textTail:["\r"]}),t.push({keys:[String(e),f,"\r"],label:"Chat about this",chat:!0}),t}export const CLAUDE_BLOCKING_PROMPT={plan:S,blockingTools:b.claude.questionTools,permissionNotificationType:"permission_prompt",silentPermissionModes:["bypassPermissions","dontAsk"],permissionQuestion(e){const t=e.toolName?`${e.toolName}${e.toolInput?` ${Q(e.toolInput)}`:""}`:"",s=e.permissionMode==="auto"||/classifier/i.test(e.message??""),n=e.message?.trim()||"Claude needs your permission";return{key:"permission:confirm",header:s?"Permission (auto mode)":"Permission",question:t?`${n}
2
+ ${t}`:n,multiSelect:!1,options:[...s?L:C]}},parseQuestions(e,t){if(e==="AskUserQuestion"){const s=t&&typeof t=="object"?t.questions:void 0;if(!Array.isArray(s))return[h];const n=[];for(const o of s){if(!o||typeof o!="object")continue;const l=r(o.question),c=r(o.header),u=o.multiSelect===!0,i=U(o.options);if(!l||i.length===0)continue;const y=c??l.slice(0,24),p=!u&&i.some(d=>d.preview!=null);n.push({key:`AskUserQuestion:${y}`,header:c,question:l,options:p?[...M(i),...B(i.length)]:[...i,...q(i.length,u)],multiSelect:u,previewMode:p})}return n.length===0?[h]:((n.length>=2||n.some(o=>o.multiSelect))&&n.push(Y()),n)}return[{key:"ExitPlanMode:approve",header:"Exit plan mode?",question:"Claude wants to exit plan mode",multiSelect:!1,options:planApprovalOptions(k())}]},eventQuestion(e,t){return e==="PreModelSwitch"?R(t.raw):null},async preQuestion(e){if(!e)return null;const t=T(e,w);return t===null?null:g(t)}};
@@ -1 +1 @@
1
- export const CLAUDE_RESUME={supported:!0,bin:"claude",args:s=>["--resume",s,"-p"],promptStdin:!0,openArgs:s=>["--resume",s],extractArgs:(s,e)=>["--resume",s,"--fork-session","--no-session-persistence","--session-id",e],minVersion:"2.1.287"};
1
+ export const CLAUDE_RESUME={supported:!0,bin:"claude",args:e=>["--resume",e,"-p"],promptStdin:!0,openArgs:e=>["--resume",e],extractArgs:(e,s)=>["--resume",e,"--fork-session","--no-session-persistence","--session-id",s],minVersion:"2.1.287"};
@@ -1 +1 @@
1
- import{readNewLines as l,transcriptSize as a}from"./transcript-cursor.js";const s=new Map,f=64;export const CLAUDE_REWIND={async sessionRewinds({transcriptPath:t}){if(!t)return null;const e=a(t);if(e===null)return s.delete(t),null;const o=s.get(t);s.delete(t);const n=o??{cur:{offset:0},marks:[],seenRoot:!1};e<n.cur.offset&&(n.cur.offset=0,n.marks=[],n.seenRoot=!1);const u=l(t,n.cur,e);if(u===null)return null;for(const r of u){if(!r.includes('"type":"user"'))continue;const i=parseRewindLine(r,n.seenRoot);i&&n.marks.push(i);try{c(JSON.parse(r))&&(n.seenRoot=!0)}catch{}}if(s.size>=f){const r=s.keys().next().value;r!==void 0&&s.delete(r)}return s.set(t,n),n.marks}};export function parseRewindLine(t,e){if(!t.includes('"type":"user"'))return null;let o;try{o=JSON.parse(t)}catch{return null}if(!c(o)||!e)return null;const n=o.timestamp;return typeof n!="string"?null:{at:n,boundaryAt:null}}function c(t){if(t.type!=="user"||t.parentUuid!==null||t.isSidechain===!0)return!1;const e=t.message?.content;return!(typeof e=="string"&&e.startsWith("<command-message>"))}
1
+ import{readNewLines as f,transcriptSize as c}from"./transcript-cursor.js";const t=new Map,a=64;export const CLAUDE_REWIND={async sessionRewinds({transcriptPath:e}){if(!e)return null;const s=c(e);if(s===null)return t.delete(e),null;const u=t.get(e);t.delete(e);const n=u??{cur:{offset:0},marks:[],seenRoot:!1};s<n.cur.offset&&(n.cur.offset=0,n.marks=[],n.seenRoot=!1);const o=f(e,n.cur,s);if(o===null)return null;for(const r of o){if(!r.includes('"type":"user"'))continue;const i=parseRewindLine(r,n.seenRoot);i&&n.marks.push(i);try{l(JSON.parse(r))&&(n.seenRoot=!0)}catch{}}if(t.size>=a){const r=t.keys().next().value;r!==void 0&&t.delete(r)}return t.set(e,n),n.marks}};export function parseRewindLine(e,s){if(!e.includes('"type":"user"'))return null;let u;try{u=JSON.parse(e)}catch{return null}if(!l(u)||!s)return null;const n=u.timestamp;return typeof n!="string"?null:{at:n,boundaryAt:null}}function l(e){if(e.type!=="user"||e.parentUuid!==null||e.isSidechain===!0)return!1;const s=e.message?.content;return!(typeof s=="string"&&s.startsWith("<command-message>"))}
@@ -1 +1 @@
1
- import{captureHookGroup as r,sweepWeaveHookEvents as d}from"./capture.js";const f=".claude/helpers/statusline.cjs",S="Generated by weave \u2014 do not edit manually";export const WEAVE_PERMISSIONS_ALLOW=["Bash(npx weave:*)","Bash(pnpm:*)","Bash(npm:*)"],WEAVE_PERMISSIONS_DENY=["Read(./.env)","Read(./.env.*)","Read(./secrets/*)"];export function generateSettingsJson(n){const{components:t,hooks:e,platform:u,helpersDir:o}=n,c={$comment:S};if(t.helpers){const s={};e.preToolUse&&(s.PreToolUse=r("PreToolUse",o)),e.postToolUse&&(s.PostToolUse=r("PostToolUse",o)),e.userPromptSubmit&&(s.UserPromptSubmit=r("UserPromptSubmit",o)),e.sessionStart&&(s.SessionStart=r("SessionStart",o)),e.stop&&(s.Stop=r("Stop",o)),e.stopFailure&&(s.StopFailure=r("StopFailure",o)),e.subagentStop&&(s.SubagentStop=r("SubagentStop",o)),e.subagentStart&&(s.SubagentStart=r("SubagentStart",o)),e.notification&&(s.Notification=r("Notification",o)),e.postToolUseFailure&&(s.PostToolUseFailure=r("PostToolUseFailure",o)),e.permissionRequest&&(s.PermissionRequest=r("PermissionRequest",o)),e.permissionDenied&&(s.PermissionDenied=r("PermissionDenied",o)),e.preCompact&&(s.PreCompact=r("PreCompact",o)),e.sessionEnd&&(s.SessionEnd=r("SessionEnd",o)),e.preModelSwitch&&(s.PreModelSwitch=r("PreModelSwitch",o),s.PostModelSwitch=r("PostModelSwitch",o)),c.hooks=s}return c.permissions={allow:[...WEAVE_PERMISSIONS_ALLOW],deny:[...WEAVE_PERMISSIONS_DENY]},c.env={WEAVE_ENABLED:"true"},t.helpers&&(c.statusLine={type:"command",command:u.os==="windows"?`node "${o}/statusline.cjs"`:"node "+o+"/statusline.cjs",padding:0,refreshInterval:30}),c}export function mergeSettingsJson(n,t){const e={...n},u=t.hooks;if(u&&typeof u=="object"){const i=d(l(e.hooks)?{...e.hooks}:{})??{};for(const[a,p]of Object.entries(u)){const m=i[a];m===void 0?i[a]=p:Array.isArray(m)&&(i[a]=[...m,...Array.isArray(p)?p:[]])}e.hooks=i}const o=e.statusLine;t.statusLine&&(o===void 0||statusLineIsWeave(o))&&(e.statusLine=t.statusLine);const c=t.permissions;if(c&&typeof c=="object"){const i=l(e.permissions)?e.permissions:{};for(const a of["allow","deny"]){const p=c[a],m=i[a];Array.isArray(p)?i[a]=y(m,p):m===void 0&&(i[a]=p)}e.permissions=i}const s=t.env;if(s&&typeof s=="object"){const i=l(e.env)?e.env:{};for(const[a,p]of Object.entries(s))i[a]===void 0&&(i[a]=p);e.env=i}return e}function l(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}export function statusLineIsWeave(n){if(!l(n))return!1;const t=n.command;return typeof t=="string"&&h(t,f)}function h(n,t){return n.replace(/\\/g,"/").includes(t)}function y(n,t){return Array.isArray(n)?[...n,...t.filter(e=>!n.includes(e))]:[...t]}export function stripWeaveSettings(n){const t={...n};if(l(t.hooks)){const e=d(t.hooks);e?t.hooks=e:delete t.hooks}if(statusLineIsWeave(t.statusLine)&&delete t.statusLine,l(t.permissions)){const e={...t.permissions},u=(o,c)=>{const s=e[o];if(!Array.isArray(s))return;const i=s.filter(a=>!c.includes(a));i.length>0?e[o]=i:delete e[o]};u("allow",WEAVE_PERMISSIONS_ALLOW),u("deny",WEAVE_PERMISSIONS_DENY),Object.keys(e).length>0?t.permissions=e:delete t.permissions}if(l(t.env)){const e={...t.env};delete e.WEAVE_ENABLED,Object.keys(e).length>0?t.env=e:delete t.env}return t.$comment===S&&delete t.$comment,t}
1
+ import{captureHookGroup as r,sweepWeaveHookEvents as m}from"./capture.js";const S=".claude/helpers/statusline.cjs",d="Generated by weave \u2014 do not edit manually";export const WEAVE_PERMISSIONS_ALLOW=["Bash(npx weave:*)","Bash(pnpm:*)","Bash(npm:*)"],WEAVE_PERMISSIONS_DENY=["Read(./.env)","Read(./.env.*)","Read(./secrets/*)"];export function generateSettingsJson(n){const{components:s,hooks:e,platform:p,helpersDir:o}=n,c={$comment:d};if(s.helpers){const t={};e.preToolUse&&(t.PreToolUse=r("PreToolUse",o)),e.postToolUse&&(t.PostToolUse=r("PostToolUse",o)),e.userPromptSubmit&&(t.UserPromptSubmit=r("UserPromptSubmit",o)),e.sessionStart&&(t.SessionStart=r("SessionStart",o)),e.stop&&(t.Stop=r("Stop",o)),e.stopFailure&&(t.StopFailure=r("StopFailure",o)),e.subagentStop&&(t.SubagentStop=r("SubagentStop",o)),e.subagentStart&&(t.SubagentStart=r("SubagentStart",o)),e.notification&&(t.Notification=r("Notification",o)),e.postToolUseFailure&&(t.PostToolUseFailure=r("PostToolUseFailure",o)),e.permissionRequest&&(t.PermissionRequest=r("PermissionRequest",o)),e.permissionDenied&&(t.PermissionDenied=r("PermissionDenied",o)),e.preCompact&&(t.PreCompact=r("PreCompact",o)),e.sessionEnd&&(t.SessionEnd=r("SessionEnd",o)),e.preModelSwitch&&(t.PreModelSwitch=r("PreModelSwitch",o),t.PostModelSwitch=r("PostModelSwitch",o)),c.hooks=t}return c.permissions={allow:[...WEAVE_PERMISSIONS_ALLOW],deny:[...WEAVE_PERMISSIONS_DENY]},c.env={WEAVE_ENABLED:"true"},s.helpers&&(c.statusLine={type:"command",command:p.os==="windows"?`node "${o}/statusline.cjs"`:"node "+o+"/statusline.cjs",padding:0,refreshInterval:30}),c}export function mergeSettingsJson(n,s){const e={...n},p=s.hooks;if(p&&typeof p=="object"){const i=m(l(e.hooks)?{...e.hooks}:{})??{};for(const[a,f]of Object.entries(p)){const u=i[a];u===void 0?i[a]=f:Array.isArray(u)&&(i[a]=[...u,...Array.isArray(f)?f:[]])}e.hooks=i}const o=e.statusLine;s.statusLine&&(o===void 0||statusLineIsWeave(o))&&(e.statusLine=s.statusLine);const c=s.permissions;if(c&&typeof c=="object"){const i=l(e.permissions)?e.permissions:{};for(const a of["allow","deny"]){const f=c[a],u=i[a];Array.isArray(f)?i[a]=E(u,f):u===void 0&&(i[a]=f)}e.permissions=i}const t=s.env;if(t&&typeof t=="object"){const i=l(e.env)?e.env:{};for(const[a,f]of Object.entries(t))i[a]===void 0&&(i[a]=f);e.env=i}return e}function l(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}export function statusLineIsWeave(n){if(!l(n))return!1;const s=n.command;return typeof s=="string"&&h(s,S)}function h(n,s){return n.replace(/\\/g,"/").includes(s)}function E(n,s){return Array.isArray(n)?[...n,...s.filter(e=>!n.includes(e))]:[...s]}export function stripWeaveSettings(n){const s={...n};if(l(s.hooks)){const e=m(s.hooks);e?s.hooks=e:delete s.hooks}if(statusLineIsWeave(s.statusLine)&&delete s.statusLine,l(s.permissions)){const e={...s.permissions},p=(o,c)=>{const t=e[o];if(!Array.isArray(t))return;const i=t.filter(a=>!c.includes(a));i.length>0?e[o]=i:delete e[o]};p("allow",WEAVE_PERMISSIONS_ALLOW),p("deny",WEAVE_PERMISSIONS_DENY),Object.keys(e).length>0?s.permissions=e:delete s.permissions}if(l(s.env)){const e={...s.env};delete e.WEAVE_ENABLED,Object.keys(e).length>0?s.env=e:delete s.env}return s.$comment===d&&delete s.$comment,s}
@@ -1,2 +1,2 @@
1
- import{existsSync as a}from"node:fs";const s=2e3,o=/^[^\x00-\x1f\x7f]+$/,c=/^<(?:analysis|summary)>/,p="exploring|reviewing|inspecting|tracing|checking|locating|reporting|summarizing|examining|reading|searching|scanning|analyzing|investigating|fetching|loading|probing|auditing|mapping|listing|comparing|verifying|testing|extracting|processing|measuring|assessing|evaluating|identifying|confirming|drafting|refactoring|debugging|grepping",l=new RegExp(`^[\\p{P}\\s]*(${p})\\b`,"iu"),f=/\p{Script=Han}/u,m=n=>!n.includes(`
2
- `)&&n.length<=80&&!f.test(n)&&l.test(n),e=(n,t)=>n&&typeof n=="object"?n[t]:void 0;export const CLAUDE_SIDE_QUESTION={command(n){return`/btw ${n}`},validate(n){const t=n.trim();return t?t.length>s?{ok:!1,error:`\u95EE\u9898\u8FC7\u957F\uFF08\u4E0A\u9650 ${s} \u5B57\u7B26\uFF09`}:o.test(t)?{ok:!0,text:t}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u542B\u6362\u884C\u6216\u63A7\u5236\u5B57\u7B26\uFF08\u4F1A\u63D0\u524D\u63D0\u4EA4\uFF09"}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u4E3A\u7A7A"}},answerOf(n,t){if(n!=="SubagentStop")return null;const r=e(t,"raw"),u=e(r,"agent_transcript_path");if(typeof u!="string"||!u||a(u))return null;const g=e(r,"last_assistant_message");if(typeof g!="string")return null;const i=g.trim();return i&&!c.test(i)&&!m(i)?i:null}};
1
+ import{existsSync as o}from"node:fs";const a=2e3,c=/^[^\x00-\x1f\x7f]+$/,u=/^<(?:analysis|summary)>/,p="exploring|reviewing|inspecting|tracing|checking|locating|reporting|summarizing|examining|reading|searching|scanning|analyzing|investigating|fetching|loading|probing|auditing|mapping|listing|comparing|verifying|testing|extracting|processing|measuring|assessing|evaluating|identifying|confirming|drafting|refactoring|debugging|grepping",f=new RegExp(`^[\\p{P}\\s]*(${p})\\b`,"iu"),l=/\p{Script=Han}/u,S=n=>!n.includes(`
2
+ `)&&n.length<=80&&!l.test(n)&&f.test(n),e=(n,t)=>n&&typeof n=="object"?n[t]:void 0;export const CLAUDE_SIDE_QUESTION={command(n){return`/btw ${n}`},validate(n){const t=n.trim();return t?t.length>a?{ok:!1,error:`\u95EE\u9898\u8FC7\u957F\uFF08\u4E0A\u9650 ${a} \u5B57\u7B26\uFF09`}:c.test(t)?{ok:!0,text:t}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u542B\u6362\u884C\u6216\u63A7\u5236\u5B57\u7B26\uFF08\u4F1A\u63D0\u524D\u63D0\u4EA4\uFF09"}:{ok:!1,error:"\u95EE\u9898\u4E0D\u80FD\u4E3A\u7A7A"}},answerOf(n,t){if(n!=="SubagentStop")return null;const s=e(t,"raw"),r=e(s,"agent_transcript_path");if(typeof r!="string"||!r||o(r))return null;const g=e(s,"last_assistant_message");if(typeof g!="string")return null;const i=g.trim();return i&&!u.test(i)&&!S(i)?i:null}};
@@ -1,4 +1,4 @@
1
- import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_FORMAT as d,SEGMENT_ORDER as p}from"./config.js";const h={gray:"90",red:"31",green:"32",yellow:"33",blue:"34",magenta:"35",cyan:"36"},f={gray:"100",red:"41",green:"42",yellow:"43",blue:"44",magenta:"45",cyan:"46"},g="\u2588",m="\u2591",E=10,F=8*1024*1024,r=5e3,v=3600,y=60,b=60,w=60,C=5;export function generateStatuslineScript(n,t){const u=JSON.stringify(n),a=JSON.stringify(t.cacheDir),i=JSON.stringify(h),s=JSON.stringify(f),o=JSON.stringify(d),l=JSON.stringify(c);return`#!/usr/bin/env node
1
+ import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_FORMAT as d,SEGMENT_ORDER as p}from"./config.js";const h={gray:"90",red:"31",green:"32",yellow:"33",blue:"34",magenta:"35",cyan:"36"},f={gray:"100",red:"41",green:"42",yellow:"43",blue:"44",magenta:"45",cyan:"46"},g="\u2588",m="\u2591",v=10,y=8*1024*1024,r=5e3,b=3600,w=60,_=60,C=60,k=5;export function generateStatuslineScript(n,t){const i=JSON.stringify(n),s=JSON.stringify(t.cacheDir),a=JSON.stringify(h),o=JSON.stringify(f),l=JSON.stringify(d),u=JSON.stringify(c);return`#!/usr/bin/env node
2
2
  /**
3
3
  * weave statusline \u2014 generated by the weave dashboard.
4
4
  * Reads Claude Code's statusline JSON from stdin and prints a summary.
@@ -7,20 +7,20 @@ import{CONTEXT_STYLE_FORMAT as c,POWERLINE_DEFAULT_GLYPHS as e,SEGMENT_DEFAULT_F
7
7
  */
8
8
  'use strict';
9
9
 
10
- const CONFIG = ${u};
11
- const ANSI = ${i};
12
- const BG = ${s};
13
- const SEGMENT_FORMAT = ${o};
14
- const CONTEXT_FORMAT = ${l};
10
+ const CONFIG = ${i};
11
+ const ANSI = ${a};
12
+ const BG = ${o};
13
+ const SEGMENT_FORMAT = ${l};
14
+ const CONTEXT_FORMAT = ${u};
15
15
  const BAR_FILL = '${g}';
16
16
  const BAR_EMPTY = '${m}';
17
- const BAR_CELLS = ${E};
18
- const GIT_IDENTITY_TTL = ${v};
19
- const GIT_CHANGES_TTL = ${y};
20
- const GIT_BRANCH_TTL = ${b};
21
- const GIT_SYNC_TTL = ${w};
22
- const GIT_RETRY_TTL = ${C};
23
- const CACHE_DIR = ${a};
17
+ const BAR_CELLS = ${v};
18
+ const GIT_IDENTITY_TTL = ${b};
19
+ const GIT_CHANGES_TTL = ${w};
20
+ const GIT_BRANCH_TTL = ${_};
21
+ const GIT_SYNC_TTL = ${C};
22
+ const GIT_RETRY_TTL = ${k};
23
+ const CACHE_DIR = ${s};
24
24
  // Stamped into the row-0 logo so the running version is always visible.
25
25
  const WEAVE_VERSION = ${JSON.stringify(t.version)};
26
26
  // Powerline glyphs (Nerd Font), configurable via CONFIG.powerline: undefined
@@ -376,7 +376,7 @@ function sessionTokens(transcriptPath) {
376
376
  store.tokens[transcriptPath] = entry;
377
377
  if (stat.size === entry.offset) return entry.total || null;
378
378
 
379
- var len = Math.min(stat.size - entry.offset, ${F});
379
+ var len = Math.min(stat.size - entry.offset, ${y});
380
380
  var buf = Buffer.alloc(len);
381
381
  var read = 0;
382
382
  var fd = -1;
@@ -1 +1 @@
1
- import{readFileSync as g}from"node:fs";import{createHash as d}from"node:crypto";import f from"node:path";export function gitCacheKeyOf(a){return d("sha1").update(a.toLowerCase().replace(/\\/g,"/").replace(/\/+$/,"")).digest("hex").slice(0,16)}export function statuslineFactsFromCache(a,l,u=Date.now()){let c;try{c=JSON.parse(g(f.join(a,`git-${gitCacheKeyOf(l)}.json`),"utf-8"))}catch{return null}const s=t=>{const i=c.git?.[t];return!i||typeof i.expires!="number"||i.expires<=u?null:i.value??null},e={},o=s("branch");if(typeof o=="string"&&o){e.git={branch:o};const t=s("sync");t&&typeof t=="object"&&t.sync&&(e.git.ahead=t.ahead??"",e.git.behind=t.behind??"",e.git.sync=t.sync)}const n=s("git_user");n&&typeof n=="object"&&n.user&&(e.git_user={user:n.user,email:n.email??""});const r=s("changes");return r&&typeof r=="object"&&(e.changes={added:String(r.added??0),deleted:String(r.deleted??0),files:String(r.files??0)}),Object.keys(e).length>0?e:null}
1
+ import{readFileSync as f}from"node:fs";import{createHash as g}from"node:crypto";import d from"node:path";export function gitCacheKeyOf(c){return g("sha1").update(c.toLowerCase().replace(/\\/g,"/").replace(/\/+$/,"")).digest("hex").slice(0,16)}export function statuslineFactsFromCache(c,l,u=Date.now()){let o;try{o=JSON.parse(f(d.join(c,`git-${gitCacheKeyOf(l)}.json`),"utf-8"))}catch{return null}const s=t=>{const i=o.git?.[t];return!i||typeof i.expires!="number"||i.expires<=u?null:i.value??null},e={},a=s("branch");if(typeof a=="string"&&a){e.git={branch:a};const t=s("sync");t&&typeof t=="object"&&t.sync&&(e.git.ahead=t.ahead??"",e.git.behind=t.behind??"",e.git.sync=t.sync)}const n=s("git_user");n&&typeof n=="object"&&n.user&&(e.git_user={user:n.user,email:n.email??""});const r=s("changes");return r&&typeof r=="object"&&(e.changes={added:String(r.added??0),deleted:String(r.deleted??0),files:String(r.files??0)}),Object.keys(e).length>0?e:null}
@@ -1,2 +1,2 @@
1
- import{readFile as o,writeFile as m,mkdir as u,access as l}from"node:fs/promises";import n from"node:path";import{SEGMENT_ORDER as p}from"./config.js";import{generateStatuslineScript as f}from"./generator.js";import{statuslineFactsFromCache as d}from"./git-cache.js";const h=".claude/helpers",S="statusline.cjs",w=".claude/settings.json";async function g(t){try{return await l(t),!0}catch{return!1}}export async function ensureSettingsStatusLine(t,a){const e=n.join(t,w),i=process.platform==="win32";let r={};if(await g(e))try{r=JSON.parse(await o(e,"utf-8"))}catch{r={}}const s=a.scriptPath,c=i?`node "${s}"`:`node ${s}`;r.statusLine={type:"command",command:c,padding:0,refreshInterval:Math.max(1,Math.round(a.refreshInterval))},await u(n.dirname(e),{recursive:!0}),await m(e,`${JSON.stringify(r,null,2)}
2
- `,"utf-8")}export const CLAUDE_STATUSLINE={segments:p,tui:"injectable",scriptRelPath:`${h}/${S}`,generate:(t,a)=>f(t,a),wire:ensureSettingsStatusLine,facts:d};
1
+ import{readFile as o,writeFile as m,mkdir as u,access as l}from"node:fs/promises";import n from"node:path";import{SEGMENT_ORDER as p}from"./config.js";import{generateStatuslineScript as f}from"./generator.js";import{statuslineFactsFromCache as S}from"./git-cache.js";const d=".claude/helpers",h="statusline.cjs",E=".claude/settings.json";async function w(t){try{return await l(t),!0}catch{return!1}}export async function ensureSettingsStatusLine(t,e){const r=n.join(t,E),i=process.platform==="win32";let s={};if(await w(r))try{s=JSON.parse(await o(r,"utf-8"))}catch{s={}}const a=e.scriptPath,c=i?`node "${a}"`:`node ${a}`;s.statusLine={type:"command",command:c,padding:0,refreshInterval:Math.max(1,Math.round(e.refreshInterval))},await u(n.dirname(r),{recursive:!0}),await m(r,`${JSON.stringify(s,null,2)}
2
+ `,"utf-8")}export const CLAUDE_STATUSLINE={segments:p,tui:"injectable",scriptRelPath:`${d}/${h}`,generate:(t,e)=>f(t,e),wire:ensureSettingsStatusLine,facts:S};
@@ -1,2 +1,2 @@
1
- import{closeSync as y,openSync as p,readSync as S,statSync as h}from"node:fs";export function transcriptSize(e){try{return h(e).size}catch{return null}}export function isCompleteJsonLine(e){try{return JSON.parse(e),!0}catch{return!1}}export function readNewLines(e,t,s,o=isCompleteJsonLine){if(s<t.offset&&(t.offset=0),s===t.offset)return[];const r=t.offset,n=Buffer.alloc(s-r);let f;const c=p(e,"r");try{f=S(c,n,0,n.length,r)}catch{return null}finally{y(c)}const u=n.lastIndexOf(10,f-1);if(u<0){const i=n.subarray(0,f).toString("utf8");return o(i)?(t.offset=r+f,[i]):[]}const l=n.subarray(0,u+1).toString("utf8").split(`
2
- `).slice(0,-1),a=n.subarray(u+1,f).toString("utf8");return a!==""&&o(a)?(l.push(a),t.offset=r+f):t.offset=r+u+1,l}export function readTail(e,t){const s=transcriptSize(e);if(s===null)return null;const o=Math.max(0,s-t),r=Buffer.alloc(s-o),n=p(e,"r");try{const f=S(n,r,0,r.length,o);return r.subarray(0,f).toString("utf8")}catch{return null}finally{y(n)}}
1
+ import{closeSync as y,openSync as S,readSync as p,statSync as d}from"node:fs";export function transcriptSize(e){try{return d(e).size}catch{return null}}export function isCompleteJsonLine(e){try{return JSON.parse(e),!0}catch{return!1}}export function readNewLines(e,t,o,s=isCompleteJsonLine){if(o<t.offset&&(t.offset=0),o===t.offset)return[];const n=t.offset,r=Buffer.alloc(o-n);let f;const u=S(e,"r");try{f=p(u,r,0,r.length,n)}catch{return null}finally{y(u)}const a=r.lastIndexOf(10,f-1);if(a<0){const i=r.subarray(0,f).toString("utf8");return s(i)?(t.offset=n+f,[i]):[]}const c=r.subarray(0,a+1).toString("utf8").split(`
2
+ `).slice(0,-1),l=r.subarray(a+1,f).toString("utf8");return l!==""&&s(l)?(c.push(l),t.offset=n+f):t.offset=n+a+1,c}export function readTail(e,t){const o=transcriptSize(e);if(o===null)return null;const s=Math.max(0,o-t),n=Buffer.alloc(o-s),r=S(e,"r");try{const f=p(r,n,0,n.length,s);return n.subarray(0,f).toString("utf8")}catch{return null}finally{y(r)}}
@@ -1,7 +1,7 @@
1
- const m="[Request interrupted by user";function y(s){return typeof s=="string"?s:Array.isArray(s)?s.map(n=>{const e=n?.text;return typeof e=="string"?e:""}).join(""):""}export function interruptMarkerAt(s){let n=null;for(const e of s.split(`
2
- `)){if(!e.includes(m))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o;if(t?.type!=="user"||!y(t.message?.content).startsWith(m))continue;const i=Date.parse(String(t.timestamp));Number.isFinite(i)&&(n===null||i>n)&&(n=i)}return n}const d="<synthetic>";export function currentModelAt(s){let n=null;for(const e of s.split(`
3
- `)){if(!e.includes('"model"'))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o,i=t?.message?.model??t?.model;typeof i!="string"||!i||i===d||(n=i)}return n}export function currentEffortAt(s){let n=null;for(const e of s.split(`
4
- `)){if(!e.includes('"effort"'))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o?.effort;typeof t!="string"||!t||(n=t)}return n}export function currentModeAt(s){let n=null;for(const e of s.split(`
5
- `)){if(!e.includes("permissionMode"))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o?.permissionMode;typeof t!="string"||!t||(n=t)}return n}export function currentContextTokensAt(s){let n=null;for(const e of s.split(`
6
- `)){if(!e.includes('"usage"'))continue;let o;try{o=JSON.parse(e)}catch{continue}const t=o?.message?.usage;if(!t||typeof t!="object")continue;const i=u=>typeof t[u]=="number"&&Number.isFinite(t[u])?t[u]:0,f=i("input_tokens")+i("output_tokens")+i("cache_read_input_tokens")+i("cache_creation_input_tokens");f<=0||(n=f)}return n}export function preQuestionTextAt(s){const n=/"(?:AskUserQuestion|ExitPlanMode)"/,e=s.split(`
7
- `);let o=null,t="";for(let l=e.length-1;l>=0;l--){const a=e[l];if(!n.test(a))continue;let c;try{c=JSON.parse(a)}catch{continue}const r=c;if(!(r?.type!=="assistant"||!r.message?.content?.some(p=>p?.type==="tool_use"&&(p.name==="AskUserQuestion"||p.name==="ExitPlanMode")))){o=typeof r.message?.id=="string"?r.message.id:null,t=typeof r.timestamp=="string"?r.timestamp:"";break}}if(o===null)return null;const i=[];let f=t;for(const l of e){if(!l.includes(o))continue;let a;try{a=JSON.parse(l)}catch{continue}const c=a;if(!(c?.type!=="assistant"||c.message?.id!==o))for(const r of c.message?.content??[])r?.type==="text"&&typeof r.text=="string"&&r.text.trim()&&(i.push(r.text),typeof c.timestamp=="string"&&(f=c.timestamp))}const u=i.join("").trim();return u?{at:f,text:u}:null}
1
+ const m="[Request interrupted by user";function y(s){return typeof s=="string"?s:Array.isArray(s)?s.map(e=>{const t=e?.text;return typeof t=="string"?t:""}).join(""):""}export function interruptMarkerAt(s){let e=null;for(const t of s.split(`
2
+ `)){if(!t.includes(m))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n;if(o?.type!=="user"||!y(o.message?.content).startsWith(m))continue;const i=Date.parse(String(o.timestamp));Number.isFinite(i)&&(e===null||i>e)&&(e=i)}return e}const d="<synthetic>";export function currentModelAt(s){let e=null;for(const t of s.split(`
3
+ `)){if(!t.includes('"model"'))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n,i=o?.message?.model??o?.model;typeof i!="string"||!i||i===d||(e=i)}return e}export function currentEffortAt(s){let e=null;for(const t of s.split(`
4
+ `)){if(!t.includes('"effort"'))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n?.effort;typeof o!="string"||!o||(e=o)}return e}export function currentModeAt(s){let e=null;for(const t of s.split(`
5
+ `)){if(!t.includes("permissionMode"))continue;let n;try{n=JSON.parse(t)}catch{continue}const o=n?.permissionMode;typeof o!="string"||!o||(e=o)}return e}export function currentContextTokensAt(s){let e=null;for(const t of s.split(`
6
+ `)){if(!t.includes('"usage"'))continue;let n;try{n=JSON.parse(t)}catch{continue}const i=n?.message?.usage;if(!i||typeof i!="object")continue;const l=c=>typeof i[c]=="number"&&Number.isFinite(i[c])?i[c]:0,f=l("input_tokens")+l("output_tokens")+l("cache_read_input_tokens")+l("cache_creation_input_tokens");f<=0||(e=f)}return e}export function preQuestionTextAt(s){const e=/"(?:AskUserQuestion|ExitPlanMode)"/,t=s.split(`
7
+ `);let n=null,o="";for(let c=t.length-1;c>=0;c--){const a=t[c];if(!e.test(a))continue;let u;try{u=JSON.parse(a)}catch{continue}const r=u;if(!(r?.type!=="assistant"||!r.message?.content?.some(p=>p?.type==="tool_use"&&(p.name==="AskUserQuestion"||p.name==="ExitPlanMode")))){n=typeof r.message?.id=="string"?r.message.id:null,o=typeof r.timestamp=="string"?r.timestamp:"";break}}if(n===null)return null;const i=[];let l=o;for(const c of t){if(!c.includes(n))continue;let a;try{a=JSON.parse(c)}catch{continue}const u=a;if(!(u?.type!=="assistant"||u.message?.id!==n))for(const r of u.message?.content??[])r?.type==="text"&&typeof r.text=="string"&&r.text.trim()&&(i.push(r.text),typeof u.timestamp=="string"&&(l=u.timestamp))}const f=i.join("").trim();return f?{at:l,text:f}:null}
@@ -1 +1 @@
1
- import t from"node:path";import{FILE_ASSET_SPECS as n}from"../shared/file-specs.js";import{readCodexMcpServers as l,removeCodexMcpServer as a,writeCodexMcpServer as d}from"./mcp.js";const i=e=>t.join(e,".codex","config.toml");export const CODEX_ASSETS={harness:"codex",targetDir(e,r,s,o){const c=n[e].dirs.codex;if(r!=="user"||!c?.user)throw new Error(`"${e}" has no Codex ${r==="user"?"user":"project"} surface`);return t.join(o,...c.user.split("/"))},projectSkillsRoots:()=>[".codex/skills",".agents/skills"],globalSkillsRoots:e=>[t.join(e,...".agents/skills".split("/")),t.join(e,...".codex/skills".split("/"))],userConfigFile:e=>i(e),mcpScopes:()=>["user"],mcpDest:(e,r)=>e==="user"?i(r):void 0,pluginCacheDir:e=>t.join(e,".codex","plugins","cache"),async mcpRead(e,r,s){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return l(i(s))},async mcpWrite(e,r,s,o,c){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");await d(o,c,i(s))},async mcpRemove(e,r,s,o){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return a(o,i(s))},classify(e){return e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")?!0:e.slice(e.lastIndexOf("/")+1)==="AGENTS.md"},ignore(e){return!(e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")||e==="AGENTS.md")}};
1
+ import t from"node:path";import{FILE_ASSET_SPECS as c}from"../shared/file-specs.js";import{readCodexMcpServers as d,removeCodexMcpServer as l,writeCodexMcpServer as u}from"./mcp.js";const i=e=>t.join(e,".codex","config.toml");export const CODEX_ASSETS={harness:"codex",targetDir(e,r,o,s){const n=c[e].dirs.codex;if(r!=="user"||!n?.user)throw new Error(`"${e}" has no Codex ${r==="user"?"user":"project"} surface`);return t.join(s,...n.user.split("/"))},projectSkillsRoots:()=>[".codex/skills",".agents/skills"],globalSkillsRoots:e=>[t.join(e,...".agents/skills".split("/")),t.join(e,...".codex/skills".split("/"))],userConfigFile:e=>i(e),mcpScopes:()=>["user"],mcpDest:(e,r)=>e==="user"?i(r):void 0,pluginCacheDir:e=>t.join(e,".codex","plugins","cache"),async mcpRead(e,r,o){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return d(i(o))},async mcpWrite(e,r,o,s,n){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");await u(s,n,i(o))},async mcpRemove(e,r,o,s){if(e!=="user")throw new Error("Codex MCP servers are user-level only (~/.codex/config.toml)");return l(s,i(o))},classify(e){return e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")?!0:e.slice(e.lastIndexOf("/")+1)==="AGENTS.md"},ignore(e){return!(e===".codex"||e.startsWith(".codex/")||e===".agents"||e.startsWith(".agents/")||e==="AGENTS.md")}};
@@ -1,2 +1,2 @@
1
- import{access as A,mkdir as y,readFile as d,unlink as k,writeFile as x}from"node:fs/promises";import i from"node:path";import{HARNESS_EVENTS as j}from"@weavecode/core";import{generateHookHandler as g}from"../claude/capture.js";import{CANONICAL_TO_WIRE as C}from"./event-source.js";import{codexHome as v}from"./home.js";export const CODEX_HOOK_EVENTS=j.codex.map(t=>C[t]??t),CODEX_HOOK_HANDLER_MARKER="helpers/hook-handler.cjs";const O="@version weave@",H=3;function a(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function f(t){return t.replace(/\\/g,"/")}function h(t){return i.join(v(t),"hooks.json")}function E(t){return i.join(v(t),"helpers")}function u(t){return i.join(E(t),"hook-handler.cjs")}export function groupIsWeave(t){if(!a(t))return!1;const e=t.hooks;return Array.isArray(e)?e.some(o=>{if(!a(o))return!1;const n=o.commandWindows;return typeof o.command=="string"&&f(o.command).includes(CODEX_HOOK_HANDLER_MARKER)||typeof n=="string"&&f(n).includes(CODEX_HOOK_HANDLER_MARKER)}):!1}export function sweepWeaveHookEvents(t){if(!a(t))return{};const e={};for(const[o,n]of Object.entries(t)){if(!Array.isArray(n)){e[o]=n;continue}const r=n.filter(s=>!groupIsWeave(s));r.length>0&&(e[o]=r)}return e}export function captureHookGroup(t,e){const o=`node "${f(e)}"`;return[{hooks:[{type:"command",command:o,commandWindows:o,timeout:H,...t==="PostToolUse"||t==="PermissionRequest"?{async:!0}:{}}]}]}export function captureGroupsPresent(t){if(!a(t))return!1;const e=t.hooks;return a(e)?Object.values(e).some(o=>Array.isArray(o)&&o.some(groupIsWeave)):!1}async function N(t){try{return await A(t),!0}catch{return!1}}async function l(t){let e;try{e=await d(t,"utf-8")}catch{return{}}let o;try{o=JSON.parse(e)}catch{throw new Error(`codex hooks file is not parseable JSON: ${t}`)}if(!a(o))throw new Error(`codex hooks file is not a JSON object: ${t}`);return o}async function m(t,e){await y(i.dirname(t),{recursive:!0}),await x(t,JSON.stringify(e,null,2)+`
2
- `,"utf-8")}export async function readUserCapture(t={}){const e=t.home,o=await l(h(e)).catch(()=>({}));return{installed:captureGroupsPresent(o),helperPresent:await N(u(e))}}export async function readScriptHealth(t={}){const e=t.home,o=u(e),n=(await readUserCapture({home:e})).installed;let r=null;try{r=await d(o,"utf-8")}catch{r=null}return{source:n?"user":"none",present:r!==null,weaveOwned:r!==null&&r.includes(O),generatedVersion:r?.match(/@version weave@(\S+)/)?.[1]??null,reportsInbox:!1,reportsPaneEnv:r!==null&&r.includes("terminalEnv()")}}export async function installUserCapture(t){const e=t.home,o=E(e);await y(o,{recursive:!0});const n=u(e);await x(n,g(t.version,"codex"),"utf-8");const r=h(e),s=await l(r),p=sweepWeaveHookEvents(s.hooks);for(const c of CODEX_HOOK_EVENTS){const w=p[c];p[c]=Array.isArray(w)?[...w,...captureHookGroup(c,n)]:captureHookGroup(c,n)}s.hooks=p,typeof s.description!="string"&&(s.description="weave hooks (generated \u2014 do not edit)"),await m(r,s)}export async function uninstallUserCapture(t={}){const e=t.home,o=h(e),n=await l(o).catch(()=>null);if(n){const s=sweepWeaveHookEvents(n.hooks);Object.keys(s).length===0?delete n.hooks:n.hooks=s,n.hooks===void 0&&(n.description===void 0||n.description==="weave hooks (generated \u2014 do not edit)")?await k(o).catch(()=>{}):await m(o,n)}const r=u(e);try{(await d(r,"utf-8")).includes(O)&&await k(r)}catch{}}export async function stripProjectCapture(t){const e=i.join(t,".codex","hooks.json"),o=await l(e).catch(()=>null);if(!o)return;const n=sweepWeaveHookEvents(o.hooks);Object.keys(n).length===0?delete o.hooks:o.hooks=n,await m(e,o)}export const CODEX_CAPTURE={harness:"codex",readUserCapture:t=>readUserCapture(t),installUserCapture:t=>installUserCapture(t),uninstallUserCapture:t=>uninstallUserCapture(t),stripProjectCapture,scriptHealth:t=>readScriptHealth(t)};
1
+ import{access as j,mkdir as y,readFile as p,unlink as k,writeFile as E}from"node:fs/promises";import a from"node:path";import{HARNESS_EVENTS as v}from"@weavecode/core";import{generateHookHandler as H}from"../claude/capture.js";import{CANONICAL_TO_WIRE as g}from"./event-source.js";import{codexHome as x}from"./home.js";export const CODEX_HOOK_EVENTS=v.codex.map(e=>g[e]??e),CODEX_HOOK_HANDLER_MARKER="helpers/hook-handler.cjs";const O="@version weave@",C=3;function i(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function d(e){return e.replace(/\\/g,"/")}function h(e){return a.join(x(e),"hooks.json")}function A(e){return a.join(x(e),"helpers")}function l(e){return a.join(A(e),"hook-handler.cjs")}export function groupIsWeave(e){if(!i(e))return!1;const o=e.hooks;return Array.isArray(o)?o.some(t=>{if(!i(t))return!1;const n=t.commandWindows;return typeof t.command=="string"&&d(t.command).includes(CODEX_HOOK_HANDLER_MARKER)||typeof n=="string"&&d(n).includes(CODEX_HOOK_HANDLER_MARKER)}):!1}export function sweepWeaveHookEvents(e){if(!i(e))return{};const o={};for(const[t,n]of Object.entries(e)){if(!Array.isArray(n)){o[t]=n;continue}const r=n.filter(s=>!groupIsWeave(s));r.length>0&&(o[t]=r)}return o}export function captureHookGroup(e,o){const t=`node "${d(o)}"`;return[{hooks:[{type:"command",command:t,commandWindows:t,timeout:C,...e==="PostToolUse"||e==="PermissionRequest"?{async:!0}:{}}]}]}export function captureGroupsPresent(e){if(!i(e))return!1;const o=e.hooks;return i(o)?Object.values(o).some(t=>Array.isArray(t)&&t.some(groupIsWeave)):!1}async function _(e){try{return await j(e),!0}catch{return!1}}async function f(e){let o;try{o=await p(e,"utf-8")}catch{return{}}let t;try{t=JSON.parse(o)}catch{throw new Error(`codex hooks file is not parseable JSON: ${e}`)}if(!i(t))throw new Error(`codex hooks file is not a JSON object: ${e}`);return t}async function m(e,o){await y(a.dirname(e),{recursive:!0}),await E(e,JSON.stringify(o,null,2)+`
2
+ `,"utf-8")}export async function readUserCapture(e={}){const o=e.home,t=await f(h(o)).catch(()=>({}));return{installed:captureGroupsPresent(t),helperPresent:await _(l(o))}}export async function readScriptHealth(e={}){const o=e.home,t=l(o),n=(await readUserCapture({home:o})).installed;let r=null;try{r=await p(t,"utf-8")}catch{r=null}return{source:n?"user":"none",present:r!==null,weaveOwned:r!==null&&r.includes(O),generatedVersion:r?.match(/@version weave@(\S+)/)?.[1]??null,reportsInbox:!1,reportsPaneEnv:r!==null&&r.includes("terminalEnv()")}}export async function installUserCapture(e){const o=e.home,t=A(o);await y(t,{recursive:!0});const n=l(o);await E(n,H(e.version,"codex"),"utf-8");const r=h(o),s=await f(r),c=sweepWeaveHookEvents(s.hooks);for(const u of CODEX_HOOK_EVENTS){const w=c[u];c[u]=Array.isArray(w)?[...w,...captureHookGroup(u,n)]:captureHookGroup(u,n)}s.hooks=c,typeof s.description!="string"&&(s.description="weave hooks (generated \u2014 do not edit)"),await m(r,s)}export async function uninstallUserCapture(e={}){const o=e.home,t=h(o),n=await f(t).catch(()=>null);if(n){const s=sweepWeaveHookEvents(n.hooks);Object.keys(s).length===0?delete n.hooks:n.hooks=s,n.hooks===void 0&&(n.description===void 0||n.description==="weave hooks (generated \u2014 do not edit)")?await k(t).catch(()=>{}):await m(t,n)}const r=l(o);try{(await p(r,"utf-8")).includes(O)&&await k(r)}catch{}}export async function stripProjectCapture(e){const o=a.join(e,".codex","hooks.json"),t=await f(o).catch(()=>null);if(!t)return;const n=sweepWeaveHookEvents(t.hooks);Object.keys(n).length===0?delete t.hooks:t.hooks=n,await m(o,t)}export const CODEX_CAPTURE={harness:"codex",readUserCapture:e=>readUserCapture(e),installUserCapture:e=>installUserCapture(e),uninstallUserCapture:e=>uninstallUserCapture(e),stripProjectCapture,scriptHealth:e=>readScriptHealth(e)};
@@ -1,4 +1,4 @@
1
- import{spawn as p}from"node:child_process";import{readdir as m,readFile as f,stat as b}from"node:fs/promises";import{homedir as S}from"node:os";import r from"node:path";import{codexCommandLine as x}from"./plugins.js";const k=[{name:"model",description:"Choose what model and reasoning effort to use",source:"builtin"},{name:"approvals",description:"Choose what Codex can do without approval",source:"builtin"},{name:"new",description:"Start a new chat during a conversation",source:"builtin"},{name:"init",description:"Create an AGENTS.md file with project instructions",source:"builtin"},{name:"compact",description:"Summarize the conversation to free context",source:"builtin"},{name:"diff",description:"Show the diff of the working tree",source:"builtin"},{name:"mention",description:"Mention a file in the conversation",argsHint:"<path>",source:"builtin"},{name:"status",description:"Show session configuration and token usage",source:"builtin"},{name:"mcp",description:"List configured MCP tools",source:"builtin"},{name:"prompts",description:"Browse and use custom prompts",source:"builtin"},{name:"skills",description:"Browse and use skills",source:"builtin"},{name:"plugins",description:"Browse and manage plugins",source:"builtin"},{name:"review",description:"Review the current changes",source:"builtin"},{name:"undo",description:"Undo the last turn",source:"builtin"},{name:"statusline",description:"Configure the status line",source:"builtin"},{name:"logout",description:"Sign out of your account",source:"builtin"},{name:"quit",description:"Exit Codex",source:"builtin"}];function h(t){const n=/^---\r?\n([\s\S]*?)\r?\n---/.exec(t)?.[1]??"";return/^description:\s*(.+)$/m.exec(n)?.[1]?.trim().replace(/^["']|["']$/g,"")||(t.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").split(`
2
- `).find(e=>e.trim()!==""&&!e.startsWith("#"))?.trim()??"")}async function w(t){try{const n=await b(t);return n.isDirectory()?"dir":n.isFile()?"file":"other"}catch{return"other"}}async function v(t){try{const n=[];for(const i of await m(t,{withFileTypes:!0})){if(!i.name.endsWith(".md"))continue;const e=r.join(t,i.name);(i.isFile()||i.isSymbolicLink()&&await w(e)==="file")&&n.push(e)}return n}catch{return[]}}async function C(t){try{const n=[];for(const i of await m(t,{withFileTypes:!0})){const e=r.join(t,i.name);(i.isDirectory()||i.isSymbolicLink()&&await w(e)==="dir")&&n.push(e)}return n}catch{return[]}}async function j(t){const n=[];for(const i of await v(t)){const e=h(await f(i,"utf8").catch(()=>""));n.push({name:r.basename(i,".md"),description:e,source:"command"})}return n}async function L(t){const n=[];for(const i of await C(t)){const e=h(await f(r.join(i,"SKILL.md"),"utf8").catch(()=>""));n.push({name:r.basename(i),description:e,source:"skill",sigil:"$"})}return n}function O(t){const n=t?.data;if(!Array.isArray(n))return null;const i=[];for(const e of n){const s=e?.skills;if(Array.isArray(s))for(const a of s){const o=a;typeof o.name!="string"||o.enabled===!1||i.push({name:o.name,description:typeof o.description=="string"?o.description:"",source:typeof o.pluginId=="string"?"plugin":"skill",sigil:"$"})}}return i}const A=1e4;function M(t){return new Promise(n=>{const i=process.platform==="win32",e=p(i?process.env.ComSpec||"cmd.exe":"codex",i?["/d","/s","/c",x(["app-server"])]:["app-server"],{windowsHide:!0,windowsVerbatimArguments:i,stdio:["pipe","pipe","pipe"]});let s=!1,a="";const o=c=>{s||(s=!0,clearTimeout(g),i&&e.pid!==void 0?p("taskkill",["/pid",String(e.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref():e.kill("SIGKILL"),n(c))},g=setTimeout(()=>o(null),A),l=c=>{e.stdin?.write(`${JSON.stringify(c)}
3
- `)};e.on("error",()=>o(null)),e.on("exit",()=>o(null)),e.stdin?.on("error",()=>o(null)),l({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"weave",title:"weave",version:"1.0.0"}}}),e.stdout?.setEncoding("utf8"),e.stdout?.on("data",c=>{a+=c;let d;for(;(d=a.indexOf(`
4
- `))>=0;){const y=a.slice(0,d);a=a.slice(d+1);let u=null;try{u=JSON.parse(y)}catch{continue}if(u?.id===1){l({jsonrpc:"2.0",method:"initialized",params:{}}),l({jsonrpc:"2.0",id:2,method:"skills/list",params:{cwds:[t]}});continue}u?.id===2&&o(O(u.result))}})})}function E(t){const n=new Set;return t.filter(i=>n.has(i.name)?!1:(n.add(i.name),!0))}export function createCodexCommandSurface(t={}){const n=t.skills??M;return{harness:"codex",inputModes:[{kind:"slash",sigil:"/",named:!0}],async list({projectPath:i,homedir:e=S()}){const s=process.env.CODEX_HOME??r.join(e,".codex");return E([...k,...await j(r.join(s,"prompts")),...await n(i)??await L(r.join(s,"skills"))])},executions:()=>Promise.resolve(null)}}export const CODEX_COMMANDS=createCodexCommandSurface();
1
+ import{spawn as p}from"node:child_process";import{readdir as m,readFile as f,stat as y}from"node:fs/promises";import{homedir as k}from"node:os";import r from"node:path";import{codexCommandLine as S}from"./plugins.js";const x=[{name:"model",description:"Choose what model and reasoning effort to use",source:"builtin"},{name:"approvals",description:"Choose what Codex can do without approval",source:"builtin"},{name:"new",description:"Start a new chat during a conversation",source:"builtin"},{name:"init",description:"Create an AGENTS.md file with project instructions",source:"builtin"},{name:"compact",description:"Summarize the conversation to free context",source:"builtin"},{name:"diff",description:"Show the diff of the working tree",source:"builtin"},{name:"mention",description:"Mention a file in the conversation",argsHint:"<path>",source:"builtin"},{name:"status",description:"Show session configuration and token usage",source:"builtin"},{name:"mcp",description:"List configured MCP tools",source:"builtin"},{name:"prompts",description:"Browse and use custom prompts",source:"builtin"},{name:"skills",description:"Browse and use skills",source:"builtin"},{name:"plugins",description:"Browse and manage plugins",source:"builtin"},{name:"review",description:"Review the current changes",source:"builtin"},{name:"undo",description:"Undo the last turn",source:"builtin"},{name:"statusline",description:"Configure the status line",source:"builtin"},{name:"logout",description:"Sign out of your account",source:"builtin"},{name:"quit",description:"Exit Codex",source:"builtin"}];function h(t){const e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(t)?.[1]??"",i=/^description:\s*(.+)$/m.exec(e)?.[1]?.trim().replace(/^["']|["']$/g,"");return i||(t.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").split(`
2
+ `).find(s=>s.trim()!==""&&!s.startsWith("#"))?.trim()??"")}async function w(t){try{const e=await y(t);return e.isDirectory()?"dir":e.isFile()?"file":"other"}catch{return"other"}}async function v(t){try{const e=[];for(const i of await m(t,{withFileTypes:!0})){if(!i.name.endsWith(".md"))continue;const n=r.join(t,i.name);(i.isFile()||i.isSymbolicLink()&&await w(n)==="file")&&e.push(n)}return e}catch{return[]}}async function C(t){try{const e=[];for(const i of await m(t,{withFileTypes:!0})){const n=r.join(t,i.name);(i.isDirectory()||i.isSymbolicLink()&&await w(n)==="dir")&&e.push(n)}return e}catch{return[]}}async function j(t){const e=[];for(const i of await v(t)){const n=h(await f(i,"utf8").catch(()=>""));e.push({name:r.basename(i,".md"),description:n,source:"command"})}return e}async function O(t){const e=[];for(const i of await C(t)){const n=h(await f(r.join(i,"SKILL.md"),"utf8").catch(()=>""));e.push({name:r.basename(i),description:n,source:"skill",sigil:"$",inline:!0})}return e}function L(t){const e=t?.data;if(!Array.isArray(e))return null;const i=[];for(const n of e){const s=n?.skills;if(Array.isArray(s))for(const c of s){const o=c;typeof o.name!="string"||o.enabled===!1||i.push({name:o.name,description:typeof o.description=="string"?o.description:"",source:typeof o.pluginId=="string"?"plugin":"skill",sigil:"$",inline:!0})}}return i}const M=1e4;function I(t){return new Promise(e=>{const i=process.platform==="win32",n=p(i?process.env.ComSpec||"cmd.exe":"codex",i?["/d","/s","/c",S(["app-server"])]:["app-server"],{windowsHide:!0,windowsVerbatimArguments:i,stdio:["pipe","pipe","pipe"]});let s=!1,c="";const o=a=>{s||(s=!0,clearTimeout(g),i&&n.pid!==void 0?p("taskkill",["/pid",String(n.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"}).unref():n.kill("SIGKILL"),e(a))},g=setTimeout(()=>o(null),M),l=a=>{n.stdin?.write(`${JSON.stringify(a)}
3
+ `)};n.on("error",()=>o(null)),n.on("exit",()=>o(null)),n.stdin?.on("error",()=>o(null)),l({jsonrpc:"2.0",id:1,method:"initialize",params:{clientInfo:{name:"weave",title:"weave",version:"1.0.0"}}}),n.stdout?.setEncoding("utf8"),n.stdout?.on("data",a=>{c+=a;let d;for(;(d=c.indexOf(`
4
+ `))>=0;){const b=c.slice(0,d);c=c.slice(d+1);let u=null;try{u=JSON.parse(b)}catch{continue}if(u?.id===1){l({jsonrpc:"2.0",method:"initialized",params:{}}),l({jsonrpc:"2.0",id:2,method:"skills/list",params:{cwds:[t]}});continue}u?.id===2&&o(L(u.result))}})})}function T(t){const e=new Set;return t.filter(i=>e.has(i.name)?!1:(e.add(i.name),!0))}export function createCodexCommandSurface(t={}){const e=t.skills??I;return{harness:"codex",inputModes:[{kind:"slash",sigil:"/",named:!0}],async list({projectPath:i,homedir:n=k()}){const s=process.env.CODEX_HOME??r.join(n,".codex");return T([...x,...await j(r.join(s,"prompts")),...await e(i)??await O(r.join(s,"skills"))])},executions:()=>Promise.resolve(null)}}export const CODEX_COMMANDS=createCodexCommandSurface();