@weavecode/weave 0.1.0 → 0.1.1

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 (273) hide show
  1. package/node_modules/@weavecode/cli/dist/cli.js +4 -4
  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.d.ts +0 -2
  6. package/node_modules/@weavecode/cli/dist/commands/dashboard.js +2 -1
  7. package/node_modules/@weavecode/cli/dist/commands/doctor.js +1 -1
  8. package/node_modules/@weavecode/cli/dist/commands/init.js +1 -1
  9. package/node_modules/@weavecode/cli/dist/commands/msg.js +2 -2
  10. package/node_modules/@weavecode/cli/dist/commands/scan.js +1 -1
  11. package/node_modules/@weavecode/cli/dist/commands/status.js +2 -2
  12. package/node_modules/@weavecode/cli/dist/commands/uninstall.js +1 -1
  13. package/node_modules/@weavecode/cli/dist/i18n/dict/en.js +5 -3
  14. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.d.ts +44 -1
  15. package/node_modules/@weavecode/cli/dist/i18n/dict/zh.js +6 -4
  16. package/node_modules/@weavecode/cli/dist/i18n/index.js +1 -1
  17. package/node_modules/@weavecode/cli/dist/i18n/t.js +1 -1
  18. package/node_modules/@weavecode/cli/dist/init/claudemd-gen.js +4 -4
  19. package/node_modules/@weavecode/cli/dist/init/executor.js +3 -3
  20. package/node_modules/@weavecode/cli/dist/init/git-commit.js +2 -2
  21. package/node_modules/@weavecode/cli/dist/init/harnesses/claude.js +7 -7
  22. package/node_modules/@weavecode/cli/dist/init/harnesses/codex.js +1 -1
  23. package/node_modules/@weavecode/cli/dist/init/helpers-gen.d.ts +4 -0
  24. package/node_modules/@weavecode/cli/dist/init/helpers-gen.js +1 -20
  25. package/node_modules/@weavecode/cli/dist/init/instruction-link.js +1 -1
  26. package/node_modules/@weavecode/cli/dist/init/mcp-gen.d.ts +3 -20
  27. package/node_modules/@weavecode/cli/dist/init/mcp-gen.js +1 -1
  28. package/node_modules/@weavecode/cli/dist/init/plugin-templates.js +1 -1
  29. package/node_modules/@weavecode/cli/dist/init/prompt.js +4 -4
  30. package/node_modules/@weavecode/cli/dist/init/settings-gen.d.ts +3 -30
  31. package/node_modules/@weavecode/cli/dist/init/settings-gen.js +1 -1
  32. package/node_modules/@weavecode/cli/dist/init/uninstall.js +6 -6
  33. package/node_modules/@weavecode/cli/dist/init/wiring.js +1 -1
  34. package/node_modules/@weavecode/cli/dist/parser.js +1 -1
  35. package/node_modules/@weavecode/cli/dist/statusline/ansi.js +1 -1
  36. package/node_modules/@weavecode/cli/dist/statusline/mock-input.js +1 -1
  37. package/node_modules/@weavecode/cli/dist/statusline/preview.js +2 -2
  38. package/node_modules/@weavecode/cli/package.json +5 -5
  39. package/node_modules/@weavecode/core/dist/harness-checks.js +1 -1
  40. package/node_modules/@weavecode/core/dist/harness.d.ts +45 -2
  41. package/node_modules/@weavecode/core/dist/harness.js +1 -1
  42. package/node_modules/@weavecode/core/dist/index.d.ts +1 -1
  43. package/node_modules/@weavecode/core/dist/index.js +1 -1
  44. package/node_modules/@weavecode/core/dist/platform.js +1 -1
  45. package/node_modules/@weavecode/core/dist/terminal.d.ts +28 -4
  46. package/node_modules/@weavecode/core/dist/terminal.js +1 -1
  47. package/node_modules/@weavecode/core/dist/types.d.ts +188 -11
  48. package/node_modules/@weavecode/core/dist/types.js +1 -1
  49. package/node_modules/@weavecode/core/dist/utils/fs.js +1 -1
  50. package/node_modules/@weavecode/core/dist/utils/logger.js +1 -1
  51. package/node_modules/@weavecode/core/package.json +1 -1
  52. package/node_modules/@weavecode/harness/dist/claude/assets.js +1 -1
  53. package/node_modules/@weavecode/harness/dist/claude/capture.d.ts +11 -1
  54. package/node_modules/@weavecode/harness/dist/claude/capture.js +5 -5
  55. package/node_modules/@weavecode/harness/dist/claude/detect.js +1 -1
  56. package/node_modules/@weavecode/harness/dist/claude/event-source.d.ts +1 -1
  57. package/node_modules/@weavecode/harness/dist/claude/event-source.js +1 -1
  58. package/node_modules/@weavecode/harness/dist/claude/helpers-gen.d.ts +5 -0
  59. package/node_modules/@weavecode/harness/dist/claude/helpers-gen.js +20 -0
  60. package/node_modules/@weavecode/harness/dist/claude/index.d.ts +5 -1
  61. package/node_modules/@weavecode/harness/dist/claude/index.js +1 -1
  62. package/node_modules/@weavecode/harness/dist/claude/mcp-gen.d.ts +22 -0
  63. package/node_modules/@weavecode/harness/dist/claude/mcp-gen.js +1 -0
  64. package/node_modules/@weavecode/harness/dist/claude/messaging.d.ts +11 -2
  65. package/node_modules/@weavecode/harness/dist/claude/messaging.js +4 -1
  66. package/node_modules/@weavecode/harness/dist/claude/model-aliases.d.ts +25 -0
  67. package/node_modules/@weavecode/harness/dist/claude/model-aliases.js +1 -0
  68. package/node_modules/@weavecode/harness/dist/claude/peers.js +1 -1
  69. package/node_modules/@weavecode/harness/dist/claude/plugins.js +4 -4
  70. package/node_modules/@weavecode/harness/dist/claude/prompt-inbox.js +1 -1
  71. package/node_modules/@weavecode/harness/dist/claude/prompt.js +3 -3
  72. package/node_modules/@weavecode/harness/dist/claude/questions.js +2 -1
  73. package/node_modules/@weavecode/harness/dist/claude/settings-gen.d.ts +32 -0
  74. package/node_modules/@weavecode/harness/dist/claude/settings-gen.js +1 -0
  75. package/node_modules/@weavecode/harness/dist/claude/transcript.d.ts +16 -0
  76. package/node_modules/@weavecode/harness/dist/claude/transcript.js +4 -2
  77. package/node_modules/@weavecode/harness/dist/codex/assets.js +1 -1
  78. package/node_modules/@weavecode/harness/dist/codex/detect.js +1 -1
  79. package/node_modules/@weavecode/harness/dist/codex/messaging.js +1 -1
  80. package/node_modules/@weavecode/harness/dist/codex/plugin-state.js +1 -1
  81. package/node_modules/@weavecode/harness/dist/codex/toml.js +9 -9
  82. package/node_modules/@weavecode/harness/dist/driver.d.ts +58 -1
  83. package/node_modules/@weavecode/harness/dist/driver.js +1 -1
  84. package/node_modules/@weavecode/harness/dist/index.d.ts +1 -0
  85. package/node_modules/@weavecode/harness/dist/index.js +1 -1
  86. package/node_modules/@weavecode/harness/dist/init/generated.d.ts +37 -0
  87. package/node_modules/@weavecode/harness/dist/init/generated.js +2 -0
  88. package/node_modules/@weavecode/harness/dist/init/pipeline.js +1 -1
  89. package/node_modules/@weavecode/harness/dist/registry-wiring.d.ts +3 -1
  90. package/node_modules/@weavecode/harness/dist/registry-wiring.js +1 -1
  91. package/node_modules/@weavecode/harness/dist/shared/install-link.js +1 -1
  92. package/node_modules/@weavecode/harness/package.json +2 -2
  93. package/node_modules/@weavecode/server/dist/daemon/ai-config.js +2 -2
  94. package/node_modules/@weavecode/server/dist/daemon/ai-context.js +6 -6
  95. package/node_modules/@weavecode/server/dist/daemon/ai-routes.js +4 -4
  96. package/node_modules/@weavecode/server/dist/daemon/api-log.d.ts +48 -0
  97. package/node_modules/@weavecode/server/dist/daemon/api-log.js +3 -0
  98. package/node_modules/@weavecode/server/dist/daemon/auth-routes.js +1 -1
  99. package/node_modules/@weavecode/server/dist/daemon/auto-start.js +6 -6
  100. package/node_modules/@weavecode/server/dist/daemon/capture-routes.js +1 -1
  101. package/node_modules/@weavecode/server/dist/daemon/claude-liveness.js +1 -1
  102. package/node_modules/@weavecode/server/dist/daemon/dashboard-auth.js +2 -2
  103. package/node_modules/@weavecode/server/dist/daemon/data-bus.js +1 -1
  104. package/node_modules/@weavecode/server/dist/daemon/dev-entry.js +1 -1
  105. package/node_modules/@weavecode/server/dist/daemon/fs-browser.js +1 -1
  106. package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.d.ts +6 -1
  107. package/node_modules/@weavecode/server/dist/daemon/hook-pipeline.js +1 -1
  108. package/node_modules/@weavecode/server/dist/daemon/hooks-routes.js +1 -1
  109. package/node_modules/@weavecode/server/dist/daemon/http.js +1 -1
  110. package/node_modules/@weavecode/server/dist/daemon/opener.d.ts +102 -19
  111. package/node_modules/@weavecode/server/dist/daemon/opener.js +97 -7
  112. package/node_modules/@weavecode/server/dist/daemon/port.js +1 -1
  113. package/node_modules/@weavecode/server/dist/daemon/project-harnesses.js +2 -2
  114. package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.d.ts +4 -3
  115. package/node_modules/@weavecode/server/dist/daemon/project-updates-refresher.js +1 -1
  116. package/node_modules/@weavecode/server/dist/daemon/server.d.ts +8 -0
  117. package/node_modules/@weavecode/server/dist/daemon/server.js +6 -6
  118. package/node_modules/@weavecode/server/dist/daemon/session-probe.d.ts +59 -2
  119. package/node_modules/@weavecode/server/dist/daemon/session-probe.js +1 -1
  120. package/node_modules/@weavecode/server/dist/daemon/settings.d.ts +10 -0
  121. package/node_modules/@weavecode/server/dist/daemon/settings.js +2 -2
  122. package/node_modules/@weavecode/server/dist/daemon/start.js +1 -1
  123. package/node_modules/@weavecode/server/dist/daemon/state.js +2 -2
  124. package/node_modules/@weavecode/server/dist/daemon/static.js +1 -1
  125. package/node_modules/@weavecode/server/dist/daemon/terminal-topology-refresher.d.ts +4 -1
  126. package/node_modules/@weavecode/server/dist/daemon/tls.js +1 -1
  127. package/node_modules/@weavecode/server/dist/daemon/toolkit-routes.js +1 -1
  128. package/node_modules/@weavecode/server/dist/db/db.js +20 -2
  129. package/node_modules/@weavecode/server/dist/db/paths.d.ts +4 -0
  130. package/node_modules/@weavecode/server/dist/db/paths.js +1 -1
  131. package/node_modules/@weavecode/server/dist/hooks/answer-keys.js +1 -1
  132. package/node_modules/@weavecode/server/dist/hooks/bus.js +1 -1
  133. package/node_modules/@weavecode/server/dist/hooks/dispatcher.js +6 -6
  134. package/node_modules/@weavecode/server/dist/hooks/handlers/webhook.js +1 -1
  135. package/node_modules/@weavecode/server/dist/hooks/headless-runner.js +2 -2
  136. package/node_modules/@weavecode/server/dist/hooks/inbox-socket.d.ts +17 -4
  137. package/node_modules/@weavecode/server/dist/hooks/inbox-socket.js +2 -1
  138. package/node_modules/@weavecode/server/dist/hooks/inbox-worker.d.ts +20 -6
  139. package/node_modules/@weavecode/server/dist/hooks/inbox-worker.js +3 -3
  140. package/node_modules/@weavecode/server/dist/hooks/match.js +1 -1
  141. package/node_modules/@weavecode/server/dist/hooks/message-deliverer.d.ts +171 -13
  142. package/node_modules/@weavecode/server/dist/hooks/message-deliverer.js +3 -2
  143. package/node_modules/@weavecode/server/dist/hooks/mirror.js +4 -4
  144. package/node_modules/@weavecode/server/dist/hooks/plugin-installer.js +3 -3
  145. package/node_modules/@weavecode/server/dist/hooks/plugin-loader.js +1 -1
  146. package/node_modules/@weavecode/server/dist/hooks/plugin-project-state.js +1 -1
  147. package/node_modules/@weavecode/server/dist/hooks/prompt-flusher.js +1 -1
  148. package/node_modules/@weavecode/server/dist/hooks/promptbox.d.ts +13 -0
  149. package/node_modules/@weavecode/server/dist/hooks/promptbox.js +8 -8
  150. package/node_modules/@weavecode/server/dist/hooks/push-notify.js +2 -2
  151. package/node_modules/@weavecode/server/dist/hooks/question-tracker.d.ts +6 -4
  152. package/node_modules/@weavecode/server/dist/hooks/question-tracker.js +1 -1
  153. package/node_modules/@weavecode/server/dist/hooks/registry.js +1 -1
  154. package/node_modules/@weavecode/server/dist/hooks/resume-runner.js +1 -1
  155. package/node_modules/@weavecode/server/dist/hooks/sequence-engine.js +1 -1
  156. package/node_modules/@weavecode/server/dist/hooks/session-purge.d.ts +4 -0
  157. package/node_modules/@weavecode/server/dist/hooks/session-purge.js +1 -1
  158. package/node_modules/@weavecode/server/dist/hooks/session-sweeper.d.ts +5 -8
  159. package/node_modules/@weavecode/server/dist/hooks/session-sweeper.js +1 -1
  160. package/node_modules/@weavecode/server/dist/hooks/toolkit-scan.js +1 -1
  161. package/node_modules/@weavecode/server/dist/hooks/toolkit.d.ts +8 -0
  162. package/node_modules/@weavecode/server/dist/hooks/toolkit.js +5 -5
  163. package/node_modules/@weavecode/server/dist/hooks/watch-engine.d.ts +7 -0
  164. package/node_modules/@weavecode/server/dist/hooks/watch-engine.js +1 -1
  165. package/node_modules/@weavecode/server/dist/index.d.ts +1 -1
  166. package/node_modules/@weavecode/server/dist/install/apply-update.d.ts +1 -1
  167. package/node_modules/@weavecode/server/dist/install/apply-update.js +1 -1
  168. package/node_modules/@weavecode/server/dist/install/capabilities.js +1 -1
  169. package/node_modules/@weavecode/server/dist/install/codex-toml.js +1 -1
  170. package/node_modules/@weavecode/server/dist/install/file-assets.js +1 -1
  171. package/node_modules/@weavecode/server/dist/install/fingerprint.d.ts +5 -1
  172. package/node_modules/@weavecode/server/dist/install/fingerprint.js +1 -1
  173. package/node_modules/@weavecode/server/dist/install/git-classify.d.ts +30 -0
  174. package/node_modules/@weavecode/server/dist/install/git-classify.js +1 -0
  175. package/node_modules/@weavecode/server/dist/install/global-config.js +2 -2
  176. package/node_modules/@weavecode/server/dist/install/global-file-assets.js +1 -1
  177. package/node_modules/@weavecode/server/dist/install/init-files.d.ts +46 -0
  178. package/node_modules/@weavecode/server/dist/install/init-files.js +2 -0
  179. package/node_modules/@weavecode/server/dist/install/install-ledger.js +1 -1
  180. package/node_modules/@weavecode/server/dist/install/installer.js +3 -3
  181. package/node_modules/@weavecode/server/dist/install/library-index.js +1 -1
  182. package/node_modules/@weavecode/server/dist/install/mcp-rows.js +1 -1
  183. package/node_modules/@weavecode/server/dist/install/plugin-install.js +1 -1
  184. package/node_modules/@weavecode/server/dist/install/plugin-rows.js +1 -1
  185. package/node_modules/@weavecode/server/dist/install/plugin-templates.js +1 -1
  186. package/node_modules/@weavecode/server/dist/install/project-config.d.ts +0 -2
  187. package/node_modules/@weavecode/server/dist/install/project-config.js +2 -2
  188. package/node_modules/@weavecode/server/dist/install/reader.js +1 -1
  189. package/node_modules/@weavecode/server/dist/install/scan-cache.js +1 -1
  190. package/node_modules/@weavecode/server/dist/install/scanner.js +1 -1
  191. package/node_modules/@weavecode/server/dist/install/settings-mcp.js +2 -2
  192. package/node_modules/@weavecode/server/dist/install/updates.d.ts +17 -5
  193. package/node_modules/@weavecode/server/dist/install/updates.js +1 -1
  194. package/node_modules/@weavecode/server/dist/market/builtin.js +1 -1
  195. package/node_modules/@weavecode/server/dist/market/identity.js +1 -1
  196. package/node_modules/@weavecode/server/dist/market/import.js +2 -2
  197. package/node_modules/@weavecode/server/dist/market/refresh.js +1 -1
  198. package/node_modules/@weavecode/server/dist/market/resolve.js +1 -1
  199. package/node_modules/@weavecode/server/dist/market/updates.js +1 -1
  200. package/node_modules/@weavecode/server/dist/registry.js +2 -2
  201. package/node_modules/@weavecode/server/dist/repositories/hook-dispatches.js +5 -5
  202. package/node_modules/@weavecode/server/dist/repositories/hook-events.js +2 -2
  203. package/node_modules/@weavecode/server/dist/repositories/hook-rules.js +4 -4
  204. package/node_modules/@weavecode/server/dist/repositories/libraries.js +1 -1
  205. package/node_modules/@weavecode/server/dist/repositories/plugin-states.js +1 -1
  206. package/node_modules/@weavecode/server/dist/repositories/projects.d.ts +7 -0
  207. package/node_modules/@weavecode/server/dist/repositories/projects.js +2 -2
  208. package/node_modules/@weavecode/server/dist/repositories/push-subscriptions.js +2 -2
  209. package/node_modules/@weavecode/server/dist/repositories/session-watches.js +4 -4
  210. package/node_modules/@weavecode/server/dist/repositories/sessions.d.ts +17 -4
  211. package/node_modules/@weavecode/server/dist/repositories/sessions.js +2 -2
  212. package/node_modules/@weavecode/server/dist/repositories/uploads.d.ts +66 -0
  213. package/node_modules/@weavecode/server/dist/repositories/uploads.js +7 -0
  214. package/node_modules/@weavecode/server/dist/statusline/cache-sweeper.js +1 -1
  215. package/node_modules/@weavecode/server/dist/statusline/generator.js +81 -40
  216. package/node_modules/@weavecode/server/dist/statusline/manager.d.ts +2 -0
  217. package/node_modules/@weavecode/server/dist/statusline/manager.js +4 -4
  218. package/node_modules/@weavecode/server/dist/surfaces.js +1 -1
  219. package/node_modules/@weavecode/server/dist/watch/cache.js +1 -1
  220. package/node_modules/@weavecode/server/dist/watch/classifier.js +1 -1
  221. package/node_modules/@weavecode/server/dist/watch/plugin-mods.js +1 -1
  222. package/node_modules/@weavecode/server/dist/watch/sync-scheduler.d.ts +8 -4
  223. package/node_modules/@weavecode/server/dist/watch/sync-scheduler.js +1 -1
  224. package/node_modules/@weavecode/server/dist/watch/watch-service.js +1 -1
  225. package/node_modules/@weavecode/server/package.json +4 -4
  226. package/node_modules/@weavecode/server/web/dist/assets/index-D5WFh77i.css +11 -0
  227. package/node_modules/@weavecode/server/web/dist/assets/index-DJibaGnJ.js +585 -0
  228. package/node_modules/@weavecode/server/web/dist/index.html +14 -2
  229. package/node_modules/@weavecode/templates/dist/resources/weave-market/plugins/core-skills/weave-plugin-creator/skills/weave-plugin-creator/SKILL.md +2 -2
  230. package/node_modules/@weavecode/templates/package.json +2 -2
  231. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/README.md +50 -32
  232. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/build/index.d.ts +86 -40
  233. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/build/index.es.js +860 -353
  234. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/build/index.js +860 -353
  235. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-cms/node_modules/asn1js/package.json +20 -17
  236. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/README.md +50 -32
  237. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/build/index.d.ts +86 -40
  238. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/build/index.es.js +860 -353
  239. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/build/index.js +860 -353
  240. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-csr/node_modules/asn1js/package.json +20 -17
  241. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/README.md +50 -32
  242. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/build/index.d.ts +86 -40
  243. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/build/index.es.js +860 -353
  244. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/build/index.js +860 -353
  245. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-ecc/node_modules/asn1js/package.json +20 -17
  246. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/README.md +50 -32
  247. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/build/index.d.ts +86 -40
  248. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/build/index.es.js +860 -353
  249. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/build/index.js +860 -353
  250. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-pkcs9/node_modules/asn1js/package.json +20 -17
  251. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/README.md +50 -32
  252. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/build/index.d.ts +86 -40
  253. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/build/index.es.js +860 -353
  254. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/build/index.js +860 -353
  255. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-rsa/node_modules/asn1js/package.json +20 -17
  256. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/README.md +50 -32
  257. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/build/index.d.ts +86 -40
  258. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/build/index.es.js +860 -353
  259. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/build/index.js +860 -353
  260. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-schema/node_modules/asn1js/package.json +20 -17
  261. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/README.md +50 -32
  262. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/build/index.d.ts +86 -40
  263. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/build/index.es.js +860 -353
  264. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/build/index.js +860 -353
  265. package/node_modules/selfsigned/node_modules/@peculiar/x509/node_modules/@peculiar/asn1-x509/node_modules/asn1js/package.json +20 -17
  266. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/README.md +50 -32
  267. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/build/index.d.ts +86 -40
  268. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/build/index.es.js +860 -353
  269. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/build/index.js +860 -353
  270. package/node_modules/selfsigned/node_modules/pkijs/node_modules/asn1js/package.json +20 -17
  271. package/package.json +6 -6
  272. package/node_modules/@weavecode/server/web/dist/assets/index-BOzaRlQE.js +0 -560
  273. package/node_modules/@weavecode/server/web/dist/assets/index-ChX8G8cT.css +0 -11
@@ -1,4 +1,4 @@
1
- import{readFileSync as f}from"node:fs";import l from"node:path";import{fileURLToPath as g}from"node:url";import{CommandParser as h}from"./parser.js";import{initCommand as u}from"./commands/init.js";import{statusCommand as C}from"./commands/status.js";import{daemonCommand as $}from"./commands/daemon.js";import{dashboardCommand as b}from"./commands/dashboard.js";import{scanCommand as w}from"./commands/scan.js";import{chpassCommand as x}from"./commands/chpass.js";import{doctorCommand as E}from"./commands/doctor.js";import{uninstallCommand as S}from"./commands/uninstall.js";import{initCliLocale as j,t as r}from"./i18n/index.js";const v=l.dirname(g(import.meta.url));function d(){try{return JSON.parse(f(l.join(v,"..","package.json"),"utf-8")).version??"0.0.0"}catch{return"0.0.0"}}function L(a){if(a.description){console.log(` ${a.name.padEnd(12)}${r(a.description)}`);for(const n of a.subcommands??[]){const o=[n.name,...n.aliases??[]].join(", "),s=n.description?r(n.description):"";console.log(` ${o.padEnd(12)}${s}`)}}}function m(a){const n=d();console.log(`${r("help.tagline",{version:n})}
2
- `),console.log(`${r("help.usage")}
3
- `),console.log(r("help.commands"));for(const o of a.getAllCommands())L(o);console.log(`
4
- ${r("help.globalOptions")}`);for(const o of a.getGlobalOptions()){const s=o.short?`-${o.short}, --${o.name}`:` --${o.name}`;console.log(` ${s.padEnd(20)}${r(o.description)}`)}}function P(a){console.error(r("help.subcommands"));for(const n of a.subcommands??[]){const o=[n.name,...n.aliases??[]].join(", "),s=n.description?r(n.description):"";console.error(` ${o.padEnd(12)}${s}`)}}export class CLI{parser;constructor(){this.parser=new h,this.registerCommands()}registerCommands(){this.parser.registerCommand(u),this.parser.registerCommand(S),this.parser.registerCommand(C),this.parser.registerCommand($),this.parser.registerCommand(b),this.parser.registerCommand(w),this.parser.registerCommand(x),this.parser.registerCommand(E)}async run(n=process.argv.slice(2)){delete process.env.CLAUDE_CODE_CHILD_SESSION,await j();const o=this.parser.parse(n);if(o.flags.version){console.log(d());return}if(o.flags.help||o.command.length===0){m(this.parser);return}let s;for(const e of o.command)s=(s?s.subcommands?.find(c=>c.name===e||c.aliases?.includes(e)):this.parser.getCommand(e))??s;if(!s?.action){if(s?.subcommands?.length){const e=o.positional[0];console.error(e?r("cli.unknownSubcommand",{command:s.name,subcommand:e}):r("cli.missingSubcommand",{command:s.name})),P(s),process.exit(1)}console.error(r("cli.unknownCommand",{command:o.command.join(" ")})),m(this.parser),process.exit(1)}const i=s.maxPositionals??0;if(o.positional.length>i){const e=o.command.join(" ");console.error(r("cli.unexpectedPositional",{command:e,arg:o.positional[i]})),m(this.parser),process.exit(1)}const t=this.parser.validateFlags(o.flags,s);if(t.length>0){for(const e of t)console.error(r("cli.error",{error:e}));process.exit(1)}const p={commandPath:o.command,flags:o.flags,positional:o.positional,raw:o.raw};await s.action(p)}}
1
+ import{readFileSync as f}from"node:fs";import l from"node:path";import{fileURLToPath as g}from"node:url";import{CommandParser as h}from"./parser.js";import{initCommand as u}from"./commands/init.js";import{statusCommand as C}from"./commands/status.js";import{daemonCommand as b}from"./commands/daemon.js";import{dashboardCommand as $}from"./commands/dashboard.js";import{scanCommand as x}from"./commands/scan.js";import{chpassCommand as w}from"./commands/chpass.js";import{doctorCommand as E}from"./commands/doctor.js";import{uninstallCommand as S}from"./commands/uninstall.js";import{initCliLocale as j,t as s}from"./i18n/index.js";const v=l.dirname(g(import.meta.url));function p(){try{return JSON.parse(f(l.join(v,"..","package.json"),"utf-8")).version??"0.0.0"}catch{return"0.0.0"}}function P(e){if(e.description){console.log(` ${e.name.padEnd(12)}${s(e.description)}`);for(const r of e.subcommands??[]){const o=[r.name,...r.aliases??[]].join(", "),n=r.description?s(r.description):"";console.log(` ${o.padEnd(12)}${n}`)}}}function t(e){const r=p();console.log(`${s("help.tagline",{version:r})}
2
+ `),console.log(`${s("help.usage")}
3
+ `),console.log(s("help.commands"));for(const o of e.getAllCommands())P(o);console.log(`
4
+ ${s("help.globalOptions")}`);for(const o of e.getGlobalOptions()){const n=o.short?`-${o.short}, --${o.name}`:` --${o.name}`;console.log(` ${n.padEnd(20)}${s(o.description)}`)}}function k(e){console.error(s("help.subcommands"));for(const r of e.subcommands??[]){const o=[r.name,...r.aliases??[]].join(", "),n=r.description?s(r.description):"";console.error(` ${o.padEnd(12)}${n}`)}}export class CLI{parser;constructor(){this.parser=new h,this.registerCommands()}registerCommands(){this.parser.registerCommand(u),this.parser.registerCommand(S),this.parser.registerCommand(C),this.parser.registerCommand(b),this.parser.registerCommand($),this.parser.registerCommand(x),this.parser.registerCommand(w),this.parser.registerCommand(E)}async run(r=process.argv.slice(2)){delete process.env.CLAUDE_CODE_CHILD_SESSION,await j();const o=this.parser.parse(r);if(o.flags.version){console.log(p());return}if(o.flags.help||o.command.length===0){t(this.parser);return}let n;for(const a of o.command)n=(n?n.subcommands?.find(c=>c.name===a||c.aliases?.includes(a)):this.parser.getCommand(a))??n;if(!n?.action){if(n?.subcommands?.length){const a=o.positional[0];console.error(a?s("cli.unknownSubcommand",{command:n.name,subcommand:a}):s("cli.missingSubcommand",{command:n.name})),k(n),process.exit(1)}console.error(s("cli.unknownCommand",{command:o.command.join(" ")})),t(this.parser),process.exit(1)}const m=n.maxPositionals??0;if(o.positional.length>m){const a=o.command.join(" ");console.error(s("cli.unexpectedPositional",{command:a,arg:o.positional[m]})),t(this.parser),process.exit(1)}const i=this.parser.validateFlags(o.flags,n);if(i.length>0){for(const a of i)console.error(s("cli.error",{error:a}));process.exit(1)}const d={commandPath:o.command,flags:o.flags,positional:o.positional,raw:o.raw};await n.action(d)}}
@@ -1 +1 @@
1
- import{DAEMON_HOST as c}from"@weavecode/server";import{logger as s}from"@weavecode/core";import{t as r}from"../i18n/index.js";import{ensureDaemonRunning as i}from"./daemon.js";import{localTokenHeader as p}from"./daemon-auth.js";const m=6;async function h(e){const t=e.positional[0];if(typeof t!="string"||t.length<m){s.warn(r("out.chpass.usage")),process.exitCode=1;return}const n=await i();try{const o=await fetch(`http://${c}:${n.port}/auth/password`,{method:"PUT",headers:{"content-type":"application/json",...p()},body:JSON.stringify({next:t})}),a=await o.json().catch(()=>({}));if(!o.ok)throw new Error(typeof a.error=="string"?a.error:`HTTP ${o.status}`);s.success(r("out.chpass.ok"))}catch(o){s.warn(r("out.chpass.fail",{error:o instanceof Error?o.message:String(o)})),process.exitCode=1}}export const chpassCommand={name:"chpass",description:"cmd.chpass.desc",action:h,maxPositionals:1};
1
+ import{DAEMON_HOST as c}from"@weavecode/server";import{logger as s}from"@weavecode/core";import{t as r}from"../i18n/index.js";import{ensureDaemonRunning as i}from"./daemon.js";import{localTokenHeader as p}from"./daemon-auth.js";const m=6;async function h(n){const t=n.positional[0];if(typeof t!="string"||t.length<m){s.warn(r("out.chpass.usage")),process.exitCode=1;return}const a=await i();try{const o=await fetch(`http://${c}:${a.port}/auth/password`,{method:"PUT",headers:{"content-type":"application/json",...p()},body:JSON.stringify({next:t})}),e=await o.json().catch(()=>({}));if(!o.ok)throw new Error(typeof e.error=="string"?e.error:`HTTP ${o.status}`);s.success(r("out.chpass.ok"))}catch(o){s.warn(r("out.chpass.fail",{error:o instanceof Error?o.message:String(o)})),process.exitCode=1}}export const chpassCommand={name:"chpass",description:"cmd.chpass.desc",action:h,maxPositionals:1};
@@ -1 +1 @@
1
- import{existsSync as a,readFileSync as r,rmSync as e}from"node:fs";import{getAuthPath as n,getInitialPasswordPath as s}from"@weavecode/server";import{logger as i}from"@weavecode/core";import{t as c}from"../i18n/index.js";export function localTokenHeader(){try{const t=JSON.parse(r(n(),"utf8"));return typeof t.localToken=="string"&&t.localToken?{"x-weave-local":t.localToken}:{}}catch{return{}}}export function announceInitialPassword(){const t=s();if(!a(t))return;let o;try{o=r(t,"utf8").trim()}catch{return}e(t,{force:!0}),o&&i.info(c("out.dash.initialPassword",{password:o}))}
1
+ import{existsSync as e,readFileSync as o,rmSync as n}from"node:fs";import{getAuthPath as a,getInitialPasswordPath as i}from"@weavecode/server";import{logger as c}from"@weavecode/core";import{t as l}from"../i18n/index.js";export function localTokenHeader(){try{const t=JSON.parse(o(a(),"utf8"));return typeof t.localToken=="string"&&t.localToken?{"x-weave-local":t.localToken}:{}}catch{return{}}}export function announceInitialPassword(){const t=i();if(!e(t))return;let r;try{r=o(t,"utf8").trim()}catch{return}n(t,{force:!0}),r&&c.info(l("out.dash.initialPassword",{password:r}))}
@@ -1,2 +1,2 @@
1
- import{spawn as m}from"node:child_process";import{DEFAULT_PORT as s,DAEMON_HOST as i,isPortFree as u,findFreePort as f,readDaemonState as c,writeDaemonState as l,clearDaemonState as w,resolveDaemonEntry as h,accessUrls as g}from"@weavecode/server";import{logger as n}from"@weavecode/core";import{t as e}from"../i18n/index.js";export async function probeDaemon(t){try{const a=await fetch(`http://${i}:${t}/health`);return a.ok?(await a.json()).service==="weave-daemon":!1}catch{return!1}}export async function ensureDaemonRunning(){const t=c();if(t&&await probeDaemon(t.port))return{port:t.port,started:!1};if(await probeDaemon(s))return{port:s,started:!1};const a=await u(s)?s:await f(s+1);l({pid:0,port:a,startedAt:new Date().toISOString()});const o=h();return m(process.execPath,o.isTs?["--import","tsx",o.path]:[o.path],{detached:!0,stdio:"ignore"}).unref(),{port:a,started:!0}}async function y(){const t=await ensureDaemonRunning();if(!t.started){n.info(e("out.daemon.alreadyRunning",{port:t.port}));return}n.success(e("out.daemon.started",{host:i,port:t.port}))}async function d(t){return await(await fetch(`http://${i}:${t}/health`)).json()}async function D(){const t=c(),a=t?.port??s;let o=t?.pid;if(await probeDaemon(a))o=(await d(a)).pid;else if(!t){n.info(e("out.daemon.statusNotRunning"));return}let r;if(o)try{process.kill(o),r=o}catch{}w(),r!==void 0?n.success(e("out.daemon.stopped",{pid:r})):n.warn(e("out.daemon.statusStale",{pid:o??0,port:a}))}async function S(){const t=c(),a=t?.port??s;if(await probeDaemon(a)){const o=await d(a);n.info(e("out.daemon.statusRunning",{pid:o.pid,port:o.port,uptime:Math.round(o.uptimeMs/1e3)}));const r=g(a,t?.tlsPort??0);r.length>0&&(n.dim(e("out.daemon.urlsTitle")),n.dim(r.map(p=>` ${p.url}`).join(`
2
- `)))}else t?n.warn(e("out.daemon.statusStale",{pid:t.pid,port:t.port})):n.info(e("out.daemon.statusNotRunning"))}export const daemonCommand={name:"daemon",description:"cmd.daemon.desc",subcommands:[{name:"start",description:"cmd.daemon.start.desc",action:y},{name:"stop",description:"cmd.daemon.stop.desc",action:D},{name:"status",description:"cmd.daemon.status.desc",action:S}]};
1
+ import{spawn as u}from"node:child_process";import{DEFAULT_PORT as r,DAEMON_HOST as i,isPortFree as m,findFreePort as f,readDaemonState as c,writeDaemonState as l,clearDaemonState as h,resolveDaemonEntry as w,accessUrls as g}from"@weavecode/server";import{logger as o}from"@weavecode/core";import{t as a}from"../i18n/index.js";export async function probeDaemon(t){try{const e=await fetch(`http://${i}:${t}/health`);return e.ok?(await e.json()).service==="weave-daemon":!1}catch{return!1}}export async function ensureDaemonRunning(){const t=c();if(t&&await probeDaemon(t.port))return{port:t.port,started:!1};if(await probeDaemon(r))return{port:r,started:!1};const e=await m(r)?r:await f(r+1);l({pid:0,port:e,startedAt:new Date().toISOString()});const n=w();return u(process.execPath,n.isTs?["--import","tsx",n.path]:[n.path],{detached:!0,stdio:"ignore"}).unref(),{port:e,started:!0}}async function y(){const t=await ensureDaemonRunning();if(!t.started){o.info(a("out.daemon.alreadyRunning",{port:t.port}));return}o.success(a("out.daemon.started",{host:i,port:t.port}))}async function d(t){return await(await fetch(`http://${i}:${t}/health`)).json()}async function D(){const t=c(),e=t?.port??r;let n=t?.pid;if(await probeDaemon(e))n=(await d(e)).pid;else if(!t){o.info(a("out.daemon.statusNotRunning"));return}let s;if(n)try{process.kill(n),s=n}catch{}h(),s!==void 0?o.success(a("out.daemon.stopped",{pid:s})):o.warn(a("out.daemon.statusStale",{pid:n??0,port:e}))}async function S(){const t=c(),e=t?.port??r;if(await probeDaemon(e)){const n=await d(e);o.info(a("out.daemon.statusRunning",{pid:n.pid,port:n.port,uptime:Math.round(n.uptimeMs/1e3)}));const s=g(e,t?.tlsPort??0);s.length>0&&(o.dim(a("out.daemon.urlsTitle")),o.dim(s.map(p=>` ${p.url}`).join(`
2
+ `)))}else t?o.warn(a("out.daemon.statusStale",{pid:t.pid,port:t.port})):o.info(a("out.daemon.statusNotRunning"))}export const daemonCommand={name:"daemon",description:"cmd.daemon.desc",subcommands:[{name:"start",description:"cmd.daemon.start.desc",action:y},{name:"stop",description:"cmd.daemon.stop.desc",action:D},{name:"status",description:"cmd.daemon.status.desc",action:S}]};
@@ -10,6 +10,4 @@ import type { Command } from '../parser.js';
10
10
  export declare function openBrowser(url: string): void;
11
11
  /** The console URL for a daemon port. */
12
12
  export declare function dashboardUrl(port: number): string;
13
- /** 绑非回环时的局域网访问地址(IPv4 非内部);绑回环 / 无状态文件 → 空表。 */
14
- export declare function lanUrls(port: number): string[];
15
13
  export declare const dashboardCommand: Command;
@@ -1 +1,2 @@
1
- import{spawn as i}from"node:child_process";import{networkInterfaces as p}from"node:os";import{DAEMON_HOST as d,readDaemonState as c,resolveStaticDir as m}from"@weavecode/server";import{logger as t}from"@weavecode/core";import{t as n}from"../i18n/index.js";import{ensureDaemonRunning as u}from"./daemon.js";import{announceInitialPassword as f}from"./daemon-auth.js";export function openBrowser(r){const[a,o]=process.platform==="win32"?["cmd",["/c","start","",r]]:process.platform==="darwin"?["open",[r]]:["xdg-open",[r]],s=i(a,o,{detached:!0,stdio:"ignore"});s.on("error",()=>{t.dim(n("out.dash.browserFailed"))}),s.unref()}export function dashboardUrl(r){return`http://${d}:${r}/`}export function lanUrls(r){const a=c()?.host;if(!a||a==="127.0.0.1"||a==="localhost")return[];const o=[];for(const s of Object.values(p()))for(const e of s??[])e.family==="IPv4"&&!e.internal&&o.push(`http://${e.address}:${r}/`);return o}async function l(r){const a=!!r.flags.noOpen,o=await u();o.started?(t.success(n("out.daemon.started",{host:d,port:o.port})),t.dim(n("out.dash.stopHint"))):t.info(n("out.daemon.alreadyRunning",{port:o.port})),m()||(t.warn(n("out.dash.noBundle")),t.dim(n("out.dash.buildHint")));const s=dashboardUrl(o.port);t.info(n("out.dash.url",{url:s}));for(const e of lanUrls(o.port))t.info(n("out.dash.lanUrl",{url:e}));if(f(),a){t.dim(n("out.dash.noOpen"));return}openBrowser(s)}export const dashboardCommand={name:"dashboard",aliases:["dash"],description:"cmd.dashboard.desc",options:[{name:"no-open",description:"flag.dashboard.noOpen",type:"boolean",default:!1}],action:l};
1
+ import{spawn as p}from"node:child_process";import{accessUrls as m,DAEMON_HOST as d,readDaemonState as c,resolveStaticDir as l}from"@weavecode/server";import{logger as o}from"@weavecode/core";import{t as n}from"../i18n/index.js";import{ensureDaemonRunning as u}from"./daemon.js";import{announceInitialPassword as f}from"./daemon-auth.js";export function openBrowser(t){const[e,r]=process.platform==="win32"?["cmd",["/c","start","",t]]:process.platform==="darwin"?["open",[t]]:["xdg-open",[t]],a=p(e,r,{detached:!0,stdio:"ignore"});a.on("error",()=>{o.dim(n("out.dash.browserFailed"))}),a.unref()}export function dashboardUrl(t){return`http://${d}:${t}/`}async function h(t){const e=!!t.flags.noOpen,r=await u();r.started?(o.success(n("out.daemon.started",{host:d,port:r.port})),o.dim(n("out.dash.stopHint"))):o.info(n("out.daemon.alreadyRunning",{port:r.port})),l()||(o.warn(n("out.dash.noBundle")),o.dim(n("out.dash.buildHint")));const a=dashboardUrl(r.port);o.info(n("out.dash.url",{url:a}));const s=m(r.port,c()?.tlsPort??0);if(s.length>0&&(o.dim(n("out.daemon.urlsTitle")),o.dim(s.map(i=>` ${i.url}`).join(`
2
+ `))),f(),e){o.dim(n("out.dash.noOpen"));return}openBrowser(a)}export const dashboardCommand={name:"dashboard",aliases:["dash"],description:"cmd.dashboard.desc",options:[{name:"no-open",description:"flag.dashboard.noOpen",type:"boolean",default:!1}],action:h};
@@ -1 +1 @@
1
- import{existsSync as m,readFileSync as p}from"node:fs";import u from"node:path";import{DEFAULT_PORT as w,getDbPath as k,openDatabase as h,ProjectRepository as v,readDaemonState as x}from"@weavecode/server";import{formatTable as y,logger as r}from"@weavecode/core";import{checkHarness as S}from"../init/harness-checks.js";import{probeDaemon as D}from"./daemon.js";import{t as o}from"../i18n/index.js";const g=i=>{const t=u.resolve(i);return process.platform==="win32"?t.toLowerCase():t};function A(i){if(!m(k()))return null;const t=h();try{const s=new v(t),d=g(i),n=[...s.list(),...s.listArchived()].find(e=>g(e.path)===d);return n?{id:n.id,source:n.source,archived:n.archivedAt!==null,token:n.token}:null}finally{t.close()}}function T(i){const t=u.join(i,".weave","token");return m(t)?p(t,"utf-8").trim():null}export const doctorCommand={name:"doctor",description:"cmd.doctor.desc",options:[{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()}],async action(i){const t=u.resolve(String(i.flags.dir??process.cwd())),s=m(u.join(t,".weave","config.yaml")),d=x()?.port??w,n=await D(d),e=A(t),a=T(t);let c;a===null?c=o("out.doctor.tokenMissing"):e?a===e.token?c=o("out.doctor.tokenOk"):c=o("out.doctor.tokenStale"):c=o("out.doctor.tokenUnregistered"),r.info(o("out.doctor.header")),console.log(y([[o("out.doctor.dir"),t],[o("out.doctor.initialized"),s?o("out.doctor.yes"):o("out.doctor.no")],[o("out.doctor.daemon"),n?o("out.doctor.daemonRunning",{port:d}):o("out.doctor.daemonStopped")],[o("out.doctor.registered"),e?o(e.archived?"out.doctor.registeredArchived":"out.doctor.registeredYes",{id:e.id,source:e.source}):o("out.doctor.registeredNo")],[o("out.doctor.token"),c]])),console.log();const l=await S(t);if(l.length>0){r.warn(o("out.status.issuesFound",{count:l.length}));for(const f of l)r.warn(o("out.status.issue",{message:f.message})),r.dim(o("out.status.fix",{fix:f.fix}));console.log()}if(!e){r.warn(o("out.doctor.warnNotRegistered")),r.dim(o("out.doctor.fixInit")),s||r.dim(o("out.doctor.fixScan",{dir:t}));return}if(e.archived){r.warn(o("out.doctor.warnArchived"));return}if(a===null){r.warn(o("out.doctor.warnTokenMissing")),r.dim(o("out.doctor.fixInit"));return}if(a!==e.token){r.warn(o("out.doctor.warnTokenStale")),r.dim(o("out.doctor.fixInit"));return}r.success(o("out.doctor.ok")),n||r.dim(o("out.doctor.fixDaemon"))}};
1
+ import{existsSync as m,readFileSync as v}from"node:fs";import l from"node:path";import{DAEMON_HOST as S,DEFAULT_PORT as x,getDbPath as y,openDatabase as T,ProjectRepository as N,readDaemonState as b}from"@weavecode/server";import{formatTable as p,logger as r}from"@weavecode/core";import{checkHarness as P}from"../init/harness-checks.js";import{probeDaemon as D}from"./daemon.js";import{localTokenHeader as E}from"./daemon-auth.js";import{t as o}from"../i18n/index.js";const R={"no-mechanism":"out.doctor.reason.noMechanism","no-credentials":"out.doctor.reason.noCredentials","auth-token-required":"out.doctor.reason.authTokenRequired","no-peer-name":"out.doctor.reason.noPeerName","no-backend":"out.doctor.reason.noBackend","no-pane-env":"out.doctor.reason.noPaneEnv"},C={"no-hook-script":"out.doctor.hint.noHookScript","hook-script-not-weave":"out.doctor.hint.hookScriptNotWeave","hook-script-stale":"out.doctor.hint.hookScriptStale","no-events":"out.doctor.hint.noEvents","no-inbox-credentials":"out.doctor.hint.noInboxCredentials","inbox-token-required":"out.doctor.hint.inboxTokenRequired","no-peer-name":"out.doctor.hint.noPeerName","terminal-no-backend":"out.doctor.hint.terminalNoBackend","terminal-no-pane-env":"out.doctor.hint.terminalNoPaneEnv","not-running":"out.doctor.hint.notRunning",queued:"out.doctor.hint.queued",stalled:"out.doctor.hint.stalled"};function k(n,e){if(!e)return"";const i=n[e];return i?o(i):e}function H(n){if(!n||!n.present)return o("out.doctor.diagScriptNone");const e=n.source==="user"?o("out.doctor.diagSourceUser"):n.source==="project"?o("out.doctor.diagSourceProject"):o("out.doctor.diagSourceNone");if(!n.weaveOwned)return o("out.doctor.diagScriptNotOwned",{source:e});const i=o("out.doctor.diagYes");return o("out.doctor.diagScriptValue",{harness:n.harness,source:e,version:n.generatedVersion??o("out.doctor.diagMissing"),inbox:n.reportsInbox?i:o("out.doctor.diagNo"),pane:n.reportsPaneEnv?i:o("out.doctor.diagNo")})}function f(n){const e=k(R,n.reason);return n.status==="ready"?o("out.doctor.diagReady"):n.status==="unknown"?o("out.doctor.diagUnknown",{reason:e}):o("out.doctor.diagUnavailable",{reason:e})}async function O(n,e){let i;try{const t=await fetch(`http://${S}:${n}/messaging/diagnostics?project=${e}`,{headers:E()});if(!t.ok)throw new Error(`HTTP ${t.status}`);try{i=await t.json()}catch{throw new Error(`HTTP ${t.status}`)}}catch(t){r.warn(o("out.doctor.diagFailed",{error:t instanceof Error?t.message:String(t)}));return}const{daemon:d}=i,s=i.projects.find(t=>t.id===e)?.captures[0]??null;if(console.log(),r.info(o("out.doctor.diagHeader",{id:e})),console.log(p([[o("out.doctor.diagDaemon"),o("out.doctor.diagDaemonValue",{version:d.version,platform:d.platform,preset:d.terminalPreset,channel:o(d.terminalTextChannel?"out.doctor.diagChannelOn":"out.doctor.diagChannelOff")})],[o("out.doctor.diagScript"),H(s)]])),i.sessions.length===0){r.dim(o("out.doctor.diagNoSessions"));return}const a=t=>t===null?o("out.doctor.diagUnknownAlive"):o(t?"out.doctor.diagYes":"out.doctor.diagNo");for(const t of i.sessions)console.log(),console.log(" "+o("out.doctor.diagSession",{id:t.sessionId.slice(0,8),title:t.title??o("out.doctor.diagUntitled"),alive:a(t.alive),events:t.eventCount,last:t.lastEventType??o("out.doctor.diagMissing")})),console.log(" "+o("out.doctor.diagChannels",{inbox:f(t.channels.inbox),relay:f(t.channels.relay),terminal:f(t.channels.terminal)})),console.log(" "+o("out.doctor.diagQueue",{pending:t.queue.pending,stalled:o(t.queue.stalled?"out.doctor.diagYes":"out.doctor.diagNo")})),t.hints.length>0&&r.dim(" "+o("out.doctor.diagHints",{hints:t.hints.map(c=>k(C,c)).join("\uFF1B")}))}const w=n=>{const e=l.resolve(n);return process.platform==="win32"?e.toLowerCase():e};function j(n){if(!m(y()))return null;const e=T();try{const i=new N(e),d=w(n),s=[...i.list(),...i.listArchived()].find(a=>w(a.path)===d);return s?{id:s.id,source:s.source,archived:s.archivedAt!==null,token:s.token}:null}finally{e.close()}}function q(n){const e=l.join(n,".weave","token");return m(e)?v(e,"utf-8").trim():null}export const doctorCommand={name:"doctor",description:"cmd.doctor.desc",options:[{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()}],async action(n){const e=l.resolve(String(n.flags.dir??process.cwd())),i=m(l.join(e,".weave","config.yaml")),s=b()?.port??x,a=await D(s),t=j(e),c=q(e);let u;c===null?u=o("out.doctor.tokenMissing"):t?c===t.token?u=o("out.doctor.tokenOk"):u=o("out.doctor.tokenStale"):u=o("out.doctor.tokenUnregistered"),r.info(o("out.doctor.header")),console.log(p([[o("out.doctor.dir"),e],[o("out.doctor.initialized"),i?o("out.doctor.yes"):o("out.doctor.no")],[o("out.doctor.daemon"),a?o("out.doctor.daemonRunning",{port:s}):o("out.doctor.daemonStopped")],[o("out.doctor.registered"),t?o(t.archived?"out.doctor.registeredArchived":"out.doctor.registeredYes",{id:t.id,source:t.source}):o("out.doctor.registeredNo")],[o("out.doctor.token"),u]])),console.log();const g=await P(e);if(g.length>0){r.warn(o("out.status.issuesFound",{count:g.length}));for(const h of g)r.warn(o("out.status.issue",{message:h.message})),r.dim(o("out.status.fix",{fix:h.fix}));console.log()}if(a&&t&&!t.archived&&await O(s,t.id),!t){r.warn(o("out.doctor.warnNotRegistered")),r.dim(o("out.doctor.fixInit")),i||r.dim(o("out.doctor.fixScan",{dir:e}));return}if(t.archived){r.warn(o("out.doctor.warnArchived"));return}if(c===null){r.warn(o("out.doctor.warnTokenMissing")),r.dim(o("out.doctor.fixInit"));return}if(c!==t.token){r.warn(o("out.doctor.warnTokenStale")),r.dim(o("out.doctor.fixInit"));return}r.success(o("out.doctor.ok")),a||r.dim(o("out.doctor.fixDaemon"))}};
@@ -1 +1 @@
1
- import{PresetSchema as g,HARNESS_KEYS as d,logger as i,formatTable as p,resolveComponents as f}from"@weavecode/core";import{executeInit as u}from"../init/executor.js";import{registerProject as h}from"@weavecode/server";import{t as e}from"../i18n/index.js";const m=["preToolUse","postToolUse","userPromptSubmit","sessionStart","stop","subagentStop","notification","preCompact"];function S(r){const s=r.trim();if(!s)return{};const c=Object.fromEntries(m.map(n=>[n,!1]));if(s==="none")return c;const a=new Set(s.split(",").map(n=>n.trim()).filter(Boolean)),o=[...a].filter(n=>!m.includes(n));return o.length>0&&i.warn(e("init.hooksUnknownKeys",{keys:o.join(", ")})),Object.fromEntries(m.map(n=>[n,a.has(n)]))}export function parseHarnessFlag(r){const s=r.trim();if(!s)return;const c=s.split(",").map(n=>n.trim().toLowerCase()).filter(Boolean),a=[...new Set(c.filter(n=>d.includes(n)))],o=c.filter(n=>!d.includes(n));return o.length>0&&i.warn(e("init.harnessUnknownKeys",{keys:o.join(", ")})),a.length>0?a:["claude"]}export const initCommand={name:"init",description:"cmd.init.desc",options:[{name:"preset",short:"p",description:"flag.init.preset",type:"string",default:"default",choices:["minimal","default","full"]},{name:"force",short:"f",description:"flag.init.force",type:"boolean",default:!1},{name:"no-interactive",description:"flag.init.noInteractive",type:"boolean",default:!1},{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()},{name:"hooks",description:"flag.init.hooks",type:"string",default:""},{name:"harness",description:"flag.init.harness",type:"string",default:""}],async action(r){const s=g.parse(r.flags.preset??"default"),c=!!r.flags.force,a=r.flags.noInteractive!==!0&&r.flags.interactive!==!1,o=String(r.flags.dir??process.cwd());i.info(e("init.banner")),i.dim(e("init.presetTarget",{preset:s,target:o}));const n=f(s);let t;try{t=await u({targetDir:o,force:c,interactive:a,preset:s,harnesses:parseHarnessFlag(String(r.flags.harness??"")),components:n,hooks:S(String(r.flags.hooks??"")),skills:{},commands:{},agents:{},mcp:{}})}catch(l){i.error(e("init.failed",{error:l instanceof Error?l.message:String(l)})),process.exit(1)}if(t.success){h(o,"init"),i.success(e("init.complete"));const l=[[e("init.table.directories"),String(t.created.directories.length)],[e("init.table.filesCreated"),String(t.created.files.length)],[e("init.table.filesMerged"),String(t.merged.length)],[e("init.table.weaveUpdated"),String(t.updated.length)],[e("init.table.skills"),String(t.summary.skillsCount)],[e("init.table.commands"),String(t.summary.commandsCount)],[e("init.table.agents"),String(t.summary.agentsCount)]];console.log(p(l)),console.log(),t.merged.length>0&&i.dim(e("init.merged",{count:t.merged.length})),t.updated.length>0&&i.dim(e("init.refreshed",{count:t.updated.length})),t.removed.length>0&&i.dim(e("init.removed",{count:t.removed.length})),t.skipped.length>0&&i.dim(e("init.skipped",{count:t.skipped.length}))}else{i.error(e("init.completedWithErrors"));for(const l of t.errors)i.error(e("init.errorLine",{error:l}))}}};
1
+ import{PresetSchema as f,HARNESS_KEYS as m,logger as i,formatTable as p,resolveComponents as g}from"@weavecode/core";import{executeInit as u}from"../init/executor.js";import{registerProject as h}from"@weavecode/server";import{t as e}from"../i18n/index.js";const d=["preToolUse","postToolUse","userPromptSubmit","sessionStart","stop","stopFailure","subagentStop","subagentStart","notification","postToolUseFailure","permissionRequest","permissionDenied","preCompact","sessionEnd","preModelSwitch"];function S(r){const s=r.trim();if(!s)return{};const c=Object.fromEntries(d.map(n=>[n,!1]));if(s==="none")return c;const a=new Set(s.split(",").map(n=>n.trim()).filter(Boolean)),o=[...a].filter(n=>!d.includes(n));return o.length>0&&i.warn(e("init.hooksUnknownKeys",{keys:o.join(", ")})),Object.fromEntries(d.map(n=>[n,a.has(n)]))}export function parseHarnessFlag(r){const s=r.trim();if(!s)return;const c=s.split(",").map(n=>n.trim().toLowerCase()).filter(Boolean),a=[...new Set(c.filter(n=>m.includes(n)))],o=c.filter(n=>!m.includes(n));return o.length>0&&i.warn(e("init.harnessUnknownKeys",{keys:o.join(", ")})),a.length>0?a:["claude"]}export const initCommand={name:"init",description:"cmd.init.desc",options:[{name:"preset",short:"p",description:"flag.init.preset",type:"string",default:"default",choices:["minimal","default","full"]},{name:"force",short:"f",description:"flag.init.force",type:"boolean",default:!1},{name:"no-interactive",description:"flag.init.noInteractive",type:"boolean",default:!1},{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()},{name:"hooks",description:"flag.init.hooks",type:"string",default:""},{name:"harness",description:"flag.init.harness",type:"string",default:""}],async action(r){const s=f.parse(r.flags.preset??"default"),c=!!r.flags.force,a=r.flags.noInteractive!==!0&&r.flags.interactive!==!1,o=String(r.flags.dir??process.cwd());i.info(e("init.banner")),i.dim(e("init.presetTarget",{preset:s,target:o}));const n=g(s);let t;try{t=await u({targetDir:o,force:c,interactive:a,preset:s,harnesses:parseHarnessFlag(String(r.flags.harness??"")),components:n,hooks:S(String(r.flags.hooks??"")),skills:{},commands:{},agents:{},mcp:{}})}catch(l){i.error(e("init.failed",{error:l instanceof Error?l.message:String(l)})),process.exit(1)}if(t.success){h(o,"init"),i.success(e("init.complete"));const l=[[e("init.table.directories"),String(t.created.directories.length)],[e("init.table.filesCreated"),String(t.created.files.length)],[e("init.table.filesMerged"),String(t.merged.length)],[e("init.table.weaveUpdated"),String(t.updated.length)],[e("init.table.skills"),String(t.summary.skillsCount)],[e("init.table.commands"),String(t.summary.commandsCount)],[e("init.table.agents"),String(t.summary.agentsCount)]];console.log(p(l)),console.log(),t.merged.length>0&&i.dim(e("init.merged",{count:t.merged.length})),t.updated.length>0&&i.dim(e("init.refreshed",{count:t.updated.length})),t.removed.length>0&&i.dim(e("init.removed",{count:t.removed.length})),t.skipped.length>0&&i.dim(e("init.skipped",{count:t.skipped.length}))}else{i.error(e("init.completedWithErrors"));for(const l of t.errors)i.error(e("init.errorLine",{error:l}))}}};
@@ -1,2 +1,2 @@
1
- import{DAEMON_HOST as h}from"@weavecode/server";import{logger as a}from"@weavecode/core";import{createRuntimeRegistry as y}from"@weavecode/harness";import{ensureDaemonRunning as u}from"./daemon.js";import{t as i}from"../i18n/index.js";async function g(s,o,e){const t=await fetch(`http://${h}:${s}${o}`,e),n=await t.json().catch(()=>({}));if(!t.ok)throw new Error(String(n.error??`HTTP ${t.status}`));return n}export function resolveSessionRef(s,o){const e=o.toLowerCase(),t=s.filter(c=>c.sessionId.toLowerCase()===e);if(t.length===1)return{row:t[0]};const n=s.filter(c=>c.sessionId.toLowerCase().startsWith(e));if(n.length===1)return{row:n[0]};const r=s.filter(c=>c.title!=null&&c.title.toLowerCase().includes(e));if(r.length===1)return{row:r[0]};const m=n.length>0?n:r;return m.length>1?{error:"ambiguous",rows:m}:{error:"not-found"}}export function currentSessionId(s,o){for(const e of o){if(!e)continue;const t=s[e];if(typeof t=="string"&&t!=="")return t}return null}export function pickReplyTarget(s,o){for(let e=s.length-1;e>=0;e--){const t=s[e];if(t.toSessionId===o&&t.fromSessionId!=null)return t.fromSessionId}return null}function I(s){const o=s[0].map((e,t)=>Math.max(...s.map(n=>n[t].length)));return s.map(e=>e.map((t,n)=>t.padEnd(o[n])).join(" ").trimEnd()).join(`
2
- `)}const l=s=>s.slice(0,8);function f(s,o){return g(s,"/sessions").then(({sessions:e})=>{const t=resolveSessionRef(e,o);if("row"in t)return t.row;throw t.error==="ambiguous"?new Error(i("out.msg.ambiguous",{ref:o,candidates:t.rows.map(n=>`${l(n.sessionId)}${n.title?` (${n.title})`:""}`).join(", ")})):new Error(i("out.msg.notFound",{ref:o}))})}function p(){const s=y().byCapability("messaging").flatMap(o=>o.messaging?.sessionEnv?[o.messaging.sessionEnv]:[]);return currentSessionId(process.env,s)}async function w(s,o,e,t,n){const r=await f(s,o),m=await g(s,`/sessions/${encodeURIComponent(r.sessionId)}/messages`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:e,mode:t,fromKind:"cli",fromSessionId:n})});a.success(i("out.msg.sendOk",{target:r.title??l(r.sessionId),id:m.messageId,status:m.status}))}async function S(s,o){const{sessions:e}=await g(s,"/sessions");if(!o){const{capabilities:r}=await g(s,"/messaging/capabilities"),m=new Set(r.filter(d=>d.discovery).map(d=>d.harness)),c=e.map(d=>[l(d.sessionId),d.title??"",d.harness??"-",d.turnOpen===void 0?"-":d.turnOpen?i("out.msg.busy"):i("out.msg.idle"),d.harness!=null&&m.has(d.harness)?"\u2713":"\u2014"]);if(c.length===0){a.info(i("out.msg.noSessions"));return}a.info(i("out.msg.sessionHeader",{n:c.length})),console.log(I([[i("out.msg.col.session"),i("out.msg.col.title"),i("out.msg.col.harness"),i("out.msg.col.state"),i("out.msg.col.msg")],...c]));return}const t=await f(s,o),{messages:n}=await g(s,`/sessions/${encodeURIComponent(t.sessionId)}/messages`);a.info(i("out.msg.threadHeader",{session:t.title??t.sessionId,n:n.length}));for(const r of n){const m=r.fromSessionId===t.sessionId?"\u25B6":"\u25C0",c=r.fromKind==="dashboard"?"dashboard":r.fromKind==="cli"?"cli":r.fromSessionId??"?";console.log(`${r.createdAt.slice(11,19)} ${m} ${c} [${r.status}] ${r.text.slice(0,80)}`)}}async function C(s,o,e){const t=await f(s,o),n=p(),r=await g(s,`/sessions/${encodeURIComponent(t.sessionId)}/watch`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({watcherSessionId:n,notify:e??null})});a.success(i("out.msg.watchOk",{target:t.title??l(t.sessionId),id:r.watchId,via:n??i("out.msg.watchViaDashboard")}))}async function x(s,o){const e=p();if(!e){a.warn(i("out.msg.replyNoSession")),process.exitCode=1;return}const{messages:t}=await g(s,`/sessions/${encodeURIComponent(e)}/messages`),n=pickReplyTarget(t,e);if(!n){a.warn(i("out.msg.replyNothing")),process.exitCode=1;return}await w(s,n,o,"inject",e)}export const msgCommand={name:"msg",description:"cmd.msg.desc",subcommands:[{name:"ls",description:"cmd.msg.ls.desc",async action(s){const o=await u();try{await S(o.port,s.positional[0])}catch(e){a.warn(i("out.msg.failed",{error:e instanceof Error?e.message:String(e)})),process.exitCode=1}}},{name:"send",description:"cmd.msg.send.desc",options:[{name:"mode",short:"m",description:"flag.msg.mode",type:"string",choices:["auto","inject","headless"],default:"inject"}],async action(s){const o=s.positional[0],e=s.positional.slice(1).join(" ");if(!o||!e){a.warn(i("out.msg.sendUsage")),process.exitCode=1;return}const t=await u();try{await w(t.port,o,e,String(s.flags.mode??"inject"),p())}catch(n){a.warn(i("out.msg.sendFail",{error:n instanceof Error?n.message:String(n)})),process.exitCode=1}}},{name:"watch",description:"cmd.msg.watch.desc",options:[{name:"notify",description:"flag.msg.notify",type:"string"}],async action(s){const o=s.positional[0];if(!o){a.warn(i("out.msg.watchUsage")),process.exitCode=1;return}const e=await u();try{await C(e.port,o,s.flags.notify==null?void 0:String(s.flags.notify))}catch(t){a.warn(i("out.msg.watchFail",{error:t instanceof Error?t.message:String(t)})),process.exitCode=1}}},{name:"reply",description:"cmd.msg.reply.desc",async action(s){const o=s.positional.join(" ");if(!o){a.warn(i("out.msg.replyUsage")),process.exitCode=1;return}const e=await u();try{await x(e.port,o)}catch(t){a.warn(i("out.msg.sendFail",{error:t instanceof Error?t.message:String(t)})),process.exitCode=1}}}]};
1
+ import{DAEMON_HOST as h}from"@weavecode/server";import{logger as a}from"@weavecode/core";import{createRuntimeRegistry as y}from"@weavecode/harness";import{ensureDaemonRunning as u}from"./daemon.js";import{t as i}from"../i18n/index.js";async function g(s,o,e){const t=await fetch(`http://${h}:${s}${o}`,e),n=await t.json().catch(()=>({}));if(!t.ok)throw new Error(String(n.error??`HTTP ${t.status}`));return n}export function resolveSessionRef(s,o){const e=o.toLowerCase(),t=s.filter(c=>c.sessionId.toLowerCase()===e);if(t.length===1)return{row:t[0]};const n=s.filter(c=>c.sessionId.toLowerCase().startsWith(e));if(n.length===1)return{row:n[0]};const r=s.filter(c=>c.title!=null&&c.title.toLowerCase().includes(e));if(r.length===1)return{row:r[0]};const d=n.length>0?n:r;return d.length>1?{error:"ambiguous",rows:d}:{error:"not-found"}}export function currentSessionId(s,o){for(const e of o){if(!e)continue;const t=s[e];if(typeof t=="string"&&t!=="")return t}return null}export function pickReplyTarget(s,o){for(let e=s.length-1;e>=0;e--){const t=s[e];if(t.toSessionId===o&&t.fromSessionId!=null)return t.fromSessionId}return null}function I(s){const o=s[0].map((e,t)=>Math.max(...s.map(n=>n[t].length)));return s.map(e=>e.map((t,n)=>t.padEnd(o[n])).join(" ").trimEnd()).join(`
2
+ `)}const l=s=>s.slice(0,8);function f(s,o){return g(s,"/sessions").then(({sessions:e})=>{const t=resolveSessionRef(e,o);if("row"in t)return t.row;throw t.error==="ambiguous"?new Error(i("out.msg.ambiguous",{ref:o,candidates:t.rows.map(n=>`${l(n.sessionId)}${n.title?` (${n.title})`:""}`).join(", ")})):new Error(i("out.msg.notFound",{ref:o}))})}function p(){const s=y().byCapability("messaging").flatMap(o=>o.messaging?.sessionEnv?[o.messaging.sessionEnv]:[]);return currentSessionId(process.env,s)}async function w(s,o,e,t,n){const r=await f(s,o),d=await g(s,`/sessions/${encodeURIComponent(r.sessionId)}/messages`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:e,mode:t,fromKind:"cli",fromSessionId:n})});a.success(i("out.msg.sendOk",{target:r.title??l(r.sessionId),id:d.messageId,status:d.status}))}async function S(s,o){const{sessions:e}=await g(s,"/sessions");if(!o){const{capabilities:r}=await g(s,"/messaging/capabilities"),d=new Set(r.filter(m=>m.discovery).map(m=>m.harness)),c=e.map(m=>[l(m.sessionId),m.title??"",m.harness??"-",m.turnOpen===void 0?"-":m.turnOpen?i("out.msg.busy"):i("out.msg.idle"),m.harness!=null&&d.has(m.harness)?"\u2713":"\u2014"]);if(c.length===0){a.info(i("out.msg.noSessions"));return}a.info(i("out.msg.sessionHeader",{n:c.length})),console.log(I([[i("out.msg.col.session"),i("out.msg.col.title"),i("out.msg.col.harness"),i("out.msg.col.state"),i("out.msg.col.msg")],...c]));return}const t=await f(s,o),{messages:n}=await g(s,`/sessions/${encodeURIComponent(t.sessionId)}/messages`);a.info(i("out.msg.threadHeader",{session:t.title??t.sessionId,n:n.length}));for(const r of n){const d=r.fromSessionId===t.sessionId?"\u25B6":"\u25C0",c=r.fromKind==="dashboard"?"dashboard":r.fromKind==="cli"?"cli":r.fromSessionId??"?";console.log(`${r.createdAt.slice(11,19)} ${d} ${c} [${r.status}] ${r.text.slice(0,80)}`)}}async function C(s,o,e){const t=await f(s,o),n=p(),r=await g(s,`/sessions/${encodeURIComponent(t.sessionId)}/watch`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({watcherSessionId:n,notify:e??null})});a.success(i("out.msg.watchOk",{target:t.title??l(t.sessionId),id:r.watchId,via:n??i("out.msg.watchViaDashboard")}))}async function x(s,o){const e=p();if(!e){a.warn(i("out.msg.replyNoSession")),process.exitCode=1;return}const{messages:t}=await g(s,`/sessions/${encodeURIComponent(e)}/messages`),n=pickReplyTarget(t,e);if(!n){a.warn(i("out.msg.replyNothing")),process.exitCode=1;return}await w(s,n,o,"inject",e)}export const msgCommand={name:"msg",description:"cmd.msg.desc",subcommands:[{name:"ls",description:"cmd.msg.ls.desc",async action(s){const o=await u();try{await S(o.port,s.positional[0])}catch(e){a.warn(i("out.msg.failed",{error:e instanceof Error?e.message:String(e)})),process.exitCode=1}}},{name:"send",description:"cmd.msg.send.desc",options:[{name:"mode",short:"m",description:"flag.msg.mode",type:"string",choices:["auto","inject","headless"],default:"inject"}],async action(s){const o=s.positional[0],e=s.positional.slice(1).join(" ");if(!o||!e){a.warn(i("out.msg.sendUsage")),process.exitCode=1;return}const t=await u();try{await w(t.port,o,e,String(s.flags.mode??"inject"),p())}catch(n){a.warn(i("out.msg.sendFail",{error:n instanceof Error?n.message:String(n)})),process.exitCode=1}}},{name:"watch",description:"cmd.msg.watch.desc",options:[{name:"notify",description:"flag.msg.notify",type:"string"}],async action(s){const o=s.positional[0];if(!o){a.warn(i("out.msg.watchUsage")),process.exitCode=1;return}const e=await u();try{await C(e.port,o,s.flags.notify==null?void 0:String(s.flags.notify))}catch(t){a.warn(i("out.msg.watchFail",{error:t instanceof Error?t.message:String(t)})),process.exitCode=1}}},{name:"reply",description:"cmd.msg.reply.desc",async action(s){const o=s.positional.join(" ");if(!o){a.warn(i("out.msg.replyUsage")),process.exitCode=1;return}const e=await u();try{await x(e.port,o)}catch(t){a.warn(i("out.msg.sendFail",{error:t instanceof Error?t.message:String(t)})),process.exitCode=1}}}]};
@@ -1 +1 @@
1
- import{readdir as c}from"node:fs/promises";import{existsSync as m}from"node:fs";import{join as n}from"node:path";import{registerProject as d}from"@weavecode/server";import{logger as a}from"@weavecode/core";import{createRuntimeRegistry as f}from"@weavecode/harness";import{t as p}from"../i18n/index.js";const g=new Set(["node_modules",".git","dist","build",".next","coverage",".cache"]),u=f().byCapability("detect").map(t=>t.detect).filter(t=>t!==void 0);export async function findProjectDirs(t,s=0,r=6){if(s>r)return[];if(m(n(t,".weave"))||u.some(o=>o.present(t)))return[t];let e;try{e=await c(t,{withFileTypes:!0})}catch{return[]}const i=[];for(const o of e)o.isDirectory()&&(o.name.startsWith(".")||g.has(o.name)||i.push(...await findProjectDirs(n(t,o.name),s+1,r)));return i}export const scanCommand={name:"scan",description:"cmd.scan.desc",options:[{name:"dir",short:"d",description:"flag.scan.dir",type:"string",default:process.cwd()}],async action(t){const s=String(t.flags.dir??process.cwd()),r=await findProjectDirs(s);for(const e of r)d(e,"scan");if(a.success(p("out.scan.registered",{count:r.length,root:s})),r.length>0)for(const e of r)a.dim(` ${e}`)}};
1
+ import{readdir as a}from"node:fs/promises";import{existsSync as d}from"node:fs";import{join as o}from"node:path";import{registerProject as f}from"@weavecode/server";import{logger as c}from"@weavecode/core";import{createRuntimeRegistry as m}from"@weavecode/harness";import{t as u}from"../i18n/index.js";const p=new Set(["node_modules",".git","dist","build",".next","coverage",".cache"]),g=m().byCapability("detect").map(t=>t.detect).filter(t=>t!==void 0);export async function findProjectDirs(e,t=0,r=6){if(t>r)return[];if(d(o(e,".weave"))||g.some(i=>i.present(e)))return[e];let n;try{n=await a(e,{withFileTypes:!0})}catch{return[]}const s=[];for(const i of n)i.isDirectory()&&(i.name.startsWith(".")||p.has(i.name)||s.push(...await findProjectDirs(o(e,i.name),t+1,r)));return s}export const scanCommand={name:"scan",description:"cmd.scan.desc",options:[{name:"dir",short:"d",description:"flag.scan.dir",type:"string",default:process.cwd()}],async action(e){const t=String(e.flags.dir??process.cwd()),r=await findProjectDirs(t);for(const n of r)f(n,"scan");if(c.success(u("out.scan.registered",{count:r.length,root:t})),r.length>0)for(const n of r)c.dim(` ${n}`)}};
@@ -1,2 +1,2 @@
1
- import c from"node:path";import k from"node:os";import{readFile as x}from"node:fs/promises";import{fileExists as j,logger as l,formatTable as R,HARNESS_DIRS as S,HARNESS_INSTRUCTION_FILES as D,HARNESS_KEYS as E}from"@weavecode/core";import{createRuntimeRegistry as $}from"@weavecode/harness";import{checkHarness as b}from"../init/harness-checks.js";import{t as o}from"../i18n/index.js";async function I(i){const t=c.join(i,".weave","config.yaml");if(!await j(t))return null;try{const e=await x(t,"utf-8"),a={};for(const r of e.split(`
2
- `)){const n=r.indexOf(":");n>0&&(a[r.slice(0,n).trim()]=r.slice(n+1).trim())}return a}catch{return null}}async function N(i,t){return await j(c.join(t,i))?"out.status.present":"out.status.missing"}async function u(i,t,e){return[i,o(await N(t,e))]}function C(i,t,e){if(!i)return null;try{const a=i.targetDir(t,"project",e,k.homedir());return c.relative(e,a).split(c.sep).join("/")}catch{return null}}export const statusCommand={name:"status",description:"cmd.status.desc",options:[{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()}],async action(i){const t=String(i.flags.dir??process.cwd()),e=await I(t);if(!e){l.warn(o("out.status.notInitialized"));return}l.info(o("out.status.header"));const a=$(),r=a.byCapability("detect").flatMap(s=>s.detect&&s.detect.detect(t).present?[s.id]:[]),n=[[o("out.status.col.version"),e.initVersion??o("out.status.unknown")],[o("out.status.col.initialized"),e.initTimestamp??o("out.status.unknown")],[o("out.status.col.preset"),e.preset??o("out.status.unknown")],[o("out.status.col.harness"),r.length>0?r.join(", "):o("out.status.unknown")]],p=E[0],m=S[p].projectDir,g=a.get(p)?.assets;for(const s of D[p])n.push(await u(s,s,t));n.push(await u("settings.json",`${m}/settings.json`,t)),n.push(await u(".mcp.json",".mcp.json",t)),n.push(await u("helpers",`${m}/helpers`,t));const w=g?.projectSkillsDir()??`${m}/skills`;n.push(await u(c.posix.basename(w),w,t));const y=[["commands","command"],["agents","agent"]];for(const[s,f]of y){const h=C(g,f,t)??`${m}/${s}`;n.push(await u(c.posix.basename(h),h,t))}for(const s of r){if(s===p)continue;const f=a.get(s)?.assets?.projectSkillsDir()??`${S[s].projectDir}/skills`;n.push(await u(f,f,t))}console.log(R(n)),console.log();const d=await b(t);if(d.length>0){l.warn(o("out.status.issuesFound",{count:d.length}));for(const s of d)l.warn(o("out.status.issue",{message:s.message})),l.dim(o("out.status.fix",{fix:s.fix}));console.log()}}};
1
+ import u from"node:path";import y from"node:os";import{readFile as k}from"node:fs/promises";import{fileExists as S,logger as l,formatTable as x,HARNESS_DIRS as j,HARNESS_INSTRUCTION_FILES as R,HARNESS_KEYS as D}from"@weavecode/core";import{createRuntimeRegistry as E}from"@weavecode/harness";import{checkHarness as $}from"../init/harness-checks.js";import{t as o}from"../i18n/index.js";async function C(i){const t=u.join(i,".weave","config.yaml");if(!await S(t))return null;try{const e=await k(t,"utf-8"),a={};for(const r of e.split(`
2
+ `)){const n=r.indexOf(":");n>0&&(a[r.slice(0,n).trim()]=r.slice(n+1).trim())}return a}catch{return null}}async function I(i,t){return await S(u.join(t,i))?"out.status.present":"out.status.missing"}async function c(i,t,e){return[i,o(await I(t,e))]}function N(i,t,e){if(!i)return null;try{const a=i.targetDir(t,"project",e,y.homedir());return u.relative(e,a).split(u.sep).join("/")}catch{return null}}export const statusCommand={name:"status",description:"cmd.status.desc",options:[{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()}],async action(i){const t=String(i.flags.dir??process.cwd()),e=await C(t);if(!e){l.warn(o("out.status.notInitialized"));return}l.info(o("out.status.header"));const a=E(),r=a.byCapability("detect").flatMap(s=>s.detect&&s.detect.detect(t).present?[s.id]:[]),n=[[o("out.status.col.version"),e.initVersion??o("out.status.unknown")],[o("out.status.col.initialized"),e.initTimestamp??o("out.status.unknown")],[o("out.status.col.preset"),e.preset??o("out.status.unknown")],[o("out.status.col.harness"),r.length>0?r.join(", "):o("out.status.unknown")]],f=D[0],p=j[f].projectDir,d=a.get(f)?.assets;for(const s of R[f])n.push(await c(s,s,t));n.push(await c("settings.json",`${p}/settings.json`,t)),n.push(await c(".mcp.json",".mcp.json",t)),n.push(await c("helpers",`${p}/helpers`,t));const w=d?.projectSkillsDir()??`${p}/skills`;n.push(await c(u.posix.basename(w),w,t));const b=[["commands","command"],["agents","agent"]];for(const[s,m]of b){const h=N(d,m,t)??`${p}/${s}`;n.push(await c(u.posix.basename(h),h,t))}for(const s of r){if(s===f)continue;const m=a.get(s)?.assets?.projectSkillsDir()??`${j[s].projectDir}/skills`;n.push(await c(m,m,t))}console.log(x(n)),console.log();const g=await $(t);if(g.length>0){l.warn(o("out.status.issuesFound",{count:g.length}));for(const s of g)l.warn(o("out.status.issue",{message:s.message})),l.dim(o("out.status.fix",{fix:s.fix}));console.log()}}};
@@ -1 +1 @@
1
- import{logger as t}from"@weavecode/core";import{executeUninstall as a}from"../init/uninstall.js";import{t as i}from"../i18n/index.js";function r(s){s.outcome==="removed"?t.dim(i("out.uninstall.serverRemoved",{name:s.name??"",events:s.purged?.events??0,dispatches:s.purged?.dispatches??0,sessions:s.purged?.sessions??0})):s.outcome==="failed"&&t.warn(i("out.uninstall.serverFailed",{error:s.error??""}))}export const uninstallCommand={name:"uninstall",description:"cmd.uninstall.desc",options:[{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()}],async action(s){const n=String(s.flags.dir??process.cwd());t.info(i("out.uninstall.banner",{target:n}));const e=await a({targetDir:n});if(e.status==="not-initialized"){t.warn(i("out.uninstall.notInitialized")),r(e.server);return}if(t.success(i("out.uninstall.done",{files:e.removedFiles.length,dirs:e.removedDirs.length})),e.modifiedFiles.length>0&&t.dim(i("out.uninstall.modified",{count:e.modifiedFiles.length})),e.keptUserFiles.length>0){t.dim(i("out.uninstall.keptUser",{count:e.keptUserFiles.length}));for(const o of e.keptUserFiles)t.dim(` ${o}`)}switch(e.restoredFromBackup&&t.dim(i("out.uninstall.restored",{path:e.restoredFromBackup})),r(e.server),e.git){case"reset":t.dim(i("out.uninstall.gitReset",{sha:e.gitSha??""}));break;case"committed":t.dim(i("out.uninstall.gitCommit",{sha:e.gitSha??"",count:e.removedFiles.length+e.modifiedFiles.length}));break;case"no-changes":t.dim(i("out.uninstall.gitNoChanges"));break;case"skipped-dirty-index":t.warn(i("out.uninstall.gitDirty"));break;case"skipped-not-repo":t.dim(i("out.uninstall.gitNotRepo"));break;case"failed":t.warn(i("out.uninstall.gitFailed",{error:e.gitError??""}));break}}};
1
+ import{logger as t}from"@weavecode/core";import{executeUninstall as a}from"../init/uninstall.js";import{t as i}from"../i18n/index.js";function o(n){n.outcome==="removed"?t.dim(i("out.uninstall.serverRemoved",{name:n.name??"",events:n.purged?.events??0,dispatches:n.purged?.dispatches??0,sessions:n.purged?.sessions??0})):n.outcome==="failed"&&t.warn(i("out.uninstall.serverFailed",{error:n.error??""}))}export const uninstallCommand={name:"uninstall",description:"cmd.uninstall.desc",options:[{name:"dir",short:"d",description:"flag.dir",type:"string",default:process.cwd()}],async action(n){const s=String(n.flags.dir??process.cwd());t.info(i("out.uninstall.banner",{target:s}));const e=await a({targetDir:s});if(e.status==="not-initialized"){t.warn(i("out.uninstall.notInitialized")),o(e.server);return}if(t.success(i("out.uninstall.done",{files:e.removedFiles.length,dirs:e.removedDirs.length})),e.modifiedFiles.length>0&&t.dim(i("out.uninstall.modified",{count:e.modifiedFiles.length})),e.keptUserFiles.length>0){t.dim(i("out.uninstall.keptUser",{count:e.keptUserFiles.length}));for(const r of e.keptUserFiles)t.dim(` ${r}`)}switch(e.restoredFromBackup&&t.dim(i("out.uninstall.restored",{path:e.restoredFromBackup})),o(e.server),e.git){case"reset":t.dim(i("out.uninstall.gitReset",{sha:e.gitSha??""}));break;case"committed":t.dim(i("out.uninstall.gitCommit",{sha:e.gitSha??"",count:e.removedFiles.length+e.modifiedFiles.length}));break;case"no-changes":t.dim(i("out.uninstall.gitNoChanges"));break;case"skipped-dirty-index":t.warn(i("out.uninstall.gitDirty"));break;case"skipped-not-repo":t.dim(i("out.uninstall.gitNotRepo"));break;case"failed":t.warn(i("out.uninstall.gitFailed",{error:e.gitError??""}));break}}};
@@ -1,8 +1,10 @@
1
- import{HARNESS_DIRS as t,HARNESS_KEYS as e}from"@weavecode/core";export const en={"help.tagline":"weave v{version} \u2014 Harness tool","help.usage":"Usage: weave <command> [options]","help.commands":"Commands:","help.globalOptions":"Global options:","help.subcommands":"Available subcommands:","cli.unknownCommand":"Unknown command: {command}","cli.error":"Error: {error}","cli.missingRequired":"Missing required option: --{name}","cli.invalidChoice":'Invalid value for --{name}: "{value}". Choices: {choices}',"cli.missingSubcommand":"Command {command} requires a subcommand","cli.unknownSubcommand":"Unknown subcommand: {command} {subcommand}","cli.unexpectedPositional":'Command {command} does not accept argument "{arg}"',"flag.help":"Show help","flag.version":"Show version","flag.verbose":"Verbose output","flag.quiet":"Suppress non-essential output","cmd.init.desc":"Initialize weave harness in the current project","cmd.uninstall.desc":"Remove weave init outputs (reset the init commit when it is HEAD, otherwise commit the removal)","cmd.status.desc":"Show current harness status","cmd.daemon.desc":"Manage the background daemon (start, stop, status)","cmd.daemon.start.desc":"Start the daemon in the background (no browser \u2014 see `weave dashboard`)","cmd.daemon.stop.desc":"Stop the running daemon","cmd.daemon.status.desc":"Show daemon status","cmd.dashboard.desc":"Open the web console in a browser (starts the daemon if needed)","cmd.chpass.desc":"Change the dashboard login password (new password given; no old password needed locally)","cmd.scan.desc":"Scan for weave-initialized projects and register them","cmd.doctor.desc":"Diagnose local wiring: is this checkout registered with the local weave server","flag.init.preset":"Configuration preset: minimal, default, or full","flag.init.force":"Overwrite existing files","flag.init.noInteractive":"Disable interactive prompts","flag.init.hooks":'Comma-separated hook events to register (preToolUse,postToolUse,userPromptSubmit,sessionStart,stop,subagentStop,notification,preCompact); "none" registers none; default: all',"flag.init.harness":`Comma-separated harness surfaces to initialize (${e.join(", ")}); omitted \u2192 interactive multiselect on a TTY, default ${e[0]}`,"flag.dir":"Target directory (default: current directory)","flag.scan.dir":"Root directory to scan (default: current directory)","flag.dashboard.noOpen":"Print the dashboard URL without opening a browser","out.daemon.alreadyRunning":"Daemon already running on port {port}","out.daemon.started":"Daemon started on http://{host}:{port}","out.daemon.stopped":"Daemon stopped (pid {pid}).","out.daemon.statusNotRunning":"Daemon: not running","out.daemon.statusRunning":"Daemon: running (pid {pid}, port {port}, up {uptime}s)","out.daemon.urlsTitle":"Access URLs:","out.daemon.statusStale":"Daemon: stale state (pid {pid}, port {port} not responding)","out.doctor.header":`
1
+ import{HARNESS_DIRS as t,HARNESS_KEYS as e}from"@weavecode/core";export const en={"help.tagline":"weave v{version} \u2014 Harness tool","help.usage":"Usage: weave <command> [options]","help.commands":"Commands:","help.globalOptions":"Global options:","help.subcommands":"Available subcommands:","cli.unknownCommand":"Unknown command: {command}","cli.error":"Error: {error}","cli.missingRequired":"Missing required option: --{name}","cli.invalidChoice":'Invalid value for --{name}: "{value}". Choices: {choices}',"cli.missingSubcommand":"Command {command} requires a subcommand","cli.unknownSubcommand":"Unknown subcommand: {command} {subcommand}","cli.unexpectedPositional":'Command {command} does not accept argument "{arg}"',"flag.help":"Show help","flag.version":"Show version","flag.verbose":"Verbose output","flag.quiet":"Suppress non-essential output","cmd.init.desc":"Initialize weave harness in the current project","cmd.uninstall.desc":"Remove weave init outputs (reset the init commit when it is HEAD, otherwise commit the removal)","cmd.status.desc":"Show current harness status","cmd.daemon.desc":"Manage the background daemon (start, stop, status)","cmd.daemon.start.desc":"Start the daemon in the background (no browser \u2014 see `weave dashboard`)","cmd.daemon.stop.desc":"Stop the running daemon","cmd.daemon.status.desc":"Show daemon status","cmd.dashboard.desc":"Open the web console in a browser (starts the daemon if needed)","cmd.chpass.desc":"Change the dashboard login password (new password given; no old password needed locally)","cmd.scan.desc":"Scan for weave-initialized projects and register them","cmd.doctor.desc":"Diagnose local wiring: is this checkout registered with the local weave server","flag.init.preset":"Configuration preset: minimal, default, or full","flag.init.force":"Overwrite existing files","flag.init.noInteractive":"Disable interactive prompts","flag.init.hooks":'Comma-separated hook events to register (preToolUse,postToolUse,userPromptSubmit,sessionStart,stop,stopFailure,subagentStop,subagentStart,notification,postToolUseFailure,permissionRequest,permissionDenied,preCompact,sessionEnd,preModelSwitch); "none" registers none; default: all',"flag.init.harness":`Comma-separated harness surfaces to initialize (${e.join(", ")}); omitted \u2192 interactive multiselect on a TTY, default ${e[0]}`,"flag.dir":"Target directory (default: current directory)","flag.scan.dir":"Root directory to scan (default: current directory)","flag.dashboard.noOpen":"Print the dashboard URL without opening a browser","out.daemon.alreadyRunning":"Daemon already running on port {port}","out.daemon.started":"Daemon started on http://{host}:{port}","out.daemon.stopped":"Daemon stopped (pid {pid}).","out.daemon.statusNotRunning":"Daemon: not running","out.daemon.statusRunning":"Daemon: running (pid {pid}, port {port}, up {uptime}s)","out.daemon.urlsTitle":"Access URLs:","out.daemon.statusStale":"Daemon: stale state (pid {pid}, port {port} not responding)","out.doctor.header":`
2
2
  Weave Doctor \u2014 local wiring
3
- `,"out.doctor.dir":"directory","out.doctor.initialized":"initialized","out.doctor.yes":"yes","out.doctor.no":"no","out.doctor.daemon":"daemon","out.doctor.daemonRunning":"running on port {port}","out.doctor.daemonStopped":"not running","out.doctor.registered":"registered","out.doctor.registeredYes":"yes (id {id}, source {source})","out.doctor.registeredNo":"no \u2014 this checkout is not in the local registry","out.doctor.registeredArchived":"archived (id {id})","out.doctor.token":"token","out.doctor.tokenOk":"ok","out.doctor.tokenMissing":"missing (.weave/token absent)","out.doctor.tokenUnregistered":"present, but the project is not registered","out.doctor.tokenStale":"stale \u2014 differs from the registry token","out.doctor.warnNotRegistered":"This project carries weave files but is not registered with the local weave server.","out.doctor.fixInit":"Run `weave init` to (re)register this checkout, refresh harness files, and rewrite local paths.","out.doctor.fixScan":"Or `weave scan -d <parent>` to discover and register projects in bulk.","out.doctor.warnArchived":"This project is registered but archived \u2014 restore it from the dashboard to use it again.","out.doctor.warnTokenMissing":"Registered, but `.weave/token` is missing \u2014 hooks cannot authenticate until it is regenerated.","out.doctor.warnTokenStale":"Registered, but `.weave/token` belongs to another checkout \u2014 regenerate it.","out.doctor.ok":"OK \u2014 this checkout is registered and its token matches.","out.doctor.fixDaemon":"The daemon is not running; start it with `weave daemon start` when you need collection.","out.dash.browserFailed":"(could not launch a browser automatically \u2014 open it manually)","out.dash.stopHint":"Stop it later with `weave daemon stop`.","out.dash.noBundle":"The web bundle is not built, so the daemon has nothing to serve.","out.dash.buildHint":" Build it with `pnpm build:web`, or run the Vite dev server: `pnpm dev:web` (http://localhost:9527).","out.dash.url":`
3
+ `,"out.doctor.dir":"directory","out.doctor.initialized":"initialized","out.doctor.yes":"yes","out.doctor.no":"no","out.doctor.daemon":"daemon","out.doctor.daemonRunning":"running on port {port}","out.doctor.daemonStopped":"not running","out.doctor.registered":"registered","out.doctor.registeredYes":"yes (id {id}, source {source})","out.doctor.registeredNo":"no \u2014 this checkout is not in the local registry","out.doctor.registeredArchived":"archived (id {id})","out.doctor.token":"token","out.doctor.tokenOk":"ok","out.doctor.tokenMissing":"missing (.weave/token absent)","out.doctor.tokenUnregistered":"present, but the project is not registered","out.doctor.tokenStale":"stale \u2014 differs from the registry token","out.doctor.warnNotRegistered":"This project carries weave files but is not registered with the local weave server.","out.doctor.fixInit":"Run `weave init` to (re)register this checkout, refresh harness files, and rewrite local paths.","out.doctor.fixScan":"Or `weave scan -d <parent>` to discover and register projects in bulk.","out.doctor.warnArchived":"This project is registered but archived \u2014 restore it from the dashboard to use it again.","out.doctor.warnTokenMissing":"Registered, but `.weave/token` is missing \u2014 hooks cannot authenticate until it is regenerated.","out.doctor.warnTokenStale":"Registered, but `.weave/token` belongs to another checkout \u2014 regenerate it.","out.doctor.ok":"OK \u2014 this checkout is registered and its token matches.","out.doctor.fixDaemon":"The daemon is not running; start it with `weave daemon start` when you need collection.","out.doctor.diagHeader":`
4
+ Weave Doctor \u2014 message delivery (project #{id})
5
+ `,"out.doctor.diagFailed":"Delivery diagnostics unavailable ({error}) \u2014 the daemon refused, the local token is wrong, or the daemon predates this route.","out.doctor.diagDaemon":"daemon","out.doctor.diagDaemonValue":"v{version} \xB7 {platform} \xB7 terminal preset {preset} {channel}","out.doctor.diagChannelOn":"(text-injection channel present)","out.doctor.diagChannelOff":"(no text-injection channel)","out.doctor.diagScript":"capture script","out.doctor.diagScriptNone":"absent \u2014 no weave-generated hook script (run `weave init`)","out.doctor.diagScriptNotOwned":"the {source}-level script is not weave-generated (weave neither refreshes nor trusts it; `weave init --force` overwrites)","out.doctor.diagScriptValue":"{harness} \xB7 {source} level \xB7 version {version} \xB7 reports credentials {inbox} \xB7 reports pane {pane}","out.doctor.diagSourceUser":"user","out.doctor.diagSourceProject":"project","out.doctor.diagSourceNone":"none","out.doctor.diagYes":"yes","out.doctor.diagNo":"no","out.doctor.diagMissing":"\u2014","out.doctor.diagUnknownAlive":"undecidable","out.doctor.diagUntitled":"untitled","out.doctor.diagNoSessions":"Nothing to diagnose \u2014 no session is alive right now.","out.doctor.diagReady":"ready","out.doctor.diagUnavailable":"unavailable ({reason})","out.doctor.diagUnknown":"undecidable ({reason})","out.doctor.diagSession":'{id} "{title}" alive {alive} \xB7 events {events} \xB7 last {last}',"out.doctor.diagChannels":"inbox {inbox} relay {relay} terminal {terminal}","out.doctor.diagQueue":"queue {pending} \xB7 stalled {stalled}","out.doctor.diagHints":"fix: {hints}","out.doctor.reason.noMechanism":"this harness has no such mechanism","out.doctor.reason.noCredentials":"no credentials","out.doctor.reason.authTokenRequired":"this platform needs credentials and the host gave none","out.doctor.reason.noPeerName":"no peer name in the registry","out.doctor.reason.noBackend":"this terminal preset has no text-injection backend","out.doctor.reason.noPaneEnv":"no pane locator was reported","out.doctor.hint.noHookScript":"no weave-generated hook script \u2192 run `weave init`","out.doctor.hint.hookScriptNotWeave":"the hook script is not weave-generated (weave neither refreshes nor trusts it) \u2192 move it aside, or `weave init --force`","out.doctor.hint.hookScriptStale":"the hook script was generated by an older weave and does not report delivery credentials \u2192 re-run `weave init`, then restart the session","out.doctor.hint.noEvents":"this session has no hook events at all (started before init? the script never ran?)","out.doctor.hint.noInboxCredentials":"the script can report, yet this session never did (the host exports no messaging socket env, or the session predates the script) \u2192 restart the session","out.doctor.hint.inboxTokenRequired":"inbox delivery needs a token on this platform; the host exports no messaging token env","out.doctor.hint.noPeerName":"this session has no peer name \u2014 the relay addresses sessions by name and skips nameless ones","out.doctor.hint.terminalNoBackend":"this terminal preset cannot inject text \u2192 wezterm is what gives layer \u2461 a fallback","out.doctor.hint.terminalNoPaneEnv":"no pane locator was reported (this terminal exports no WEZTERM_*) \u2192 only the title+cwd fallback is left","out.doctor.hint.notRunning":"the session process is gone (messages settle as failed/offline, they never queue)","out.doctor.hint.queued":"the queue still holds backlog","out.doctor.hint.stalled":"the ack gate is set (no receipt in time, or delivery failed) \u2192 resend, or wait for the receipt","out.dash.browserFailed":"(could not launch a browser automatically \u2014 open it manually)","out.dash.stopHint":"Stop it later with `weave daemon stop`.","out.dash.noBundle":"The web bundle is not built, so the daemon has nothing to serve.","out.dash.buildHint":" Build it with `pnpm build:web`, or run the Vite dev server: `pnpm dev:web` (http://localhost:9527).","out.dash.url":`
4
6
  Dashboard: {url}
5
- `,"out.dash.noOpen":" (--no-open: not launching a browser)","out.dash.lanUrl":" LAN: {url}","out.dash.initialPassword":`
7
+ `,"out.dash.noOpen":" (--no-open: not launching a browser)","out.dash.initialPassword":`
6
8
  Initial login password: {password}
7
9
  (shown only once; change it with \`weave chpass <new password>\`)
8
10
  `,"out.chpass.ok":"Dashboard login password updated \u2014 signed-in browsers must log in again.","out.chpass.fail":"Failed to change password: {error}","out.chpass.usage":"Usage: weave chpass <new password> (at least 6 characters)","out.scan.registered":"Registered {count} project(s) from {root}","out.uninstall.banner":"Uninstalling weave: {target}","out.uninstall.notInitialized":"No .weave/ found \u2014 this project is not initialized, nothing to uninstall.","out.uninstall.done":"Uninstalled: removed {files} file(s), {dirs} directorie(s)","out.uninstall.modified":"Rewrote {count} file(s) (weave-added keys/sections stripped)","out.uninstall.keptUser":"Kept {count} generated-location file(s) that differ from weave sources (likely user-edited):","out.uninstall.restored":"Restored the AGENTS.md displaced by init (from .weave/backup/)","out.uninstall.gitReset":"The init commit was HEAD \u2014 pointer rolled back to {sha}, history clean","out.uninstall.gitCommit":"Created removal commit {sha} ({count} file(s))","out.uninstall.gitNoChanges":"No tracked weave files changed \u2014 nothing committed","out.uninstall.gitDirty":"Index not empty \u2014 files cleaned, git skipped to avoid touching staged content","out.uninstall.gitNotRepo":"Not inside a git repository \u2014 files cleaned only","out.uninstall.gitFailed":"git failed: {error} (files are already cleaned)","out.uninstall.serverRemoved":"Unregistered project {name} from the weave server (purged {events} events / {dispatches} dispatches / {sessions} sessions)","out.uninstall.serverFailed":"Failed to unregister from the weave server: {error}","uninstall.pluginScanFailed":"Plugin template scan failed (that part skipped): {error}","out.status.notInitialized":"Weave not initialized. Run `weave init` first.","out.status.header":`
@@ -67,13 +67,56 @@ export declare const zh: {
67
67
  'out.doctor.warnTokenStale': string;
68
68
  'out.doctor.ok': string;
69
69
  'out.doctor.fixDaemon': string;
70
+ 'out.doctor.diagHeader': string;
71
+ 'out.doctor.diagFailed': string;
72
+ 'out.doctor.diagDaemon': string;
73
+ 'out.doctor.diagDaemonValue': string;
74
+ 'out.doctor.diagChannelOn': string;
75
+ 'out.doctor.diagChannelOff': string;
76
+ 'out.doctor.diagScript': string;
77
+ 'out.doctor.diagScriptNone': string;
78
+ 'out.doctor.diagScriptNotOwned': string;
79
+ 'out.doctor.diagScriptValue': string;
80
+ 'out.doctor.diagSourceUser': string;
81
+ 'out.doctor.diagSourceProject': string;
82
+ 'out.doctor.diagSourceNone': string;
83
+ 'out.doctor.diagYes': string;
84
+ 'out.doctor.diagNo': string;
85
+ 'out.doctor.diagMissing': string;
86
+ 'out.doctor.diagUnknownAlive': string;
87
+ 'out.doctor.diagUntitled': string;
88
+ 'out.doctor.diagNoSessions': string;
89
+ 'out.doctor.diagReady': string;
90
+ 'out.doctor.diagUnavailable': string;
91
+ 'out.doctor.diagUnknown': string;
92
+ 'out.doctor.diagSession': string;
93
+ 'out.doctor.diagChannels': string;
94
+ 'out.doctor.diagQueue': string;
95
+ 'out.doctor.diagHints': string;
96
+ 'out.doctor.reason.noMechanism': string;
97
+ 'out.doctor.reason.noCredentials': string;
98
+ 'out.doctor.reason.authTokenRequired': string;
99
+ 'out.doctor.reason.noPeerName': string;
100
+ 'out.doctor.reason.noBackend': string;
101
+ 'out.doctor.reason.noPaneEnv': string;
102
+ 'out.doctor.hint.noHookScript': string;
103
+ 'out.doctor.hint.hookScriptNotWeave': string;
104
+ 'out.doctor.hint.hookScriptStale': string;
105
+ 'out.doctor.hint.noEvents': string;
106
+ 'out.doctor.hint.noInboxCredentials': string;
107
+ 'out.doctor.hint.inboxTokenRequired': string;
108
+ 'out.doctor.hint.noPeerName': string;
109
+ 'out.doctor.hint.terminalNoBackend': string;
110
+ 'out.doctor.hint.terminalNoPaneEnv': string;
111
+ 'out.doctor.hint.notRunning': string;
112
+ 'out.doctor.hint.queued': string;
113
+ 'out.doctor.hint.stalled': string;
70
114
  'out.dash.browserFailed': string;
71
115
  'out.dash.stopHint': string;
72
116
  'out.dash.noBundle': string;
73
117
  'out.dash.buildHint': string;
74
118
  'out.dash.url': string;
75
119
  'out.dash.noOpen': string;
76
- 'out.dash.lanUrl': string;
77
120
  'out.dash.initialPassword': string;
78
121
  'out.chpass.ok': string;
79
122
  'out.chpass.fail': string;
@@ -1,8 +1,10 @@
1
- import{HARNESS_DIRS as F,HARNESS_KEYS as u}from"@weavecode/core";export const zh={"help.tagline":"weave v{version} \u2014 Harness \u5DE5\u5177","help.usage":"\u7528\u6CD5\uFF1Aweave <\u547D\u4EE4> [\u9009\u9879]","help.commands":"\u547D\u4EE4\uFF1A","help.globalOptions":"\u5168\u5C40\u9009\u9879\uFF1A","help.subcommands":"\u53EF\u7528\u5B50\u547D\u4EE4\uFF1A","cli.unknownCommand":"\u672A\u77E5\u547D\u4EE4\uFF1A{command}","cli.error":"\u9519\u8BEF\uFF1A{error}","cli.missingRequired":"\u7F3A\u5C11\u5FC5\u586B\u9009\u9879\uFF1A--{name}","cli.invalidChoice":'--{name} \u7684\u53D6\u503C "{value}" \u65E0\u6548\uFF0C\u53EF\u9009\u503C\uFF1A{choices}',"cli.missingSubcommand":"\u547D\u4EE4 {command} \u9700\u8981\u4E00\u4E2A\u5B50\u547D\u4EE4","cli.unknownSubcommand":"\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A{command} {subcommand}","cli.unexpectedPositional":"\u547D\u4EE4 {command} \u4E0D\u63A5\u53D7\u53C2\u6570\u300C{arg}\u300D","flag.help":"\u663E\u793A\u5E2E\u52A9","flag.version":"\u663E\u793A\u7248\u672C","flag.verbose":"\u8BE6\u7EC6\u8F93\u51FA","flag.quiet":"\u6291\u5236\u975E\u5FC5\u8981\u8F93\u51FA","cmd.init.desc":"\u5728\u5F53\u524D\u9879\u76EE\u521D\u59CB\u5316 weave harness","cmd.uninstall.desc":"\u5378\u8F7D weave\uFF1A\u79FB\u9664 init \u751F\u6210\u7269\uFF08init \u63D0\u4EA4\u521A\u843D\u76D8\u65F6\u56DE\u6EDA\u6307\u9488\uFF0C\u5426\u5219\u751F\u6210\u5378\u8F7D\u63D0\u4EA4\uFF09","cmd.status.desc":"\u67E5\u770B\u5F53\u524D harness \u72B6\u6001","cmd.daemon.desc":"\u7BA1\u7406\u540E\u53F0\u5B88\u62A4\u8FDB\u7A0B\uFF08start\u3001stop\u3001status\uFF09","cmd.daemon.start.desc":"\u5728\u540E\u53F0\u542F\u52A8\u5B88\u62A4\u8FDB\u7A0B\uFF08\u4E0D\u5F00\u6D4F\u89C8\u5668\u2014\u2014\u89C1 `weave dashboard`\uFF09","cmd.daemon.stop.desc":"\u505C\u6B62\u8FD0\u884C\u4E2D\u7684\u5B88\u62A4\u8FDB\u7A0B","cmd.daemon.status.desc":"\u67E5\u770B\u5B88\u62A4\u8FDB\u7A0B\u72B6\u6001","cmd.dashboard.desc":"\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00 web \u63A7\u5236\u53F0\uFF08\u5FC5\u8981\u65F6\u5148\u542F\u52A8\u5B88\u62A4\u8FDB\u7A0B\uFF09","cmd.chpass.desc":"\u4FEE\u6539 dashboard \u767B\u5F55\u5BC6\u7801\uFF08\u6307\u5B9A\u65B0\u5BC6\u7801\uFF1B\u672C\u673A\u6267\u884C\u4E0D\u9700\u8981\u65E7\u5BC6\u7801\uFF09","cmd.scan.desc":"\u626B\u63CF\u5DF2\u521D\u59CB\u5316 weave \u7684\u9879\u76EE\u5E76\u6CE8\u518C","cmd.doctor.desc":"\u8BCA\u65AD\u672C\u673A\u63A5\u7EBF\uFF1A\u8FD9\u6761\u68C0\u51FA\u662F\u5426\u5DF2\u6CE8\u518C\u8FDB\u672C\u673A weave server","flag.init.preset":"\u914D\u7F6E\u9884\u8BBE\uFF1Aminimal\u3001default \u6216 full","flag.init.force":"\u8986\u76D6\u5DF2\u5B58\u5728\u7684\u6587\u4EF6","flag.init.noInteractive":"\u7981\u7528\u4EA4\u4E92\u5F0F\u63D0\u793A","flag.init.hooks":"\u542F\u7528\u7684 hook \u4E8B\u4EF6\uFF0C\u9017\u53F7\u5206\u9694\uFF08preToolUse,postToolUse,userPromptSubmit,sessionStart,stop,subagentStop,notification,preCompact\uFF09\uFF1Bnone \u8868\u793A\u5168\u4E0D\u6CE8\u518C\uFF1B\u9ED8\u8BA4\u5168\u5F00","flag.init.harness":`\u8981\u521D\u59CB\u5316\u7684 harness \u9762\uFF0C\u9017\u53F7\u5206\u9694\uFF08${u.join("\u3001")}\uFF09\uFF1B\u7F3A\u7701\u65F6 TTY \u4E0B\u4EA4\u4E92\u591A\u9009\uFF0C\u9ED8\u8BA4 ${u[0]}`,"flag.dir":"\u76EE\u6807\u76EE\u5F55\uFF08\u9ED8\u8BA4\uFF1A\u5F53\u524D\u76EE\u5F55\uFF09","flag.scan.dir":"\u626B\u63CF\u7684\u6839\u76EE\u5F55\uFF08\u9ED8\u8BA4\uFF1A\u5F53\u524D\u76EE\u5F55\uFF09","flag.dashboard.noOpen":"\u53EA\u6253\u5370 dashboard URL\uFF0C\u4E0D\u6253\u5F00\u6D4F\u89C8\u5668","out.daemon.alreadyRunning":"\u5B88\u62A4\u8FDB\u7A0B\u5DF2\u5728 {port} \u7AEF\u53E3\u8FD0\u884C","out.daemon.started":"\u5B88\u62A4\u8FDB\u7A0B\u5DF2\u542F\u52A8\uFF1Ahttp://{host}:{port}","out.daemon.stopped":"\u5B88\u62A4\u8FDB\u7A0B\u5DF2\u505C\u6B62\uFF08pid {pid}\uFF09\u3002","out.daemon.statusNotRunning":"\u5B88\u62A4\u8FDB\u7A0B\uFF1A\u672A\u8FD0\u884C","out.daemon.statusRunning":"\u5B88\u62A4\u8FDB\u7A0B\uFF1A\u8FD0\u884C\u4E2D\uFF08pid {pid}\uFF0C\u7AEF\u53E3 {port}\uFF0C\u5DF2\u8FD0\u884C {uptime}s\uFF09","out.daemon.urlsTitle":"\u8BBF\u95EE\u5730\u5740\uFF1A","out.daemon.statusStale":"\u5B88\u62A4\u8FDB\u7A0B\uFF1A\u72B6\u6001\u8FC7\u671F\uFF08pid {pid}\uFF0C\u7AEF\u53E3 {port} \u65E0\u54CD\u5E94\uFF09","out.doctor.header":`
1
+ import{HARNESS_DIRS as t,HARNESS_KEYS as e}from"@weavecode/core";export const zh={"help.tagline":"weave v{version} \u2014 Harness \u5DE5\u5177","help.usage":"\u7528\u6CD5\uFF1Aweave <\u547D\u4EE4> [\u9009\u9879]","help.commands":"\u547D\u4EE4\uFF1A","help.globalOptions":"\u5168\u5C40\u9009\u9879\uFF1A","help.subcommands":"\u53EF\u7528\u5B50\u547D\u4EE4\uFF1A","cli.unknownCommand":"\u672A\u77E5\u547D\u4EE4\uFF1A{command}","cli.error":"\u9519\u8BEF\uFF1A{error}","cli.missingRequired":"\u7F3A\u5C11\u5FC5\u586B\u9009\u9879\uFF1A--{name}","cli.invalidChoice":'--{name} \u7684\u53D6\u503C "{value}" \u65E0\u6548\uFF0C\u53EF\u9009\u503C\uFF1A{choices}',"cli.missingSubcommand":"\u547D\u4EE4 {command} \u9700\u8981\u4E00\u4E2A\u5B50\u547D\u4EE4","cli.unknownSubcommand":"\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A{command} {subcommand}","cli.unexpectedPositional":"\u547D\u4EE4 {command} \u4E0D\u63A5\u53D7\u53C2\u6570\u300C{arg}\u300D","flag.help":"\u663E\u793A\u5E2E\u52A9","flag.version":"\u663E\u793A\u7248\u672C","flag.verbose":"\u8BE6\u7EC6\u8F93\u51FA","flag.quiet":"\u6291\u5236\u975E\u5FC5\u8981\u8F93\u51FA","cmd.init.desc":"\u5728\u5F53\u524D\u9879\u76EE\u521D\u59CB\u5316 weave harness","cmd.uninstall.desc":"\u5378\u8F7D weave\uFF1A\u79FB\u9664 init \u751F\u6210\u7269\uFF08init \u63D0\u4EA4\u521A\u843D\u76D8\u65F6\u56DE\u6EDA\u6307\u9488\uFF0C\u5426\u5219\u751F\u6210\u5378\u8F7D\u63D0\u4EA4\uFF09","cmd.status.desc":"\u67E5\u770B\u5F53\u524D harness \u72B6\u6001","cmd.daemon.desc":"\u7BA1\u7406\u540E\u53F0\u5B88\u62A4\u8FDB\u7A0B\uFF08start\u3001stop\u3001status\uFF09","cmd.daemon.start.desc":"\u5728\u540E\u53F0\u542F\u52A8\u5B88\u62A4\u8FDB\u7A0B\uFF08\u4E0D\u5F00\u6D4F\u89C8\u5668\u2014\u2014\u89C1 `weave dashboard`\uFF09","cmd.daemon.stop.desc":"\u505C\u6B62\u8FD0\u884C\u4E2D\u7684\u5B88\u62A4\u8FDB\u7A0B","cmd.daemon.status.desc":"\u67E5\u770B\u5B88\u62A4\u8FDB\u7A0B\u72B6\u6001","cmd.dashboard.desc":"\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00 web \u63A7\u5236\u53F0\uFF08\u5FC5\u8981\u65F6\u5148\u542F\u52A8\u5B88\u62A4\u8FDB\u7A0B\uFF09","cmd.chpass.desc":"\u4FEE\u6539 dashboard \u767B\u5F55\u5BC6\u7801\uFF08\u6307\u5B9A\u65B0\u5BC6\u7801\uFF1B\u672C\u673A\u6267\u884C\u4E0D\u9700\u8981\u65E7\u5BC6\u7801\uFF09","cmd.scan.desc":"\u626B\u63CF\u5DF2\u521D\u59CB\u5316 weave \u7684\u9879\u76EE\u5E76\u6CE8\u518C","cmd.doctor.desc":"\u8BCA\u65AD\u672C\u673A\u63A5\u7EBF\uFF1A\u8FD9\u6761\u68C0\u51FA\u662F\u5426\u5DF2\u6CE8\u518C\u8FDB\u672C\u673A weave server","flag.init.preset":"\u914D\u7F6E\u9884\u8BBE\uFF1Aminimal\u3001default \u6216 full","flag.init.force":"\u8986\u76D6\u5DF2\u5B58\u5728\u7684\u6587\u4EF6","flag.init.noInteractive":"\u7981\u7528\u4EA4\u4E92\u5F0F\u63D0\u793A","flag.init.hooks":"\u542F\u7528\u7684 hook \u4E8B\u4EF6\uFF0C\u9017\u53F7\u5206\u9694\uFF08preToolUse,postToolUse,userPromptSubmit,sessionStart,stop,stopFailure,subagentStop,subagentStart,notification,postToolUseFailure,permissionRequest,permissionDenied,preCompact,sessionEnd,preModelSwitch\uFF09\uFF1Bnone \u8868\u793A\u5168\u4E0D\u6CE8\u518C\uFF1B\u9ED8\u8BA4\u5168\u5F00","flag.init.harness":`\u8981\u521D\u59CB\u5316\u7684 harness \u9762\uFF0C\u9017\u53F7\u5206\u9694\uFF08${e.join("\u3001")}\uFF09\uFF1B\u7F3A\u7701\u65F6 TTY \u4E0B\u4EA4\u4E92\u591A\u9009\uFF0C\u9ED8\u8BA4 ${e[0]}`,"flag.dir":"\u76EE\u6807\u76EE\u5F55\uFF08\u9ED8\u8BA4\uFF1A\u5F53\u524D\u76EE\u5F55\uFF09","flag.scan.dir":"\u626B\u63CF\u7684\u6839\u76EE\u5F55\uFF08\u9ED8\u8BA4\uFF1A\u5F53\u524D\u76EE\u5F55\uFF09","flag.dashboard.noOpen":"\u53EA\u6253\u5370 dashboard URL\uFF0C\u4E0D\u6253\u5F00\u6D4F\u89C8\u5668","out.daemon.alreadyRunning":"\u5B88\u62A4\u8FDB\u7A0B\u5DF2\u5728 {port} \u7AEF\u53E3\u8FD0\u884C","out.daemon.started":"\u5B88\u62A4\u8FDB\u7A0B\u5DF2\u542F\u52A8\uFF1Ahttp://{host}:{port}","out.daemon.stopped":"\u5B88\u62A4\u8FDB\u7A0B\u5DF2\u505C\u6B62\uFF08pid {pid}\uFF09\u3002","out.daemon.statusNotRunning":"\u5B88\u62A4\u8FDB\u7A0B\uFF1A\u672A\u8FD0\u884C","out.daemon.statusRunning":"\u5B88\u62A4\u8FDB\u7A0B\uFF1A\u8FD0\u884C\u4E2D\uFF08pid {pid}\uFF0C\u7AEF\u53E3 {port}\uFF0C\u5DF2\u8FD0\u884C {uptime}s\uFF09","out.daemon.urlsTitle":"\u8BBF\u95EE\u5730\u5740\uFF1A","out.daemon.statusStale":"\u5B88\u62A4\u8FDB\u7A0B\uFF1A\u72B6\u6001\u8FC7\u671F\uFF08pid {pid}\uFF0C\u7AEF\u53E3 {port} \u65E0\u54CD\u5E94\uFF09","out.doctor.header":`
2
2
  Weave Doctor \u2014\u2014 \u672C\u673A\u63A5\u7EBF
3
- `,"out.doctor.dir":"\u76EE\u5F55","out.doctor.initialized":"\u5DF2\u521D\u59CB\u5316","out.doctor.yes":"\u662F","out.doctor.no":"\u5426","out.doctor.daemon":"\u5B88\u62A4\u8FDB\u7A0B","out.doctor.daemonRunning":"\u8FD0\u884C\u4E2D\uFF08\u7AEF\u53E3 {port}\uFF09","out.doctor.daemonStopped":"\u672A\u8FD0\u884C","out.doctor.registered":"\u672C\u673A\u6CE8\u518C","out.doctor.registeredYes":"\u662F\uFF08id {id}\uFF0C\u6765\u6E90 {source}\uFF09","out.doctor.registeredNo":"\u5426\u2014\u2014\u8FD9\u6761\u68C0\u51FA\u4E0D\u5728\u672C\u673A\u6CE8\u518C\u8868\u91CC","out.doctor.registeredArchived":"\u5DF2\u5F52\u6863\uFF08id {id}\uFF09","out.doctor.token":"\u4EE4\u724C","out.doctor.tokenOk":"\u6B63\u5E38","out.doctor.tokenMissing":"\u7F3A\u5931\uFF08.weave/token \u4E0D\u5B58\u5728\uFF09","out.doctor.tokenUnregistered":"\u5B58\u5728\uFF0C\u4F46\u9879\u76EE\u672A\u6CE8\u518C","out.doctor.tokenStale":"\u8FC7\u671F\u2014\u2014\u4E0E\u672C\u673A\u6CE8\u518C\u8868\u7684\u4EE4\u724C\u4E0D\u4E00\u81F4","out.doctor.warnNotRegistered":"\u8FD9\u4E2A\u9879\u76EE\u5E26\u7740 weave \u6587\u4EF6\uFF0C\u5374\u6CA1\u6709\u6CE8\u518C\u8FDB\u672C\u673A weave server\u3002","out.doctor.fixInit":"\u8FD0\u884C `weave init` \u53EF\u91CD\u65B0\u6CE8\u518C\u8FD9\u6761\u68C0\u51FA\u3001\u5237\u65B0 harness \u6587\u4EF6\u5E76\u91CD\u5199\u672C\u5730\u8DEF\u5F84\u3002","out.doctor.fixScan":"\u6216\u7528 `weave scan -d <\u4E0A\u7EA7\u76EE\u5F55>` \u6279\u91CF\u53D1\u73B0\u5E76\u6CE8\u518C\u3002","out.doctor.warnArchived":"\u8FD9\u4E2A\u9879\u76EE\u5DF2\u6CE8\u518C\u4F46\u5904\u4E8E\u5F52\u6863\u6001\u2014\u2014\u5728 dashboard \u91CC\u6062\u590D\u540E\u624D\u80FD\u4F7F\u7528\u3002","out.doctor.warnTokenMissing":"\u5DF2\u6CE8\u518C\uFF0C\u4F46 `.weave/token` \u7F3A\u5931\u2014\u2014\u91CD\u65B0\u751F\u6210\u524D hook \u65E0\u6CD5\u901A\u8FC7\u9274\u6743\u3002","out.doctor.warnTokenStale":"\u5DF2\u6CE8\u518C\uFF0C\u4F46 `.weave/token` \u5C5E\u4E8E\u53E6\u4E00\u6B21\u68C0\u51FA\u2014\u2014\u9700\u8981\u91CD\u65B0\u751F\u6210\u3002","out.doctor.ok":"\u6B63\u5E38\u2014\u2014\u8FD9\u6761\u68C0\u51FA\u5DF2\u6CE8\u518C\uFF0C\u4EE4\u724C\u4E00\u81F4\u3002","out.doctor.fixDaemon":"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\uFF1B\u9700\u8981\u91C7\u96C6\u65F6\u7528 `weave daemon start` \u542F\u52A8\u3002","out.dash.browserFailed":"\uFF08\u65E0\u6CD5\u81EA\u52A8\u542F\u52A8\u6D4F\u89C8\u5668\u2014\u2014\u8BF7\u624B\u52A8\u6253\u5F00\uFF09","out.dash.stopHint":"\u7A0D\u540E\u53EF\u7528 `weave daemon stop` \u505C\u6B62\u5B83\u3002","out.dash.noBundle":"Web \u8D44\u6E90\u5305\u5C1A\u672A\u6784\u5EFA\uFF0C\u5B88\u62A4\u8FDB\u7A0B\u6CA1\u6709\u53EF\u63D0\u4F9B\u7684\u5185\u5BB9\u3002","out.dash.buildHint":" \u53EF\u7528 `pnpm build:web` \u6784\u5EFA\uFF0C\u6216\u8FD0\u884C Vite \u5F00\u53D1\u670D\u52A1\u5668\uFF1A`pnpm dev:web`\uFF08http://localhost:9527\uFF09\u3002","out.dash.url":`
3
+ `,"out.doctor.dir":"\u76EE\u5F55","out.doctor.initialized":"\u5DF2\u521D\u59CB\u5316","out.doctor.yes":"\u662F","out.doctor.no":"\u5426","out.doctor.daemon":"\u5B88\u62A4\u8FDB\u7A0B","out.doctor.daemonRunning":"\u8FD0\u884C\u4E2D\uFF08\u7AEF\u53E3 {port}\uFF09","out.doctor.daemonStopped":"\u672A\u8FD0\u884C","out.doctor.registered":"\u672C\u673A\u6CE8\u518C","out.doctor.registeredYes":"\u662F\uFF08id {id}\uFF0C\u6765\u6E90 {source}\uFF09","out.doctor.registeredNo":"\u5426\u2014\u2014\u8FD9\u6761\u68C0\u51FA\u4E0D\u5728\u672C\u673A\u6CE8\u518C\u8868\u91CC","out.doctor.registeredArchived":"\u5DF2\u5F52\u6863\uFF08id {id}\uFF09","out.doctor.token":"\u4EE4\u724C","out.doctor.tokenOk":"\u6B63\u5E38","out.doctor.tokenMissing":"\u7F3A\u5931\uFF08.weave/token \u4E0D\u5B58\u5728\uFF09","out.doctor.tokenUnregistered":"\u5B58\u5728\uFF0C\u4F46\u9879\u76EE\u672A\u6CE8\u518C","out.doctor.tokenStale":"\u8FC7\u671F\u2014\u2014\u4E0E\u672C\u673A\u6CE8\u518C\u8868\u7684\u4EE4\u724C\u4E0D\u4E00\u81F4","out.doctor.warnNotRegistered":"\u8FD9\u4E2A\u9879\u76EE\u5E26\u7740 weave \u6587\u4EF6\uFF0C\u5374\u6CA1\u6709\u6CE8\u518C\u8FDB\u672C\u673A weave server\u3002","out.doctor.fixInit":"\u8FD0\u884C `weave init` \u53EF\u91CD\u65B0\u6CE8\u518C\u8FD9\u6761\u68C0\u51FA\u3001\u5237\u65B0 harness \u6587\u4EF6\u5E76\u91CD\u5199\u672C\u5730\u8DEF\u5F84\u3002","out.doctor.fixScan":"\u6216\u7528 `weave scan -d <\u4E0A\u7EA7\u76EE\u5F55>` \u6279\u91CF\u53D1\u73B0\u5E76\u6CE8\u518C\u3002","out.doctor.warnArchived":"\u8FD9\u4E2A\u9879\u76EE\u5DF2\u6CE8\u518C\u4F46\u5904\u4E8E\u5F52\u6863\u6001\u2014\u2014\u5728 dashboard \u91CC\u6062\u590D\u540E\u624D\u80FD\u4F7F\u7528\u3002","out.doctor.warnTokenMissing":"\u5DF2\u6CE8\u518C\uFF0C\u4F46 `.weave/token` \u7F3A\u5931\u2014\u2014\u91CD\u65B0\u751F\u6210\u524D hook \u65E0\u6CD5\u901A\u8FC7\u9274\u6743\u3002","out.doctor.warnTokenStale":"\u5DF2\u6CE8\u518C\uFF0C\u4F46 `.weave/token` \u5C5E\u4E8E\u53E6\u4E00\u6B21\u68C0\u51FA\u2014\u2014\u9700\u8981\u91CD\u65B0\u751F\u6210\u3002","out.doctor.ok":"\u6B63\u5E38\u2014\u2014\u8FD9\u6761\u68C0\u51FA\u5DF2\u6CE8\u518C\uFF0C\u4EE4\u724C\u4E00\u81F4\u3002","out.doctor.fixDaemon":"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\uFF1B\u9700\u8981\u91C7\u96C6\u65F6\u7528 `weave daemon start` \u542F\u52A8\u3002","out.doctor.diagHeader":`
4
+ Weave Doctor \u2014\u2014 \u6D88\u606F\u6295\u9012\u8BCA\u65AD\uFF08\u9879\u76EE #{id}\uFF09
5
+ `,"out.doctor.diagFailed":"\u6295\u9012\u8BCA\u65AD\u4E0D\u53EF\u7528\uFF08{error}\uFF09\u2014\u2014daemon \u62D2\u7B54\u3001\u4EE4\u724C\u4E0D\u5BF9\uFF0C\u6216 daemon \u7248\u672C\u8F83\u65E7\uFF08\u6CA1\u6709\u8FD9\u6761\u8DEF\u7531\uFF09\u3002","out.doctor.diagDaemon":"\u5B88\u62A4\u8FDB\u7A0B","out.doctor.diagDaemonValue":"v{version} \xB7 {platform} \xB7 \u7EC8\u7AEF preset {preset}{channel}","out.doctor.diagChannelOn":"\uFF08\u6709\u6587\u672C\u6CE8\u5165\u901A\u9053\uFF09","out.doctor.diagChannelOff":"\uFF08\u65E0\u6587\u672C\u6CE8\u5165\u901A\u9053\uFF09","out.doctor.diagScript":"\u91C7\u96C6\u811A\u672C","out.doctor.diagScriptNone":"\u672A\u5B89\u88C5\u2014\u2014\u6CA1\u6709 weave \u751F\u6210\u7684 hook \u811A\u672C\uFF08\u8DD1 `weave init`\uFF09","out.doctor.diagScriptNotOwned":"{source} \u6863\u811A\u672C\u4E0D\u662F weave \u751F\u6210\u7684\uFF08weave \u65E2\u4E0D\u5237\u65B0\u4E5F\u4E0D\u8BA4\uFF1B`weave init --force` \u53EF\u8986\u76D6\uFF09","out.doctor.diagScriptValue":"{harness} \xB7 {source} \u6863 \xB7 \u7248\u672C {version} \xB7 \u51ED\u636E\u4E0A\u62A5 {inbox} \xB7 pane \u4E0A\u62A5 {pane}","out.doctor.diagSourceUser":"user","out.doctor.diagSourceProject":"project","out.doctor.diagSourceNone":"\u65E0","out.doctor.diagYes":"\u662F","out.doctor.diagNo":"\u5426","out.doctor.diagMissing":"\u2014","out.doctor.diagUnknownAlive":"\u5224\u4E0D\u52A8","out.doctor.diagUntitled":"\u65E0\u9898","out.doctor.diagNoSessions":"\u6CA1\u6709\u9700\u8981\u8BCA\u65AD\u7684\u4F1A\u8BDD\uFF08\u5F53\u524D\u6CA1\u6709\u6D3B\u7740\u7684\u4F1A\u8BDD\uFF09\u3002","out.doctor.diagReady":"\u53EF\u7528","out.doctor.diagUnavailable":"\u4E0D\u53EF\u7528\uFF08{reason}\uFF09","out.doctor.diagUnknown":"\u5224\u4E0D\u52A8\uFF08{reason}\uFF09","out.doctor.diagSession":"{id}\u300C{title}\u300D \u5B58\u6D3B {alive} \xB7 \u4E8B\u4EF6 {events} \xB7 \u672B\u6B21 {last}","out.doctor.diagChannels":"\u76F4\u6295 {inbox} \u4E2D\u7EE7 {relay} \u7EC8\u7AEF {terminal}","out.doctor.diagQueue":"\u961F\u5217 {pending} \u6761 \xB7 \u6682\u505C\u95F8 {stalled}","out.doctor.diagHints":"\u4FEE\u6CD5\uFF1A{hints}","out.doctor.reason.noMechanism":"\u8BE5 harness \u6CA1\u6709\u8FD9\u4E2A\u673A\u5236","out.doctor.reason.noCredentials":"\u6CA1\u6709\u51ED\u636E","out.doctor.reason.authTokenRequired":"\u672C\u5E73\u53F0\u9700\u8981\u51ED\u636E\u4F46\u5BBF\u4E3B\u6CA1\u7ED9","out.doctor.reason.noPeerName":"\u6CE8\u518C\u8868\u91CC\u6CA1\u6709 peer name","out.doctor.reason.noBackend":"\u8BE5\u7EC8\u7AEF preset \u6CA1\u6709\u6587\u672C\u6CE8\u5165\u540E\u7AEF","out.doctor.reason.noPaneEnv":"\u6CA1\u4E0A\u62A5 pane \u5B9A\u4F4D","out.doctor.hint.noHookScript":"\u6CA1\u88C5 weave \u751F\u6210\u7684 hook \u811A\u672C \u2192 \u8DD1 `weave init`","out.doctor.hint.hookScriptNotWeave":"hook \u811A\u672C\u4E0D\u662F weave \u751F\u6210\u7684\uFF08weave \u4E0D\u5237\u65B0\u4E5F\u4E0D\u8BA4\uFF09\u2192 \u79FB\u8D70\u5B83\uFF0C\u6216 `weave init --force` \u8986\u76D6","out.doctor.hint.hookScriptStale":"hook \u811A\u672C\u662F\u65E7\u7248 weave \u751F\u6210\u7684\u3001\u4E0D\u4E0A\u62A5\u76F4\u6295\u51ED\u636E \u2192 \u91CD\u8DD1 `weave init` \u5237\u65B0\u811A\u672C\uFF0C\u518D\u91CD\u542F\u4F1A\u8BDD","out.doctor.hint.noEvents":"\u8FD9\u6761\u4F1A\u8BDD\u4E00\u6761 hook \u4E8B\u4EF6\u90FD\u6CA1\u6709\uFF08\u4F1A\u8BDD\u65E9\u4E8E init\uFF1F\u811A\u672C\u6CA1\u8DD1\u8FC7\uFF1F\uFF09","out.doctor.hint.noInboxCredentials":"\u811A\u672C\u80FD\u4E0A\u62A5\u3001\u4F46\u8FD9\u6761\u4F1A\u8BDD\u4ECE\u6CA1\u62A5\u8FC7\u51ED\u636E\uFF08\u5BBF\u4E3B\u6CA1\u7ED9 messaging socket env\uFF0C\u6216\u4F1A\u8BDD\u65E9\u4E8E\u811A\u672C\u66F4\u65B0\uFF09\u2192 \u91CD\u542F\u4F1A\u8BDD","out.doctor.hint.inboxTokenRequired":"\u672C\u5E73\u53F0\u76F4\u6295\u9700\u8981 token\uFF0C\u5BBF\u4E3B\u6CA1\u7ED9 messaging token env","out.doctor.hint.noPeerName":"\u8FD9\u6761\u4F1A\u8BDD\u5728\u6CE8\u518C\u8868\u91CC\u6CA1\u6709 peer name\u2014\u2014\u4E2D\u7EE7\u6309\u540D\u5B57\u5BFB\u5740\uFF0C\u6CA1\u540D\u5B57\u76F4\u63A5\u8DF3\u8FC7","out.doctor.hint.terminalNoBackend":"\u7EC8\u7AEF preset \u4E0D\u652F\u6301\u6587\u672C\u6CE8\u5165 \u2192 \u6362 wezterm \u624D\u6709\u5C42\u2461 \u515C\u5E95","out.doctor.hint.terminalNoPaneEnv":"\u6CA1\u4E0A\u62A5 pane \u5B9A\u4F4D\uFF08\u8BE5\u7EC8\u7AEF\u4E0D\u5BFC\u51FA WEZTERM_*\uFF09\u2192 \u53EA\u5269\u6807\u9898+cwd \u56DE\u843D","out.doctor.hint.notRunning":"\u4F1A\u8BDD\u8FDB\u7A0B\u5DF2\u4E0D\u5728\u8DD1\uFF08\u6D88\u606F\u843D failed/offline\uFF0C\u8FDE\u961F\u5217\u90FD\u4E0D\u8FDB\uFF09","out.doctor.hint.queued":"\u961F\u5217\u91CC\u8FD8\u6709\u79EF\u538B","out.doctor.hint.stalled":"\u6682\u505C\u95F8\u5DF2\u7F6E\uFF08\u672A\u56DE\u6267\u8D85\u7A97\u6216\u6295\u9012\u5931\u8D25\uFF09\u2192 \u91CD\u53D1\u3001\u6216\u7B49\u56DE\u6267\u89E3\u9664","out.dash.browserFailed":"\uFF08\u65E0\u6CD5\u81EA\u52A8\u542F\u52A8\u6D4F\u89C8\u5668\u2014\u2014\u8BF7\u624B\u52A8\u6253\u5F00\uFF09","out.dash.stopHint":"\u7A0D\u540E\u53EF\u7528 `weave daemon stop` \u505C\u6B62\u5B83\u3002","out.dash.noBundle":"Web \u8D44\u6E90\u5305\u5C1A\u672A\u6784\u5EFA\uFF0C\u5B88\u62A4\u8FDB\u7A0B\u6CA1\u6709\u53EF\u63D0\u4F9B\u7684\u5185\u5BB9\u3002","out.dash.buildHint":" \u53EF\u7528 `pnpm build:web` \u6784\u5EFA\uFF0C\u6216\u8FD0\u884C Vite \u5F00\u53D1\u670D\u52A1\u5668\uFF1A`pnpm dev:web`\uFF08http://localhost:9527\uFF09\u3002","out.dash.url":`
4
6
  \u63A7\u5236\u53F0\uFF1A{url}
5
- `,"out.dash.noOpen":" \uFF08--no-open\uFF1A\u4E0D\u542F\u52A8\u6D4F\u89C8\u5668\uFF09","out.dash.lanUrl":" \u5C40\u57DF\u7F51\uFF1A{url}","out.dash.initialPassword":`
7
+ `,"out.dash.noOpen":" \uFF08--no-open\uFF1A\u4E0D\u542F\u52A8\u6D4F\u89C8\u5668\uFF09","out.dash.initialPassword":`
6
8
  \u521D\u59CB\u767B\u5F55\u5BC6\u7801\uFF1A{password}
7
9
  \uFF08\u53EA\u663E\u793A\u8FD9\u4E00\u6B21\uFF1B\u53EF\u7528 \`weave chpass <\u65B0\u5BC6\u7801>\` \u4FEE\u6539\uFF09
8
10
  `,"out.chpass.ok":"\u5DF2\u66F4\u65B0 dashboard \u767B\u5F55\u5BC6\u7801\u2014\u2014\u6240\u6709\u5DF2\u767B\u5F55\u7684\u6D4F\u89C8\u5668\u9700\u91CD\u65B0\u767B\u5F55\u3002","out.chpass.fail":"\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF1A{error}","out.chpass.usage":"\u7528\u6CD5\uFF1Aweave chpass <\u65B0\u5BC6\u7801>\uFF08\u81F3\u5C11 6 \u4F4D\uFF09","out.scan.registered":"\u5DF2\u4ECE {root} \u6CE8\u518C {count} \u4E2A\u9879\u76EE","out.uninstall.banner":"\u5378\u8F7D weave\uFF1A{target}","out.uninstall.notInitialized":"\u672A\u627E\u5230 .weave/ \u2014\u2014 \u672C\u9879\u76EE\u672A\u521D\u59CB\u5316 weave\uFF0C\u65E0\u9700\u5378\u8F7D\u3002","out.uninstall.done":"\u5378\u8F7D\u5B8C\u6210\uFF1A\u5220\u9664 {files} \u4E2A\u6587\u4EF6\u3001{dirs} \u4E2A\u76EE\u5F55","out.uninstall.modified":"\u6539\u5199 {count} \u4E2A\u6587\u4EF6\uFF08\u5265\u9664 weave \u5199\u5165\u7684\u952E/\u6BB5\u843D\uFF09","out.uninstall.keptUser":"\u4FDD\u7559\u7591\u4F3C\u7528\u6237\u4FEE\u6539\u7684\u751F\u6210\u4F4D\u6587\u4EF6 {count} \u4E2A\uFF08\u5185\u5BB9\u4E0E weave \u6765\u6E90\u4E0D\u4E00\u81F4\uFF09\uFF1A","out.uninstall.restored":"\u5DF2\u8FD8\u539F\u88AB init \u9876\u66FF\u7684 AGENTS.md\uFF08\u6765\u81EA .weave/backup/\uFF09","out.uninstall.gitReset":"init \u63D0\u4EA4\u662F\u6700\u8FD1\u4E00\u6B21\u63D0\u4EA4\u2014\u2014\u6307\u9488\u5DF2\u56DE\u6EDA\u5230 {sha}\uFF0C\u5386\u53F2\u65E0\u75D5","out.uninstall.gitCommit":"\u5DF2\u751F\u6210\u5378\u8F7D\u63D0\u4EA4 {sha}\uFF08{count} \u4E2A\u6587\u4EF6\uFF09","out.uninstall.gitNoChanges":"\u6CA1\u6709\u5DF2\u8DDF\u8E2A\u7684 weave \u6587\u4EF6\u53D8\u5316\u2014\u2014\u672A\u4EA7\u751F\u63D0\u4EA4","out.uninstall.gitDirty":"\u6682\u5B58\u533A\u975E\u7A7A\u2014\u2014\u6587\u4EF6\u5DF2\u6E05\u7406\uFF0C\u4F46\u8DF3\u8FC7 git \u64CD\u4F5C\u4EE5\u514D\u6CE2\u53CA\u5DF2\u6682\u5B58\u5185\u5BB9","out.uninstall.gitNotRepo":"\u4E0D\u5728 git \u4ED3\u5E93\u5185\u2014\u2014\u4EC5\u6E05\u7406\u6587\u4EF6","out.uninstall.gitFailed":"git \u64CD\u4F5C\u5931\u8D25\uFF1A{error}\uFF08\u6587\u4EF6\u5DF2\u6E05\u7406\uFF09","out.uninstall.serverRemoved":"\u5DF2\u4ECE server \u6CE8\u9500\u9879\u76EE {name}\uFF08\u6E05\u7406 {events} \u4E8B\u4EF6 / {dispatches} \u6D3E\u53D1 / {sessions} \u4F1A\u8BDD\uFF09","out.uninstall.serverFailed":"server \u6CE8\u9500\u5931\u8D25\uFF1A{error}","uninstall.pluginScanFailed":"\u63D2\u4EF6\u6A21\u677F\u626B\u63CF\u5931\u8D25\uFF08\u8DF3\u8FC7\u8BE5\u90E8\u5206\uFF09\uFF1A{error}","out.status.notInitialized":"Weave \u5C1A\u672A\u521D\u59CB\u5316\u3002\u8BF7\u5148\u8FD0\u884C `weave init`\u3002","out.status.header":`
@@ -53,4 +55,4 @@ import{HARNESS_DIRS as F,HARNESS_KEYS as u}from"@weavecode/core";export const zh
53
55
  - \u4E0D\u8981\u628A\u6807\u8BB0\u5F53\u5185\u5BB9\u590D\u8FF0\uFF0C\u4E5F\u4E0D\u5FC5\u5C31\u8FD9\u6761\u6D88\u606F\u56DE\u8BDD\uFF08\u8FD9\u6761\u8DEF\u5F84\u6CA1\u6709\u56DE\u590D\u9762\uFF09\uFF1B
54
56
  - **\u53EA\u6709\u76F4\u6295\u8FD9\u4E00\u6761\u8DEF\u5F84\u5E26\u6807\u8BB0**\uFF1A\u4E2D\u7EE7\u3001\u7EC8\u7AEF\u515C\u5E95\u3001\u6CE8\u5165\u4E09\u6761\u8DEF\u5F84\u7684\u6295\u9012\u90FD\u4E0D\u5E26\u2014\u2014\u6240\u4EE5\u300C\u6CA1\u6709\u6807\u8BB0\u300D\u4E0D\u7B49\u4E8E\u300C\u7528\u6237\u624B\u6253\u300D\uFF0C\u522B\u636E\u6B64\u5224\u65AD\u6765\u6E90\u3002
55
57
 
56
- `,"harness.instructionLinkNotMaterialised.message":'{agents} \u662F\u5185\u5BB9\u4E3A "{claude}" \u7684\u666E\u901A\u6587\u4EF6\u2014\u2014git \u628A\u8F6F\u94FE\u63A5\u68C0\u51FA\u6210\u4E86\u6587\u672C\u3002',"harness.instructionLinkNotMaterialised.fix":"\u542F\u7528\u5F00\u53D1\u8005\u6A21\u5F0F\uFF0C\u7136\u540E\u8FD0\u884C `git config core.symlinks true` \u5E76\u91CD\u65B0\u68C0\u51FA\u8BE5\u6587\u4EF6\u3002","harness.instructionFilesDuplicated.message":"{claude} \u4E0E {agents} \u90FD\u662F\u72EC\u7ACB\u6587\u4EF6\u2014\u2014\u4E24\u8005\u5185\u5BB9\u4F1A\u5404\u81EA\u6F02\u79FB\u3002","harness.instructionFilesDuplicated.fix":"\u8FD0\u884C `weave init` \u8BA9\u5176\u4E2D\u4E00\u4E2A\u94FE\u63A5\u5230\u53E6\u4E00\u4E2A\uFF08\u88AB\u66FF\u6362\u7684\u6587\u4EF6\u4F1A\u5148\u5907\u4EFD\uFF09\u3002","harness.instructionLinkDangling.message":"{name} \u662F\u76EE\u6807\u4E0D\u5B58\u5728\u7684\u8F6F\u94FE\u63A5\u3002","harness.instructionLinkDangling.fix":"\u8FD0\u884C `weave init` \u91CD\u5EFA\u94FE\u63A5\u4E0E\u6307\u4EE4\u6587\u4EF6\u3002","harness.statuslinePathUnresolved.message":"statusLine \u547D\u4EE4\u65E0\u6CD5\u89E3\u6790\u51FA\u811A\u672C\u8DEF\u5F84\uFF1A{command}","harness.statuslinePathUnresolved.fix":`\u8FD0\u884C \`weave init\` \u91CD\u65B0\u751F\u6210 \`${F[u[0]].projectDir}/settings.json\`\u3002`,"harness.statuslinePathForeign.message":"statusLine \u6307\u5411\u672C\u9879\u76EE\u4E4B\u5916\uFF08{path}\uFF09\u2014\u2014\u5B83\u662F\u4E3A\u53E6\u4E00\u4E2A\u68C0\u51FA\u751F\u6210\u7684\u3002","harness.statuslinePathForeign.fix":"\u5728\u672C\u9879\u76EE\u4E2D\u8FD0\u884C `weave init` \u91CD\u5199\u7EDD\u5BF9\u8DEF\u5F84\u3002","harness.statuslineScriptMissing.message":"statusLine \u811A\u672C\u7F3A\u5931\uFF1A{path}","harness.statuslineScriptMissing.fix":"\u8FD0\u884C `weave init` \u91CD\u65B0\u751F\u6210\u3002","ilink.bothHaveContent":"CLAUDE.md \u4E0E AGENTS.md \u90FD\u5305\u542B\u5185\u5BB9","ilink.replaceDetail":"\u5C06\u628A AGENTS.md \u66FF\u6362\u4E3A\u6307\u5411 CLAUDE.md \u7684\u8F6F\u8FDE\u63A5\uFF08\u539F\u6587\u4EF6\u4F1A\u5907\u4EFD\u5230 {backupDir}\uFF09\u3002","ilink.linkFailed":"\u65E0\u6CD5\u521B\u5EFA {link} -> {target}\uFF08{path}\uFF09\uFF1A{detail}","ilink.symlinkNotAllowed":"\u6B64\u7CFB\u7EDF\u4E0D\u5141\u8BB8\u672A\u63D0\u6743\u521B\u5EFA\u8F6F\u94FE\u63A5\u3002\u5728 Windows \u4E0A\u8BF7\u542F\u7528\u5F00\u53D1\u8005\u6A21\u5F0F\uFF08\u8BBE\u7F6E > \u7CFB\u7EDF > \u5F00\u53D1\u8005\u9009\u9879\uFF09\uFF0C\u6216\u4ECE\u63D0\u6743\u7EC8\u7AEF\u8FD0\u884C weave init\uFF0C\u7136\u540E\u91CD\u8BD5\u3002"};
58
+ `,"harness.instructionLinkNotMaterialised.message":'{agents} \u662F\u5185\u5BB9\u4E3A "{claude}" \u7684\u666E\u901A\u6587\u4EF6\u2014\u2014git \u628A\u8F6F\u94FE\u63A5\u68C0\u51FA\u6210\u4E86\u6587\u672C\u3002',"harness.instructionLinkNotMaterialised.fix":"\u542F\u7528\u5F00\u53D1\u8005\u6A21\u5F0F\uFF0C\u7136\u540E\u8FD0\u884C `git config core.symlinks true` \u5E76\u91CD\u65B0\u68C0\u51FA\u8BE5\u6587\u4EF6\u3002","harness.instructionFilesDuplicated.message":"{claude} \u4E0E {agents} \u90FD\u662F\u72EC\u7ACB\u6587\u4EF6\u2014\u2014\u4E24\u8005\u5185\u5BB9\u4F1A\u5404\u81EA\u6F02\u79FB\u3002","harness.instructionFilesDuplicated.fix":"\u8FD0\u884C `weave init` \u8BA9\u5176\u4E2D\u4E00\u4E2A\u94FE\u63A5\u5230\u53E6\u4E00\u4E2A\uFF08\u88AB\u66FF\u6362\u7684\u6587\u4EF6\u4F1A\u5148\u5907\u4EFD\uFF09\u3002","harness.instructionLinkDangling.message":"{name} \u662F\u76EE\u6807\u4E0D\u5B58\u5728\u7684\u8F6F\u94FE\u63A5\u3002","harness.instructionLinkDangling.fix":"\u8FD0\u884C `weave init` \u91CD\u5EFA\u94FE\u63A5\u4E0E\u6307\u4EE4\u6587\u4EF6\u3002","harness.statuslinePathUnresolved.message":"statusLine \u547D\u4EE4\u65E0\u6CD5\u89E3\u6790\u51FA\u811A\u672C\u8DEF\u5F84\uFF1A{command}","harness.statuslinePathUnresolved.fix":`\u8FD0\u884C \`weave init\` \u91CD\u65B0\u751F\u6210 \`${t[e[0]].projectDir}/settings.json\`\u3002`,"harness.statuslinePathForeign.message":"statusLine \u6307\u5411\u672C\u9879\u76EE\u4E4B\u5916\uFF08{path}\uFF09\u2014\u2014\u5B83\u662F\u4E3A\u53E6\u4E00\u4E2A\u68C0\u51FA\u751F\u6210\u7684\u3002","harness.statuslinePathForeign.fix":"\u5728\u672C\u9879\u76EE\u4E2D\u8FD0\u884C `weave init` \u91CD\u5199\u7EDD\u5BF9\u8DEF\u5F84\u3002","harness.statuslineScriptMissing.message":"statusLine \u811A\u672C\u7F3A\u5931\uFF1A{path}","harness.statuslineScriptMissing.fix":"\u8FD0\u884C `weave init` \u91CD\u65B0\u751F\u6210\u3002","ilink.bothHaveContent":"CLAUDE.md \u4E0E AGENTS.md \u90FD\u5305\u542B\u5185\u5BB9","ilink.replaceDetail":"\u5C06\u628A AGENTS.md \u66FF\u6362\u4E3A\u6307\u5411 CLAUDE.md \u7684\u8F6F\u8FDE\u63A5\uFF08\u539F\u6587\u4EF6\u4F1A\u5907\u4EFD\u5230 {backupDir}\uFF09\u3002","ilink.linkFailed":"\u65E0\u6CD5\u521B\u5EFA {link} -> {target}\uFF08{path}\uFF09\uFF1A{detail}","ilink.symlinkNotAllowed":"\u6B64\u7CFB\u7EDF\u4E0D\u5141\u8BB8\u672A\u63D0\u6743\u521B\u5EFA\u8F6F\u94FE\u63A5\u3002\u5728 Windows \u4E0A\u8BF7\u542F\u7528\u5F00\u53D1\u8005\u6A21\u5F0F\uFF08\u8BBE\u7F6E > \u7CFB\u7EDF > \u5F00\u53D1\u8005\u9009\u9879\uFF09\uFF0C\u6216\u4ECE\u63D0\u6743\u7EC8\u7AEF\u8FD0\u884C weave init\uFF0C\u7136\u540E\u91CD\u8BD5\u3002"};
@@ -1 +1 @@
1
- import{DEFAULT_LOCALE as e,SUPPORTED_LOCALES as L,readDaemonSettings as f}from"@weavecode/server";import{DICTS as n}from"./dict/index.js";import{makeT as a}from"./t.js";let c=e,i=a(n[e],n[e]);function r(o){c=o,i=a(n[o],n[e])}export async function initCliLocale(){const o=process.env.WEAVE_LOCALE;if(o&&L.includes(o)){r(o);return}try{r((await f()).locale)}catch{r(e)}}export function setLocale(o){r(o)}export function getLocale(){return c}export function t(o,s){return i(o,s)}
1
+ import{DEFAULT_LOCALE as o,SUPPORTED_LOCALES as L,readDaemonSettings as p}from"@weavecode/server";import{DICTS as n}from"./dict/index.js";import{makeT as c}from"./t.js";let a=o,i=c(n[o],n[o]);function r(e){a=e,i=c(n[e],n[o])}export async function initCliLocale(){const e=process.env.WEAVE_LOCALE;if(e&&L.includes(e)){r(e);return}try{r((await p()).locale)}catch{r(o)}}export function setLocale(e){r(e)}export function getLocale(){return a}export function t(e,l){return i(e,l)}
@@ -1 +1 @@
1
- export function interpolate(n,t){return t?n.replace(/\{(\w+)\}/g,(e,r)=>r in t?String(t[r]):e):n}export function makeT(n,t){return(e,r)=>interpolate(n[e]??t[e]??String(e),r)}
1
+ export function interpolate(t,r){return r?t.replace(/\{(\w+)\}/g,(n,e)=>e in r?String(r[e]):n):t}export function makeT(t,r){return(n,e)=>interpolate(t[n]??r[n]??String(n),e)}
@@ -1,11 +1,11 @@
1
- import{WEAVE_INJECTION_MARKER as i}from"@weavecode/core";import{t as a}from"../i18n/index.js";export const WEAVE_BLOCK_START="<!-- weave:start -->",WEAVE_BLOCK_END="<!-- weave:end -->",WEAVE_MANAGED_HEADER="> This file is managed by [weave](https://github.com/zijing66/weave) \u2014 a coding-agent harness.";function d(e){return`# ${e}
1
+ import{WEAVE_INJECTION_MARKER as d}from"@weavecode/core";import{t as r}from"../i18n/index.js";export const WEAVE_BLOCK_START="<!-- weave:start -->",WEAVE_BLOCK_END="<!-- weave:end -->",WEAVE_MANAGED_HEADER="> This file is managed by [weave](https://github.com/zijing66/weave) \u2014 a coding-agent harness.";function o(e){return`# ${e}
2
2
 
3
3
  > This file is managed by [weave](https://github.com/zijing66/weave) \u2014 a coding-agent harness.
4
4
  > Re-run \`weave init\` to regenerate.
5
5
 
6
- `}function u(){return a("claudemd.injected",{marker:i})}export function generateClaudeMdSection(e){const{template:n}=e;let t=`${WEAVE_BLOCK_START}
7
- `;return t+=a("claudemd.rules"),(n==="standard"||n==="full")&&(t+=a("claudemd.files")),n==="full"&&(t+=a("claudemd.security")),t+=a("claudemd.skills"),t+=u(),t+=`${WEAVE_BLOCK_END}
8
- `,t}export function generateClaudeMd(e){return d(e.projectName)+generateClaudeMdSection(e)}export function mergeClaudeMd(e,n){const t=e.indexOf(WEAVE_BLOCK_START),r=e.indexOf(WEAVE_BLOCK_END);return t!==-1&&r!==-1&&r>t?e.slice(0,t)+n.trimEnd()+e.slice(r+WEAVE_BLOCK_END.length):e.replace(/\s+$/,"")+`
6
+ `}function c(){return r("claudemd.injected",{marker:d})}export function generateClaudeMdSection(e){const{template:n}=e;let t=`${WEAVE_BLOCK_START}
7
+ `;return t+=r("claudemd.rules"),(n==="standard"||n==="full")&&(t+=r("claudemd.files")),n==="full"&&(t+=r("claudemd.security")),t+=r("claudemd.skills"),t+=c(),t+=`${WEAVE_BLOCK_END}
8
+ `,t}export function generateClaudeMd(e){return o(e.projectName)+generateClaudeMdSection(e)}export function mergeClaudeMd(e,n){const t=e.indexOf(WEAVE_BLOCK_START),a=e.indexOf(WEAVE_BLOCK_END);return t!==-1&&a!==-1&&a>t?e.slice(0,t)+n.trimEnd()+e.slice(a+WEAVE_BLOCK_END.length):e.replace(/\s+$/,"")+`
9
9
 
10
10
  `+n.trimEnd()+`
11
11
  `}
@@ -1,6 +1,6 @@
1
- import m from"node:path";import{readFile as x,writeFile as d}from"node:fs/promises";import{detectPlatform as A,resolveComponents as B,DEFAULT_HOOKS as P,HARNESS_DIRS as G,HARNESS_KEYS as H,ensureDir as N,fileExists as V,logger as M}from"@weavecode/core";import{templateRegistry as k}from"@weavecode/templates";import{WEAVE_VERSION as Y}from"@weavecode/server";import{generateClaudeMd as K,generateClaudeMdSection as L,mergeClaudeMd as $}from"./claudemd-gen.js";import{ensureInstructionLink as J}from"./instruction-link.js";import{buildInitRegistry as W}from"./wiring.js";import{createPromptPort as q}from"./prompt.js";import{commitInitOutputs as z,findGitRepoRoot as Q}from"./git-commit.js";import{t as O}from"../i18n/index.js";const X={minimal:"minimal",default:"standard",full:"full"},y=["claude"];async function Z(e,n){if(e.harnesses&&e.harnesses.length>0)return[...e.harnesses];if(!e.interactive)return[...y];if(!process.stdin.isTTY||!process.stdout.isTTY)return[...y];const t=await n.multiselect(H,y);return t.length>0?[...t]:[...y]}export async function executeInit(e,n){const{targetDir:t,force:u,interactive:g,preset:S}=e,b=A(),i={directories:[],files:[]},v=[],E=[],T=[],C=[],I=[],o=B(S,e.components),c={...P,...e.hooks},j=n??q(g);g||M.dim(O("init.nonInteractive"));const h=await Z(e,j),U={...e,platform:b},F=W();for(const a of h){const l=new(F.initFor(a))(U);await l.runSurface();const s=l.records;i.directories.push(...s.created.directories),i.files.push(...s.created.files),v.push(...s.skipped),E.push(...s.merged),T.push(...s.updated),C.push(...s.removed)}if(o.claudeMd||o.agentsMd){const a=await J(t,{force:u,interactive:g,confirm:(f,p)=>j.confirm(f,p)});a.backedUpTo&&(M.dim(O("init.backedUp",{path:a.backedUpTo})),i.files.push(a.backedUpTo));const l=X[S]??"standard",s=m.basename(t),r=m.join(t,a.realFile),w=K({template:l,projectName:s});if(u)await d(r,w,"utf-8"),i.files.push(r);else{const f=await D(r);if(f===null)await d(r,w,"utf-8"),i.files.push(r);else{const p=L({template:l,projectName:s});await d(r,$(f,p),"utf-8"),E.push(r)}}}{const a=m.join(t,".weave");await N(a),i.directories.push(a);const l={initVersion:Y,initTimestamp:new Date().toISOString(),preset:S,harnesses:h,components:{settings:o.settings,skills:o.skills,commands:o.commands,agents:o.agents,helpers:o.helpers,mcp:o.mcp,claudeMd:o.claudeMd,agentsMd:o.agentsMd}},s=m.join(a,"config.yaml"),r=Object.entries(l).map(([f,p])=>`${f}: ${typeof p=="object"?JSON.stringify(p):p}`).join(`
1
+ import u from"node:path";import{readFile as A,writeFile as d}from"node:fs/promises";import{detectPlatform as _,resolveComponents as H,DEFAULT_HOOKS as L,DEFAULT_MCP as B,HARNESS_DIRS as G,HARNESS_KEYS as V,ensureDir as D,fileExists as Y,logger as I}from"@weavecode/core";import{templateRegistry as C}from"@weavecode/templates";import{WEAVE_VERSION as K}from"@weavecode/server";import{generateClaudeMd as $,generateClaudeMdSection as q,mergeClaudeMd as J}from"./claudemd-gen.js";import{ensureInstructionLink as W}from"./instruction-link.js";import{buildInitRegistry as z}from"./wiring.js";import{createPromptPort as Q}from"./prompt.js";import{commitInitOutputs as X,findGitRepoRoot as Z}from"./git-commit.js";import{t as N}from"../i18n/index.js";const ee={minimal:"minimal",default:"standard",full:"full"},E=["claude"];async function te(e,a){if(e.harnesses&&e.harnesses.length>0)return[...e.harnesses];if(!e.interactive)return[...E];if(!process.stdin.isTTY||!process.stdout.isTTY)return[...E];const s=await a.multiselect(V,E);return s.length>0?[...s]:[...E]}export async function executeInit(e,a){const{targetDir:s,force:p,interactive:g,preset:S}=e,b=_(),o={directories:[],files:[]},M=[],T=[],y=[],j=[],R=[],r=H(S,e.components),t={...L,...e.hooks},U={...B,...e.mcp},k=a??Q(g);g||I.dim(N("init.nonInteractive"));const h=await te(e,k),O={...e,platform:b},v=z();for(const i of h){const l=new(v.initFor(i))(O);await l.runSurface();const n=l.records;o.directories.push(...n.created.directories),o.files.push(...n.created.files),M.push(...n.skipped),T.push(...n.merged),y.push(...n.updated),j.push(...n.removed)}if(r.claudeMd||r.agentsMd){const i=await W(s,{force:p,interactive:g,confirm:(f,m)=>k.confirm(f,m)});i.backedUpTo&&(I.dim(N("init.backedUp",{path:i.backedUpTo})),o.files.push(i.backedUpTo));const l=ee[S]??"standard",n=u.basename(s),c=u.join(s,i.realFile),w=$({template:l,projectName:n});if(p)await d(c,w,"utf-8"),o.files.push(c);else{const f=await P(c);if(f===null)await d(c,w,"utf-8"),o.files.push(c);else{const m=q({template:l,projectName:n});await d(c,J(f,m),"utf-8"),T.push(c)}}}{const i=u.join(s,".weave");await D(i),o.directories.push(i);const l={initVersion:K,initTimestamp:new Date().toISOString(),preset:S,harnesses:h,components:{settings:r.settings,skills:r.skills,commands:r.commands,agents:r.agents,helpers:r.helpers,mcp:r.mcp,claudeMd:r.claudeMd,agentsMd:r.agentsMd},hooks:t,mcp:U},n=u.join(i,"config.yaml"),c=Object.entries(l).map(([f,m])=>`${f}: ${typeof m=="object"?JSON.stringify(m):m}`).join(`
2
2
  `)+`
3
- `,w=await V(s);await d(s,r,"utf-8"),(w?T:i.files).push(s)}for(const a of h)await R(t,m.join(t,G[a].projectDir),i);await R(t,m.join(t,".weave"),i),await z({targetDir:t,interactive:g,selected:h,prompt:j});const _={skillsCount:k.getByCategory("skill").length,commandsCount:k.getByCategory("command").length,agentsCount:k.getByCategory("agent").length,hooksEnabled:[c.preToolUse,c.postToolUse,c.userPromptSubmit,c.sessionStart,c.stop,c.subagentStop,c.notification,c.preCompact].filter(Boolean).length};return{success:I.length===0,platform:b,created:i,skipped:v,merged:E,updated:T,removed:C,errors:I,summary:_}}export const NESTED_GITIGNORE=`# weave \u2014 generated; do not commit
3
+ `,w=await Y(n);await d(n,c,"utf-8"),(w?y:o.files).push(n)}for(const i of h)await F(s,u.join(s,G[i].projectDir),o);await F(s,u.join(s,".weave"),o),await X({targetDir:s,interactive:g,selected:h,prompt:k});const x={skillsCount:C.getByCategory("skill").length,commandsCount:C.getByCategory("command").length,agentsCount:C.getByCategory("agent").length,hooksEnabled:[t.preToolUse,t.postToolUse,t.userPromptSubmit,t.sessionStart,t.stop,t.stopFailure,t.subagentStop,t.subagentStart,t.notification,t.postToolUseFailure,t.permissionRequest,t.permissionDenied,t.preCompact,t.sessionEnd,t.preModelSwitch].filter(Boolean).length};return{success:R.length===0,platform:b,created:o,skipped:M,merged:T,updated:y,removed:j,errors:R,summary:x}}export const NESTED_GITIGNORE=`# weave \u2014 generated; do not commit
4
4
  *
5
5
  !.gitignore
6
- `;async function R(e,n,t){if(!await Q(e))return;const u=m.join(n,".gitignore");await D(u)===null&&(await N(n),await d(u,NESTED_GITIGNORE,"utf-8"),t.files.push(u))}async function D(e){try{return await x(e,"utf-8")}catch(n){if(ee(n))return null;throw n}}function ee(e){return typeof e=="object"&&e!==null&&e.code==="ENOENT"}
6
+ `;async function F(e,a,s){if(!await Z(e))return;const p=u.join(a,".gitignore");await P(p)===null&&(await D(a),await d(p,NESTED_GITIGNORE,"utf-8"),s.files.push(p))}async function P(e){try{return await A(e,"utf-8")}catch(a){if(se(a))return null;throw a}}function se(e){return typeof e=="object"&&e!==null&&e.code==="ENOENT"}
@@ -1,2 +1,2 @@
1
- import f from"node:path";import{execFile as y}from"node:child_process";import{promisify as S}from"node:util";import{lstat as E,stat as I}from"node:fs/promises";import{HARNESS_DIRS as T,INSTRUCTION_FILES as j,logger as c}from"@weavecode/core";import{t as s}from"../i18n/index.js";export async function findGitRepoRoot(i){let e=f.resolve(i);for(;;){try{return(await I(f.join(e,".git"))).isDirectory()?e:null}catch{}const r=f.dirname(e);if(r===e)return null;e=r}}const D=S(y);export const defaultGitExec=async(i,e,r)=>{try{const{stdout:o,stderr:t}=await D(i,e,{cwd:r.cwd,windowsHide:!0,timeout:1e4,maxBuffer:1048576});return{stdout:String(o),stderr:String(t),code:0}}catch(o){const t=o;if(typeof t.code=="number")return{stdout:String(t.stdout??""),stderr:String(t.stderr??""),code:t.code};throw o}};export async function collectCommitPaths(i,e){const r=[...j,".mcp.json",...e.map(t=>T[t].projectDir),".weave"],o=[];for(const t of r)try{await E(f.join(i,t)),o.includes(t)||o.push(t)}catch{}return o}export const COMMIT_MESSAGE="chore: weave init \u751F\u6210\u521D\u59CB\u5316\u4EA7\u7269";export async function commitInitOutputs(i){try{return await v(i)}catch(e){return c.warn(s("init.commit.failed",{error:e instanceof Error?e.message:String(e)})),{status:"failed"}}}async function v({targetDir:i,interactive:e,selected:r,prompt:o,execGit:t=defaultGitExec}){if(!await findGitRepoRoot(i))return{status:"not-repo"};if(!e||!process.stdin.isTTY||!process.stdout.isTTY)return{status:"skipped"};const n=await t("git",["diff","--cached","--quiet"],{cwd:i});if(n.code!==0){if(n.code===1)return c.dim(s("init.commit.preStaged")),{status:"skipped"};throw new Error(n.stderr.trim()||`git diff --cached exited ${n.code}`)}const a=await collectCommitPaths(i,r);if(a.length===0)return{status:"no-changes"};const d=await t("git",["status","--porcelain","--",...a],{cwd:i});if(d.code!==0)throw new Error(d.stderr.trim()||`git status exited ${d.code}`);if(!d.stdout.trim())return{status:"no-changes"};const x=s("init.commit.detail",{paths:a.join(", ")});if(!await o.confirm(s("init.commit.question"),x))return{status:"declined"};const w=[];for(const l of a)(await t("git",["add","--",l],{cwd:i})).code!==0&&w.push(l);w.length>0&&c.warn(s("init.commit.pathIgnored",{paths:w.join(", ")}));const u=await t("git",["diff","--cached","--quiet"],{cwd:i});if(u.code===0)return c.warn(s("init.commit.failed",{error:"nothing staged after git add"})),{status:"no-changes"};if(u.code!==1)throw new Error(u.stderr.trim()||`git diff --cached exited ${u.code}`);const p=(await t("git",["diff","--cached","--name-only"],{cwd:i})).stdout.split(`
2
- `).filter(Boolean).length,m=await t("git",["commit","-m",COMMIT_MESSAGE],{cwd:i});if(m.code!==0)throw new Error(m.stderr.trim()||m.stdout.trim()||`git commit exited ${m.code}`);const g=await t("git",["rev-parse","--short","HEAD"],{cwd:i}),h=g.code===0?g.stdout.trim():"";return c.success(s("init.commit.done",{sha:h,count:p})),{status:"committed",sha:h,count:p}}
1
+ import f from"node:path";import{execFile as S}from"node:child_process";import{promisify as E}from"node:util";import{lstat as x,stat as I}from"node:fs/promises";import{HARNESS_DIRS as T,INSTRUCTION_FILES as j,logger as n}from"@weavecode/core";import{t as s}from"../i18n/index.js";export async function findGitRepoRoot(o){let i=f.resolve(o);for(;;){try{return(await I(f.join(i,".git"))).isDirectory()?i:null}catch{}const e=f.dirname(i);if(e===i)return null;i=e}}const R=E(S);export const defaultGitExec=async(o,i,e)=>{try{const{stdout:r,stderr:t}=await R(o,i,{cwd:e.cwd,windowsHide:!0,timeout:1e4,maxBuffer:1048576});return{stdout:String(r),stderr:String(t),code:0}}catch(r){const t=r;if(typeof t.code=="number")return{stdout:String(t.stdout??""),stderr:String(t.stderr??""),code:t.code};throw r}};export async function collectCommitPaths(o,i){const e=[...j,".mcp.json",...i.map(t=>T[t].projectDir),".weave"],r=[];for(const t of e)try{await x(f.join(o,t)),r.includes(t)||r.push(t)}catch{}return r}export const COMMIT_MESSAGE="chore: weave init \u751F\u6210\u521D\u59CB\u5316\u4EA7\u7269";export async function commitInitOutputs(o){try{return await v(o)}catch(i){return n.warn(s("init.commit.failed",{error:i instanceof Error?i.message:String(i)})),{status:"failed"}}}async function v({targetDir:o,interactive:i,selected:e,prompt:r,execGit:t=defaultGitExec}){if(!await findGitRepoRoot(o))return{status:"not-repo"};if(!i||!process.stdin.isTTY||!process.stdout.isTTY)return{status:"skipped"};const c=await t("git",["diff","--cached","--quiet"],{cwd:o});if(c.code!==0){if(c.code===1)return n.dim(s("init.commit.preStaged")),{status:"skipped"};throw new Error(c.stderr.trim()||`git diff --cached exited ${c.code}`)}const d=await collectCommitPaths(o,e);if(d.length===0)return{status:"no-changes"};const a=await t("git",["status","--porcelain","--",...d],{cwd:o});if(a.code!==0)throw new Error(a.stderr.trim()||`git status exited ${a.code}`);if(!a.stdout.trim())return{status:"no-changes"};const y=s("init.commit.detail",{paths:d.join(", ")});if(!await r.confirm(s("init.commit.question"),y))return{status:"declined"};const p=[];for(const g of d)(await t("git",["add","--",g],{cwd:o})).code!==0&&p.push(g);p.length>0&&n.warn(s("init.commit.pathIgnored",{paths:p.join(", ")}));const m=await t("git",["diff","--cached","--quiet"],{cwd:o});if(m.code===0)return n.warn(s("init.commit.failed",{error:"nothing staged after git add"})),{status:"no-changes"};if(m.code!==1)throw new Error(m.stderr.trim()||`git diff --cached exited ${m.code}`);const w=(await t("git",["diff","--cached","--name-only"],{cwd:o})).stdout.split(`
2
+ `).filter(Boolean).length,u=await t("git",["commit","-m",COMMIT_MESSAGE],{cwd:o});if(u.code!==0)throw new Error(u.stderr.trim()||u.stdout.trim()||`git commit exited ${u.code}`);const h=await t("git",["rev-parse","--short","HEAD"],{cwd:o}),l=h.code===0?h.stdout.trim():"";return n.success(s("init.commit.done",{sha:l,count:w})),{status:"committed",sha:l,count:w}}