synabun 2.0.7 → 2.0.9

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 (346) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +1 -1
  3. package/hooks/claude-code/post-plan.mjs +6 -30
  4. package/hooks/claude-code/session-start.mjs +1 -4
  5. package/hooks/claude-code/shared.mjs +106 -72
  6. package/lib/package-processes.js +670 -0
  7. package/lib/runtime-dependencies.js +225 -0
  8. package/mcp-server/dist/services/browser-bench.d.ts +1 -1
  9. package/mcp-server/dist/services/browser-bench.d.ts.map +1 -1
  10. package/mcp-server/dist/services/browser-bench.js +1 -1
  11. package/mcp-server/dist/services/browser-bench.js.map +1 -1
  12. package/mcp-server/dist/services/categories.d.ts +35 -2
  13. package/mcp-server/dist/services/categories.d.ts.map +1 -1
  14. package/mcp-server/dist/services/categories.js +77 -33
  15. package/mcp-server/dist/services/categories.js.map +1 -1
  16. package/mcp-server/dist/services/desktop-bench.d.ts +7 -7
  17. package/mcp-server/dist/services/desktop-bench.d.ts.map +1 -1
  18. package/mcp-server/dist/services/desktop-bench.js +1 -1
  19. package/mcp-server/dist/services/desktop-bench.js.map +1 -1
  20. package/mcp-server/dist/tools/agents.d.ts +1 -1
  21. package/mcp-server/dist/tools/agents.d.ts.map +1 -1
  22. package/mcp-server/dist/tools/agents.js +1 -1
  23. package/mcp-server/dist/tools/agents.js.map +1 -1
  24. package/mcp-server/dist/tools/bluesky.js +1 -1
  25. package/mcp-server/dist/tools/bluesky.js.map +1 -1
  26. package/mcp-server/dist/tools/browser-advanced.d.ts +1 -1
  27. package/mcp-server/dist/tools/browser-advanced.d.ts.map +1 -1
  28. package/mcp-server/dist/tools/browser-advanced.js +1 -1
  29. package/mcp-server/dist/tools/browser-advanced.js.map +1 -1
  30. package/mcp-server/dist/tools/browser-batch.d.ts +1 -1
  31. package/mcp-server/dist/tools/browser-batch.d.ts.map +1 -1
  32. package/mcp-server/dist/tools/browser-batch.js +1 -1
  33. package/mcp-server/dist/tools/browser-batch.js.map +1 -1
  34. package/mcp-server/dist/tools/browser-cheatsheet.d.ts +1 -1
  35. package/mcp-server/dist/tools/browser-cheatsheet.d.ts.map +1 -1
  36. package/mcp-server/dist/tools/browser-cheatsheet.js +1 -1
  37. package/mcp-server/dist/tools/browser-cheatsheet.js.map +1 -1
  38. package/mcp-server/dist/tools/browser-interact.d.ts +1 -1
  39. package/mcp-server/dist/tools/browser-interact.d.ts.map +1 -1
  40. package/mcp-server/dist/tools/browser-interact.js +1 -1
  41. package/mcp-server/dist/tools/browser-interact.js.map +1 -1
  42. package/mcp-server/dist/tools/browser-navigate.d.ts +1 -1
  43. package/mcp-server/dist/tools/browser-navigate.d.ts.map +1 -1
  44. package/mcp-server/dist/tools/browser-navigate.js +1 -1
  45. package/mcp-server/dist/tools/browser-navigate.js.map +1 -1
  46. package/mcp-server/dist/tools/browser-observe.d.ts +1 -1
  47. package/mcp-server/dist/tools/browser-observe.d.ts.map +1 -1
  48. package/mcp-server/dist/tools/browser-observe.js +1 -1
  49. package/mcp-server/dist/tools/browser-observe.js.map +1 -1
  50. package/mcp-server/dist/tools/card-tools.d.ts +1 -1
  51. package/mcp-server/dist/tools/card-tools.d.ts.map +1 -1
  52. package/mcp-server/dist/tools/card-tools.js +1 -1
  53. package/mcp-server/dist/tools/card-tools.js.map +1 -1
  54. package/mcp-server/dist/tools/category.d.ts +1 -1
  55. package/mcp-server/dist/tools/category.d.ts.map +1 -1
  56. package/mcp-server/dist/tools/category.js +5 -1
  57. package/mcp-server/dist/tools/category.js.map +1 -1
  58. package/mcp-server/dist/tools/choice.d.ts +1 -1
  59. package/mcp-server/dist/tools/choice.d.ts.map +1 -1
  60. package/mcp-server/dist/tools/choice.js +1 -1
  61. package/mcp-server/dist/tools/choice.js.map +1 -1
  62. package/mcp-server/dist/tools/computer.d.ts +1 -1
  63. package/mcp-server/dist/tools/computer.d.ts.map +1 -1
  64. package/mcp-server/dist/tools/computer.js +1 -1
  65. package/mcp-server/dist/tools/computer.js.map +1 -1
  66. package/mcp-server/dist/tools/discord-channel.d.ts +1 -1
  67. package/mcp-server/dist/tools/discord-channel.d.ts.map +1 -1
  68. package/mcp-server/dist/tools/discord-channel.js +1 -1
  69. package/mcp-server/dist/tools/discord-channel.js.map +1 -1
  70. package/mcp-server/dist/tools/discord-guild.d.ts +1 -1
  71. package/mcp-server/dist/tools/discord-guild.d.ts.map +1 -1
  72. package/mcp-server/dist/tools/discord-guild.js +1 -1
  73. package/mcp-server/dist/tools/discord-guild.js.map +1 -1
  74. package/mcp-server/dist/tools/discord-member.d.ts +1 -1
  75. package/mcp-server/dist/tools/discord-member.d.ts.map +1 -1
  76. package/mcp-server/dist/tools/discord-member.js +1 -1
  77. package/mcp-server/dist/tools/discord-member.js.map +1 -1
  78. package/mcp-server/dist/tools/discord-message.d.ts +1 -1
  79. package/mcp-server/dist/tools/discord-message.d.ts.map +1 -1
  80. package/mcp-server/dist/tools/discord-message.js +1 -1
  81. package/mcp-server/dist/tools/discord-message.js.map +1 -1
  82. package/mcp-server/dist/tools/discord-onboarding.d.ts +1 -1
  83. package/mcp-server/dist/tools/discord-onboarding.d.ts.map +1 -1
  84. package/mcp-server/dist/tools/discord-onboarding.js +1 -1
  85. package/mcp-server/dist/tools/discord-onboarding.js.map +1 -1
  86. package/mcp-server/dist/tools/discord-role.d.ts +1 -1
  87. package/mcp-server/dist/tools/discord-role.d.ts.map +1 -1
  88. package/mcp-server/dist/tools/discord-role.js +1 -1
  89. package/mcp-server/dist/tools/discord-role.js.map +1 -1
  90. package/mcp-server/dist/tools/discord-thread.d.ts +1 -1
  91. package/mcp-server/dist/tools/discord-thread.d.ts.map +1 -1
  92. package/mcp-server/dist/tools/discord-thread.js +1 -1
  93. package/mcp-server/dist/tools/discord-thread.js.map +1 -1
  94. package/mcp-server/dist/tools/discord-webhook.d.ts +1 -1
  95. package/mcp-server/dist/tools/discord-webhook.d.ts.map +1 -1
  96. package/mcp-server/dist/tools/discord-webhook.js +1 -1
  97. package/mcp-server/dist/tools/discord-webhook.js.map +1 -1
  98. package/mcp-server/dist/tools/fb-groups.d.ts +1 -1
  99. package/mcp-server/dist/tools/fb-groups.d.ts.map +1 -1
  100. package/mcp-server/dist/tools/fb-groups.js +1 -1
  101. package/mcp-server/dist/tools/fb-groups.js.map +1 -1
  102. package/mcp-server/dist/tools/forget.d.ts +1 -1
  103. package/mcp-server/dist/tools/forget.d.ts.map +1 -1
  104. package/mcp-server/dist/tools/forget.js +1 -1
  105. package/mcp-server/dist/tools/forget.js.map +1 -1
  106. package/mcp-server/dist/tools/git-tools.d.ts +1 -1
  107. package/mcp-server/dist/tools/git-tools.d.ts.map +1 -1
  108. package/mcp-server/dist/tools/git-tools.js +1 -1
  109. package/mcp-server/dist/tools/git-tools.js.map +1 -1
  110. package/mcp-server/dist/tools/gsc/experience.d.ts +1 -1
  111. package/mcp-server/dist/tools/gsc/experience.d.ts.map +1 -1
  112. package/mcp-server/dist/tools/gsc/experience.js +1 -1
  113. package/mcp-server/dist/tools/gsc/experience.js.map +1 -1
  114. package/mcp-server/dist/tools/gsc/indexing.d.ts +1 -1
  115. package/mcp-server/dist/tools/gsc/indexing.d.ts.map +1 -1
  116. package/mcp-server/dist/tools/gsc/indexing.js +1 -1
  117. package/mcp-server/dist/tools/gsc/indexing.js.map +1 -1
  118. package/mcp-server/dist/tools/gsc/inspect.d.ts +1 -1
  119. package/mcp-server/dist/tools/gsc/inspect.d.ts.map +1 -1
  120. package/mcp-server/dist/tools/gsc/inspect.js +1 -1
  121. package/mcp-server/dist/tools/gsc/inspect.js.map +1 -1
  122. package/mcp-server/dist/tools/gsc/navigate.d.ts +1 -1
  123. package/mcp-server/dist/tools/gsc/navigate.d.ts.map +1 -1
  124. package/mcp-server/dist/tools/gsc/navigate.js +1 -1
  125. package/mcp-server/dist/tools/gsc/navigate.js.map +1 -1
  126. package/mcp-server/dist/tools/gsc/performance.d.ts +1 -1
  127. package/mcp-server/dist/tools/gsc/performance.d.ts.map +1 -1
  128. package/mcp-server/dist/tools/gsc/performance.js +1 -1
  129. package/mcp-server/dist/tools/gsc/performance.js.map +1 -1
  130. package/mcp-server/dist/tools/gsc/settings.d.ts +1 -1
  131. package/mcp-server/dist/tools/gsc/settings.d.ts.map +1 -1
  132. package/mcp-server/dist/tools/gsc/settings.js +1 -1
  133. package/mcp-server/dist/tools/gsc/settings.js.map +1 -1
  134. package/mcp-server/dist/tools/image-tools.d.ts +1 -1
  135. package/mcp-server/dist/tools/image-tools.d.ts.map +1 -1
  136. package/mcp-server/dist/tools/image-tools.js +1 -1
  137. package/mcp-server/dist/tools/image-tools.js.map +1 -1
  138. package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +1 -1
  139. package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +1 -1
  140. package/mcp-server/dist/tools/leonardo-browser-tools.js +1 -1
  141. package/mcp-server/dist/tools/leonardo-browser-tools.js.map +1 -1
  142. package/mcp-server/dist/tools/loop.d.ts +1 -1
  143. package/mcp-server/dist/tools/loop.d.ts.map +1 -1
  144. package/mcp-server/dist/tools/loop.js +1 -1
  145. package/mcp-server/dist/tools/loop.js.map +1 -1
  146. package/mcp-server/dist/tools/memories.d.ts +1 -1
  147. package/mcp-server/dist/tools/memories.d.ts.map +1 -1
  148. package/mcp-server/dist/tools/memories.js +1 -1
  149. package/mcp-server/dist/tools/memories.js.map +1 -1
  150. package/mcp-server/dist/tools/morelogin.d.ts +1 -1
  151. package/mcp-server/dist/tools/morelogin.d.ts.map +1 -1
  152. package/mcp-server/dist/tools/morelogin.js +1 -1
  153. package/mcp-server/dist/tools/morelogin.js.map +1 -1
  154. package/mcp-server/dist/tools/profile.d.ts +1 -1
  155. package/mcp-server/dist/tools/profile.d.ts.map +1 -1
  156. package/mcp-server/dist/tools/profile.js +1 -1
  157. package/mcp-server/dist/tools/profile.js.map +1 -1
  158. package/mcp-server/dist/tools/recall.d.ts +1 -1
  159. package/mcp-server/dist/tools/recall.d.ts.map +1 -1
  160. package/mcp-server/dist/tools/recall.js +1 -1
  161. package/mcp-server/dist/tools/recall.js.map +1 -1
  162. package/mcp-server/dist/tools/reflect.d.ts +1 -1
  163. package/mcp-server/dist/tools/reflect.d.ts.map +1 -1
  164. package/mcp-server/dist/tools/reflect.js +1 -1
  165. package/mcp-server/dist/tools/reflect.js.map +1 -1
  166. package/mcp-server/dist/tools/remember.d.ts +1 -1
  167. package/mcp-server/dist/tools/remember.d.ts.map +1 -1
  168. package/mcp-server/dist/tools/remember.js +13 -11
  169. package/mcp-server/dist/tools/remember.js.map +1 -1
  170. package/mcp-server/dist/tools/restore.d.ts +1 -1
  171. package/mcp-server/dist/tools/restore.d.ts.map +1 -1
  172. package/mcp-server/dist/tools/restore.js +1 -1
  173. package/mcp-server/dist/tools/restore.js.map +1 -1
  174. package/mcp-server/dist/tools/style-guide-tools.d.ts +1 -1
  175. package/mcp-server/dist/tools/style-guide-tools.d.ts.map +1 -1
  176. package/mcp-server/dist/tools/style-guide-tools.js +1 -1
  177. package/mcp-server/dist/tools/style-guide-tools.js.map +1 -1
  178. package/mcp-server/dist/tools/sync.d.ts +1 -1
  179. package/mcp-server/dist/tools/sync.d.ts.map +1 -1
  180. package/mcp-server/dist/tools/sync.js +1 -1
  181. package/mcp-server/dist/tools/sync.js.map +1 -1
  182. package/mcp-server/dist/tools/tictactoe-tools.d.ts +1 -1
  183. package/mcp-server/dist/tools/tictactoe-tools.d.ts.map +1 -1
  184. package/mcp-server/dist/tools/tictactoe-tools.js +1 -1
  185. package/mcp-server/dist/tools/tictactoe-tools.js.map +1 -1
  186. package/mcp-server/dist/tools/utils.d.ts +1 -1
  187. package/mcp-server/dist/tools/utils.d.ts.map +1 -1
  188. package/mcp-server/dist/tools/utils.js +1 -1
  189. package/mcp-server/dist/tools/utils.js.map +1 -1
  190. package/mcp-server/dist/tools/whatsapp-send-file.d.ts +1 -1
  191. package/mcp-server/dist/tools/whatsapp-send-file.d.ts.map +1 -1
  192. package/mcp-server/dist/tools/whatsapp-send-file.js +1 -1
  193. package/mcp-server/dist/tools/whatsapp-send-file.js.map +1 -1
  194. package/mcp-server/dist/tools/whiteboard-tools.d.ts +3 -3
  195. package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -1
  196. package/mcp-server/dist/tools/whiteboard-tools.js +1 -1
  197. package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -1
  198. package/mcp-server/dist/tools/youtube/analytics.d.ts +1 -1
  199. package/mcp-server/dist/tools/youtube/analytics.d.ts.map +1 -1
  200. package/mcp-server/dist/tools/youtube/analytics.js +1 -1
  201. package/mcp-server/dist/tools/youtube/analytics.js.map +1 -1
  202. package/mcp-server/dist/tools/youtube/download.d.ts +1 -1
  203. package/mcp-server/dist/tools/youtube/download.d.ts.map +1 -1
  204. package/mcp-server/dist/tools/youtube/download.js +1 -1
  205. package/mcp-server/dist/tools/youtube/download.js.map +1 -1
  206. package/mcp-server/dist/tools/youtube/media.d.ts +1 -1
  207. package/mcp-server/dist/tools/youtube/media.d.ts.map +1 -1
  208. package/mcp-server/dist/tools/youtube/media.js +1 -1
  209. package/mcp-server/dist/tools/youtube/media.js.map +1 -1
  210. package/mcp-server/dist/tools/youtube/metadata.d.ts +1 -1
  211. package/mcp-server/dist/tools/youtube/metadata.d.ts.map +1 -1
  212. package/mcp-server/dist/tools/youtube/metadata.js +1 -1
  213. package/mcp-server/dist/tools/youtube/metadata.js.map +1 -1
  214. package/mcp-server/dist/tools/youtube/navigate.d.ts +1 -1
  215. package/mcp-server/dist/tools/youtube/navigate.d.ts.map +1 -1
  216. package/mcp-server/dist/tools/youtube/navigate.js +1 -1
  217. package/mcp-server/dist/tools/youtube/navigate.js.map +1 -1
  218. package/mcp-server/dist/tools/youtube/playlist.d.ts +1 -1
  219. package/mcp-server/dist/tools/youtube/playlist.d.ts.map +1 -1
  220. package/mcp-server/dist/tools/youtube/playlist.js +1 -1
  221. package/mcp-server/dist/tools/youtube/playlist.js.map +1 -1
  222. package/mcp-server/dist/tools/youtube/schedule.d.ts +1 -1
  223. package/mcp-server/dist/tools/youtube/schedule.d.ts.map +1 -1
  224. package/mcp-server/dist/tools/youtube/schedule.js +1 -1
  225. package/mcp-server/dist/tools/youtube/schedule.js.map +1 -1
  226. package/mcp-server/dist/tools/youtube/source.d.ts +1 -1
  227. package/mcp-server/dist/tools/youtube/source.d.ts.map +1 -1
  228. package/mcp-server/dist/tools/youtube/source.js +1 -1
  229. package/mcp-server/dist/tools/youtube/source.js.map +1 -1
  230. package/mcp-server/dist/tools/youtube/upload.d.ts +1 -1
  231. package/mcp-server/dist/tools/youtube/upload.d.ts.map +1 -1
  232. package/mcp-server/dist/tools/youtube/upload.js +4 -9
  233. package/mcp-server/dist/tools/youtube/upload.js.map +1 -1
  234. package/mcp-server/dist/tui.js +16 -4
  235. package/mcp-server/dist/tui.js.map +1 -1
  236. package/mcp-server/package-lock.json +3 -3
  237. package/mcp-server/package.json +3 -3
  238. package/mcp-server/src/services/browser-bench.ts +1 -1
  239. package/mcp-server/src/services/categories.ts +77 -32
  240. package/mcp-server/src/services/desktop-bench.ts +1 -1
  241. package/mcp-server/src/tools/agents.ts +1 -1
  242. package/mcp-server/src/tools/bluesky.ts +1 -1
  243. package/mcp-server/src/tools/browser-advanced.ts +1 -1
  244. package/mcp-server/src/tools/browser-batch.ts +1 -1
  245. package/mcp-server/src/tools/browser-cheatsheet.ts +1 -1
  246. package/mcp-server/src/tools/browser-interact.ts +1 -1
  247. package/mcp-server/src/tools/browser-navigate.ts +1 -1
  248. package/mcp-server/src/tools/browser-observe.ts +1 -1
  249. package/mcp-server/src/tools/card-tools.ts +1 -1
  250. package/mcp-server/src/tools/category.ts +6 -1
  251. package/mcp-server/src/tools/choice.ts +1 -1
  252. package/mcp-server/src/tools/computer.ts +1 -1
  253. package/mcp-server/src/tools/discord-channel.ts +1 -1
  254. package/mcp-server/src/tools/discord-guild.ts +1 -1
  255. package/mcp-server/src/tools/discord-member.ts +1 -1
  256. package/mcp-server/src/tools/discord-message.ts +1 -1
  257. package/mcp-server/src/tools/discord-onboarding.ts +1 -1
  258. package/mcp-server/src/tools/discord-role.ts +1 -1
  259. package/mcp-server/src/tools/discord-thread.ts +1 -1
  260. package/mcp-server/src/tools/discord-webhook.ts +1 -1
  261. package/mcp-server/src/tools/fb-groups.ts +1 -1
  262. package/mcp-server/src/tools/forget.ts +1 -1
  263. package/mcp-server/src/tools/git-tools.ts +1 -1
  264. package/mcp-server/src/tools/gsc/experience.ts +1 -1
  265. package/mcp-server/src/tools/gsc/indexing.ts +1 -1
  266. package/mcp-server/src/tools/gsc/inspect.ts +1 -1
  267. package/mcp-server/src/tools/gsc/navigate.ts +1 -1
  268. package/mcp-server/src/tools/gsc/performance.ts +1 -1
  269. package/mcp-server/src/tools/gsc/settings.ts +1 -1
  270. package/mcp-server/src/tools/image-tools.ts +1 -1
  271. package/mcp-server/src/tools/leonardo-browser-tools.ts +1 -1
  272. package/mcp-server/src/tools/loop.ts +1 -1
  273. package/mcp-server/src/tools/memories.ts +1 -1
  274. package/mcp-server/src/tools/morelogin.ts +1 -1
  275. package/mcp-server/src/tools/profile.ts +1 -1
  276. package/mcp-server/src/tools/recall.ts +1 -1
  277. package/mcp-server/src/tools/reflect.ts +1 -1
  278. package/mcp-server/src/tools/remember.ts +13 -12
  279. package/mcp-server/src/tools/restore.ts +1 -1
  280. package/mcp-server/src/tools/style-guide-tools.ts +1 -1
  281. package/mcp-server/src/tools/sync.ts +1 -1
  282. package/mcp-server/src/tools/tictactoe-tools.ts +1 -1
  283. package/mcp-server/src/tools/utils.ts +1 -1
  284. package/mcp-server/src/tools/whatsapp-send-file.ts +1 -1
  285. package/mcp-server/src/tools/whiteboard-tools.ts +1 -1
  286. package/mcp-server/src/tools/youtube/analytics.ts +1 -1
  287. package/mcp-server/src/tools/youtube/download.ts +1 -1
  288. package/mcp-server/src/tools/youtube/media.ts +1 -1
  289. package/mcp-server/src/tools/youtube/metadata.ts +1 -1
  290. package/mcp-server/src/tools/youtube/navigate.ts +1 -1
  291. package/mcp-server/src/tools/youtube/playlist.ts +1 -1
  292. package/mcp-server/src/tools/youtube/schedule.ts +1 -1
  293. package/mcp-server/src/tools/youtube/source.ts +1 -1
  294. package/mcp-server/src/tools/youtube/upload.ts +4 -12
  295. package/mcp-server/src/tui.ts +22 -9
  296. package/neural-interface/i18n/en.json +18 -0
  297. package/neural-interface/i18n/pt-BR.json +18 -0
  298. package/neural-interface/lib/agent-sandbox-elevation.js +102 -0
  299. package/neural-interface/lib/agent-sandbox-setting.js +57 -0
  300. package/neural-interface/lib/assistant-api.js +19 -0
  301. package/neural-interface/lib/assistant-route-gate-codex.js +3 -1
  302. package/neural-interface/lib/assistant-runtime.js +5 -1
  303. package/neural-interface/lib/codex-account-auth.js +4 -2
  304. package/neural-interface/lib/codex-accounts.js +14 -1
  305. package/neural-interface/lib/codex-settings-schema.js +5 -3
  306. package/neural-interface/lib/exec-loop-command.js +3 -1
  307. package/neural-interface/lib/install-details.js +23 -5
  308. package/neural-interface/lib/native-loop-providers.js +6 -1
  309. package/neural-interface/lib/provider-panel-terminal-auth.js +3 -2
  310. package/neural-interface/lib/session-indexer.js +3 -1
  311. package/neural-interface/lib/session-title-generator.js +2 -0
  312. package/neural-interface/package-lock.json +2 -2
  313. package/neural-interface/package.json +1 -1
  314. package/neural-interface/public/shared/account-menu.js +4 -1
  315. package/neural-interface/public/shared/account-usage.js +62 -2
  316. package/neural-interface/public/shared/account-view.js +2 -1
  317. package/neural-interface/public/shared/assistant/asst-account-menu.js +298 -0
  318. package/neural-interface/public/shared/assistant/asst-api.js +7 -0
  319. package/neural-interface/public/shared/assistant/asst-brain-picker.js +232 -75
  320. package/neural-interface/public/shared/assistant/asst-menu.js +204 -77
  321. package/neural-interface/public/shared/assistant/asst-model-chip.js +135 -0
  322. package/neural-interface/public/shared/assistant/asst-panel.js +39 -2
  323. package/neural-interface/public/shared/assistant/asst-styles.js +66 -17
  324. package/neural-interface/public/shared/cdx/cdx-panel.js +1 -1
  325. package/neural-interface/public/shared/cdx/cdx-styles.js +45 -5
  326. package/neural-interface/public/shared/cdx/cdx-tabs.js +3 -0
  327. package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +4 -1
  328. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +4 -1
  329. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +51 -2
  330. package/neural-interface/public/shared/showcase-privacy.js +2 -1
  331. package/neural-interface/public/shared/styles.css +3 -1
  332. package/neural-interface/public/shared/ui-claude-panel.js +50 -4
  333. package/neural-interface/public/shared/ui-explorer.js +2 -0
  334. package/neural-interface/public/shared/ui-sync.js +2 -0
  335. package/neural-interface/public/shared/ui-update.js +4 -2
  336. package/neural-interface/scripts/rebuild-pty.js +14 -2
  337. package/neural-interface/server.js +180 -86
  338. package/npm-shrinkwrap.json +4424 -0
  339. package/package.json +54 -2
  340. package/postinstall.js +61 -47
  341. package/preuninstall.js +8 -35
  342. package/setup.js +76 -44
  343. package/skills/synabun/modules/idea.md +1 -1
  344. package/skills/synabun/modules/schedule.md +1 -1
  345. package/updater.cmd +2 -2
  346. package/updater.mjs +97 -3
@@ -166,39 +166,12 @@ function saveCategoriesToDisk(categories: CustomCategory[]): void {
166
166
  });
167
167
  }
168
168
 
169
- /**
170
- * Built-in categories that must always exist (created if missing on startup).
171
- * youtube-videos is the trailer dedup ledger that youtube_upload writes and
172
- * youtube_source reads — pre-seeding it means manual remember / the UI / routing
173
- * all see it, not just the validation-bypassing auto-record path.
174
- */
175
- const BUILTIN_CATEGORIES: Array<{ name: string; description: string; parent?: string }> = [
176
- {
177
- name: 'youtube-videos',
178
- description: 'One memory per uploaded YouTube trailer — the dedup ledger. Written automatically by youtube_upload; tagged with canonical source ids (igdb:/appid:/ytid:/name:) that youtube_source reads to skip already-posted trailers. Do not store anything else here.',
179
- parent: 'social',
180
- },
181
- ];
182
-
183
- /** Append any missing built-in categories and persist. Idempotent. */
184
- function ensureBuiltinCategories(): void {
185
- const cats = loadCategoriesFromDisk();
186
- const have = new Set(cats.map((c) => c.name));
187
- let changed = false;
188
- for (const b of BUILTIN_CATEGORIES) {
189
- if (have.has(b.name)) continue;
190
- const cat: CustomCategory = { name: b.name, description: b.description, created_at: new Date().toISOString() };
191
- if (b.parent && have.has(b.parent)) cat.parent = b.parent; // only attach the parent if it exists
192
- cats.push(cat);
193
- changed = true;
194
- }
195
- if (changed) saveCategoriesToDisk(cats);
196
- }
197
-
198
169
  /**
199
170
  * Initialize the local category cache for the active connection.
200
- * Seeds the cache file from SQLite (source of truth) or empty, then ensures the
201
- * built-in categories exist — even when the cache file already existed.
171
+ * Seeds the cache file from SQLite (source of truth), or empty when the DB has none.
172
+ * No category is created here: a fresh install has none. A project's defaults are
173
+ * made when the project is added, a feature's category the first time it saves
174
+ * (ensureCategory / ensureFeatureCategory).
202
175
  */
203
176
  export async function initCategoryCache(): Promise<void> {
204
177
  const filePath = getCategoriesPath();
@@ -214,10 +187,82 @@ export async function initCategoryCache(): Promise<void> {
214
187
  fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
215
188
  }
216
189
 
217
- ensureBuiltinCategories();
218
190
  invalidateCategoryCache();
219
191
  }
220
192
 
193
+ /**
194
+ * Categories that features save into by name. None exists on a fresh install:
195
+ * each is created the first time something is stored in it (ensureFeatureCategory),
196
+ * whether the writer is SynaBun itself or a model told to use that name by a hook.
197
+ * Keep the descriptions in step with hooks/claude-code/shared.mjs FEATURE_CATEGORIES.
198
+ */
199
+ export const FEATURE_CATEGORIES: Record<string, { description: string; is_parent?: boolean }> = {
200
+ conversations: {
201
+ description: 'Indexed conversation sessions with compacted summaries for cross-session recall: session metadata (date, branch, session id) and topic summaries, so past conversations can be found by asking for them.',
202
+ },
203
+ 'communication-style': {
204
+ description: 'How the user communicates and works: patterns in how they give instructions, correct, decide and signal frustration, and their stated preferences.',
205
+ },
206
+ plans: {
207
+ description: 'Implementation plans stored after plan mode approval, one child category per project.',
208
+ is_parent: true,
209
+ },
210
+ uncategorized: {
211
+ description: 'Fallback for memories stored without a category.',
212
+ },
213
+ ideas: {
214
+ description: 'Brainstormed features, experiments, and creative explorations (the /synabun idea skill).',
215
+ },
216
+ schedules: {
217
+ description: 'One memory per schedule created from a conversation (the /synabun schedule skill): name, template, schedule id, cron, group, profile and model.',
218
+ },
219
+ 'youtube-videos': {
220
+ description: 'One memory per uploaded YouTube trailer — the dedup ledger. Written automatically by youtube_upload; tagged with canonical source ids (igdb:/appid:/ytid:/name:) that youtube_source reads to skip already-posted trailers. Do not store anything else here.',
221
+ },
222
+ };
223
+
224
+ /**
225
+ * Create a category the first time something saves into it. Idempotent: an existing
226
+ * category is left exactly as it is. The parent is attached only when it already
227
+ * exists. Returns true when the category exists afterwards.
228
+ */
229
+ export function ensureCategory(name: string, description: string, options: { parent?: string; is_parent?: boolean } = {}): boolean {
230
+ try {
231
+ if (categoryExists(name)) return true;
232
+ const parent = options.parent && categoryExists(options.parent) ? options.parent : undefined;
233
+ addCategory(name, description, parent, undefined, options.is_parent && !parent);
234
+ return true;
235
+ } catch (err) {
236
+ console.error(`Failed to create category "${name}":`, err instanceof Error ? err.message : err);
237
+ return categoryExists(name);
238
+ }
239
+ }
240
+
241
+ /**
242
+ * ensureCategory for a name of FEATURE_CATEGORIES, or a project's plan category
243
+ * `plans-<project>` (made under "plans", as hooks/claude-code/post-plan.mjs does);
244
+ * false for any other name.
245
+ */
246
+ export function ensureFeatureCategory(name: string): boolean {
247
+ const feature = Object.prototype.hasOwnProperty.call(FEATURE_CATEGORIES, name) ? FEATURE_CATEGORIES[name] : null;
248
+ if (feature) return ensureCategory(name, feature.description, { is_parent: feature.is_parent });
249
+ if (/^plans-[a-z0-9][a-z0-9-]*$/.test(name) && name.length <= MAX_LENGTH && ensureFeatureCategory('plans')) {
250
+ return ensureCategory(name, `Implementation plans for ${name.slice('plans-'.length)} project`, { parent: 'plans' });
251
+ }
252
+ return false;
253
+ }
254
+
255
+ /**
256
+ * The name of a project's default parent category, as the project's defaults
257
+ * are created (hooks/claude-code/shared.mjs projectCategoryLabel): the label
258
+ * normalized and cut to 16 characters, so `<label>-architecture` stays within 30.
259
+ */
260
+ export function projectCategoryLabel(project: string): string {
261
+ let label = String(project || '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
262
+ if (label.length > 16) label = label.slice(0, 16).replace(/-$/, '');
263
+ return label || 'global';
264
+ }
265
+
221
266
  /**
222
267
  * Call after a connection switch to re-point the file watcher
223
268
  * at the new connection's category file and sync from database if needed.
@@ -16,7 +16,7 @@
16
16
  import { readdirSync, readFileSync } from 'node:fs';
17
17
  import path from 'node:path';
18
18
  import { performance } from 'node:perf_hooks';
19
- import { z } from 'zod';
19
+ import { z } from 'zod/v3';
20
20
  import type { JudgeUsage } from './typesafe.js';
21
21
  import { typesafeConfig, mutateTypeSafeConfig, type TypeSafeConfig } from './typesafe-config.js';
22
22
  import { hashCorpusFiles, isPinnedModel } from './browser-assist-gate.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import * as ni from '../services/neural-interface.js';
4
4
  import { callerRole } from '../services/identity.js';
@@ -21,7 +21,7 @@
21
21
  * reloading the tab once) and only then reports "not logged in" — when the page
22
22
  * really holds no session.
23
23
  */
24
- import { z } from 'zod';
24
+ import { z } from 'zod/v3';
25
25
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
26
26
  import * as ni from '../services/neural-interface.js';
27
27
  import { text } from './response.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import * as navigate from './browser-navigate.js';
4
4
  import * as interact from './browser-interact.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { text } from './response.js';
3
3
 
4
4
  const PLATFORMS = ['twitter', 'facebook', 'tiktok', 'whatsapp', 'instagram', 'linkedin', 'bluesky'] as const;
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { text } from './response.js';
4
4
  import { formatInlineSnapshot, formatAiSnapshotBody } from './browser-observe.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { text } from './response.js';
4
4
  import { formatInlineSnapshot, formatAiSnapshotBody } from './browser-observe.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { getMemory } from '../services/sqlite.js';
4
4
  import { cleanName, parseSeedQueue, regionForSeed, resolveClassification } from '../services/fb-regions.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { text, image } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import {
3
3
  validateCategoryName,
4
4
  addCategory,
@@ -86,6 +86,11 @@ async function handleCreate(args: {
86
86
  return text('Invalid color format. Use hex format: #rrggbb (e.g., #3b82f6)');
87
87
  }
88
88
 
89
+ // A child under a parent that does not exist would be dangling (a fresh install has no categories at all).
90
+ if (args.parent && !categoryExists(args.parent)) {
91
+ return text(`Parent category "${args.parent}" does not exist. Create "${args.name}" with no parent, or create the parent first. Available: ${getAllCategories().join(', ') || '(none)'}`);
92
+ }
93
+
89
94
  addCategory(args.name, args.description.trim(), args.parent, args.color, args.is_parent);
90
95
  refreshCategorySchemas();
91
96
 
@@ -1,6 +1,6 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { ElicitRequestFormParams } from '@modelcontextprotocol/sdk/types.js';
3
- import { z } from 'zod';
3
+ import { z } from 'zod/v3';
4
4
 
5
5
  import { text } from './response.js';
6
6
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { callerDesktopGrant } from '../services/identity.js';
4
4
  import { desktopAct, desktopApps, desktopAx, desktopStatus, type DesktopResponse } from '../services/desktop-client.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { coerceStringArray } from './utils.js';
4
4
  import { text } from './response.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as discord from '../services/discord.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { text } from './response.js';
3
3
  import {
4
4
  getMemory, scrollMemories,
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { softDeleteMemory, getMemory } from '../services/sqlite.js';
3
3
  import type { MemoryPayload } from '../types.js';
4
4
  import { invalidateCache } from '../services/neural-interface.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -4,7 +4,7 @@
4
4
  * gsc_manual_actions, gsc_enhancements, gsc_links_report, gsc_links_export
5
5
  */
6
6
 
7
- import { z } from 'zod';
7
+ import { z } from 'zod/v3';
8
8
  import * as ni from '../../services/neural-interface.js';
9
9
  import { text } from '../response.js';
10
10
  import { GSC_BASE, encodeProperty, currentProperty, ensureAuth, resolve, wait, pollFor, safeNavigate, TABLE_EXTRACTOR_SCRIPT, readMetricTileScript } from './helpers.js';
@@ -4,7 +4,7 @@
4
4
  * gsc_sitemap, gsc_removals, gsc_removals_cancel
5
5
  */
6
6
 
7
- import { z } from 'zod';
7
+ import { z } from 'zod/v3';
8
8
  import * as ni from '../../services/neural-interface.js';
9
9
  import { text } from '../response.js';
10
10
  import { GSC_BASE, encodeProperty, currentProperty, ensureAuth, resolve, wait, pollFor, safeNavigate, TABLE_EXTRACTOR_SCRIPT, readMetricTileScript } from './helpers.js';
@@ -3,7 +3,7 @@
3
3
  * gsc_inspect_url, gsc_inspect_test_live, gsc_inspect_request_indexing, gsc_inspect_view_crawled
4
4
  */
5
5
 
6
- import { z } from 'zod';
6
+ import { z } from 'zod/v3';
7
7
  import * as ni from '../../services/neural-interface.js';
8
8
  import { text } from '../response.js';
9
9
  import { GSC_BASE, encodeProperty, currentProperty, ensureAuth, resolve, wait, pollFor, safeNavigate } from './helpers.js';
@@ -3,7 +3,7 @@
3
3
  * Tools: gsc_navigate, gsc_property
4
4
  */
5
5
 
6
- import { z } from 'zod';
6
+ import { z } from 'zod/v3';
7
7
  import * as ni from '../../services/neural-interface.js';
8
8
  import { text } from '../response.js';
9
9
  import { GSC_BASE, encodeProperty, currentProperty, ensureAuth, resolve, wait, pollFor, safeNavigate } from './helpers.js';
@@ -3,7 +3,7 @@
3
3
  * gsc_performance_query, gsc_performance_export, gsc_performance_chart_screenshot
4
4
  */
5
5
 
6
- import { z } from 'zod';
6
+ import { z } from 'zod/v3';
7
7
  import * as ni from '../../services/neural-interface.js';
8
8
  import { text } from '../response.js';
9
9
  import { GSC_BASE, encodeProperty, currentProperty, ensureAuth, resolve, wait, pollFor, safeNavigate, TABLE_EXTRACTOR_SCRIPT, readMetricTileScript } from './helpers.js';
@@ -4,7 +4,7 @@
4
4
  * gsc_disavow, gsc_shopping, gsc_extract_table, gsc_screenshot
5
5
  */
6
6
 
7
- import { z } from 'zod';
7
+ import { z } from 'zod/v3';
8
8
  import * as ni from '../../services/neural-interface.js';
9
9
  import { text } from '../response.js';
10
10
  import { GSC_BASE, encodeProperty, currentProperty, ensureAuth, resolve, wait, pollFor, safeNavigate, TABLE_EXTRACTOR_SCRIPT, readMetricTileScript } from './helpers.js';
@@ -5,7 +5,7 @@
5
5
  * Any skill or tool can use staged images (Leonardo references, social posts, etc.).
6
6
  */
7
7
 
8
- import { z } from 'zod';
8
+ import { z } from 'zod/v3';
9
9
  import * as ni from '../services/neural-interface.js';
10
10
  import { text } from './response.js';
11
11
 
@@ -6,7 +6,7 @@
6
6
  * Tools: leonardo_browser_navigate, leonardo_browser_generate, leonardo_browser_library, leonardo_browser_download, leonardo_browser_reference
7
7
  */
8
8
 
9
- import { z } from 'zod';
9
+ import { z } from 'zod/v3';
10
10
  import * as ni from '../services/neural-interface.js';
11
11
  import { text } from './response.js';
12
12
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { readFileSync, writeFileSync, existsSync, unlinkSync, mkdirSync, readdirSync } from 'fs';
3
3
  import { join } from 'path';
4
4
  import { text } from './response.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { scrollMemories, getMemoryStats, getMemory, rowToSessionChunkPayload } from '../services/sqlite.js';
3
3
  import { validateCategory } from '../services/categories.js';
4
4
  import type { MemoryPayload } from '../types.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import * as ni from '../services/neural-interface.js';
4
4
  import { text } from './response.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { text } from './response.js';
3
3
  import { VALID_GROUPS, getProfilePresets, persistRuntimeProfile, type ProfileRuntime } from '../services/profiles.js';
4
4
  import { reportRuntimeMcpProfile, type RuntimeMcpProfileReport } from '../services/neural-interface.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { retrieveMemory, compactRecall } from '../services/memory-retrieval.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { getMemory, updatePayload, upsertMemory, getDb, memoryVectors } from '../services/sqlite.js';
3
3
  import { generateEmbedding } from '../services/local-embeddings.js';
4
4
  import { validateCategory } from '../services/categories.js';
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { writeMemory, IdempotencyConflict, type WriteMemoryResult } from '../services/memory-writer.js';
3
- import { z } from 'zod';
4
- import { categoryExists, getAllCategories, getCategories } from '../services/categories.js';
3
+ import { z } from 'zod/v3';
4
+ import { categoryExists, ensureCategory, ensureFeatureCategory, getCategories, projectCategoryLabel } from '../services/categories.js';
5
5
  import { coerceStringArray } from './utils.js';
6
6
  import type { MemoryPayload, MemorySource } from '../types.js';
7
7
  import { detectProject, projectRoot } from '../config.js';
@@ -112,22 +112,23 @@ export const rememberDescription =
112
112
 
113
113
  /**
114
114
  * Resolve the category to store under. If the caller supplied a valid category,
115
- * use it verbatim. Otherwise fall back to a project default so a memory is never
116
- * lost just because the required field was omitted or misspelled.
115
+ * use it verbatim. A feature's category (conversations, communication-style, …)
116
+ * is created the first time it is asked for: a fresh install has none. Anything
117
+ * else falls back to the project's default child, created if it is missing, so a
118
+ * memory is never lost just because the required field was omitted or misspelled.
117
119
  * Returns the chosen category and whether a fallback was applied.
118
120
  */
119
121
  function resolveCategory(requested: string | undefined, project: string): { category: string; fallback: boolean } {
120
122
  if (requested && categoryExists(requested)) {
121
123
  return { category: requested, fallback: false };
122
124
  }
123
- const all = getAllCategories();
124
- const projectDefault = `${project}-project`;
125
- const chosen =
126
- (all.includes(projectDefault) && projectDefault) ||
127
- (all.includes('conversations') && 'conversations') ||
128
- all[0] ||
129
- 'conversations';
130
- return { category: chosen, fallback: true };
125
+ if (requested && ensureFeatureCategory(requested)) {
126
+ return { category: requested, fallback: false };
127
+ }
128
+ const label = projectCategoryLabel(project);
129
+ const projectDefault = `${label}-project`;
130
+ ensureCategory(projectDefault, `General project knowledge, decisions, and milestones for ${project}`, { parent: label });
131
+ return { category: projectDefault, fallback: true };
131
132
  }
132
133
 
133
134
  export async function handleRemember(args: {
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { restoreMemory, getMemory } from '../services/sqlite.js';
3
3
  import type { MemoryPayload } from '../types.js';
4
4
  import { text } from './response.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { resolve } from 'path';
3
3
  import { existsSync, lstatSync, readFileSync } from 'fs';
4
4
  import * as ni from '../services/neural-interface.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import { scrollMemories } from '../services/sqlite.js';
3
3
  import { hashFile, resolveStoredPath } from '../services/file-checksums.js';
4
4
  import { fileExcerpt } from '../services/file-excerpt.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { text } from './response.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
 
3
3
  /**
4
4
  * A boolean argument as a model sends it: true / false, "true" / "false"
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import * as ni from '../services/neural-interface.js';
4
4
  import { callerBrainCredential, callerRole } from '../services/identity.js';
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  import * as ni from '../services/neural-interface.js';
3
3
  import { text, image } from './response.js';
4
4
  import { SHAPE_TYPES, SECTION_TYPE_NAMES, ELEMENT_TYPES, DEFAULT_VIEWPORT, type WbElement, type WbViewport } from '../services/whiteboard-geometry.js';
@@ -5,7 +5,7 @@
5
5
  * used by the autopilot to dedupe against what's already posted.
6
6
  */
7
7
 
8
- import { z } from 'zod';
8
+ import { z } from 'zod/v3';
9
9
  import * as ni from '../../services/neural-interface.js';
10
10
  import { text } from '../response.js';
11
11
  import { STUDIO_BASE, resolve, ensureAuth, wait, pollFor, safeNavigate, type Resolved } from './helpers.js';
@@ -4,7 +4,7 @@
4
4
  * yt-dlp for YouTube-only trailers. Delegates to /api/youtube/download.
5
5
  */
6
6
 
7
- import { z } from 'zod';
7
+ import { z } from 'zod/v3';
8
8
  import * as ni from '../../services/neural-interface.js';
9
9
  import { text } from '../response.js';
10
10
 
@@ -4,7 +4,7 @@
4
4
  * Both operate on the Studio video editor pages.
5
5
  */
6
6
 
7
- import { z } from 'zod';
7
+ import { z } from 'zod/v3';
8
8
  import * as ni from '../../services/neural-interface.js';
9
9
  import { text } from '../response.js';
10
10
  import { STUDIO_BASE, resolve, ensureAuth, wait, pollFor, safeNavigate, clickStudio, type Resolved } from './helpers.js';
@@ -4,7 +4,7 @@
4
4
  * Visibility/scheduling is handled by youtube_schedule.
5
5
  */
6
6
 
7
- import { z } from 'zod';
7
+ import { z } from 'zod/v3';
8
8
  import * as ni from '../../services/neural-interface.js';
9
9
  import { text } from '../response.js';
10
10
  import { STUDIO_BASE, resolve, ensureAuth, wait, pollFor, safeNavigate, clickStudio, fillStudio, type Resolved } from './helpers.js';
@@ -5,7 +5,7 @@
5
5
  * Tools: youtube_navigate
6
6
  */
7
7
 
8
- import { z } from 'zod';
8
+ import { z } from 'zod/v3';
9
9
  import * as ni from '../../services/neural-interface.js';
10
10
  import { text } from '../response.js';
11
11
  import { STUDIO_BASE, resolve, ensureAuth, wait, pollFor, safeNavigate, type Resolved } from './helpers.js';
@@ -4,7 +4,7 @@
4
4
  * the video edit page's Playlists dropdown).
5
5
  */
6
6
 
7
- import { z } from 'zod';
7
+ import { z } from 'zod/v3';
8
8
  import * as ni from '../../services/neural-interface.js';
9
9
  import { text } from '../response.js';
10
10
  import { STUDIO_BASE, resolve, ensureAuth, wait, pollFor, safeNavigate, clickStudio, fillStudio, DEEP_TEXT_SCRIPT, type Resolved } from './helpers.js';
@@ -8,7 +8,7 @@
8
8
  * and read the picker back so a mis-parsed date is visible, not silent.
9
9
  */
10
10
 
11
- import { z } from 'zod';
11
+ import { z } from 'zod/v3';
12
12
  import * as ni from '../../services/neural-interface.js';
13
13
  import { text } from '../response.js';
14
14
  import { STUDIO_BASE, resolve, ensureAuth, wait, pollFor, safeNavigate, clickStudio, fillStudio } from './helpers.js';
@@ -11,7 +11,7 @@
11
11
  * recall-then-eyeball flow did, and can never re-pick a posted trailer.
12
12
  */
13
13
 
14
- import { z } from 'zod';
14
+ import { z } from 'zod/v3';
15
15
  import * as ni from '../../services/neural-interface.js';
16
16
  import { getPostedTrailerKeys } from '../../services/sqlite.js';
17
17
  import { candidateDedupKeys } from './dedup.js';