@synap-core/cli 1.11.0 → 1.13.0

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 (533) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -198
  3. package/dist/build-info.json +6 -0
  4. package/dist/commands/agent-run.js +3 -2
  5. package/dist/commands/agent-run.js.map +1 -1
  6. package/dist/commands/agents.d.ts +32 -17
  7. package/dist/commands/agents.js +203 -237
  8. package/dist/commands/agents.js.map +1 -1
  9. package/dist/commands/app.d.ts +143 -0
  10. package/dist/commands/app.js +524 -0
  11. package/dist/commands/app.js.map +1 -0
  12. package/dist/commands/automate.d.ts +21 -0
  13. package/dist/commands/automate.js +42 -0
  14. package/dist/commands/automate.js.map +1 -0
  15. package/dist/commands/automation-schema.test.d.ts +16 -0
  16. package/dist/commands/automation-schema.test.js +77 -0
  17. package/dist/commands/automation-schema.test.js.map +1 -0
  18. package/dist/commands/automation.d.ts +12 -0
  19. package/dist/commands/automation.js +116 -66
  20. package/dist/commands/automation.js.map +1 -1
  21. package/dist/commands/box.d.ts +42 -0
  22. package/dist/commands/box.js +89 -0
  23. package/dist/commands/box.js.map +1 -0
  24. package/dist/commands/bridge-setup.d.ts +14 -1
  25. package/dist/commands/bridge-setup.js +395 -129
  26. package/dist/commands/bridge-setup.js.map +1 -1
  27. package/dist/commands/cap-connections.d.ts +4 -4
  28. package/dist/commands/cap-connections.js +14 -14
  29. package/dist/commands/cap-connections.js.map +1 -1
  30. package/dist/commands/capability.d.ts +3 -1
  31. package/dist/commands/capability.js +249 -176
  32. package/dist/commands/capability.js.map +1 -1
  33. package/dist/commands/catalog.d.ts +275 -0
  34. package/dist/commands/catalog.js +481 -0
  35. package/dist/commands/catalog.js.map +1 -0
  36. package/dist/commands/cell.d.ts +155 -8
  37. package/dist/commands/cell.js +416 -40
  38. package/dist/commands/cell.js.map +1 -1
  39. package/dist/commands/centrality.js +1 -13
  40. package/dist/commands/centrality.js.map +1 -1
  41. package/dist/commands/close-questions.d.ts +27 -0
  42. package/dist/commands/close-questions.js +49 -0
  43. package/dist/commands/close-questions.js.map +1 -0
  44. package/dist/commands/close-questions.test.d.ts +1 -0
  45. package/dist/commands/close-questions.test.js +52 -0
  46. package/dist/commands/close-questions.test.js.map +1 -0
  47. package/dist/commands/connect.d.ts +36 -13
  48. package/dist/commands/connect.js +68 -167
  49. package/dist/commands/connect.js.map +1 -1
  50. package/dist/commands/connections.d.ts +3 -2
  51. package/dist/commands/connections.js +95 -25
  52. package/dist/commands/connections.js.map +1 -1
  53. package/dist/commands/context.js +79 -44
  54. package/dist/commands/context.js.map +1 -1
  55. package/dist/commands/data-extra.d.ts +34 -0
  56. package/dist/commands/data-extra.js +203 -25
  57. package/dist/commands/data-extra.js.map +1 -1
  58. package/dist/commands/data.d.ts +120 -2
  59. package/dist/commands/data.js +295 -21
  60. package/dist/commands/data.js.map +1 -1
  61. package/dist/commands/diagnose.d.ts +66 -4
  62. package/dist/commands/diagnose.js +285 -28
  63. package/dist/commands/diagnose.js.map +1 -1
  64. package/dist/commands/doc.d.ts +11 -4
  65. package/dist/commands/doc.js +39 -14
  66. package/dist/commands/doc.js.map +1 -1
  67. package/dist/commands/doctor.d.ts +133 -3
  68. package/dist/commands/doctor.js +761 -41
  69. package/dist/commands/doctor.js.map +1 -1
  70. package/dist/commands/explain.js +5 -5
  71. package/dist/commands/explain.js.map +1 -1
  72. package/dist/commands/hooks.d.ts +19 -0
  73. package/dist/commands/hooks.js +70 -0
  74. package/dist/commands/hooks.js.map +1 -0
  75. package/dist/commands/import.d.ts +393 -13
  76. package/dist/commands/import.js +1150 -54
  77. package/dist/commands/import.js.map +1 -1
  78. package/dist/commands/init.d.ts +34 -9
  79. package/dist/commands/init.js +481 -981
  80. package/dist/commands/init.js.map +1 -1
  81. package/dist/commands/keys.d.ts +1 -0
  82. package/dist/commands/keys.js +15 -2
  83. package/dist/commands/keys.js.map +1 -1
  84. package/dist/commands/knowledge.d.ts +22 -6
  85. package/dist/commands/knowledge.js +121 -57
  86. package/dist/commands/knowledge.js.map +1 -1
  87. package/dist/commands/lens.d.ts +37 -1
  88. package/dist/commands/lens.js +194 -72
  89. package/dist/commands/lens.js.map +1 -1
  90. package/dist/commands/market-authoring.d.ts +29 -2
  91. package/dist/commands/market-authoring.js +348 -7
  92. package/dist/commands/market-authoring.js.map +1 -1
  93. package/dist/commands/market-official.d.ts +58 -0
  94. package/dist/commands/market-official.js +84 -0
  95. package/dist/commands/market-official.js.map +1 -0
  96. package/dist/commands/market.d.ts +400 -16
  97. package/dist/commands/market.js +1802 -146
  98. package/dist/commands/market.js.map +1 -1
  99. package/dist/commands/mcp.d.ts +60 -25
  100. package/dist/commands/mcp.js +251 -64
  101. package/dist/commands/mcp.js.map +1 -1
  102. package/dist/commands/observe.category.test.d.ts +1 -0
  103. package/dist/commands/observe.category.test.js +59 -0
  104. package/dist/commands/observe.category.test.js.map +1 -0
  105. package/dist/commands/observe.d.ts +3 -0
  106. package/dist/commands/observe.js +7 -5
  107. package/dist/commands/observe.js.map +1 -1
  108. package/dist/commands/observe.title.test.d.ts +1 -0
  109. package/dist/commands/observe.title.test.js +37 -0
  110. package/dist/commands/observe.title.test.js.map +1 -0
  111. package/dist/commands/open.d.ts +39 -9
  112. package/dist/commands/open.js +80 -25
  113. package/dist/commands/open.js.map +1 -1
  114. package/dist/commands/playbook.d.ts +42 -0
  115. package/dist/commands/playbook.js +171 -0
  116. package/dist/commands/playbook.js.map +1 -0
  117. package/dist/commands/pod.js +1 -1
  118. package/dist/commands/pod.js.map +1 -1
  119. package/dist/commands/pods.d.ts +11 -1
  120. package/dist/commands/pods.js +129 -131
  121. package/dist/commands/pods.js.map +1 -1
  122. package/dist/commands/proposals-actions.d.ts +62 -0
  123. package/dist/commands/proposals-actions.js +143 -8
  124. package/dist/commands/proposals-actions.js.map +1 -1
  125. package/dist/commands/proposals-await.d.ts +68 -0
  126. package/dist/commands/proposals-await.js +248 -0
  127. package/dist/commands/proposals-await.js.map +1 -0
  128. package/dist/commands/proton-setup.d.ts +73 -0
  129. package/dist/commands/proton-setup.js +579 -0
  130. package/dist/commands/proton-setup.js.map +1 -0
  131. package/dist/commands/providers.d.ts +23 -0
  132. package/dist/commands/providers.js +126 -1
  133. package/dist/commands/providers.js.map +1 -1
  134. package/dist/commands/raycast.js +6 -2
  135. package/dist/commands/raycast.js.map +1 -1
  136. package/dist/commands/rule.d.ts +150 -0
  137. package/dist/commands/rule.js +447 -0
  138. package/dist/commands/rule.js.map +1 -0
  139. package/dist/commands/session-feed-wait.d.ts +48 -0
  140. package/dist/commands/session-feed-wait.js +261 -0
  141. package/dist/commands/session-feed-wait.js.map +1 -0
  142. package/dist/commands/session-post.d.ts +40 -0
  143. package/dist/commands/session-post.js +96 -0
  144. package/dist/commands/session-post.js.map +1 -0
  145. package/dist/commands/session-wait.d.ts +116 -0
  146. package/dist/commands/session-wait.js +224 -0
  147. package/dist/commands/session-wait.js.map +1 -0
  148. package/dist/commands/sessions.d.ts +54 -0
  149. package/dist/commands/sessions.js +501 -58
  150. package/dist/commands/sessions.js.map +1 -1
  151. package/dist/commands/skill-manage.d.ts +21 -0
  152. package/dist/commands/skill-manage.js +136 -19
  153. package/dist/commands/skill-manage.js.map +1 -1
  154. package/dist/commands/skills-commands.d.ts +2 -0
  155. package/dist/commands/skills-commands.js +9 -1
  156. package/dist/commands/skills-commands.js.map +1 -1
  157. package/dist/commands/skills-commands.test.d.ts +1 -0
  158. package/dist/commands/skills-commands.test.js +57 -0
  159. package/dist/commands/skills-commands.test.js.map +1 -0
  160. package/dist/commands/skills.js +16 -0
  161. package/dist/commands/skills.js.map +1 -1
  162. package/dist/commands/status.d.ts +1 -4
  163. package/dist/commands/status.js +6 -35
  164. package/dist/commands/status.js.map +1 -1
  165. package/dist/commands/statusline.backoff.test.d.ts +13 -0
  166. package/dist/commands/statusline.backoff.test.js +100 -0
  167. package/dist/commands/statusline.backoff.test.js.map +1 -0
  168. package/dist/commands/statusline.js +16 -9
  169. package/dist/commands/statusline.js.map +1 -1
  170. package/dist/commands/sync-status.d.ts +12 -0
  171. package/dist/commands/sync-status.js +125 -0
  172. package/dist/commands/sync-status.js.map +1 -0
  173. package/dist/commands/templates-retire.d.ts +34 -0
  174. package/dist/commands/templates-retire.js +192 -0
  175. package/dist/commands/templates-retire.js.map +1 -0
  176. package/dist/commands/tools.js +6 -21
  177. package/dist/commands/tools.js.map +1 -1
  178. package/dist/commands/tracks.d.ts +112 -0
  179. package/dist/commands/tracks.js +543 -0
  180. package/dist/commands/tracks.js.map +1 -0
  181. package/dist/commands/update.d.ts +3 -11
  182. package/dist/commands/update.js +5 -134
  183. package/dist/commands/update.js.map +1 -1
  184. package/dist/commands/upload.d.ts +41 -3
  185. package/dist/commands/upload.js +120 -18
  186. package/dist/commands/upload.js.map +1 -1
  187. package/dist/commands/vendor.d.ts +28 -0
  188. package/dist/commands/vendor.js +110 -0
  189. package/dist/commands/vendor.js.map +1 -0
  190. package/dist/commands/versions.js +6 -0
  191. package/dist/commands/versions.js.map +1 -1
  192. package/dist/commands/view.js +10 -5
  193. package/dist/commands/view.js.map +1 -1
  194. package/dist/commands/whoami.d.ts +30 -3
  195. package/dist/commands/whoami.js +186 -23
  196. package/dist/commands/whoami.js.map +1 -1
  197. package/dist/commands/worker-accounts.d.ts +149 -0
  198. package/dist/commands/worker-accounts.js +339 -0
  199. package/dist/commands/worker-accounts.js.map +1 -0
  200. package/dist/commands/worker-accounts.test.d.ts +1 -0
  201. package/dist/commands/worker-accounts.test.js +224 -0
  202. package/dist/commands/worker-accounts.test.js.map +1 -0
  203. package/dist/commands/worker.d.ts +331 -0
  204. package/dist/commands/worker.js +1067 -0
  205. package/dist/commands/worker.js.map +1 -0
  206. package/dist/commands/worker.test.d.ts +1 -0
  207. package/dist/commands/worker.test.js +427 -0
  208. package/dist/commands/worker.test.js.map +1 -0
  209. package/dist/commands/workspace-ops.d.ts +35 -0
  210. package/dist/commands/workspace-ops.js +153 -0
  211. package/dist/commands/workspace-ops.js.map +1 -0
  212. package/dist/index.d.ts +6 -6
  213. package/dist/index.js +1043 -186
  214. package/dist/index.js.map +1 -1
  215. package/dist/lib/agent-connections.d.ts +31 -0
  216. package/dist/lib/agent-connections.js +33 -0
  217. package/dist/lib/agent-connections.js.map +1 -0
  218. package/dist/lib/agent-detect.d.ts +27 -0
  219. package/dist/lib/agent-detect.js +71 -0
  220. package/dist/lib/agent-detect.js.map +1 -0
  221. package/dist/lib/agent-door.d.ts +136 -0
  222. package/dist/lib/agent-door.js +429 -0
  223. package/dist/lib/agent-door.js.map +1 -0
  224. package/dist/lib/agents-config.d.ts +2 -0
  225. package/dist/lib/agents-config.js +4 -9
  226. package/dist/lib/agents-config.js.map +1 -1
  227. package/dist/lib/approval-poll.d.ts +31 -2
  228. package/dist/lib/approval-poll.js +20 -7
  229. package/dist/lib/approval-poll.js.map +1 -1
  230. package/dist/lib/atomic-file.d.ts +48 -0
  231. package/dist/lib/atomic-file.js +129 -0
  232. package/dist/lib/atomic-file.js.map +1 -0
  233. package/dist/lib/auth.d.ts +17 -11
  234. package/dist/lib/auth.js +47 -64
  235. package/dist/lib/auth.js.map +1 -1
  236. package/dist/lib/batch-approval.d.ts +85 -0
  237. package/dist/lib/batch-approval.js +170 -0
  238. package/dist/lib/batch-approval.js.map +1 -0
  239. package/dist/lib/box/egress.d.ts +82 -0
  240. package/dist/lib/box/egress.js +264 -0
  241. package/dist/lib/box/egress.js.map +1 -0
  242. package/dist/lib/box/evidence.d.ts +86 -0
  243. package/dist/lib/box/evidence.js +121 -0
  244. package/dist/lib/box/evidence.js.map +1 -0
  245. package/dist/lib/box/job-server.d.ts +72 -0
  246. package/dist/lib/box/job-server.js +246 -0
  247. package/dist/lib/box/job-server.js.map +1 -0
  248. package/dist/lib/box/provisioner.d.ts +83 -0
  249. package/dist/lib/box/provisioner.js +312 -0
  250. package/dist/lib/box/provisioner.js.map +1 -0
  251. package/dist/lib/box/proxmox.d.ts +112 -0
  252. package/dist/lib/box/proxmox.js +211 -0
  253. package/dist/lib/box/proxmox.js.map +1 -0
  254. package/dist/lib/box/wire.d.ts +98 -0
  255. package/dist/lib/box/wire.js +70 -0
  256. package/dist/lib/box/wire.js.map +1 -0
  257. package/dist/lib/capture-lane.d.ts +6 -5
  258. package/dist/lib/capture-lane.js +6 -5
  259. package/dist/lib/capture-lane.js.map +1 -1
  260. package/dist/lib/capture-structure.d.ts +230 -11
  261. package/dist/lib/capture-structure.js +251 -13
  262. package/dist/lib/capture-structure.js.map +1 -1
  263. package/dist/lib/catalog-templates.d.ts +59 -0
  264. package/dist/lib/catalog-templates.js +126 -0
  265. package/dist/lib/catalog-templates.js.map +1 -0
  266. package/dist/lib/cli-build.d.ts +19 -0
  267. package/dist/lib/cli-build.js +37 -0
  268. package/dist/lib/cli-build.js.map +1 -0
  269. package/dist/lib/client-header.test.d.ts +1 -0
  270. package/dist/lib/client-header.test.js +85 -0
  271. package/dist/lib/client-header.test.js.map +1 -0
  272. package/dist/lib/conversation-headers.d.ts +33 -0
  273. package/dist/lib/conversation-headers.js +69 -0
  274. package/dist/lib/conversation-headers.js.map +1 -0
  275. package/dist/lib/cp-packages.d.ts +167 -11
  276. package/dist/lib/cp-packages.js +253 -21
  277. package/dist/lib/cp-packages.js.map +1 -1
  278. package/dist/lib/credential-class.d.ts +144 -0
  279. package/dist/lib/credential-class.js +138 -0
  280. package/dist/lib/credential-class.js.map +1 -0
  281. package/dist/lib/describe-lens.d.ts +35 -0
  282. package/dist/lib/describe-lens.js +40 -0
  283. package/dist/lib/describe-lens.js.map +1 -1
  284. package/dist/lib/device-connect.d.ts +125 -0
  285. package/dist/lib/device-connect.js +256 -0
  286. package/dist/lib/device-connect.js.map +1 -0
  287. package/dist/lib/directory-lens.d.ts +99 -0
  288. package/dist/lib/directory-lens.js +187 -0
  289. package/dist/lib/directory-lens.js.map +1 -0
  290. package/dist/lib/exporter-coverage.d.ts +71 -0
  291. package/dist/lib/exporter-coverage.js +97 -0
  292. package/dist/lib/exporter-coverage.js.map +1 -0
  293. package/dist/lib/goal-words.d.ts +38 -0
  294. package/dist/lib/goal-words.js +112 -0
  295. package/dist/lib/goal-words.js.map +1 -0
  296. package/dist/lib/hub-client.d.ts +57 -15
  297. package/dist/lib/hub-client.js +396 -82
  298. package/dist/lib/hub-client.js.map +1 -1
  299. package/dist/lib/init-connect.d.ts +41 -0
  300. package/dist/lib/init-connect.js +75 -0
  301. package/dist/lib/init-connect.js.map +1 -0
  302. package/dist/lib/init-exit.d.ts +24 -0
  303. package/dist/lib/init-exit.js +41 -0
  304. package/dist/lib/init-exit.js.map +1 -0
  305. package/dist/lib/init-flow.d.ts +25 -0
  306. package/dist/lib/init-flow.js +40 -0
  307. package/dist/lib/init-flow.js.map +1 -0
  308. package/dist/lib/init-handoff.d.ts +24 -0
  309. package/dist/lib/init-handoff.js +26 -0
  310. package/dist/lib/init-handoff.js.map +1 -0
  311. package/dist/lib/init-output.d.ts +18 -0
  312. package/dist/lib/init-output.js +43 -0
  313. package/dist/lib/init-output.js.map +1 -0
  314. package/dist/lib/init-pod.d.ts +45 -0
  315. package/dist/lib/init-pod.js +36 -0
  316. package/dist/lib/init-pod.js.map +1 -0
  317. package/dist/lib/installed.d.ts +210 -11
  318. package/dist/lib/installed.js +234 -36
  319. package/dist/lib/installed.js.map +1 -1
  320. package/dist/lib/key-approval.d.ts +57 -0
  321. package/dist/lib/key-approval.js +117 -0
  322. package/dist/lib/key-approval.js.map +1 -0
  323. package/dist/lib/key-diagnosis.d.ts +56 -0
  324. package/dist/lib/key-diagnosis.js +227 -0
  325. package/dist/lib/key-diagnosis.js.map +1 -0
  326. package/dist/lib/key-doctor.d.ts +136 -0
  327. package/dist/lib/key-doctor.js +286 -0
  328. package/dist/lib/key-doctor.js.map +1 -0
  329. package/dist/lib/key-locations.d.ts +120 -0
  330. package/dist/lib/key-locations.js +326 -0
  331. package/dist/lib/key-locations.js.map +1 -0
  332. package/dist/lib/key-source.d.ts +68 -0
  333. package/dist/lib/key-source.js +109 -0
  334. package/dist/lib/key-source.js.map +1 -0
  335. package/dist/lib/key-state.d.ts +70 -0
  336. package/dist/lib/key-state.js +115 -0
  337. package/dist/lib/key-state.js.map +1 -0
  338. package/dist/lib/kind-package.d.ts +181 -0
  339. package/dist/lib/kind-package.js +679 -0
  340. package/dist/lib/kind-package.js.map +1 -0
  341. package/dist/lib/knowledge-title.d.ts +25 -0
  342. package/dist/lib/knowledge-title.js +47 -0
  343. package/dist/lib/knowledge-title.js.map +1 -0
  344. package/dist/lib/knowledge-title.test.d.ts +1 -0
  345. package/dist/lib/knowledge-title.test.js +34 -0
  346. package/dist/lib/knowledge-title.test.js.map +1 -0
  347. package/dist/lib/machine-instance.d.ts +64 -0
  348. package/dist/lib/machine-instance.js +142 -0
  349. package/dist/lib/machine-instance.js.map +1 -0
  350. package/dist/lib/mcp-bridge.d.ts +49 -0
  351. package/dist/lib/mcp-bridge.js +180 -0
  352. package/dist/lib/mcp-bridge.js.map +1 -0
  353. package/dist/lib/mcp-bridge.test.d.ts +1 -0
  354. package/dist/lib/mcp-bridge.test.js +118 -0
  355. package/dist/lib/mcp-bridge.test.js.map +1 -0
  356. package/dist/lib/mcp-call.d.ts +30 -0
  357. package/dist/lib/mcp-call.js +107 -0
  358. package/dist/lib/mcp-call.js.map +1 -0
  359. package/dist/lib/mcp-snippets.d.ts +53 -0
  360. package/dist/lib/mcp-snippets.js +82 -0
  361. package/dist/lib/mcp-snippets.js.map +1 -0
  362. package/dist/lib/next-steps.d.ts +8 -0
  363. package/dist/lib/next-steps.js +31 -1
  364. package/dist/lib/next-steps.js.map +1 -1
  365. package/dist/lib/openclaw.js +3 -2
  366. package/dist/lib/openclaw.js.map +1 -1
  367. package/dist/lib/package-wire.d.ts +179 -0
  368. package/dist/lib/package-wire.js +68 -0
  369. package/dist/lib/package-wire.js.map +1 -0
  370. package/dist/lib/pair-link.d.ts +38 -0
  371. package/dist/lib/pair-link.js +68 -0
  372. package/dist/lib/pair-link.js.map +1 -0
  373. package/dist/lib/pod-moved.d.ts +70 -0
  374. package/dist/lib/pod-moved.js +146 -0
  375. package/dist/lib/pod-moved.js.map +1 -0
  376. package/dist/lib/pod-reach.d.ts +39 -0
  377. package/dist/lib/pod-reach.js +117 -0
  378. package/dist/lib/pod-reach.js.map +1 -0
  379. package/dist/lib/pod-reach.test.d.ts +1 -0
  380. package/dist/lib/pod-reach.test.js +67 -0
  381. package/dist/lib/pod-reach.test.js.map +1 -0
  382. package/dist/lib/pod-wide.d.ts +40 -0
  383. package/dist/lib/pod-wide.js +46 -0
  384. package/dist/lib/pod-wide.js.map +1 -0
  385. package/dist/lib/pod.d.ts +74 -112
  386. package/dist/lib/pod.js +146 -415
  387. package/dist/lib/pod.js.map +1 -1
  388. package/dist/lib/project-ref.d.ts +9 -3
  389. package/dist/lib/project-ref.js +10 -4
  390. package/dist/lib/project-ref.js.map +1 -1
  391. package/dist/lib/register-claude-code-mcp.test.d.ts +1 -0
  392. package/dist/lib/register-claude-code-mcp.test.js +78 -0
  393. package/dist/lib/register-claude-code-mcp.test.js.map +1 -0
  394. package/dist/lib/review-credential.d.ts +119 -0
  395. package/dist/lib/review-credential.js +149 -0
  396. package/dist/lib/review-credential.js.map +1 -0
  397. package/dist/lib/safe-open.d.ts +49 -0
  398. package/dist/lib/safe-open.js +119 -0
  399. package/dist/lib/safe-open.js.map +1 -0
  400. package/dist/lib/session-feed.d.ts +185 -0
  401. package/dist/lib/session-feed.js +257 -0
  402. package/dist/lib/session-feed.js.map +1 -0
  403. package/dist/lib/session-lens.d.ts +40 -1
  404. package/dist/lib/session-lens.js +54 -4
  405. package/dist/lib/session-lens.js.map +1 -1
  406. package/dist/lib/superwhisper-import.d.ts +8 -0
  407. package/dist/lib/superwhisper-import.js +14 -7
  408. package/dist/lib/superwhisper-import.js.map +1 -1
  409. package/dist/lib/superwhisper-title.test.d.ts +1 -0
  410. package/dist/lib/superwhisper-title.test.js +18 -0
  411. package/dist/lib/superwhisper-title.test.js.map +1 -0
  412. package/dist/lib/targets.d.ts +152 -10
  413. package/dist/lib/targets.js +974 -325
  414. package/dist/lib/targets.js.map +1 -1
  415. package/dist/lib/template-file.d.ts +4 -0
  416. package/dist/lib/template-file.js.map +1 -1
  417. package/dist/lib/template-lifecycle.d.ts +217 -0
  418. package/dist/lib/template-lifecycle.js +433 -0
  419. package/dist/lib/template-lifecycle.js.map +1 -0
  420. package/dist/lib/template-steps.d.ts +88 -0
  421. package/dist/lib/template-steps.js +118 -0
  422. package/dist/lib/template-steps.js.map +1 -0
  423. package/dist/lib/time-ago.d.ts +2 -0
  424. package/dist/lib/time-ago.js +15 -0
  425. package/dist/lib/time-ago.js.map +1 -0
  426. package/dist/lib/wake-hook-settings.d.ts +57 -0
  427. package/dist/lib/wake-hook-settings.js +153 -0
  428. package/dist/lib/wake-hook-settings.js.map +1 -0
  429. package/dist/lib/wake-state.d.ts +65 -0
  430. package/dist/lib/wake-state.js +122 -0
  431. package/dist/lib/wake-state.js.map +1 -0
  432. package/dist/utils/logger.js +5 -2
  433. package/dist/utils/logger.js.map +1 -1
  434. package/package.json +26 -17
  435. package/skills/README.md +13 -11
  436. package/skills/agent-os/SKILL.md +214 -99
  437. package/skills/manifest.json +1 -1
  438. package/skills/onboard/SKILL.md +55 -26
  439. package/skills/synap/README.md +5 -8
  440. package/skills/synap/SKILL.md +1149 -289
  441. package/skills/synap/_order.txt +7 -0
  442. package/skills/synap/_skill.yaml +1 -1
  443. package/skills/synap/automations.md +15 -0
  444. package/skills/synap/capture.md +5 -0
  445. package/skills/synap/cli-operations.md +24 -18
  446. package/skills/synap/code-skills.md +70 -0
  447. package/skills/synap/concepts.md +36 -0
  448. package/skills/synap/content-os.md +10 -1
  449. package/skills/synap/creative-loop.md +15 -10
  450. package/skills/synap/crm.md +21 -52
  451. package/skills/synap/document-embeds.md +143 -47
  452. package/skills/synap/escalation-ladder.md +20 -10
  453. package/skills/synap/focus-sessions.md +56 -21
  454. package/skills/synap/from-intent.md +158 -0
  455. package/skills/synap/governance-rules.md +5 -5
  456. package/skills/synap/governance.md +10 -7
  457. package/skills/synap/hand-off.md +33 -0
  458. package/skills/synap/inline-patterns.md +15 -7
  459. package/skills/synap/lenses.md +34 -16
  460. package/skills/synap/linking.md +42 -41
  461. package/skills/synap/mcp-remote-servers.md +64 -0
  462. package/skills/synap/mental-model.md +17 -15
  463. package/skills/synap/operating-mode-rules.md +2 -2
  464. package/skills/synap/processes.md +118 -0
  465. package/skills/synap/quick-reference.md +7 -2
  466. package/skills/synap/reading.md +3 -1
  467. package/skills/synap/reflexes.md +12 -42
  468. package/skills/synap/viewframe-cells.md +38 -5
  469. package/skills/synap/work-flow.md +1 -1
  470. package/skills/synap/work-model.md +110 -0
  471. package/skills/synap/worked-examples.md +4 -5
  472. package/skills/synap/workspace-design.md +15 -11
  473. package/skills/synap/writes.md +105 -25
  474. package/skills/synap/writing-titles.md +63 -0
  475. package/skills/synap-app/SKILL.md +149 -67
  476. package/skills/synap-app/_skill.yaml +1 -1
  477. package/skills/synap-app/creating-the-base-app.md +12 -7
  478. package/skills/synap-app/governance.md +27 -16
  479. package/skills/synap-app/install-commands.md +18 -9
  480. package/skills/synap-app/overview.md +16 -9
  481. package/skills/synap-app/using-the-sdk.md +75 -25
  482. package/skills/synap-design/SKILL.md +474 -0
  483. package/skills/synap-design/_order.txt +4 -0
  484. package/skills/synap-design/_skill.yaml +21 -0
  485. package/skills/synap-design/loop.md +134 -0
  486. package/skills/synap-design/overview.md +44 -0
  487. package/skills/synap-design/principles.md +130 -0
  488. package/skills/synap-design/system.md +133 -0
  489. package/skills/synap-market/SKILL.md +306 -16
  490. package/skills/synap-market/_skill.yaml +1 -1
  491. package/skills/synap-market/author-and-publish.md +145 -8
  492. package/skills/synap-market/governance-and-catalog.md +7 -0
  493. package/skills/synap-market/install.md +79 -1
  494. package/skills/synap-market/overview.md +74 -6
  495. package/skills/synap-schema/SKILL.md +172 -10
  496. package/skills/synap-schema/_order.txt +2 -0
  497. package/skills/synap-schema/_skill.yaml +4 -2
  498. package/skills/synap-schema/common-mistakes.md +4 -2
  499. package/skills/synap-schema/discover-profiles.md +1 -1
  500. package/skills/synap-schema/entity-scope.md +15 -3
  501. package/skills/synap-schema/extend-first.md +29 -0
  502. package/skills/synap-schema/extend-vs-create.md +1 -1
  503. package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
  504. package/skills/synap-schema/property-types.md +1 -1
  505. package/skills/synap-schema/relations.md +1 -1
  506. package/skills/synap-ui/SKILL.md +19 -12
  507. package/skills/synap-ui/_skill.yaml +1 -1
  508. package/skills/synap-ui/ai-companion.md +1 -1
  509. package/skills/synap-ui/arranging-bento.md +2 -0
  510. package/skills/synap-ui/bento-layouts.md +10 -10
  511. package/skills/synap-ui/bento-recipes.md +313 -543
  512. package/skills/synap-ui/four-builds.md +5 -0
  513. package/skills/synap-ui/view-types.md +2 -2
  514. package/skills/synap-ui/widget-catalog.md +22 -278
  515. package/templates/automations/bookmark-enrichment.automation.json +290 -13
  516. package/templates/automations/url-bookmark-capture.automation.json +73 -11
  517. package/templates/box/runner.py +206 -0
  518. package/templates/skills/authoring-playbooks/SKILL.md +6 -3
  519. package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
  520. package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
  521. package/dist/commands/infra.d.ts +0 -21
  522. package/dist/commands/infra.js +0 -262
  523. package/dist/commands/infra.js.map +0 -1
  524. package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -1261
  525. package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -1647
  526. package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -1647
  527. package/node_modules/@synap/hub-rest-client/dist/index.js +0 -1231
  528. package/node_modules/@synap/hub-rest-client/package.json +0 -45
  529. package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1631
  530. package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
  531. package/node_modules/@synap/hub-rest-client/src/index.ts +0 -153
  532. package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -133
  533. package/node_modules/@synap/hub-rest-client/src/types.ts +0 -1299
@@ -1,32 +1,23 @@
1
1
  /**
2
- * `synap mcp` — the MCP front door.
2
+ * `synap mcp` — the MCP front door. Two lanes:
3
3
  *
4
- * The Synap pod exposes an MCP server at `${podUrl}/mcp` (Bearer-authed). This
5
- * command group is the turnkey funnel for pointing ANY MCP client at it:
4
+ * 1. Web AI (Cloud MCP / OAuth) — control plane `${cp}/mcp` (managed:
5
+ * https://api.synap.live/mcp). claude.ai's connector UI is OAuth-only; use
6
+ * `synap mcp connect-claude` to print the URL (no key mint, no file write).
7
+ * 2. IDE / file-configurable — pod `${podUrl}/mcp` (Bearer). Needs a pod +
8
+ * key. `synap mcp connect <client>` writes client config; `synap mcp url`
9
+ * prints URL + key for header-based UIs (ChatGPT, Raycast, …).
6
10
  *
7
- * synap mcp url — print a ready-to-paste connection (URL + key + snippets)
8
- * for UI-only clients that accept a custom header (e.g.
9
- * Raycast) and for clients that need the raw values to
10
- * wire up by hand. claude.ai's connector UI does NOT
11
- * currently accept a bearer token here — see the note
12
- * printed by this command.
13
- * synap mcp verify — health-check: is /mcp reachable and is the key valid?
14
- * synap mcp connect — alias of `synap connect` for file-configurable clients
15
- * (Claude Code, Cursor, Desktop, …) — writes the config.
16
- * synap mcp connect-claude — print the claude.ai (web) OAuth connection
17
- * steps. claude.ai's connector UI is OAuth-only (no
18
- * header field), so this prints paste-ready values
19
- * instead of writing a file — claude.ai + the control
20
- * plane drive the actual OAuth handshake.
21
- *
22
- * For file-configurable clients, prefer `synap mcp connect <client>` (it mints a
23
- * dedicated agent key + writes the client's config). `synap mcp url` is the
24
- * escape hatch for clients you must configure by hand in a UI.
11
+ * synap mcp url — paste-ready pod MCP connection (URL + key)
12
+ * synap mcp verify — health-check pod /mcp + key
13
+ * synap mcp connect — write MCP config for IDE/desktop clients
14
+ * synap mcp connect-claude — print Cloud MCP OAuth URL for claude.ai (web)
25
15
  */
26
16
  import chalk from "chalk";
27
17
  import { resolveHubConfig } from "../lib/hub-client.js";
28
18
  import { buildMcpUrl, provisionAgentKey, enrollAgentIfNeeded, } from "../lib/targets.js";
29
19
  import { log } from "../utils/logger.js";
20
+ import { printMcpConnection, redactKey, writeMcpSnippetFiles, MCP_KEY_ENV } from "../lib/mcp-snippets.js";
30
21
  /** Resolve the scoped MCP URL + the lenses from flags.
31
22
  *
32
23
  * Default is POD-WIDE: a workspace is a lens, not a container, so we do NOT
@@ -93,35 +84,7 @@ export async function mcpUrl(opts) {
93
84
  }, null, 2));
94
85
  return;
95
86
  }
96
- const mcpServers = {
97
- mcpServers: {
98
- synap: { url, headers: { Authorization: `Bearer ${hubApiKey}` } },
99
- },
100
- };
101
- const mcpRemote = {
102
- mcpServers: {
103
- synap: {
104
- command: "npx",
105
- args: ["mcp-remote", url, "--header", `Authorization: Bearer ${hubApiKey}`],
106
- },
107
- },
108
- };
109
- log.heading("\nSynap MCP connection");
110
- console.log(` ${chalk.dim("URL")} ${url}`);
111
- console.log(` ${chalk.dim("Header")} Authorization: Bearer ${hubApiKey}`);
112
- console.log(` ${chalk.dim("Agent")} ${agentUserId}${workspaceId ? chalk.dim(` · workspace ${workspaceId}`) : chalk.dim(" · pod-wide")}${projectId ? chalk.dim(` · project ${projectId}`) : ""}`);
113
- console.log(chalk.bold("\nClaude Code"));
114
- console.log(chalk.cyan(` claude mcp add --transport http synap ${url} \\\n --header "Authorization: Bearer ${hubApiKey}" --scope user`));
115
- console.log(chalk.bold("\nCursor / VS Code / native-HTTP clients (mcp.json)"));
116
- console.log(chalk.dim(JSON.stringify(mcpServers, null, 2)));
117
- console.log(chalk.bold("\nClaude Desktop / stdio-only clients (mcp-remote bridge)"));
118
- console.log(chalk.dim(JSON.stringify(mcpRemote, null, 2)));
119
- console.log(chalk.bold("\nUI clients that accept an API key / custom header (ChatGPT, Raycast, …)"));
120
- console.log(` Paste the URL above and add the Authorization header.`);
121
- console.log(chalk.dim(" Raycast: run “Install MCP Server” → transport HTTP → paste the URL + a “Authorization: Bearer …” header."));
122
- console.log(chalk.dim(" ChatGPT: Settings → enable Developer mode → add a connector → paste the URL and choose API-key auth."));
123
- console.log(chalk.yellow("\nclaude.ai (web/desktop/mobile connectors) can't take a custom header yet — its connector UI has no field for one. OAuth support is planned; until then, use Claude Code, Cursor, or another file-configurable client above."));
124
- console.log(chalk.dim("\nTip: for file-configurable clients, `synap mcp connect <client>` writes the config for you."));
87
+ printMcpConnection({ url, hubApiKey, agentUserId, workspaceId, projectId });
125
88
  }
126
89
  catch (e) {
127
90
  log.error(`Could not build MCP connection: ${e.message}`);
@@ -200,7 +163,7 @@ export async function mcpVerify(opts) {
200
163
  * starts with `pod.` — anything else (localhost, a custom domain, …) can't be
201
164
  * derived confidently, so the caller falls back to a placeholder + `--cp-url`.
202
165
  */
203
- function deriveCpOrigin(podUrl) {
166
+ export function deriveCpOrigin(podUrl) {
204
167
  try {
205
168
  const host = new URL(podUrl).hostname;
206
169
  const labels = host.split(".");
@@ -223,43 +186,267 @@ function deriveCpOrigin(podUrl) {
223
186
  * claude.ai's "Add custom connector" UI is OAuth-only (Dynamic Client
224
187
  * Registration) — it has no field for a bearer header, so the file/header
225
188
  * based flows (`mcp connect`, `mcp url`) don't apply. The control plane's
226
- * `/mcp` endpoint now speaks OAuth, so connecting is: paste a URL, approve in
227
- * the browser. This command can't drive that click-through itself — claude.ai
228
- * and the control plane own the OAuth handshake — it only prints the exact
229
- * values so there's no guesswork.
189
+ * `/mcp` endpoint speaks OAuth: paste a URL, approve in the browser. This
190
+ * command does not mint keys or write client config — it only prints the URL.
191
+ *
192
+ * Stranger-safe: if no pod is configured, falls back to `--cp-url` or the
193
+ * managed control plane `https://api.synap.live`.
230
194
  */
231
195
  export async function mcpConnectClaudeWeb(opts) {
232
196
  try {
233
- const cfg = await resolveHubConfig(opts);
234
- const { cpOrigin, derived } = deriveCpOrigin(cfg.podUrl);
235
- const finalCpOrigin = (opts.cpUrl ?? cpOrigin).replace(/\/$/, "");
197
+ const MANAGED_CP = "https://api.synap.live";
198
+ /** How we chose the CP origin — for --json + user-facing notes. */
199
+ let source = "managed-fallback";
200
+ let cpOrigin = MANAGED_CP;
201
+ if (opts.cpUrl) {
202
+ cpOrigin = opts.cpUrl.replace(/\/$/, "");
203
+ source = "override";
204
+ }
205
+ else {
206
+ try {
207
+ const cfg = await resolveHubConfig(opts);
208
+ const fromPod = deriveCpOrigin(cfg.podUrl);
209
+ if (fromPod.derived) {
210
+ cpOrigin = fromPod.cpOrigin;
211
+ source = "derived";
212
+ }
213
+ else {
214
+ // Non-pod.* host — can't derive confidently; managed + tip to --cp-url.
215
+ cpOrigin = MANAGED_CP;
216
+ source = "managed-fallback";
217
+ }
218
+ }
219
+ catch {
220
+ // No pod config — stranger path: print managed Cloud MCP (no key mint).
221
+ cpOrigin = MANAGED_CP;
222
+ source = "managed-fallback";
223
+ }
224
+ }
225
+ const finalCpOrigin = cpOrigin.replace(/\/$/, "");
236
226
  const url = `${finalCpOrigin}/mcp`;
237
- const wasDerived = opts.cpUrl ? "override" : derived;
238
227
  const steps = [
239
228
  "Open claude.ai → Settings → Connectors → Add custom connector",
240
229
  "Name: Synap",
241
230
  `URL: ${url}`,
242
231
  "Leave Advanced settings (OAuth Client ID/Secret) blank",
243
232
  "Click Add → you'll be redirected to sign in to Synap Cloud and approve → done",
244
- 'Then ask Claude to "list my Synap pods" to confirm',
233
+ 'Then ask Claude to "list my Synap pods" (list_pods) and connect one (connect_pod)',
245
234
  ];
246
235
  if (opts.json) {
247
- console.log(JSON.stringify({ url, cpOrigin: finalCpOrigin, derived: wasDerived, steps }, null, 2));
236
+ console.log(JSON.stringify({ url, cpOrigin: finalCpOrigin, derived: source, steps }, null, 2));
248
237
  return;
249
238
  }
250
239
  log.heading("\nConnect claude.ai (web) to Synap");
251
- if (!derived && !opts.cpUrl) {
252
- log.warn("Could not derive the control-plane URL from your pod host — pass --cp-url <url> (e.g. https://api.yourdomain.com).");
240
+ if (source === "managed-fallback" && !opts.cpUrl) {
241
+ console.log(chalk.dim(" Using managed Cloud MCP (https://api.synap.live). Pass --cp-url for a self-hosted control plane. No key minted."));
253
242
  }
254
243
  console.log(` ${chalk.dim("URL")} ${url}`);
255
244
  console.log();
256
245
  steps.forEach((step, i) => console.log(` ${chalk.bold(`${i + 1}.`)} ${step}`));
257
246
  console.log();
258
- console.log(chalk.dim("This connects via the Synap control plane. A direct pod connection (no control plane) is coming."));
247
+ console.log(chalk.dim("Cloud MCP does not store your data. After OAuth, list_pods then connect_pod (you still need a pod for useful work)."));
259
248
  }
260
249
  catch (e) {
261
250
  log.error(`Could not build the claude.ai connection: ${e.message}`);
262
251
  process.exit(1);
263
252
  }
264
253
  }
254
+ /**
255
+ * `synap mcp ui-setup <client>` — print the exact form fields to fill in a
256
+ * client's MCP/Connector UI. Supports ChatGPT (API key), Codex, Cursor,
257
+ * VS Code, Claude Desktop, and generic clients.
258
+ */
259
+ export async function mcpUiSetup(client, opts) {
260
+ try {
261
+ const hubCfg = await resolveHubConfig({ podUrl: opts.podUrl, apiKey: opts.apiKey });
262
+ const { url, workspaceId, projectId } = resolveMcpTarget(hubCfg, { workspace: opts.workspace, project: opts.project });
263
+ const { hubApiKey, agentUserId } = await provisionAgentKey(hubCfg.podUrl, hubCfg.apiKey, "generic", { requireApproval: false });
264
+ const normalizedClient = client.toLowerCase().replace(/-/g, "");
265
+ let output = "";
266
+ // The key never reaches stdout or argv: fields show it redacted; the full
267
+ // material is written 0600 and clients reference it through an env var.
268
+ const keyShown = redactKey(hubApiKey);
269
+ const snippetFiles = writeMcpSnippetFiles(url, hubApiKey, agentUserId);
270
+ const clientConfigs = {
271
+ chatgpt: {
272
+ name: "ChatGPT (API key)",
273
+ format: "http",
274
+ fields: {
275
+ "Connector Name": "Synap",
276
+ "URL": url,
277
+ "Auth Type": "API Key",
278
+ "API Key": `${keyShown} (full key: ${snippetFiles.envFile})`,
279
+ },
280
+ notes: [
281
+ "ChatGPT → Settings → Connectors → Add custom connector",
282
+ "Paste the URL and API Key exactly as shown above",
283
+ `If your build shows a Header field instead: Authorization: Bearer <key> (full key in ${snippetFiles.envFile}, 0600)`,
284
+ ],
285
+ },
286
+ chatgptoauth: {
287
+ name: "ChatGPT (OAuth via Control Plane)",
288
+ format: "http",
289
+ fields: {
290
+ "Connector Name": "Synap (Control Plane)",
291
+ "URL": "https://api.synap.live/mcp",
292
+ "Auth Type": "OAuth",
293
+ "API Key": "(leave blank — OAuth flow)",
294
+ },
295
+ notes: [
296
+ "ChatGPT → Settings → Connectors → Add custom connector",
297
+ "Use the Control Plane OAuth URL (multi-pod support)",
298
+ "After connecting, ask ChatGPT: 'list my Synap pods' then 'connect pod <name>'",
299
+ ],
300
+ },
301
+ codex: {
302
+ name: "OpenAI Codex (config.toml)",
303
+ format: "file",
304
+ fields: {
305
+ "Config file": "~/.codex/config.toml",
306
+ "Section to add": `[mcp_servers.synap]`,
307
+ "url": url,
308
+ "http_headers": `{ Authorization = "Bearer ${keyShown}" }`,
309
+ "startup_timeout_sec": "30",
310
+ "enabled": "true",
311
+ },
312
+ notes: [
313
+ `Open ~/.codex/config.toml and add the [mcp_servers.synap] section (replace ${keyShown} with the full key from ${snippetFiles.envFile}, 0600)`,
314
+ "Restart Codex CLI to pick up the new MCP server",
315
+ "The synap tool set will appear in agent mode",
316
+ ],
317
+ },
318
+ cursor: {
319
+ name: "Cursor (mcp.json)",
320
+ format: "http",
321
+ fields: {
322
+ "Config file": "~/.cursor/mcp.json",
323
+ "mcpServers.synap.url": url,
324
+ "mcpServers.synap.headers.Authorization": `Bearer \${env:${MCP_KEY_ENV}}`,
325
+ },
326
+ notes: [
327
+ "Cursor reads native HTTP MCP format from ~/.cursor/mcp.json",
328
+ "Restart Cursor. The synap tool set will appear in agent mode.",
329
+ ],
330
+ },
331
+ vscode: {
332
+ name: "VS Code (Kilo Code / Cline / Continue / Copilot)",
333
+ format: "http",
334
+ fields: {
335
+ "Config file": "~/Library/Application Support/Code/User/mcp.json (macOS)",
336
+ "servers.synap.type": "http",
337
+ "servers.synap.url": url,
338
+ "servers.synap.headers.Authorization": `Bearer \${env:${MCP_KEY_ENV}}`,
339
+ },
340
+ notes: [
341
+ "VS Code 1.99+ uses 'servers' format (not mcpServers)",
342
+ "Picked up automatically by Kilo Code, Cline, Continue, and GitHub Copilot",
343
+ "Reload VS Code (or open the MCP panel) to activate",
344
+ ],
345
+ },
346
+ "claude-desktop": {
347
+ name: "Claude Desktop (stdio bridge)",
348
+ format: "stdio",
349
+ fields: {
350
+ "Config file": "~/Library/Application Support/Claude/claude_desktop_config.json (macOS)",
351
+ "mcpServers.synap.command": "npx",
352
+ "mcpServers.synap.args": `-y mcp-remote ${url} --header "Authorization:\${SYNAP_AUTH}"`,
353
+ "mcpServers.synap.env.SYNAP_AUTH": `Bearer ${keyShown} (real value: "mcpRemote" block in ${snippetFiles.jsonFile})`,
354
+ },
355
+ notes: [
356
+ "Claude Desktop only supports stdio MCP — uses mcp-remote bridge",
357
+ "Fully quit Claude Desktop (Cmd+Q), then relaunch",
358
+ "Look for the MCP tools icon under the input box — 'synap' should appear",
359
+ ],
360
+ },
361
+ "claude-code": {
362
+ name: "Claude Code (native HTTP MCP)",
363
+ format: "http",
364
+ fields: {
365
+ "Command": `source ${snippetFiles.envFile} && claude mcp add --transport http synap-${new URL(hubCfg.podUrl).hostname.split(".")[1] || "pod"} ${url} --header 'Authorization: Bearer \${${MCP_KEY_ENV}}' --scope user`,
366
+ },
367
+ notes: [
368
+ `The key stays out of the command: it is read from $${MCP_KEY_ENV} when Claude Code starts — launch it from a shell that sourced ${snippetFiles.envFile}`,
369
+ "Relaunch Claude Code to load the tools",
370
+ ],
371
+ },
372
+ generic: {
373
+ name: "Generic MCP Client (HTTP)",
374
+ format: "http",
375
+ fields: {
376
+ "URL": url,
377
+ "Headers": `Authorization: Bearer ${keyShown}`,
378
+ },
379
+ notes: [
380
+ "Paste URL and add Authorization header in your client's MCP config",
381
+ "Supports any MCP-compatible client with HTTP transport",
382
+ ],
383
+ },
384
+ };
385
+ const clientConfig = clientConfigs[normalizedClient] || clientConfigs.generic;
386
+ if (opts.json) {
387
+ console.log(JSON.stringify({ client: clientConfig.name, format: clientConfig.format, fields: clientConfig.fields, notes: clientConfig.notes }, null, 2));
388
+ return;
389
+ }
390
+ log.heading(`MCP UI Setup — ${clientConfig.name}`);
391
+ log.blank();
392
+ log.info("Form fields to fill in your client's MCP/Connector settings:");
393
+ log.blank();
394
+ for (const [key, value] of Object.entries(clientConfig.fields)) {
395
+ console.log(` ${chalk.bold(key)}: ${chalk.cyan(value)}`);
396
+ }
397
+ log.blank();
398
+ log.info("Notes:");
399
+ for (const note of clientConfig.notes) {
400
+ console.log(` • ${note}`);
401
+ }
402
+ log.blank();
403
+ log.dim("Agent key provisioned for this session. Re-run with --name to target another pod.");
404
+ }
405
+ catch (e) {
406
+ log.error(`Could not build UI setup: ${e.message}`);
407
+ process.exit(1);
408
+ }
409
+ }
410
+ /**
411
+ * `synap mcp bridge` — the stdio MCP server Claude Code spawns when it is
412
+ * connected through the bridge (`synap mcp use-bridge`). Forwards every
413
+ * message to the pod's /mcp and names the Claude Code conversation it runs in,
414
+ * so the work it does can be reopened there. See lib/mcp-bridge.ts.
415
+ *
416
+ * stdout IS the protocol — nothing but JSON-RPC may be written to it.
417
+ */
418
+ export async function mcpBridge(opts) {
419
+ const { runMcpBridge } = await import("../lib/mcp-bridge.js");
420
+ const { mcpBridgeHeaders } = await import("../lib/conversation-headers.js");
421
+ const fromEnv = process.env.SYNAP_MCP_API_KEY || process.env.SYNAP_HUB_API_KEY;
422
+ const cfg = fromEnv && opts.url ? null : await resolveHubConfig();
423
+ const apiKey = fromEnv || cfg?.apiKey;
424
+ const url = opts.url || (cfg ? buildMcpUrl(cfg.podUrl) : undefined);
425
+ if (!apiKey || !url) {
426
+ process.stderr.write("[synap mcp bridge] no pod key or URL — run `synap init`\n");
427
+ process.exit(1);
428
+ }
429
+ // The spawn-time id (a stdio server's env), never a lens fallback.
430
+ await runMcpBridge({
431
+ url,
432
+ apiKey,
433
+ headers: mcpBridgeHeaders(process.env.CLAUDE_CODE_SESSION_ID),
434
+ });
435
+ }
436
+ /**
437
+ * `synap mcp use-bridge [--off]` — switch Claude Code's MCP connection to the
438
+ * stdio bridge (or back to direct http), re-using the key `synap init` stored.
439
+ */
440
+ export async function mcpUseBridge(opts) {
441
+ const { setClaudeCodeMcpTransport } = await import("../lib/targets.js");
442
+ const name = setClaudeCodeMcpTransport(opts.off ? "http" : "bridge");
443
+ if (!name) {
444
+ log.error("Claude Code is not connected to a pod yet — run `synap init` first.");
445
+ process.exitCode = 1;
446
+ return;
447
+ }
448
+ log.dim(opts.off
449
+ ? "Claude Code talks to the pod directly again; conversations are no longer named on MCP calls."
450
+ : "Each Claude Code conversation is now named on its MCP calls, so its work can be reopened with `claude --resume <id>`.");
451
+ }
265
452
  //# sourceMappingURL=mcp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAkB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAU1G;;;;;;;mDAOmD;AACnD,SAAS,gBAAgB,CACvB,GAAc,EACd,IAAiB;IAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,sCAAsC;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,oBAAoB;IACpD,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC;QACpD,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAuC;IAEvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEpE,yEAAyE;QACzE,yEAAyE;QACzE,mDAAmD;QACnD,sEAAsE;QACtE,2EAA2E;QAC3E,oCAAoC;QACpC,MAAM,aAAa,GAAG;YACpB,aAAa;YACb,gBAAgB;YAChB,QAAQ;YACR,SAAS;YACT,OAAO;YACP,WAAW;YACX,SAAS;SACV,CAAC;QACF,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAChD,CAAC,CAAC,IAAI,CAAC,MAAM;YACb,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,iBAAiB,CACxD,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,MAAM,EACV,SAAS,EACT,EAAE,eAAe,EAAE,KAAK,EAAE,CAC3B,CAAC;QAEF,wEAAwE;QACxE,wEAAwE;QACxE,2EAA2E;QAC3E,0EAA0E;QAC1E,gEAAgE;QAChE,MAAM,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE;YAC1E,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,+BAA+B;SAC3D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,GAAG;gBACH,MAAM,EAAE,SAAS;gBACjB,WAAW;gBACX,WAAW,EAAE,WAAW,IAAI,IAAI;gBAChC,SAAS,EAAE,SAAS,IAAI,IAAI;aAC7B,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,kBAAkB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,mCAAoC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAiB;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAE9C,uEAAuE;QACvE,2EAA2E;QAC3E,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,SAA6B,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,MAAM,EAAE;gBACxC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YACH,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2B,CAAC;gBAC1D,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QAED,iCAAiC;QACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,sBAAsB,EAAE;gBACxD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,EAAE;gBAClD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YACH,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACjE,CAAC;YACF,OAAO;QACT,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,SAAS,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAChK,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CACnG,CAAC;QACF,IAAI,WAAW;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;QAE7D,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC1B,GAAG,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CACP,4GAA4G,CAC7G,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,kBAAmB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;YAC3C,mEAAmE;YACnE,mEAAmE;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxE,OAAO,EAAE,QAAQ,EAAE,eAAe,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAsC;IAEtC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,wBAAwB,CAAC;QAC5C,mEAAmE;QACnE,IAAI,MAAM,GAAgD,kBAAkB,CAAC;QAC7E,IAAI,QAAQ,GAAG,UAAU,CAAC;QAE1B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzC,MAAM,GAAG,UAAU,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;oBAC5B,MAAM,GAAG,SAAS,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,wEAAwE;oBACxE,QAAQ,GAAG,UAAU,CAAC;oBACtB,MAAM,GAAG,kBAAkB,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wEAAwE;gBACxE,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM,GAAG,kBAAkB,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,GAAG,aAAa,MAAM,CAAC;QAEnC,MAAM,KAAK,GAAG;YACZ,+DAA+D;YAC/D,aAAa;YACb,QAAQ,GAAG,EAAE;YACb,wDAAwD;YACxD,+EAA+E;YAC/E,mFAAmF;SACpF,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EACxD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,mHAAmH,CACpH,CACF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,qHAAqH,CACtH,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,6CAA8C,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,IAA+G;IAE/G,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpF,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAEvH,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,iBAAiB,CACxD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,EACb,SAAS,EACT,EAAE,eAAe,EAAE,KAAK,EAAE,CAC3B,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,0EAA0E;QAC1E,wEAAwE;QACxE,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAEvE,MAAM,aAAa,GAAyH;YAC1I,OAAO,EAAE;gBACP,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,gBAAgB,EAAE,OAAO;oBACzB,KAAK,EAAE,GAAG;oBACV,WAAW,EAAE,SAAS;oBACtB,SAAS,EAAE,GAAG,QAAQ,eAAe,YAAY,CAAC,OAAO,GAAG;iBAC7D;gBACD,KAAK,EAAE;oBACL,wDAAwD;oBACxD,kDAAkD;oBAClD,wFAAwF,YAAY,CAAC,OAAO,SAAS;iBACtH;aACF;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,mCAAmC;gBACzC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,gBAAgB,EAAE,uBAAuB;oBACzC,KAAK,EAAE,4BAA4B;oBACnC,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,4BAA4B;iBACxC;gBACD,KAAK,EAAE;oBACL,wDAAwD;oBACxD,qDAAqD;oBACrD,+EAA+E;iBAChF;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,4BAA4B;gBAClC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,aAAa,EAAE,sBAAsB;oBACrC,gBAAgB,EAAE,qBAAqB;oBACvC,KAAK,EAAE,GAAG;oBACV,cAAc,EAAE,6BAA6B,QAAQ,KAAK;oBAC1D,qBAAqB,EAAE,IAAI;oBAC3B,SAAS,EAAE,MAAM;iBAClB;gBACD,KAAK,EAAE;oBACL,8EAA8E,QAAQ,2BAA2B,YAAY,CAAC,OAAO,SAAS;oBAC9I,iDAAiD;oBACjD,8CAA8C;iBAC/C;aACF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,aAAa,EAAE,oBAAoB;oBACnC,sBAAsB,EAAE,GAAG;oBAC3B,wCAAwC,EAAE,iBAAiB,WAAW,GAAG;iBAC1E;gBACD,KAAK,EAAE;oBACL,6DAA6D;oBAC7D,+DAA+D;iBAChE;aACF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,kDAAkD;gBACxD,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,aAAa,EAAE,0DAA0D;oBACzE,oBAAoB,EAAE,MAAM;oBAC5B,mBAAmB,EAAE,GAAG;oBACxB,qCAAqC,EAAE,iBAAiB,WAAW,GAAG;iBACvE;gBACD,KAAK,EAAE;oBACL,sDAAsD;oBACtD,2EAA2E;oBAC3E,oDAAoD;iBACrD;aACF;YACD,gBAAgB,EAAE;gBAChB,IAAI,EAAE,+BAA+B;gBACrC,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE;oBACN,aAAa,EAAE,yEAAyE;oBACxF,0BAA0B,EAAE,KAAK;oBACjC,uBAAuB,EAAE,iBAAiB,GAAG,0CAA0C;oBACvF,iCAAiC,EAAE,UAAU,QAAQ,sCAAsC,YAAY,CAAC,QAAQ,GAAG;iBACpH;gBACD,KAAK,EAAE;oBACL,iEAAiE;oBACjE,kDAAkD;oBAClD,yEAAyE;iBAC1E;aACF;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,+BAA+B;gBACrC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,SAAS,EAAE,UAAU,YAAY,CAAC,OAAO,6CAA6C,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,uCAAuC,WAAW,iBAAiB;iBACvN;gBACD,KAAK,EAAE;oBACL,sDAAsD,WAAW,kEAAkE,YAAY,CAAC,OAAO,EAAE;oBACzJ,wCAAwC;iBACzC;aACF;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,2BAA2B;gBACjC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,KAAK,EAAE,GAAG;oBACV,SAAS,EAAE,yBAAyB,QAAQ,EAAE;iBAC/C;gBACD,KAAK,EAAE;oBACL,oEAAoE;oBACpE,wDAAwD;iBACzD;aACF;SACF,CAAC;QAEF,MAAM,YAAY,GAAG,aAAa,CAAC,gBAAgB,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC;QAE9E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACzJ,OAAO;QACT,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,kBAAkB,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACzE,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;IAE/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,6BAA8B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAsB;IACpD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC9D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/E,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,IAAI,GAAG,EAAE,MAAM,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,mEAAmE;IACnE,MAAM,YAAY,CAAC;QACjB,GAAG;QACH,MAAM;QACN,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAuB;IACxD,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACjF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,GAAG;QACN,CAAC,CAAC,8FAA8F;QAChG,CAAC,CAAC,uHAAuH,CAC5H,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,59 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ /**
3
+ * `synap observe` must only send a `uo_category` the pod accepts. The pod's
4
+ * enum is USER_OBSERVATION_CATEGORIES (synap-backend
5
+ * packages/api/src/services/knowledge/remember-fact.ts); a value outside it is
6
+ * filed as a proposal that then fails on approval ("not in enum"), as five
7
+ * founder preferences did on 2026-10-27 with the old default `preference`.
8
+ * Driven through the real command with the hub POST captured at the client
9
+ * boundary. Not covered: a future change of the pod's enum (this list mirrors
10
+ * it by hand; the pod remains the authority).
11
+ */
12
+ const posted = [];
13
+ vi.mock("../lib/hub-client.js", () => ({
14
+ resolveHubConfig: async () => ({}),
15
+ hubGet: async () => ({}),
16
+ hubPost: async (_path, body) => {
17
+ posted.push(body);
18
+ return { id: "e1", status: "proposed" };
19
+ },
20
+ renderHubError: () => { },
21
+ }));
22
+ vi.mock("../lib/capture-lane.js", () => ({ reportWrite: async () => { } }));
23
+ import { observeWrite } from "./observe.js";
24
+ const POD_ENUM = [
25
+ "working_style",
26
+ "communication",
27
+ "focus",
28
+ "preferences",
29
+ "habits",
30
+ "technical",
31
+ ];
32
+ const categoryOf = (i) => posted[i].properties.uo_category;
33
+ beforeEach(() => {
34
+ posted.length = 0;
35
+ vi.spyOn(process, "exit").mockImplementation(((code) => {
36
+ throw new Error(`process.exit(${code})`);
37
+ }));
38
+ vi.spyOn(console, "error").mockImplementation(() => { });
39
+ });
40
+ afterEach(() => vi.restoreAllMocks());
41
+ describe("synap observe — the category it sends", () => {
42
+ it("defaults to a category the pod accepts", async () => {
43
+ await observeWrite("Prefers async written updates", {});
44
+ expect(posted).toHaveLength(1);
45
+ expect(POD_ENUM).toContain(categoryOf(0));
46
+ expect(categoryOf(0)).toBe("preferences");
47
+ });
48
+ it("accepts every category of the pod's enum, unchanged", async () => {
49
+ for (const category of POD_ENUM) {
50
+ await observeWrite(`An observation about ${category}`, { category });
51
+ }
52
+ expect(posted.map((_, i) => categoryOf(i))).toEqual(POD_ENUM);
53
+ });
54
+ it("refuses a category the pod would reject, before anything is sent", async () => {
55
+ await expect(observeWrite("x", { category: "preference" })).rejects.toThrow("process.exit(1)");
56
+ expect(posted).toHaveLength(0);
57
+ });
58
+ });
59
+ //# sourceMappingURL=observe.category.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe.category.test.js","sourceRoot":"","sources":["../../src/commands/observe.category.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { type BaseOpts } from "./data.js";
2
+ type ObserveCategory = "working_style" | "communication" | "focus" | "preferences" | "habits" | "technical";
3
+ export declare const VALID_CATEGORIES: ObserveCategory[];
2
4
  export declare function observeWrite(text: string, opts: BaseOpts & {
3
5
  category?: string;
4
6
  confidence?: string;
@@ -7,3 +9,4 @@ export declare function observeRecall(query: string, opts: BaseOpts & {
7
9
  category?: string;
8
10
  limit?: string;
9
11
  }): Promise<void>;
12
+ export {};
@@ -1,21 +1,23 @@
1
1
  import chalk from "chalk";
2
+ import { shortenTitle } from "@synap-core/types/titles";
2
3
  import { log } from "../utils/logger.js";
3
4
  import { resolveHubConfig, hubGet, hubPost, renderHubError } from "../lib/hub-client.js";
4
5
  import { unwrapList } from "../lib/unwrapList.js";
5
6
  import { reportWrite } from "../lib/capture-lane.js";
6
7
  import { parseLimit } from "./data.js";
7
- const VALID_CATEGORIES = [
8
+ export const VALID_CATEGORIES = [
8
9
  "working_style",
9
10
  "communication",
10
11
  "focus",
12
+ "preferences",
13
+ "habits",
11
14
  "technical",
12
- "preference",
13
15
  ];
14
16
  // ─── observeWrite ─────────────────────────────────────────────────────────────
15
17
  export async function observeWrite(text, opts) {
16
18
  try {
17
19
  const cfg = await resolveHubConfig(opts);
18
- const category = (opts.category ?? "preference");
20
+ const category = (opts.category ?? "preferences");
19
21
  if (!VALID_CATEGORIES.includes(category)) {
20
22
  console.error(chalk.red(`Invalid category: ${category}. Must be one of: ${VALID_CATEGORIES.join(" | ")}`));
21
23
  process.exit(1);
@@ -27,7 +29,7 @@ export async function observeWrite(text, opts) {
27
29
  }
28
30
  const res = await hubPost("/entities", {
29
31
  profileSlug: "user_observation",
30
- title: text.slice(0, 80),
32
+ title: shortenTitle(text),
31
33
  properties: {
32
34
  uo_observation: text,
33
35
  uo_category: category,
@@ -79,7 +81,7 @@ export async function observeRecall(query, opts) {
79
81
  log.blank();
80
82
  for (const e of entities) {
81
83
  const props = (e.properties ?? {});
82
- const category = chalk.cyan(String(props.uo_category ?? "preference"));
84
+ const category = chalk.cyan(String(props.uo_category ?? "preferences"));
83
85
  const observation = String(props.uo_observation ?? e.title ?? "");
84
86
  const confidence = Number(props.uo_confidence ?? 0.5).toFixed(2);
85
87
  log.info(`${category} ${chalk.dim(`conf:${confidence}`)} ${observation}`);
@@ -1 +1 @@
1
- {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/commands/observe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/commands/observe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ /**
3
+ * `synap observe` names the observation through the one title door
4
+ * (`shortenTitle`, `@synap-core/types/titles`): first line, word boundary, no
5
+ * "…" — never `text.slice(0, 80)`. Driven through the real command with the
6
+ * hub POST captured at the client boundary.
7
+ */
8
+ const posted = [];
9
+ vi.mock("../lib/hub-client.js", () => ({
10
+ resolveHubConfig: async () => ({}),
11
+ hubGet: async () => ({}),
12
+ hubPost: async (_path, body) => {
13
+ posted.push(body);
14
+ return { id: "e1", status: "proposed" };
15
+ },
16
+ renderHubError: () => { },
17
+ }));
18
+ vi.mock("../lib/capture-lane.js", () => ({ reportWrite: async () => { } }));
19
+ import { observeWrite } from "./observe.js";
20
+ beforeEach(() => {
21
+ posted.length = 0;
22
+ });
23
+ describe("synap observe — the stored title", () => {
24
+ it("is the first line, cut at a word boundary, never mid-word", async () => {
25
+ const text = "Prefers async written updates over meetings for anything that is not urgent or blocking the team\nSeen three times this week.";
26
+ await observeWrite(text, {});
27
+ expect(posted).toHaveLength(1);
28
+ const title = posted[0].title;
29
+ expect(title.length).toBeLessThanOrEqual(80);
30
+ expect(text.startsWith(title)).toBe(true);
31
+ expect(text[title.length]).toBe(" ");
32
+ expect(title).not.toMatch(/(…|\.\.\.)$/);
33
+ // The full observation is still stored.
34
+ expect(posted[0].properties.uo_observation).toBe(text);
35
+ });
36
+ });
37
+ //# sourceMappingURL=observe.title.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe.title.test.js","sourceRoot":"","sources":["../../src/commands/observe.title.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,GAAmC,EAAE,CAAC;AAClD,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,KAAa,EAAE,IAA6B,EAAE,EAAE;QAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC1C,CAAC;IACD,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;CACzB,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,UAAU,CAAC,GAAG,EAAE;IACd,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,IAAI,GACR,+HAA+H,CAAC;QAClI,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,KAAe,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACzC,wCAAwC;QACxC,MAAM,CACH,MAAM,CAAC,CAAC,CAAE,CAAC,UAAsC,CAAC,cAAc,CAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}