@weavecode/weave 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/node_modules/@weavecode/cli/dist/cli.js +3 -3
  2. package/node_modules/@weavecode/cli/dist/commands/daemon.d.ts +7 -0
  3. package/node_modules/@weavecode/cli/dist/commands/daemon.js +2 -2
  4. package/node_modules/@weavecode/cli/dist/commands/dashboard.d.ts +0 -2
  5. package/node_modules/@weavecode/cli/dist/commands/dashboard.js +2 -1
  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/i18n/dict/en.js +6 -12
  12. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +44 -2
  13. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +6 -12
  14. package/node_modules/@weavecode/cli/dist/init/claudemd-gen.d.ts +2 -3
  15. package/node_modules/@weavecode/cli/dist/init/claudemd-gen.js +4 -4
  16. package/node_modules/@weavecode/cli/dist/init/executor.js +3 -3
  17. package/node_modules/@weavecode/cli/dist/init/git-commit.js +1 -1
  18. package/node_modules/@weavecode/cli/dist/init/harnesses/claude.js +7 -7
  19. package/node_modules/@weavecode/cli/dist/init/harnesses/zcode.d.ts +29 -0
  20. package/node_modules/@weavecode/cli/dist/init/harnesses/zcode.js +1 -0
  21. package/node_modules/@weavecode/cli/dist/init/helpers-gen.d.ts +4 -0
  22. package/node_modules/@weavecode/cli/dist/init/helpers-gen.js +1 -20
  23. package/node_modules/@weavecode/cli/dist/init/mcp-gen.d.ts +3 -20
  24. package/node_modules/@weavecode/cli/dist/init/mcp-gen.js +1 -1
  25. package/node_modules/@weavecode/cli/dist/init/prompt.js +4 -4
  26. package/node_modules/@weavecode/cli/dist/init/settings-gen.d.ts +3 -30
  27. package/node_modules/@weavecode/cli/dist/init/settings-gen.js +1 -1
  28. package/node_modules/@weavecode/cli/package.json +5 -5
  29. package/node_modules/@weavecode/core/dist/harness.d.ts +45 -2
  30. package/node_modules/@weavecode/core/dist/harness.js +1 -1
  31. package/node_modules/@weavecode/core/dist/index.d.ts +2 -2
  32. package/node_modules/@weavecode/core/dist/index.js +1 -1
  33. package/node_modules/@weavecode/core/dist/terminal.d.ts +28 -4
  34. package/node_modules/@weavecode/core/dist/terminal.js +1 -1
  35. package/node_modules/@weavecode/core/dist/types.d.ts +188 -19
  36. package/node_modules/@weavecode/core/dist/types.js +1 -1
  37. package/node_modules/@weavecode/core/package.json +1 -1
  38. package/node_modules/@weavecode/harness/dist/claude/assets.d.ts +10 -0
  39. package/node_modules/@weavecode/harness/dist/claude/assets.js +4 -1
  40. package/node_modules/@weavecode/harness/dist/claude/capture.d.ts +15 -3
  41. package/node_modules/@weavecode/harness/dist/claude/capture.js +15 -9
  42. package/node_modules/@weavecode/harness/dist/claude/event-source.d.ts +1 -1
  43. package/node_modules/@weavecode/harness/dist/claude/event-source.js +1 -1
  44. package/node_modules/@weavecode/harness/dist/claude/helpers-gen.d.ts +5 -0
  45. package/node_modules/@weavecode/harness/dist/claude/helpers-gen.js +20 -0
  46. package/node_modules/@weavecode/harness/dist/claude/index.d.ts +10 -1
  47. package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
  48. package/node_modules/@weavecode/harness/dist/claude/mcp-gen.d.ts +22 -0
  49. package/node_modules/@weavecode/harness/dist/claude/mcp-gen.js +1 -0
  50. package/node_modules/@weavecode/harness/dist/claude/messaging.d.ts +11 -2
  51. package/node_modules/@weavecode/harness/dist/claude/messaging.js +4 -1
  52. package/node_modules/@weavecode/harness/dist/claude/model-aliases.d.ts +39 -0
  53. package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -0
  54. package/node_modules/@weavecode/harness/dist/claude/plan.d.ts +2 -0
  55. package/node_modules/@weavecode/harness/dist/claude/plan.js +1 -0
  56. package/node_modules/@weavecode/harness/dist/claude/questions.js +2 -1
  57. package/node_modules/@weavecode/harness/dist/claude/settings-gen.d.ts +32 -0
  58. package/node_modules/@weavecode/harness/dist/claude/settings-gen.js +1 -0
  59. package/node_modules/@weavecode/harness/dist/claude/side-question.d.ts +12 -0
  60. package/node_modules/@weavecode/harness/dist/claude/side-question.js +1 -0
  61. package/node_modules/@weavecode/harness/dist/claude/statusline/config.d.ts +200 -0
  62. package/node_modules/@weavecode/harness/dist/claude/statusline/config.js +1 -0
  63. package/node_modules/@weavecode/harness/dist/claude/statusline/generator.d.ts +12 -0
  64. package/node_modules/@weavecode/harness/dist/claude/statusline/generator.js +745 -0
  65. package/node_modules/@weavecode/harness/dist/claude/statusline/git-cache.d.ts +10 -0
  66. package/node_modules/@weavecode/harness/dist/claude/statusline/git-cache.js +1 -0
  67. package/node_modules/@weavecode/harness/dist/claude/statusline/surface.d.ts +20 -0
  68. package/node_modules/@weavecode/harness/dist/claude/statusline/surface.js +2 -0
  69. package/node_modules/@weavecode/harness/dist/claude/transcript.d.ts +16 -0
  70. package/node_modules/@weavecode/harness/dist/claude/transcript.js +4 -2
  71. package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
  72. package/node_modules/@weavecode/harness/dist/codex/index.d.ts +1 -0
  73. package/node_modules/@weavecode/harness/dist/codex/index.js +1 -1
  74. package/node_modules/@weavecode/harness/dist/codex/mcp.d.ts +30 -0
  75. package/node_modules/@weavecode/harness/dist/codex/mcp.js +1 -0
  76. package/node_modules/@weavecode/harness/dist/codex/messaging.js +1 -1
  77. package/node_modules/@weavecode/harness/dist/driver.d.ts +168 -3
  78. package/node_modules/@weavecode/harness/dist/index.d.ts +1 -0
  79. package/node_modules/@weavecode/harness/dist/index.js +1 -1
  80. package/node_modules/@weavecode/harness/dist/init/generated.d.ts +37 -0
  81. package/node_modules/@weavecode/harness/dist/init/generated.js +2 -0
  82. package/node_modules/@weavecode/harness/dist/registry-wiring.d.ts +3 -1
  83. package/node_modules/@weavecode/harness/dist/zcode/assets.d.ts +8 -0
  84. package/node_modules/@weavecode/harness/dist/zcode/assets.js +1 -0
  85. package/node_modules/@weavecode/harness/dist/zcode/capture.d.ts +36 -0
  86. package/node_modules/@weavecode/harness/dist/zcode/capture.js +3 -0
  87. package/node_modules/@weavecode/harness/dist/zcode/detect.d.ts +2 -0
  88. package/node_modules/@weavecode/harness/dist/zcode/detect.js +1 -0
  89. package/node_modules/@weavecode/harness/dist/zcode/event-source.d.ts +8 -0
  90. package/node_modules/@weavecode/harness/dist/zcode/event-source.js +1 -0
  91. package/node_modules/@weavecode/harness/dist/zcode/index.d.ts +13 -0
  92. package/node_modules/@weavecode/harness/dist/zcode/index.js +1 -0
  93. package/node_modules/@weavecode/harness/dist/zcode/mcp.d.ts +6 -0
  94. package/node_modules/@weavecode/harness/dist/zcode/mcp.js +2 -0
  95. package/node_modules/@weavecode/harness/dist/zcode/messaging.d.ts +13 -0
  96. package/node_modules/@weavecode/harness/dist/zcode/messaging.js +1 -0
  97. package/node_modules/@weavecode/harness/dist/zcode/resume.d.ts +7 -0
  98. package/node_modules/@weavecode/harness/dist/zcode/resume.js +1 -0
  99. package/node_modules/@weavecode/harness/package.json +2 -2
  100. package/node_modules/@weavecode/server/dist/daemon/ai-config.js +2 -2
  101. package/node_modules/@weavecode/server/dist/daemon/ai-context.js +6 -6
  102. package/node_modules/@weavecode/server/dist/daemon/ai-routes.js +4 -4
  103. package/node_modules/@weavecode/server/dist/daemon/api-log.d.ts +48 -0
  104. package/node_modules/@weavecode/server/dist/daemon/api-log.js +3 -0
  105. package/node_modules/@weavecode/server/dist/daemon/auth-routes.js +1 -1
  106. package/node_modules/@weavecode/server/dist/daemon/auto-start.js +6 -6
  107. package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
  108. package/node_modules/@weavecode/server/dist/daemon/claude-liveness.js +1 -1
  109. package/node_modules/@weavecode/server/dist/daemon/dashboard-auth.js +2 -2
  110. package/node_modules/@weavecode/server/dist/daemon/data-bus.js +1 -1
  111. package/node_modules/@weavecode/server/dist/daemon/dev-entry.js +1 -1
  112. package/node_modules/@weavecode/server/dist/daemon/fs-browser.js +1 -1
  113. package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.d.ts +13 -1
  114. package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.js +1 -1
  115. package/node_modules/@weavecode/server/dist/daemon/hooks-routes.js +1 -1
  116. package/node_modules/@weavecode/server/dist/daemon/http.js +1 -1
  117. package/node_modules/@weavecode/server/dist/daemon/opener.d.ts +102 -19
  118. package/node_modules/@weavecode/server/dist/daemon/opener.js +97 -7
  119. package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
  120. package/node_modules/@weavecode/server/dist/daemon/project-harnesses.js +2 -2
  121. package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.d.ts +4 -3
  122. package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.js +1 -1
  123. package/node_modules/@weavecode/server/dist/daemon/server.d.ts +15 -0
  124. package/node_modules/@weavecode/server/dist/daemon/server.js +8 -6
  125. package/node_modules/@weavecode/server/dist/daemon/session-probe.d.ts +72 -2
  126. package/node_modules/@weavecode/server/dist/daemon/session-probe.js +1 -1
  127. package/node_modules/@weavecode/server/dist/daemon/settings.d.ts +10 -0
  128. package/node_modules/@weavecode/server/dist/daemon/settings.js +2 -2
  129. package/node_modules/@weavecode/server/dist/daemon/snapshot-refresher.d.ts +7 -1
  130. package/node_modules/@weavecode/server/dist/daemon/snapshot-refresher.js +1 -1
  131. package/node_modules/@weavecode/server/dist/daemon/sse-hub.d.ts +40 -0
  132. package/node_modules/@weavecode/server/dist/daemon/sse-hub.js +1 -0
  133. package/node_modules/@weavecode/server/dist/daemon/start.js +1 -1
  134. package/node_modules/@weavecode/server/dist/daemon/state.js +2 -2
  135. package/node_modules/@weavecode/server/dist/daemon/static.js +1 -1
  136. package/node_modules/@weavecode/server/dist/daemon/terminal-topology-refresher.d.ts +4 -1
  137. package/node_modules/@weavecode/server/dist/daemon/tls.js +1 -1
  138. package/node_modules/@weavecode/server/dist/daemon/toolkit-routes.js +1 -1
  139. package/node_modules/@weavecode/server/dist/db/db.js +38 -2
  140. package/node_modules/@weavecode/server/dist/db/paths.d.ts +4 -0
  141. package/node_modules/@weavecode/server/dist/db/paths.js +1 -1
  142. package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
  143. package/node_modules/@weavecode/server/dist/hooks/bus.d.ts +5 -0
  144. package/node_modules/@weavecode/server/dist/hooks/bus.js +1 -1
  145. package/node_modules/@weavecode/server/dist/hooks/dispatcher.js +6 -6
  146. package/node_modules/@weavecode/server/dist/hooks/handlers/webhook.js +1 -1
  147. package/node_modules/@weavecode/server/dist/hooks/headless-runner.js +2 -2
  148. package/node_modules/@weavecode/server/dist/hooks/inbox-socket.d.ts +17 -4
  149. package/node_modules/@weavecode/server/dist/hooks/inbox-socket.js +2 -1
  150. package/node_modules/@weavecode/server/dist/hooks/inbox-worker.d.ts +27 -6
  151. package/node_modules/@weavecode/server/dist/hooks/inbox-worker.js +3 -3
  152. package/node_modules/@weavecode/server/dist/hooks/match.js +1 -1
  153. package/node_modules/@weavecode/server/dist/hooks/message-deliverer.d.ts +200 -13
  154. package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +3 -2
  155. package/node_modules/@weavecode/server/dist/hooks/mirror.d.ts +9 -4
  156. package/node_modules/@weavecode/server/dist/hooks/mirror.js +4 -4
  157. package/node_modules/@weavecode/server/dist/hooks/plugin-installer.js +3 -3
  158. package/node_modules/@weavecode/server/dist/hooks/plugin-loader.js +1 -1
  159. package/node_modules/@weavecode/server/dist/hooks/plugin-project-state.js +1 -1
  160. package/node_modules/@weavecode/server/dist/hooks/prompt-flusher.js +1 -1
  161. package/node_modules/@weavecode/server/dist/hooks/promptbox.d.ts +13 -0
  162. package/node_modules/@weavecode/server/dist/hooks/promptbox.js +8 -8
  163. package/node_modules/@weavecode/server/dist/hooks/push-notify.js +2 -2
  164. package/node_modules/@weavecode/server/dist/hooks/question-tracker.d.ts +6 -4
  165. package/node_modules/@weavecode/server/dist/hooks/question-tracker.js +1 -1
  166. package/node_modules/@weavecode/server/dist/hooks/registry.js +1 -1
  167. package/node_modules/@weavecode/server/dist/hooks/resume-runner.js +1 -1
  168. package/node_modules/@weavecode/server/dist/hooks/sequence-engine.js +1 -1
  169. package/node_modules/@weavecode/server/dist/hooks/session-purge.d.ts +7 -0
  170. package/node_modules/@weavecode/server/dist/hooks/session-purge.js +1 -1
  171. package/node_modules/@weavecode/server/dist/hooks/session-sweeper.d.ts +5 -8
  172. package/node_modules/@weavecode/server/dist/hooks/session-sweeper.js +1 -1
  173. package/node_modules/@weavecode/server/dist/hooks/side-questions.d.ts +41 -0
  174. package/node_modules/@weavecode/server/dist/hooks/side-questions.js +1 -0
  175. package/node_modules/@weavecode/server/dist/hooks/toolkit-scan.js +1 -1
  176. package/node_modules/@weavecode/server/dist/hooks/toolkit.d.ts +8 -0
  177. package/node_modules/@weavecode/server/dist/hooks/toolkit.js +5 -5
  178. package/node_modules/@weavecode/server/dist/hooks/watch-engine.d.ts +7 -0
  179. package/node_modules/@weavecode/server/dist/hooks/watch-engine.js +1 -1
  180. package/node_modules/@weavecode/server/dist/index.d.ts +1 -1
  181. package/node_modules/@weavecode/server/dist/install/apply-update.d.ts +1 -1
  182. package/node_modules/@weavecode/server/dist/install/apply-update.js +1 -1
  183. package/node_modules/@weavecode/server/dist/install/capabilities.d.ts +10 -0
  184. package/node_modules/@weavecode/server/dist/install/capabilities.js +1 -1
  185. package/node_modules/@weavecode/server/dist/install/codex-toml.d.ts +8 -26
  186. package/node_modules/@weavecode/server/dist/install/codex-toml.js +1 -1
  187. package/node_modules/@weavecode/server/dist/install/file-assets.js +1 -1
  188. package/node_modules/@weavecode/server/dist/install/fingerprint.d.ts +5 -1
  189. package/node_modules/@weavecode/server/dist/install/fingerprint.js +1 -1
  190. package/node_modules/@weavecode/server/dist/install/git-classify.d.ts +30 -0
  191. package/node_modules/@weavecode/server/dist/install/git-classify.js +1 -0
  192. package/node_modules/@weavecode/server/dist/install/global-config.d.ts +2 -4
  193. package/node_modules/@weavecode/server/dist/install/global-config.js +1 -2
  194. package/node_modules/@weavecode/server/dist/install/global-file-assets.js +1 -1
  195. package/node_modules/@weavecode/server/dist/install/init-files.d.ts +46 -0
  196. package/node_modules/@weavecode/server/dist/install/init-files.js +2 -0
  197. package/node_modules/@weavecode/server/dist/install/install-ledger.js +1 -1
  198. package/node_modules/@weavecode/server/dist/install/installer.d.ts +3 -5
  199. package/node_modules/@weavecode/server/dist/install/installer.js +1 -3
  200. package/node_modules/@weavecode/server/dist/install/library-index.js +1 -1
  201. package/node_modules/@weavecode/server/dist/install/mcp-rows.d.ts +5 -5
  202. package/node_modules/@weavecode/server/dist/install/mcp-rows.js +1 -1
  203. package/node_modules/@weavecode/server/dist/install/plugin-install.js +1 -1
  204. package/node_modules/@weavecode/server/dist/install/plugin-rows.js +1 -1
  205. package/node_modules/@weavecode/server/dist/install/plugin-templates.js +1 -1
  206. package/node_modules/@weavecode/server/dist/install/project-config.d.ts +0 -2
  207. package/node_modules/@weavecode/server/dist/install/project-config.js +2 -2
  208. package/node_modules/@weavecode/server/dist/install/reader.js +1 -1
  209. package/node_modules/@weavecode/server/dist/install/scan-cache.js +1 -1
  210. package/node_modules/@weavecode/server/dist/install/scanner.js +1 -1
  211. package/node_modules/@weavecode/server/dist/install/settings-mcp.js +2 -2
  212. package/node_modules/@weavecode/server/dist/install/updates.d.ts +17 -5
  213. package/node_modules/@weavecode/server/dist/install/updates.js +1 -1
  214. package/node_modules/@weavecode/server/dist/market/builtin.js +1 -1
  215. package/node_modules/@weavecode/server/dist/market/identity.js +1 -1
  216. package/node_modules/@weavecode/server/dist/market/import.js +2 -2
  217. package/node_modules/@weavecode/server/dist/market/refresh.js +1 -1
  218. package/node_modules/@weavecode/server/dist/market/resolve.js +1 -1
  219. package/node_modules/@weavecode/server/dist/market/updates.js +1 -1
  220. package/node_modules/@weavecode/server/dist/registry.js +2 -2
  221. package/node_modules/@weavecode/server/dist/repositories/hook-dispatches.js +5 -5
  222. package/node_modules/@weavecode/server/dist/repositories/hook-events.d.ts +7 -0
  223. package/node_modules/@weavecode/server/dist/repositories/hook-events.js +2 -2
  224. package/node_modules/@weavecode/server/dist/repositories/hook-rules.js +4 -4
  225. package/node_modules/@weavecode/server/dist/repositories/libraries.js +1 -1
  226. package/node_modules/@weavecode/server/dist/repositories/plugin-states.js +1 -1
  227. package/node_modules/@weavecode/server/dist/repositories/projects.d.ts +7 -0
  228. package/node_modules/@weavecode/server/dist/repositories/projects.js +2 -2
  229. package/node_modules/@weavecode/server/dist/repositories/push-subscriptions.js +2 -2
  230. package/node_modules/@weavecode/server/dist/repositories/session-watches.js +4 -4
  231. package/node_modules/@weavecode/server/dist/repositories/sessions.d.ts +32 -8
  232. package/node_modules/@weavecode/server/dist/repositories/sessions.js +2 -2
  233. package/node_modules/@weavecode/server/dist/repositories/side-questions.d.ts +50 -0
  234. package/node_modules/@weavecode/server/dist/repositories/side-questions.js +6 -0
  235. package/node_modules/@weavecode/server/dist/repositories/uploads.d.ts +66 -0
  236. package/node_modules/@weavecode/server/dist/repositories/uploads.js +7 -0
  237. package/node_modules/@weavecode/server/dist/statusline/cache-sweeper.js +1 -1
  238. package/node_modules/@weavecode/server/dist/statusline/config.d.ts +4 -198
  239. package/node_modules/@weavecode/server/dist/statusline/config.js +1 -1
  240. package/node_modules/@weavecode/server/dist/statusline/generator.d.ts +5 -0
  241. package/node_modules/@weavecode/server/dist/statusline/generator.js +1 -676
  242. package/node_modules/@weavecode/server/dist/statusline/manager.d.ts +7 -5
  243. package/node_modules/@weavecode/server/dist/statusline/manager.js +3 -4
  244. package/node_modules/@weavecode/server/dist/surfaces.d.ts +11 -1
  245. package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
  246. package/node_modules/@weavecode/server/dist/watch/cache.js +1 -1
  247. package/node_modules/@weavecode/server/dist/watch/classifier.js +1 -1
  248. package/node_modules/@weavecode/server/dist/watch/plugin-mods.js +1 -1
  249. package/node_modules/@weavecode/server/dist/watch/sync-scheduler.d.ts +8 -4
  250. package/node_modules/@weavecode/server/dist/watch/sync-scheduler.js +1 -1
  251. package/node_modules/@weavecode/server/dist/watch/watch-service.js +1 -1
  252. package/node_modules/@weavecode/server/package.json +4 -4
  253. package/node_modules/@weavecode/server/web/dist/assets/index-CHWbLAje.js +594 -0
  254. package/node_modules/@weavecode/server/web/dist/assets/index-D0s5v8QS.css +11 -0
  255. package/node_modules/@weavecode/server/web/dist/index.html +14 -2
  256. package/node_modules/@weavecode/templates/dist/resources/weave-market/plugins/core-skills/weave-plugin-creator/skills/weave-plugin-creator/SKILL.md +2 -2
  257. package/node_modules/@weavecode/templates/package.json +2 -2
  258. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/README.md +50 -32
  259. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/build/index.d.ts +86 -40
  260. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/build/index.es.js +860 -353
  261. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/build/index.js +860 -353
  262. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/package.json +20 -17
  263. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/README.md +50 -32
  264. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/build/index.d.ts +86 -40
  265. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/build/index.es.js +860 -353
  266. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/build/index.js +860 -353
  267. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/package.json +20 -17
  268. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/README.md +50 -32
  269. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/build/index.d.ts +86 -40
  270. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/build/index.es.js +860 -353
  271. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/build/index.js +860 -353
  272. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/package.json +20 -17
  273. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/README.md +50 -32
  274. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/build/index.d.ts +86 -40
  275. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/build/index.es.js +860 -353
  276. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/build/index.js +860 -353
  277. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/package.json +20 -17
  278. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/README.md +50 -32
  279. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/build/index.d.ts +86 -40
  280. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/build/index.es.js +860 -353
  281. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/build/index.js +860 -353
  282. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/package.json +20 -17
  283. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/README.md +50 -32
  284. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/build/index.d.ts +86 -40
  285. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/build/index.es.js +860 -353
  286. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/build/index.js +860 -353
  287. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/package.json +20 -17
  288. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/README.md +50 -32
  289. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/build/index.d.ts +86 -40
  290. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/build/index.es.js +860 -353
  291. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/build/index.js +860 -353
  292. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/package.json +20 -17
  293. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/README.md +50 -32
  294. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/build/index.d.ts +86 -40
  295. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/build/index.es.js +860 -353
  296. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/build/index.js +860 -353
  297. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/package.json +20 -17
  298. package/package.json +6 -6
  299. package/node_modules/@weavecode/server/web/dist/assets/index-BOzaRlQE.js +0 -560
  300. package/node_modules/@weavecode/server/web/dist/assets/index-ChX8G8cT.css +0 -11
@@ -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 E}from"./plugins.js";import{CLAUDE_PLUGIN_STATE as a}from"./plugin-state.js";import{CLAUDE_BLOCKING_PROMPT as s}from"./questions.js";import{CLAUDE_RESUME as p}from"./resume.js";import{CLAUDE_DETECTOR as C}from"./detect.js";export{ClaudeEventSource,CLAUDE_EVENT_SOURCE,frameFacts,expandPayloadRefs}from"./event-source.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{interruptMarkerAt}from"./transcript.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 const CLAUDE_DRIVER={id:"claude",displayName:"Claude Code",capabilities:["assets","events","resume","detect","plugins","pluginState","messaging","questions","capture"],assets:e,events:o,resume:p,detect:C,plugins:E,pluginState:a,messaging:t,questions:s,capture:r};
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 p}from"./resume.js";import{CLAUDE_DETECTOR as m}from"./detect.js";import{CLAUDE_STATUSLINE as A}from"./statusline/surface.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}from"./transcript.js";export{modelAliasTargets,aliasOfModel,startedModelOf,switchedModelOf,effortLevelOf}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{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"],assets:e,events:o,resume:p,detect:m,plugins:s,pluginState:a,messaging:t,questions:E,capture:r,statusline:A};
@@ -0,0 +1,22 @@
1
+ import type { PlatformInfo } from '@weavecode/core';
2
+ export interface McpGeneratorInput {
3
+ platform: PlatformInfo;
4
+ /** Whether to include the weave MCP server entry */
5
+ includeWeaveServer: boolean;
6
+ }
7
+ export declare function generateMcpJson(input: McpGeneratorInput): Record<string, unknown>;
8
+ /**
9
+ * Merge weave's generated servers into an existing user .mcp.json.
10
+ *
11
+ * Policy (weave init never overwrites user files):
12
+ * - user-authored server entries and unknown top-level keys are preserved
13
+ * - missing weave entries are appended
14
+ * - the `weave` server entry is weave's own config key: when present it is
15
+ * refreshed to the current generated value
16
+ */
17
+ export declare function mergeMcpJson(existing: Record<string, unknown>, generated: Record<string, unknown>): Record<string, unknown>;
18
+ /**
19
+ * uninstall 用的剥除:删 `weave` 服务键(weave 自己的配置键);mcpServers 清空
20
+ * 删键;顶层清空返回空对象,调用方据此删文件。用户自己的服务键不动。
21
+ */
22
+ export declare function stripWeaveMcp(existing: Record<string, unknown>): Record<string, unknown>;
@@ -0,0 +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,10 +1,19 @@
1
- import type { MessagingSurface } from '../driver.js';
1
+ import type { ImageAttachSpec, MessagingSurface } from '../driver.js';
2
+ /**
3
+ * Claude 图片对齐面:**裸绝对路径、不加任何说明**——用户自己往输入框粘贴一条图片
4
+ * 路径时它就是这么认的(粘贴处理器按 `\.(png|jpe?g|gif|webp)$` 切出路径 → 读文件 →
5
+ * 输入框变 `[Image #N]` + 消息里出真 image block)。路径放**独立一行**:粘贴处理器
6
+ * 先按空格切路径边界、再按换行切行,行首的路径照样命中;落在原文后面则原文被原样
7
+ * 留在输入框、图单独挂上。
8
+ */
9
+ export declare const CLAUDE_IMAGE_ATTACH: ImageAttachSpec;
2
10
  /**
3
11
  * Claude 消息能力面(完整参考实现):四通道全支持——
4
12
  * - prompt:原生 peer 消息经受限中继(SendMessage,寻址 = peer 注册表);
5
13
  * - promptInbox:会话本地 inbox socket 直投(毫秒级、零进程零 LLM);
6
14
  * - inject:outbox → 会话下一拍 hook 事件随 additionalContext 进会话(非抢占);
7
15
  * - headless:resume 槽规格**对象直接引用**(单源,不复制);
8
- * - watch:空闲信号取值源自 HARNESS_LIFECYCLE(close + 会话级终点),不手抄。
16
+ * - watch:空闲信号取值源自 HARNESS_LIFECYCLE(close + 会话级终点),不手抄;
17
+ * - imageAttach:图片按 claude 自己的「粘贴路径」文法对齐(见上)。
9
18
  */
10
19
  export declare const CLAUDE_MESSAGING: MessagingSurface;
@@ -1 +1,4 @@
1
- import{HARNESS_LIFECYCLE as E,INJECTABLE_EVENTS as o}from"@weavecode/core";import{CLAUDE_PROMPT_INBOX as s}from"./prompt-inbox.js";import{CLAUDE_PROMPT_RELAY as e}from"./prompt.js";import{CLAUDE_RESUME as r}from"./resume.js";export const CLAUDE_MESSAGING={harness:"claude",discovery:!0,prompt:e,promptInbox:s,inject:{rideEvents:o.claude},headless:r,idleSignals:[...E.claude.close,"SessionEnd"]};
1
+ import{HARNESS_LIFECYCLE as r,INJECTABLE_EVENTS as t}from"@weavecode/core";import{CLAUDE_PROMPT_INBOX as m}from"./prompt-inbox.js";import{CLAUDE_PROMPT_RELAY as a}from"./prompt.js";import{CLAUDE_RESUME as i}from"./resume.js";import{CLAUDE_SIDE_QUESTION as p}from"./side-question.js";export const CLAUDE_IMAGE_ATTACH={composePrompt(o,s){const E=s.map(e=>e.path).join(`
2
+ `);return o?`${o}
3
+
4
+ ${E}`:E}},CLAUDE_MESSAGING={harness:"claude",discovery:!0,prompt:a,promptInbox:m,inject:{rideEvents:t.claude},headless:i,idleSignals:[...r.claude.close,"SessionEnd"],imageAttach:CLAUDE_IMAGE_ATTACH,sideQuestion:p};
@@ -0,0 +1,39 @@
1
+ /** 别名 → 真名这一对(`/model` 收别名,跑起来的是真名)。 */
2
+ export interface ModelAliasTarget {
3
+ /** 稳定别名(claude 的 default/opus/sonnet/haiku/fable),`/model` 收的就是它。 */
4
+ alias: string;
5
+ /** 该别名此刻真跑的模型 ID;等于 alias = 没被换过名。 */
6
+ actual: string;
7
+ }
8
+ /**
9
+ * 别名 → 真名。网关把 claude 的稳定别名换成自家模型 ID(本机 opus→ftm、
10
+ * sonnet→deepseek-flash…),出处 = Claude Code 的 `ANTHROPIC_DEFAULT_<别名>_MODEL`
11
+ * 约定。daemon 是独立进程、未必带着宿主那套 env,故先读 settings.json 的 env 块、
12
+ * 进程 env 兜底;两处都没有就原样回落别名(`/model opus` 仍然认,只是看不出真名)。
13
+ */
14
+ export declare function modelAliasTargets(aliases: readonly string[], env?: NodeJS.ProcessEnv, homedir?: string): ModelAliasTarget[];
15
+ /**
16
+ * 换模型**落定**的那条事件里的真名(`PostModelSwitch.to_model`)。宿主答
17
+ * 「No, go back」不发事件,故收到这条 = 已经换了;比转录条目早一步——转录只在
18
+ * assistant 消息上照会模型,切完不跑一轮就什么都读不到。
19
+ */
20
+ export declare function switchedModelOf(eventType: string, raw: unknown): string | null;
21
+ /**
22
+ * 会话开/恢复(`SessionStart`)上关于模型的话:startup / compact 带 `model` 就报得出
23
+ * 真名;`source=resume` **不带**(实测:重开时宿主把模型落回默认,且这一拍转录里还
24
+ * 只有上一轮的照会)——故 model 为 null 不是「不知道」,是「旧答案作废、得重新读」。
25
+ * 这条事件与模型无关时返回 null。
26
+ */
27
+ export declare function startedModelOf(eventType: string, raw: unknown): {
28
+ model: string | null;
29
+ } | null;
30
+ /**
31
+ * 推理档位(`effort.level`):工具/回合类 hook 事件都带,与生成脚本填 `thinking`
32
+ * 块读的 stdin `effort.level` 是同一个事实、同一个键形。
33
+ */
34
+ export declare function effortLevelOf(raw: unknown): string | null;
35
+ /**
36
+ * 真名 → 别名:转录里照会的是真名(`custom_openai/ftm`),下拉得认成别名那档。
37
+ * 认不出返回 null,调用方回落显示真名——不猜。
38
+ */
39
+ export declare function aliasOfModel(targets: readonly ModelAliasTarget[], model: string | null): string | null;
@@ -0,0 +1 @@
1
+ import f from"node:fs";import i from"node:os";import{CLAUDE_ASSETS as u}from"./assets.js";export function modelAliasTargets(r,t=process.env,e=i.homedir()){const n=c(e);return r.map(o=>{const l=`ANTHROPIC_DEFAULT_${o.toUpperCase()}_MODEL`,s=n[l]??n[`${l}_NAME`]??t[l]??t[`${l}_NAME`]??o;return{alias:o,actual:s}})}export function switchedModelOf(r,t){if(r!=="PostModelSwitch")return null;const e=t?.to_model;return typeof e=="string"&&e?e:null}export function startedModelOf(r,t){if(r!=="SessionStart")return null;const e=t?.model;return{model:typeof e=="string"&&e?e:null}}export function effortLevelOf(r){const t=r?.effort?.level;return typeof t=="string"&&t?t:null}export function aliasOfModel(r,t){if(!t)return null;const e=t.slice(t.lastIndexOf("/")+1);return r.find(n=>n.actual===t||n.actual===e)?.alias??null}function c(r){let t=null;try{t=JSON.parse(f.readFileSync(u.userConfigFile(r),"utf8"))}catch{return{}}const e={};for(const[n,o]of Object.entries(t?.env??{}))typeof o=="string"&&(e[n]=o);return e}
@@ -0,0 +1,2 @@
1
+ import type { PlanSpec } from '../driver.js';
2
+ export declare const CLAUDE_PLAN: PlanSpec;
@@ -0,0 +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 +1,2 @@
1
- import{HARNESS_LIFECYCLE as d}from"@weavecode/core";const y="\x1B[B",u=" ",g=2e3,f="(preview cannot be shown in full \u2014 compare the option labels and descriptions instead)",k="No preview available",S="n",v="press n to add notes",w=/[\p{M}\u200b-\u200f\u2028-\u202e\u2060-\u206f\u180b-\u180f\ufe0e\ufe0f]/u,A={key:"ExitPlanMode:approve",header:"Plan approval",question:"Approve this plan and start execution?",multiSelect:!1,options:[{keys:["1"],label:"Yes, and auto-accept edits"},{keys:["2"],label:"Yes, and manually approve edits"},{keys:["3"],label:"No, keep planning"}]},m={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==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 N(e,t){return[t?{keys:[String(e+1)],label:"Type something",input:!0,textFocus:Array.from({length:e},()=>y),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 T(){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 a(e){return typeof e=="string"&&e?e:null}function C(e){if(!Array.isArray(e))return[];const t=[];for(const s of e){if(!s||typeof s!="object")continue;const i=a(s.label);if(!i)continue;const n=s.description;t.push({keys:[String(t.length+1)],label:i,description:typeof n=="string"&&n?n:null,preview:x(s.preview)})}return t}function x(e){return typeof e!="string"?null:e.length>g?f:e.replace(/�/g,"").trim()?w.test(e)?f:e:null}function P(e,t){return t<2?[String(e+1)]:[String(e===0?2:1),String(e+1)]}function E(e){return e.map((t,s)=>({keys:P(s,e.length),commit:["\r"],label:t.label,description:t.description,preview:t.preview??k}))}function Q(e){const t=[];return e>=2&&t.push({keys:[S],label:"Notes:",description:v,input:!0,textTail:["\r"]}),t.push({keys:[String(e),y,"\r"],label:"Chat about this",chat:!0}),t}export const CLAUDE_BLOCKING_PROMPT={blockingTools:d.claude.questionTools,permissionNotificationType:"permission_prompt",silentPermissionModes:["bypassPermissions","dontAsk"],permissionQuestion(e){const t=e.toolName?`${e.toolName}${e.toolInput?` ${q(e.toolInput)}`:""}`:"";return{key:"permission:confirm",header:"Permission",question:t?`Claude needs your permission: ${t}`:"Claude needs your permission",multiSelect:!1,options:[{keys:["1"],label:"Yes"},{keys:["2"],label:"Yes, and don't ask again this session"},{keys:["3"],label:"No (esc)"}]}},parseQuestions(e,t){if(e==="AskUserQuestion"){const s=t&&typeof t=="object"?t.questions:void 0;if(!Array.isArray(s))return[m];const i=[];for(const n of s){if(!n||typeof n!="object")continue;const r=a(n.question),p=a(n.header),l=n.multiSelect===!0,o=C(n.options);if(!r||o.length===0)continue;const b=p??r.slice(0,24),c=!l&&o.some(h=>h.preview!=null);i.push({key:`AskUserQuestion:${b}`,header:p,question:r,options:c?[...E(o),...Q(o.length)]:[...o,...N(o.length,l)],multiSelect:l,previewMode:c})}return i.length===0?[m]:((i.length>=2||i.some(n=>n.multiSelect))&&i.push(T()),i)}return[A]}};
1
+ import{HARNESS_LIFECYCLE as b}from"@weavecode/core";import{CLAUDE_PLAN as k}from"./plan.js";const m="\x1B[B",a=" ",g=2e3,f="(preview cannot be shown in full \u2014 compare the option labels and descriptions instead)",S="No preview available",w="n",v="press n to add notes",A=/[\p{M}\u200b-\u200f\u2028-\u202e\u2060-\u206f\u180b-\u180f\ufe0e\ufe0f]/u,N={key:"ExitPlanMode:approve",header:"Plan approval",question:"Approve this plan and start execution?",multiSelect:!1,options:[{keys:["1"],label:"Yes, auto-accept edits"},{keys:["2"],label:"Yes, manually approve edits"},{keys:["3"],label:"No, keep planning"}]},q=[{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)"}],C=[{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 T(e){if(!e||typeof e!="object")return null;const t=e,n=r(t.to_model),o=r(t.from_model);return!n||!o||n===o||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 x(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 P(e,t){return[t?{keys:[String(e+1)],label:"Type something",input:!0,textFocus:Array.from({length:e},()=>m),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 _(){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 $(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){if(!n||typeof n!="object")continue;const o=r(n.label);if(!o)continue;const s=n.description;t.push({keys:[String(t.length+1)],label:o,description:typeof s=="string"&&s?s:null,preview:M(n.preview)})}return t}function M(e){return typeof e!="string"?null:e.length>g?f:e.replace(/�/g,"").trim()?A.test(e)?f:e:null}function Q(e,t){return t<2?[String(e+1)]:[String(e===0?2:1),String(e+1)]}function Y(e){return e.map((t,n)=>({keys:Q(n,e.length),commit:["\r"],label:t.label,description:t.description,preview:t.preview??S}))}function E(e){const t=[];return e>=2&&t.push({keys:[w],label:"Notes:",description:v,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?` ${x(e.toolInput)}`:""}`:"",n=e.permissionMode==="auto"||/classifier/i.test(e.message??""),o=e.message?.trim()||"Claude needs your permission";return{key:"permission:confirm",header:n?"Permission (auto mode)":"Permission",question:t?`${o}
2
+ ${t}`:o,multiSelect:!1,options:[...n?C:q]}},parseQuestions(e,t){if(e==="AskUserQuestion"){const n=t&&typeof t=="object"?t.questions:void 0;if(!Array.isArray(n))return[h];const o=[];for(const s of n){if(!s||typeof s!="object")continue;const l=r(s.question),c=r(s.header),u=s.multiSelect===!0,i=$(s.options);if(!l||i.length===0)continue;const y=c??l.slice(0,24),p=!u&&i.some(d=>d.preview!=null);o.push({key:`AskUserQuestion:${y}`,header:c,question:l,options:p?[...Y(i),...E(i.length)]:[...i,...P(i.length,u)],multiSelect:u,previewMode:p})}return o.length===0?[h]:((o.length>=2||o.some(s=>s.multiSelect))&&o.push(_()),o)}return[N]},eventQuestion(e,t){return e==="PreModelSwitch"?T(t):null}};
@@ -0,0 +1,32 @@
1
+ import type { InitComponents, HooksConfig, PlatformInfo } from '@weavecode/core';
2
+ export interface SettingsGeneratorInput {
3
+ components: InitComponents;
4
+ hooks: HooksConfig;
5
+ platform: PlatformInfo;
6
+ /** Absolute path to the helpers directory in the target project */
7
+ helpersDir: string;
8
+ }
9
+ export declare function generateSettingsJson(input: SettingsGeneratorInput): Record<string, unknown>;
10
+ /**
11
+ * Merge weave's generated settings into an existing user settings.json.
12
+ *
13
+ * Policy (weave init never overwrites user files):
14
+ * - every existing key is preserved as-is (including unknown keys)
15
+ * - weave entries are appended where missing
16
+ * - weave's own hooks entries are REPLACED wholesale by this generation: first
17
+ * every group carrying the weave marker is dropped from all events (events
18
+ * no longer generated no longer linger), then the generated groups are
19
+ * appended. User-authored hook groups are never touched.
20
+ * - statusLine pointing at `statusline.cjs` is refreshed in place
21
+ * - user-authored statusLine, permissions, and env values are never touched
22
+ *
23
+ * Idempotent: merging the same `generated` twice yields the same result.
24
+ */
25
+ export declare function mergeSettingsJson(existing: Record<string, unknown>, generated: Record<string, unknown>): Record<string, unknown>;
26
+ /**
27
+ * uninstall 用的剥除:把 merge 的加法原样减回去。weave 的 hook 组、weave 的
28
+ * statusLine、weave 写入的默认 permissions/env 条目与 $comment 一并移除;
29
+ * 用户自己的键(含 weave 之外的一切)永远不动。返回剩余 settings——键全空
30
+ * 时为空对象,调用方据此删文件。
31
+ */
32
+ export declare function stripWeaveSettings(existing: Record<string, unknown>): Record<string, unknown>;
@@ -0,0 +1 @@
1
+ import{captureHookGroup as r,sweepWeaveHookEvents as d}from"./capture.js";const v=".claude/helpers/statusline.cjs",f="Generated by weave \u2014 do not edit manually",S=["Bash(npx weave:*)","Bash(pnpm:*)","Bash(npm:*)"],h=["Read(./.env)","Read(./.env.*)","Read(./secrets/*)"];export function generateSettingsJson(n){const{components:t,hooks:e,platform:l,helpersDir:o}=n,c={$comment:f};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:[...S],deny:[...h]},c.env={WEAVE_ENABLED:"true"},t.helpers&&(c.statusLine={type:"command",command:l.os==="windows"?`node "${o}/statusline.cjs"`:"node "+o+"/statusline.cjs",padding:0,refreshInterval:30}),c}export function mergeSettingsJson(n,t){const e={...n},l=t.hooks;if(l&&typeof l=="object"){const i=d(u(e.hooks)?{...e.hooks}:{})??{};for(const[a,p]of Object.entries(l)){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||y(o))&&(e.statusLine=t.statusLine);const c=t.permissions;if(c&&typeof c=="object"){const i=u(e.permissions)?e.permissions:{};for(const a of["allow","deny"]){const p=c[a],m=i[a];Array.isArray(p)?i[a]=b(m,p):m===void 0&&(i[a]=p)}e.permissions=i}const s=t.env;if(s&&typeof s=="object"){const i=u(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 u(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function y(n){if(!u(n))return!1;const t=n.command;return typeof t=="string"&&P(t,v)}function P(n,t){return n.replace(/\\/g,"/").includes(t)}function b(n,t){return Array.isArray(n)?[...n,...t.filter(e=>!n.includes(e))]:[...t]}export function stripWeaveSettings(n){const t={...n};if(u(t.hooks)){const e=d(t.hooks);e?t.hooks=e:delete t.hooks}if(y(t.statusLine)&&delete t.statusLine,u(t.permissions)){const e={...t.permissions},l=(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]};l("allow",S),l("deny",h),Object.keys(e).length>0?t.permissions=e:delete t.permissions}if(u(t.env)){const e={...t.env};delete e.WEAVE_ENABLED,Object.keys(e).length>0?t.env=e:delete t.env}return t.$comment===f&&delete t.$comment,t}
@@ -0,0 +1,12 @@
1
+ import type { SideQuestionSpec } from '../driver.js';
2
+ /**
3
+ * Claude 旁路会话面(`/btw`):往输入行打 `/btw <原文>` 即开一次侧问——不打断
4
+ * 主回合、宿主用一个 `maxTurns:1` 的轻量 fork 作答。
5
+ *
6
+ * 回答只能从采集事件里认:宿主给这类 fork 的查询开着 `skipTranscript`,**既不
7
+ * 留转录、也不发 prompt 事件**。判据 = `SubagentStop` 且 `agent_transcript_path`
8
+ * 在盘上不存在——普通子 agent 与 skill 子 agent 都有转录文件(实测),没有的
9
+ * 只剩 skipTranscript 那批 fork(侧问 / 压缩摘要 / 后台摘要,后两类由上一条
10
+ * 形状闸与「只认待答行」两道挡掉)。
11
+ */
12
+ export declare const CLAUDE_SIDE_QUESTION: SideQuestionSpec;
@@ -0,0 +1 @@
1
+ import{existsSync as i}from"node:fs";const a=2e3,E=/^[^\x00-\x1f\x7f]+$/,F=/^<(?:analysis|summary)>/,e=(u,t)=>u&&typeof u=="object"?u[t]:void 0;export const CLAUDE_SIDE_QUESTION={command(u){return`/btw ${u}`},validate(u){const t=u.trim();return t?t.length>a?{ok:!1,error:`\u95EE\u9898\u8FC7\u957F\uFF08\u4E0A\u9650 ${a} \u5B57\u7B26\uFF09`}:E.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(u,t){if(u!=="SubagentStop")return null;const s=e(t,"raw"),r=e(s,"agent_transcript_path");if(typeof r!="string"||!r||i(r))return null;const o=e(s,"last_assistant_message");if(typeof o!="string")return null;const n=o.trim();return n&&!F.test(n)?n:null}};
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Statusline configuration — which segments a project's statusline renders, in
3
+ * what colour/style, and how they are laid out.
4
+ *
5
+ * Stored per-project as `.weave/statusline.json`; a global default template
6
+ * lives at `~/.weave/statusline.json`. The generator embeds the effective
7
+ * config into `helpers/statusline.cjs` so the script is self-contained.
8
+ *
9
+ * Layout model (informed by ruflo's statusline + ccstatusline):
10
+ * - `lines` : an ordered list of rows; each row is the left-to-right segment
11
+ * order of that line (draggable in the panel, across rows too).
12
+ * Rows are separated by a dim divider; the logo prefixes row 0.
13
+ * - `refreshInterval`: how often (seconds, min 1) Claude Code re-runs the
14
+ * generated script during idle periods. Updates are driven by
15
+ * Claude Code's own mechanism — the script is a one-shot command
16
+ * re-invoked after each assistant response (~300ms debounce)
17
+ * plus this timer; default 10s.
18
+ *
19
+ * When `powerline.enabled`, segments render as solid background blocks that
20
+ * join edge-to-edge (ccstatusline-style), each optionally prefixed by an icon.
21
+ * `align` pads the line so the content sits left, centre, or right.
22
+ *
23
+ * Segment data comes straight from Claude Code's statusline stdin JSON
24
+ * (`context_window.used_percentage`, `rate_limits.five_hour.used_percentage`,
25
+ * `effort.level`, `cost.total_cost_usd`, …), so the generated script needs no
26
+ * external daemon — it re-reads stdin on every render, which is the
27
+ * auto-refresh mechanism.
28
+ */
29
+ export type StatuslineNamedColor = 'gray' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan';
30
+ /**
31
+ * A colour is one of the seven ANSI names (classic SGR 31-36/90), an indexed
32
+ * 256-colour value (`ansi256:196` → `38;5;196`), or a truecolor hex value
33
+ * (`#ff8800` / `#f80` → `38;2;…`).
34
+ *
35
+ * The template-literal union keeps the seven names autocompletable while still
36
+ * admitting the extended encodings. It is deliberately permissive — anything
37
+ * shaped like a hex string type-checks — so `normalizeColor` in the manager is
38
+ * what actually validates values at rest.
39
+ */
40
+ export type StatuslineColor = StatuslineNamedColor | `ansi256:${number}` | `#${string}`;
41
+ /** The seven classic ANSI colour names, in palette order. */
42
+ export declare const NAMED_COLORS: readonly StatuslineNamedColor[];
43
+ /** All renderable segment kinds (maps to ccstatusline's data segments). */
44
+ export type SegmentKey = 'project' | 'git' | 'git_user' | 'changes' | 'model' | 'thinking' | 'context' | 'tokens' | 'cost' | 'rate' | 'time' | 'version' | 'output_style' | 'session' | 'exceeds200k' | 'fast_mode' | 'vim' | 'pr' | 'worktree' | 'agent';
45
+ export interface StatuslineSegment {
46
+ enabled: boolean;
47
+ color: StatuslineColor;
48
+ /** Render the segment in bold ANSI (`\x1b[1;…m`). */
49
+ bold: boolean;
50
+ /** Optional emoji/symbol prefix (e.g. `🤖`, `🌿`, `📁`). Empty when unused. */
51
+ icon: string;
52
+ /** Solid background block colour; `null` for no background (foreground only). */
53
+ backgroundColor: StatuslineColor | null;
54
+ /** Join this segment into the next block (no gap, inherited background). */
55
+ merge: boolean;
56
+ /** Context-bar display mode; ignored by other segments. */
57
+ style?: 'percent' | 'bar' | 'both';
58
+ /** Which rate-limit window `rate` reports; ignored by other segments. */
59
+ window?: 'five_hour' | 'seven_day' | 'spend';
60
+ /**
61
+ * Static text prefix, rendered as `<label><labelSeparator><value>` — e.g.
62
+ * `label: 'Cost'` yields `Cost: $0.45`. Empty/absent means no prefix, which
63
+ * is the behaviour every config had before labels existed.
64
+ */
65
+ label?: string;
66
+ /**
67
+ * Value template with `{token}` placeholders (see `SEGMENT_TOKENS` for the
68
+ * tokens each segment exposes). When set it replaces the built-in formatting
69
+ * for that segment; when absent the segment falls back to its legacy
70
+ * rendering, so existing configs are unaffected.
71
+ *
72
+ * e.g. `context.format = "[{bar}] {used}/{total} ({percent}%)"`
73
+ */
74
+ format?: string;
75
+ /**
76
+ * Which quantity the `tokens` segment reports: `session` (cumulative tokens
77
+ * for the whole session, read from the transcript) or `context` (tokens
78
+ * currently in the context window). Ignored by other segments.
79
+ */
80
+ metric?: 'session' | 'context';
81
+ }
82
+ /**
83
+ * Progress-bar appearance. Global rather than per-segment: a statusline reads
84
+ * as one design, and the reference layout uses a single bar style throughout.
85
+ */
86
+ export interface StatuslineBar {
87
+ /** Number of cells, clamped to 1-40. */
88
+ cells: number;
89
+ /** Filled-cell glyph. */
90
+ fill: string;
91
+ /** Empty-cell glyph. */
92
+ empty: string;
93
+ }
94
+ export type StatuslineAlign = 'left' | 'center' | 'right';
95
+ /** `global` = follow the global default template; `custom` = project-local. */
96
+ export type StatuslineSource = 'global' | 'custom';
97
+ /**
98
+ * Powerline glyph configuration. All glyph fields are optional Nerd-Font
99
+ * characters; `undefined` falls back to the classic triangle set and an empty
100
+ * string disables that glyph (caps only — the join separator is never empty).
101
+ */
102
+ export interface StatuslinePowerline {
103
+ enabled: boolean;
104
+ /** Block-join separator between adjacent blocks (default `` U+E0B0). */
105
+ separator?: string;
106
+ /** Row-start cap, painted in the first block's bg on a transparent
107
+ * background (default `` U+E0B2). Empty string disables. */
108
+ startCap?: string;
109
+ /** Row-end cap, painted in the last block's bg (default `` U+E0B0).
110
+ * Empty string disables. */
111
+ endCap?: string;
112
+ }
113
+ /** Classic triangle glyph set, used when the config leaves a field unset. */
114
+ export declare const POWERLINE_DEFAULT_GLYPHS: {
115
+ readonly separator: "";
116
+ readonly startCap: "";
117
+ readonly endCap: "";
118
+ };
119
+ export interface StatuslineConfig {
120
+ /** Rendered between segments when powerline blocks are off; powerline
121
+ * mode ignores it (the join glyph takes over). Default a single space. */
122
+ separator: string;
123
+ /** Alignment of each rendered row: left, centre or right. */
124
+ align: StatuslineAlign;
125
+ /**
126
+ * Text of the row-0 logo mark, rendered as `<logoText> v<version>`.
127
+ * weave's badge: the value is pinned to the shipped mark (only `logoColor`
128
+ * is user-configurable) and the panel offers no editor for it.
129
+ */
130
+ logoText: string;
131
+ /** Colour of the logo mark. */
132
+ logoColor: StatuslineColor;
133
+ /** ccstatusline-style solid background blocks. */
134
+ powerline: StatuslinePowerline;
135
+ /**
136
+ * Ordered lines; each line is the left-to-right segment order of that row.
137
+ * The panel adds/removes lines and reorders segments within/across them.
138
+ * Rows are separated by a dim divider; the logo prefixes the first row.
139
+ */
140
+ lines: SegmentKey[][];
141
+ /**
142
+ * How often Claude Code re-runs the statusline script (seconds, min 1).
143
+ * Event-driven updates (after each assistant response) happen regardless;
144
+ * this timer only bounds staleness during idle periods. Default 10s.
145
+ */
146
+ refreshInterval: number;
147
+ /** Project config origin: follow the global template, or project-local. */
148
+ source: StatuslineSource;
149
+ /** Progress-bar appearance, shared by every segment that draws a bar. */
150
+ bar: StatuslineBar;
151
+ /** Rendered between rows; an empty string (the default) draws nothing. */
152
+ divider: string;
153
+ /** Rendered between a segment's `label` and its value. Default `': '`. */
154
+ labelSeparator: string;
155
+ segments: Record<SegmentKey, StatuslineSegment>;
156
+ }
157
+ /** Default order in which enabled segments render left-to-right. */
158
+ export declare const SEGMENT_ORDER: SegmentKey[];
159
+ /**
160
+ * Legacy two-row split (single header + metrics) used to migrate old configs
161
+ * that had `layout: 'multi'`.
162
+ */
163
+ export declare const LEGACY_IDENTITY_LINE: SegmentKey[];
164
+ export declare const LEGACY_METRICS_LINE: SegmentKey[];
165
+ /**
166
+ * The shipped default: two powerline rows with text labels and a bracketed
167
+ * context bar.
168
+ *
169
+ * ```
170
+ * 🤖 Model: deepseek-flash[1M] 🧠 [░░░░░░░░░░░░] 39k/1.0M (4%) 🌿 main ✏️ (+1, -1)
171
+ * 🧩 Thinking: high 💸 Cost: $0.45 🔢 Total: 960.9k 📁 D:\…\weave-cli
172
+ * ```
173
+ *
174
+ * Needs a Nerd Font for the powerline joins; `PLAIN_STATUSLINE_CONFIG` is the
175
+ * same layout without them.
176
+ */
177
+ export declare const DEFAULT_STATUSLINE_CONFIG: StatuslineConfig;
178
+ /**
179
+ * The same layout with powerline blocks turned off, for terminals without a
180
+ * Nerd Font — segments fall back to the plain separator and no private-use
181
+ * glyphs are emitted.
182
+ */
183
+ export declare const PLAIN_STATUSLINE_CONFIG: StatuslineConfig;
184
+ /**
185
+ * Tokens each segment exposes to `StatuslineSegment.format`. Exported so the
186
+ * web panel and the CLI preview can offer the same vocabulary the generator
187
+ * understands — keep in lockstep with `segmentTokens` in `generator.ts`.
188
+ */
189
+ export declare const SEGMENT_TOKENS: Record<SegmentKey, readonly string[]>;
190
+ /**
191
+ * Built-in value formatting per segment, used when `format` is unset. Each one
192
+ * reproduces the rendering the generator hard-coded before `format` existed, so
193
+ * an untouched config produces byte-identical output.
194
+ *
195
+ * `context` is special-cased in the generator: its legacy output depended on
196
+ * `style`, so `DEFAULT_CONTEXT_FORMAT` below covers all three modes instead.
197
+ */
198
+ export declare const SEGMENT_DEFAULT_FORMAT: Record<SegmentKey, string>;
199
+ /** Legacy `context.style` → template, preserving each mode's old rendering. */
200
+ export declare const CONTEXT_STYLE_FORMAT: Record<'percent' | 'bar' | 'both', string>;
@@ -0,0 +1 @@
1
+ export const NAMED_COLORS=["gray","red","green","yellow","blue","magenta","cyan"],POWERLINE_DEFAULT_GLYPHS={separator:"\uE0B0",startCap:"\uE0B2",endCap:"\uE0B0"},SEGMENT_ORDER=["project","git_user","git","changes","model","thinking","context","tokens","cost","rate","time","version","output_style","session","exceeds200k","fast_mode","vim","pr","worktree","agent"],LEGACY_IDENTITY_LINE=["project","git","model"],LEGACY_METRICS_LINE=["context","tokens","cost","rate"];const e=o=>({enabled:!0,color:"gray",bold:!1,icon:"",backgroundColor:null,merge:!1,...o});export const DEFAULT_STATUSLINE_CONFIG={separator:" ",align:"left",logoText:"\u258A weave",logoColor:"magenta",powerline:{enabled:!0,separator:"\uE0B0",startCap:"\uE0B6",endCap:"\uE0B4"},lines:[["model","thinking","time"],["context","tokens","cost","rate"],["git_user","git","changes","project"]],refreshInterval:30,source:"global",bar:{cells:12,fill:"\u2588",empty:"\u2591"},divider:"",labelSeparator:": ",segments:{model:e({color:"#1f2335",backgroundColor:"#7aa2f7",bold:!0,icon:"\u{1F916}",label:"Model"}),context:e({color:"#c0caf5",backgroundColor:"#24283b",icon:"\u{1F9E0}",format:"[{bar}] {used}/{total} ({percent}%)"}),git:e({color:"#1f2335",backgroundColor:"#9ece6a",icon:"\u{1F33F}",format:"{branch} {sync}"}),git_user:e({color:"#1f2335",backgroundColor:"#7dcfff",icon:"\u{1F464}",format:"{user} <{email}>"}),changes:e({color:"#1f2335",backgroundColor:"#e0af68",icon:"\u270F\uFE0F",format:"(+{added}, -{deleted})"}),thinking:e({color:"#1f2335",backgroundColor:"#bb9af7",icon:"\u{1F9E9}",label:"Thinking"}),cost:e({color:"#1f2335",backgroundColor:"#73daca",icon:"\u{1F4B8}",label:"Cost"}),tokens:e({color:"#1f2335",backgroundColor:"#ff9e64",icon:"\u{1F522}",label:"Total",metric:"session"}),project:e({color:"#c0caf5",backgroundColor:"#2f334d",icon:"\u{1F4C1}",format:"{path}"}),rate:e({enabled:!1,color:"#f7768e",icon:"\u26A1",label:"Rate"}),time:e({enabled:!0,color:"gray",backgroundColor:"blue",icon:"\u{1F552}"}),version:e({enabled:!1,color:"#a9b1d6",icon:"\u2139\uFE0F",label:"CC",format:"{version}"}),output_style:e({enabled:!1,color:"#bb9af7",icon:"\u{1F3A8}",format:"{style}"}),session:e({enabled:!1,color:"#7dcfff",icon:"\u{1F3F7}\uFE0F",label:"Session",format:"{name}"}),exceeds200k:e({enabled:!1,color:"#f7768e",icon:"\u{1F6A8}",format:"{over}"}),fast_mode:e({enabled:!1,color:"#ff9e64",icon:"\u{1F680}",format:"{mode}"}),vim:e({enabled:!1,color:"#9ece6a",icon:"\u2328\uFE0F",format:"{mode}"}),pr:e({enabled:!1,color:"#73daca",icon:"\u{1F517}",label:"PR",format:"#{number}"}),worktree:e({enabled:!1,color:"#7aa2f7",icon:"\u{1FAB4}",format:"{name}"}),agent:e({enabled:!1,color:"#c0caf5",icon:"\u{1F3AD}",label:"Agent",format:"{name}"})}},PLAIN_STATUSLINE_CONFIG={...DEFAULT_STATUSLINE_CONFIG,powerline:{enabled:!1}},SEGMENT_TOKENS={project:["name","path"],git:["branch","repo","ahead","behind","sync"],git_user:["user","email"],changes:["added","deleted","files"],model:["model"],thinking:["level"],context:["bar","used","total","percent","remaining"],tokens:["total","percent"],cost:["cost","duration","api_duration","lines_added","lines_removed"],rate:["percent","limit","resets"],time:["time"],version:["version"],output_style:["style"],session:["name"],exceeds200k:["over"],fast_mode:["mode"],vim:["mode"],pr:["number","state","url"],worktree:["name","branch"],agent:["name"]},SEGMENT_DEFAULT_FORMAT={project:"{name}",git:"{branch} {sync}",git_user:"{user} <{email}>",changes:"{files}",model:"{model}",thinking:"{level}",context:"{percent}% {bar}",tokens:"{total}",cost:"{cost}",rate:"{limit} {percent}%",time:"{time}",version:"{version}",output_style:"{style}",session:"{name}",exceeds200k:"{over}",fast_mode:"{mode}",vim:"{mode}",pr:"#{number}",worktree:"{name}",agent:"{name}"},CONTEXT_STYLE_FORMAT={percent:"{percent}%",bar:"{bar}",both:"{percent}% {bar}"};
@@ -0,0 +1,12 @@
1
+ import type { StatuslineConfig } from './config.js';
2
+ /**
3
+ * 生成脚本的运行参数——两样都是调用方(server)的事实,harness 不自取:
4
+ * `cacheDir` 归 dataDir 布局(`<dataDir>/statusline/<session>.json`,按会话一个
5
+ * 文件,过期条目与陈旧文件由 daemon 的清扫器回收),`version` 归包身份(写进
6
+ * 脚本 banner)。
7
+ */
8
+ export interface GenerateStatuslineOptions {
9
+ cacheDir: string;
10
+ version: string;
11
+ }
12
+ export declare function generateStatuslineScript(config: StatuslineConfig, opts: GenerateStatuslineOptions): string;