@synap-core/cli 1.11.0 → 1.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/README.md +23 -198
  2. package/dist/build-info.json +6 -0
  3. package/dist/commands/agent-run.js +3 -2
  4. package/dist/commands/agent-run.js.map +1 -1
  5. package/dist/commands/agents.d.ts +33 -17
  6. package/dist/commands/agents.js +203 -237
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/app.d.ts +143 -0
  9. package/dist/commands/app.js +523 -0
  10. package/dist/commands/app.js.map +1 -0
  11. package/dist/commands/automate.d.ts +21 -0
  12. package/dist/commands/automate.js +42 -0
  13. package/dist/commands/automate.js.map +1 -0
  14. package/dist/commands/automation-schema.test.d.ts +16 -0
  15. package/dist/commands/automation-schema.test.js +77 -0
  16. package/dist/commands/automation-schema.test.js.map +1 -0
  17. package/dist/commands/automation.d.ts +12 -0
  18. package/dist/commands/automation.js +80 -35
  19. package/dist/commands/automation.js.map +1 -1
  20. package/dist/commands/bridge-setup.d.ts +14 -1
  21. package/dist/commands/bridge-setup.js +392 -128
  22. package/dist/commands/bridge-setup.js.map +1 -1
  23. package/dist/commands/cap-connections.d.ts +4 -4
  24. package/dist/commands/cap-connections.js +14 -14
  25. package/dist/commands/cap-connections.js.map +1 -1
  26. package/dist/commands/capability.d.ts +2 -0
  27. package/dist/commands/capability.js +218 -168
  28. package/dist/commands/capability.js.map +1 -1
  29. package/dist/commands/catalog.d.ts +275 -0
  30. package/dist/commands/catalog.js +481 -0
  31. package/dist/commands/catalog.js.map +1 -0
  32. package/dist/commands/cell.d.ts +155 -8
  33. package/dist/commands/cell.js +416 -40
  34. package/dist/commands/cell.js.map +1 -1
  35. package/dist/commands/centrality.js +1 -13
  36. package/dist/commands/centrality.js.map +1 -1
  37. package/dist/commands/connect.d.ts +38 -13
  38. package/dist/commands/connect.js +68 -167
  39. package/dist/commands/connect.js.map +1 -1
  40. package/dist/commands/connections.d.ts +3 -2
  41. package/dist/commands/connections.js +95 -25
  42. package/dist/commands/connections.js.map +1 -1
  43. package/dist/commands/context.js +7 -1
  44. package/dist/commands/context.js.map +1 -1
  45. package/dist/commands/data-extra.d.ts +34 -0
  46. package/dist/commands/data-extra.js +193 -23
  47. package/dist/commands/data-extra.js.map +1 -1
  48. package/dist/commands/data.d.ts +120 -2
  49. package/dist/commands/data.js +293 -20
  50. package/dist/commands/data.js.map +1 -1
  51. package/dist/commands/diagnose.d.ts +66 -4
  52. package/dist/commands/diagnose.js +285 -28
  53. package/dist/commands/diagnose.js.map +1 -1
  54. package/dist/commands/doc.d.ts +11 -4
  55. package/dist/commands/doc.js +39 -14
  56. package/dist/commands/doc.js.map +1 -1
  57. package/dist/commands/doctor.d.ts +112 -3
  58. package/dist/commands/doctor.js +657 -32
  59. package/dist/commands/doctor.js.map +1 -1
  60. package/dist/commands/explain.js +5 -5
  61. package/dist/commands/explain.js.map +1 -1
  62. package/dist/commands/import.d.ts +368 -13
  63. package/dist/commands/import.js +1064 -54
  64. package/dist/commands/import.js.map +1 -1
  65. package/dist/commands/init.d.ts +20 -9
  66. package/dist/commands/init.js +433 -973
  67. package/dist/commands/init.js.map +1 -1
  68. package/dist/commands/keys.d.ts +1 -0
  69. package/dist/commands/keys.js +15 -2
  70. package/dist/commands/keys.js.map +1 -1
  71. package/dist/commands/knowledge.d.ts +22 -6
  72. package/dist/commands/knowledge.js +117 -55
  73. package/dist/commands/knowledge.js.map +1 -1
  74. package/dist/commands/lens.d.ts +37 -1
  75. package/dist/commands/lens.js +192 -71
  76. package/dist/commands/lens.js.map +1 -1
  77. package/dist/commands/market-authoring.d.ts +29 -2
  78. package/dist/commands/market-authoring.js +348 -7
  79. package/dist/commands/market-authoring.js.map +1 -1
  80. package/dist/commands/market-official.d.ts +58 -0
  81. package/dist/commands/market-official.js +84 -0
  82. package/dist/commands/market-official.js.map +1 -0
  83. package/dist/commands/market.d.ts +400 -16
  84. package/dist/commands/market.js +1802 -146
  85. package/dist/commands/market.js.map +1 -1
  86. package/dist/commands/mcp.d.ts +60 -25
  87. package/dist/commands/mcp.js +251 -64
  88. package/dist/commands/mcp.js.map +1 -1
  89. package/dist/commands/open.d.ts +39 -9
  90. package/dist/commands/open.js +80 -25
  91. package/dist/commands/open.js.map +1 -1
  92. package/dist/commands/playbook.d.ts +42 -0
  93. package/dist/commands/playbook.js +162 -0
  94. package/dist/commands/playbook.js.map +1 -0
  95. package/dist/commands/pod.js +1 -1
  96. package/dist/commands/pod.js.map +1 -1
  97. package/dist/commands/pods.d.ts +5 -0
  98. package/dist/commands/pods.js +97 -116
  99. package/dist/commands/pods.js.map +1 -1
  100. package/dist/commands/proposals-actions.d.ts +62 -0
  101. package/dist/commands/proposals-actions.js +143 -8
  102. package/dist/commands/proposals-actions.js.map +1 -1
  103. package/dist/commands/proposals-await.d.ts +68 -0
  104. package/dist/commands/proposals-await.js +248 -0
  105. package/dist/commands/proposals-await.js.map +1 -0
  106. package/dist/commands/proton-setup.d.ts +73 -0
  107. package/dist/commands/proton-setup.js +577 -0
  108. package/dist/commands/proton-setup.js.map +1 -0
  109. package/dist/commands/providers.d.ts +23 -0
  110. package/dist/commands/providers.js +126 -1
  111. package/dist/commands/providers.js.map +1 -1
  112. package/dist/commands/raycast.js +6 -2
  113. package/dist/commands/raycast.js.map +1 -1
  114. package/dist/commands/rule.d.ts +150 -0
  115. package/dist/commands/rule.js +447 -0
  116. package/dist/commands/rule.js.map +1 -0
  117. package/dist/commands/session-wait.d.ts +111 -0
  118. package/dist/commands/session-wait.js +209 -0
  119. package/dist/commands/session-wait.js.map +1 -0
  120. package/dist/commands/sessions.d.ts +52 -0
  121. package/dist/commands/sessions.js +478 -58
  122. package/dist/commands/sessions.js.map +1 -1
  123. package/dist/commands/skill-manage.d.ts +21 -0
  124. package/dist/commands/skill-manage.js +136 -19
  125. package/dist/commands/skill-manage.js.map +1 -1
  126. package/dist/commands/skills.js +16 -0
  127. package/dist/commands/skills.js.map +1 -1
  128. package/dist/commands/status.d.ts +1 -4
  129. package/dist/commands/status.js +5 -34
  130. package/dist/commands/status.js.map +1 -1
  131. package/dist/commands/statusline.backoff.test.d.ts +13 -0
  132. package/dist/commands/statusline.backoff.test.js +100 -0
  133. package/dist/commands/statusline.backoff.test.js.map +1 -0
  134. package/dist/commands/statusline.js +16 -9
  135. package/dist/commands/statusline.js.map +1 -1
  136. package/dist/commands/sync-status.d.ts +12 -0
  137. package/dist/commands/sync-status.js +125 -0
  138. package/dist/commands/sync-status.js.map +1 -0
  139. package/dist/commands/templates-retire.d.ts +34 -0
  140. package/dist/commands/templates-retire.js +192 -0
  141. package/dist/commands/templates-retire.js.map +1 -0
  142. package/dist/commands/tools.js +6 -21
  143. package/dist/commands/tools.js.map +1 -1
  144. package/dist/commands/tracks.d.ts +51 -0
  145. package/dist/commands/tracks.js +291 -0
  146. package/dist/commands/tracks.js.map +1 -0
  147. package/dist/commands/update.d.ts +3 -11
  148. package/dist/commands/update.js +5 -134
  149. package/dist/commands/update.js.map +1 -1
  150. package/dist/commands/upload.d.ts +41 -3
  151. package/dist/commands/upload.js +120 -18
  152. package/dist/commands/upload.js.map +1 -1
  153. package/dist/commands/vendor.d.ts +28 -0
  154. package/dist/commands/vendor.js +110 -0
  155. package/dist/commands/vendor.js.map +1 -0
  156. package/dist/commands/versions.js +6 -0
  157. package/dist/commands/versions.js.map +1 -1
  158. package/dist/commands/view.js +10 -5
  159. package/dist/commands/view.js.map +1 -1
  160. package/dist/commands/whoami.d.ts +23 -3
  161. package/dist/commands/whoami.js +169 -23
  162. package/dist/commands/whoami.js.map +1 -1
  163. package/dist/commands/worker.d.ts +122 -0
  164. package/dist/commands/worker.js +435 -0
  165. package/dist/commands/worker.js.map +1 -0
  166. package/dist/commands/worker.test.d.ts +1 -0
  167. package/dist/commands/worker.test.js +116 -0
  168. package/dist/commands/worker.test.js.map +1 -0
  169. package/dist/commands/workspace-ops.d.ts +35 -0
  170. package/dist/commands/workspace-ops.js +153 -0
  171. package/dist/commands/workspace-ops.js.map +1 -0
  172. package/dist/index.d.ts +6 -6
  173. package/dist/index.js +900 -180
  174. package/dist/index.js.map +1 -1
  175. package/dist/lib/agent-connections.d.ts +31 -0
  176. package/dist/lib/agent-connections.js +33 -0
  177. package/dist/lib/agent-connections.js.map +1 -0
  178. package/dist/lib/agent-detect.d.ts +27 -0
  179. package/dist/lib/agent-detect.js +71 -0
  180. package/dist/lib/agent-detect.js.map +1 -0
  181. package/dist/lib/agent-door.d.ts +138 -0
  182. package/dist/lib/agent-door.js +426 -0
  183. package/dist/lib/agent-door.js.map +1 -0
  184. package/dist/lib/agents-config.d.ts +2 -0
  185. package/dist/lib/agents-config.js +4 -9
  186. package/dist/lib/agents-config.js.map +1 -1
  187. package/dist/lib/approval-poll.d.ts +31 -2
  188. package/dist/lib/approval-poll.js +20 -7
  189. package/dist/lib/approval-poll.js.map +1 -1
  190. package/dist/lib/atomic-file.d.ts +48 -0
  191. package/dist/lib/atomic-file.js +129 -0
  192. package/dist/lib/atomic-file.js.map +1 -0
  193. package/dist/lib/auth.d.ts +14 -9
  194. package/dist/lib/auth.js +44 -61
  195. package/dist/lib/auth.js.map +1 -1
  196. package/dist/lib/batch-approval.d.ts +85 -0
  197. package/dist/lib/batch-approval.js +170 -0
  198. package/dist/lib/batch-approval.js.map +1 -0
  199. package/dist/lib/capture-lane.d.ts +6 -5
  200. package/dist/lib/capture-lane.js +6 -5
  201. package/dist/lib/capture-lane.js.map +1 -1
  202. package/dist/lib/capture-structure.d.ts +230 -11
  203. package/dist/lib/capture-structure.js +251 -13
  204. package/dist/lib/capture-structure.js.map +1 -1
  205. package/dist/lib/catalog-templates.d.ts +59 -0
  206. package/dist/lib/catalog-templates.js +126 -0
  207. package/dist/lib/catalog-templates.js.map +1 -0
  208. package/dist/lib/cli-build.d.ts +19 -0
  209. package/dist/lib/cli-build.js +37 -0
  210. package/dist/lib/cli-build.js.map +1 -0
  211. package/dist/lib/conversation-headers.d.ts +18 -0
  212. package/dist/lib/conversation-headers.js +32 -0
  213. package/dist/lib/conversation-headers.js.map +1 -0
  214. package/dist/lib/cp-packages.d.ts +167 -11
  215. package/dist/lib/cp-packages.js +253 -21
  216. package/dist/lib/cp-packages.js.map +1 -1
  217. package/dist/lib/credential-class.d.ts +117 -0
  218. package/dist/lib/credential-class.js +116 -0
  219. package/dist/lib/credential-class.js.map +1 -0
  220. package/dist/lib/describe-lens.d.ts +35 -0
  221. package/dist/lib/describe-lens.js +40 -0
  222. package/dist/lib/describe-lens.js.map +1 -1
  223. package/dist/lib/device-connect.d.ts +125 -0
  224. package/dist/lib/device-connect.js +256 -0
  225. package/dist/lib/device-connect.js.map +1 -0
  226. package/dist/lib/directory-lens.d.ts +99 -0
  227. package/dist/lib/directory-lens.js +187 -0
  228. package/dist/lib/directory-lens.js.map +1 -0
  229. package/dist/lib/exporter-coverage.d.ts +71 -0
  230. package/dist/lib/exporter-coverage.js +97 -0
  231. package/dist/lib/exporter-coverage.js.map +1 -0
  232. package/dist/lib/hub-client.d.ts +29 -8
  233. package/dist/lib/hub-client.js +328 -55
  234. package/dist/lib/hub-client.js.map +1 -1
  235. package/dist/lib/init-connect.d.ts +41 -0
  236. package/dist/lib/init-connect.js +75 -0
  237. package/dist/lib/init-connect.js.map +1 -0
  238. package/dist/lib/init-exit.d.ts +24 -0
  239. package/dist/lib/init-exit.js +41 -0
  240. package/dist/lib/init-exit.js.map +1 -0
  241. package/dist/lib/init-flow.d.ts +25 -0
  242. package/dist/lib/init-flow.js +40 -0
  243. package/dist/lib/init-flow.js.map +1 -0
  244. package/dist/lib/init-handoff.d.ts +16 -0
  245. package/dist/lib/init-handoff.js +19 -0
  246. package/dist/lib/init-handoff.js.map +1 -0
  247. package/dist/lib/init-output.d.ts +18 -0
  248. package/dist/lib/init-output.js +43 -0
  249. package/dist/lib/init-output.js.map +1 -0
  250. package/dist/lib/init-pod.d.ts +45 -0
  251. package/dist/lib/init-pod.js +36 -0
  252. package/dist/lib/init-pod.js.map +1 -0
  253. package/dist/lib/installed.d.ts +210 -11
  254. package/dist/lib/installed.js +234 -36
  255. package/dist/lib/installed.js.map +1 -1
  256. package/dist/lib/key-approval.d.ts +57 -0
  257. package/dist/lib/key-approval.js +117 -0
  258. package/dist/lib/key-approval.js.map +1 -0
  259. package/dist/lib/key-diagnosis.d.ts +56 -0
  260. package/dist/lib/key-diagnosis.js +227 -0
  261. package/dist/lib/key-diagnosis.js.map +1 -0
  262. package/dist/lib/key-doctor.d.ts +136 -0
  263. package/dist/lib/key-doctor.js +286 -0
  264. package/dist/lib/key-doctor.js.map +1 -0
  265. package/dist/lib/key-locations.d.ts +120 -0
  266. package/dist/lib/key-locations.js +326 -0
  267. package/dist/lib/key-locations.js.map +1 -0
  268. package/dist/lib/key-source.d.ts +66 -0
  269. package/dist/lib/key-source.js +106 -0
  270. package/dist/lib/key-source.js.map +1 -0
  271. package/dist/lib/key-state.d.ts +70 -0
  272. package/dist/lib/key-state.js +115 -0
  273. package/dist/lib/key-state.js.map +1 -0
  274. package/dist/lib/kind-package.d.ts +181 -0
  275. package/dist/lib/kind-package.js +679 -0
  276. package/dist/lib/kind-package.js.map +1 -0
  277. package/dist/lib/knowledge-title.d.ts +24 -0
  278. package/dist/lib/knowledge-title.js +46 -0
  279. package/dist/lib/knowledge-title.js.map +1 -0
  280. package/dist/lib/knowledge-title.test.d.ts +1 -0
  281. package/dist/lib/knowledge-title.test.js +34 -0
  282. package/dist/lib/knowledge-title.test.js.map +1 -0
  283. package/dist/lib/machine-instance.d.ts +64 -0
  284. package/dist/lib/machine-instance.js +142 -0
  285. package/dist/lib/machine-instance.js.map +1 -0
  286. package/dist/lib/mcp-bridge.d.ts +42 -0
  287. package/dist/lib/mcp-bridge.js +147 -0
  288. package/dist/lib/mcp-bridge.js.map +1 -0
  289. package/dist/lib/mcp-bridge.test.d.ts +1 -0
  290. package/dist/lib/mcp-bridge.test.js +90 -0
  291. package/dist/lib/mcp-bridge.test.js.map +1 -0
  292. package/dist/lib/mcp-call.d.ts +30 -0
  293. package/dist/lib/mcp-call.js +107 -0
  294. package/dist/lib/mcp-call.js.map +1 -0
  295. package/dist/lib/mcp-snippets.d.ts +53 -0
  296. package/dist/lib/mcp-snippets.js +82 -0
  297. package/dist/lib/mcp-snippets.js.map +1 -0
  298. package/dist/lib/next-steps.d.ts +8 -0
  299. package/dist/lib/next-steps.js +31 -1
  300. package/dist/lib/next-steps.js.map +1 -1
  301. package/dist/lib/package-wire.d.ts +179 -0
  302. package/dist/lib/package-wire.js +68 -0
  303. package/dist/lib/package-wire.js.map +1 -0
  304. package/dist/lib/pair-link.d.ts +38 -0
  305. package/dist/lib/pair-link.js +68 -0
  306. package/dist/lib/pair-link.js.map +1 -0
  307. package/dist/lib/pod-wide.d.ts +40 -0
  308. package/dist/lib/pod-wide.js +46 -0
  309. package/dist/lib/pod-wide.js.map +1 -0
  310. package/dist/lib/pod.d.ts +66 -112
  311. package/dist/lib/pod.js +134 -412
  312. package/dist/lib/pod.js.map +1 -1
  313. package/dist/lib/project-ref.d.ts +9 -3
  314. package/dist/lib/project-ref.js +10 -4
  315. package/dist/lib/project-ref.js.map +1 -1
  316. package/dist/lib/review-credential.d.ts +119 -0
  317. package/dist/lib/review-credential.js +147 -0
  318. package/dist/lib/review-credential.js.map +1 -0
  319. package/dist/lib/safe-open.d.ts +49 -0
  320. package/dist/lib/safe-open.js +119 -0
  321. package/dist/lib/safe-open.js.map +1 -0
  322. package/dist/lib/session-lens.d.ts +40 -1
  323. package/dist/lib/session-lens.js +54 -4
  324. package/dist/lib/session-lens.js.map +1 -1
  325. package/dist/lib/superwhisper-import.d.ts +8 -0
  326. package/dist/lib/superwhisper-import.js +14 -7
  327. package/dist/lib/superwhisper-import.js.map +1 -1
  328. package/dist/lib/superwhisper-title.test.d.ts +1 -0
  329. package/dist/lib/superwhisper-title.test.js +18 -0
  330. package/dist/lib/superwhisper-title.test.js.map +1 -0
  331. package/dist/lib/targets.d.ts +134 -10
  332. package/dist/lib/targets.js +962 -258
  333. package/dist/lib/targets.js.map +1 -1
  334. package/dist/lib/template-file.d.ts +4 -0
  335. package/dist/lib/template-file.js.map +1 -1
  336. package/dist/lib/template-lifecycle.d.ts +217 -0
  337. package/dist/lib/template-lifecycle.js +433 -0
  338. package/dist/lib/template-lifecycle.js.map +1 -0
  339. package/dist/lib/template-steps.d.ts +88 -0
  340. package/dist/lib/template-steps.js +118 -0
  341. package/dist/lib/template-steps.js.map +1 -0
  342. package/dist/lib/time-ago.d.ts +2 -0
  343. package/dist/lib/time-ago.js +15 -0
  344. package/dist/lib/time-ago.js.map +1 -0
  345. package/dist/utils/logger.js +5 -2
  346. package/dist/utils/logger.js.map +1 -1
  347. package/package.json +23 -17
  348. package/skills/README.md +12 -10
  349. package/skills/agent-os/SKILL.md +214 -99
  350. package/skills/manifest.json +1 -1
  351. package/skills/onboard/SKILL.md +55 -26
  352. package/skills/synap/README.md +5 -8
  353. package/skills/synap/SKILL.md +1086 -283
  354. package/skills/synap/_order.txt +7 -0
  355. package/skills/synap/_skill.yaml +1 -1
  356. package/skills/synap/automations.md +15 -0
  357. package/skills/synap/capture.md +5 -0
  358. package/skills/synap/cli-operations.md +24 -18
  359. package/skills/synap/concepts.md +28 -0
  360. package/skills/synap/content-os.md +10 -1
  361. package/skills/synap/creative-loop.md +15 -10
  362. package/skills/synap/crm.md +21 -52
  363. package/skills/synap/document-embeds.md +141 -47
  364. package/skills/synap/escalation-ladder.md +20 -10
  365. package/skills/synap/focus-sessions.md +47 -21
  366. package/skills/synap/from-intent.md +142 -0
  367. package/skills/synap/governance-rules.md +4 -4
  368. package/skills/synap/governance.md +10 -7
  369. package/skills/synap/hand-off.md +33 -0
  370. package/skills/synap/inline-patterns.md +15 -7
  371. package/skills/synap/lenses.md +33 -15
  372. package/skills/synap/linking.md +41 -40
  373. package/skills/synap/mcp-remote-servers.md +64 -0
  374. package/skills/synap/mental-model.md +17 -15
  375. package/skills/synap/operating-mode-rules.md +1 -1
  376. package/skills/synap/processes.md +118 -0
  377. package/skills/synap/quick-reference.md +5 -1
  378. package/skills/synap/reading.md +3 -1
  379. package/skills/synap/reflexes.md +12 -42
  380. package/skills/synap/viewframe-cells.md +38 -5
  381. package/skills/synap/work-flow.md +1 -1
  382. package/skills/synap/work-model.md +96 -0
  383. package/skills/synap/worked-examples.md +4 -5
  384. package/skills/synap/workspace-design.md +14 -10
  385. package/skills/synap/writes.md +97 -24
  386. package/skills/synap/writing-titles.md +63 -0
  387. package/skills/synap-app/SKILL.md +2 -2
  388. package/skills/synap-app/_skill.yaml +1 -1
  389. package/skills/synap-app/install-commands.md +1 -1
  390. package/skills/synap-design/SKILL.md +474 -0
  391. package/skills/synap-design/_order.txt +4 -0
  392. package/skills/synap-design/_skill.yaml +21 -0
  393. package/skills/synap-design/loop.md +134 -0
  394. package/skills/synap-design/overview.md +44 -0
  395. package/skills/synap-design/principles.md +130 -0
  396. package/skills/synap-design/system.md +133 -0
  397. package/skills/synap-market/SKILL.md +306 -16
  398. package/skills/synap-market/_skill.yaml +1 -1
  399. package/skills/synap-market/author-and-publish.md +145 -8
  400. package/skills/synap-market/governance-and-catalog.md +7 -0
  401. package/skills/synap-market/install.md +79 -1
  402. package/skills/synap-market/overview.md +74 -6
  403. package/skills/synap-schema/SKILL.md +172 -10
  404. package/skills/synap-schema/_order.txt +2 -0
  405. package/skills/synap-schema/_skill.yaml +4 -2
  406. package/skills/synap-schema/common-mistakes.md +4 -2
  407. package/skills/synap-schema/discover-profiles.md +1 -1
  408. package/skills/synap-schema/entity-scope.md +15 -3
  409. package/skills/synap-schema/extend-first.md +29 -0
  410. package/skills/synap-schema/extend-vs-create.md +1 -1
  411. package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
  412. package/skills/synap-schema/property-types.md +1 -1
  413. package/skills/synap-schema/relations.md +1 -1
  414. package/skills/synap-ui/SKILL.md +19 -12
  415. package/skills/synap-ui/_skill.yaml +1 -1
  416. package/skills/synap-ui/ai-companion.md +1 -1
  417. package/skills/synap-ui/arranging-bento.md +2 -0
  418. package/skills/synap-ui/bento-layouts.md +10 -10
  419. package/skills/synap-ui/bento-recipes.md +313 -543
  420. package/skills/synap-ui/four-builds.md +5 -0
  421. package/skills/synap-ui/view-types.md +2 -2
  422. package/skills/synap-ui/widget-catalog.md +22 -278
  423. package/templates/automations/bookmark-enrichment.automation.json +290 -13
  424. package/templates/automations/url-bookmark-capture.automation.json +73 -11
  425. package/templates/skills/authoring-playbooks/SKILL.md +6 -3
  426. package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
  427. package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
  428. package/dist/commands/infra.d.ts +0 -21
  429. package/dist/commands/infra.js +0 -262
  430. package/dist/commands/infra.js.map +0 -1
  431. package/dist/commands/template.d.ts +0 -42
  432. package/dist/commands/template.js +0 -191
  433. package/dist/commands/template.js.map +0 -1
  434. package/dist/lib/browser-auth.d.ts +0 -35
  435. package/dist/lib/browser-auth.js +0 -170
  436. package/dist/lib/browser-auth.js.map +0 -1
  437. package/dist/lib/openclaw.d.ts +0 -32
  438. package/dist/lib/openclaw.js +0 -164
  439. package/dist/lib/openclaw.js.map +0 -1
  440. package/dist/lib/seed.d.ts +0 -13
  441. package/dist/lib/seed.js +0 -135
  442. package/dist/lib/seed.js.map +0 -1
  443. package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -1261
  444. package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -1647
  445. package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -1647
  446. package/node_modules/@synap/hub-rest-client/dist/index.js +0 -1231
  447. package/node_modules/@synap/hub-rest-client/package.json +0 -45
  448. package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1631
  449. package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
  450. package/node_modules/@synap/hub-rest-client/src/index.ts +0 -153
  451. package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -133
  452. package/node_modules/@synap/hub-rest-client/src/types.ts +0 -1299
@@ -0,0 +1,577 @@
1
+ /**
2
+ * synap proton-setup (HIDDEN)
3
+ *
4
+ * One-shot provisioning for the Proton Mail ↔ Synap bridge — a fork of
5
+ * `bridge-setup` (the Discord bridge) for the SOVEREIGN self-host Proton path:
6
+ * a locally-run, headless Proton Bridge decrypts Proton's end-to-end-encrypted
7
+ * mail and exposes it as plain IMAP/SMTP on localhost; this command wires that
8
+ * bridge up to a Synap pod. See the catalog's `synap-app/packages/
9
+ * workspace-templates/capabilities/proton.capability.json` for the template
10
+ * (vault ref `proton-account`, tool `proton`) and its documented
11
+ * MUTUAL-EXCLUSIVITY rule against the `mailgun` template's Proton-forward path
12
+ * — do not run both for the same mailbox (double-ingest).
13
+ *
14
+ * CREDENTIAL MODEL: the operator enters their Proton ACCOUNT credentials
15
+ * (email + password + optional TOTP seed + optional mailbox password for
16
+ * two-password-mode accounts) ONCE, here — NOT a Bridge-generated password.
17
+ * They are assembled into one JSON secret
18
+ * (`{"email","password","totpSeed","mailboxPassword"}`, last two optional) and
19
+ * stored in the pod vault under ref `proton-account`. The headless bridge redeems
20
+ * that secret and auto-logs-in with it on boot (implemented in the
21
+ * synap-proton-bridge repo); no manual `protonmail-bridge login` step remains. If
22
+ * Proton throws a one-time human-verification challenge (more likely on
23
+ * datacenter/VPS IPs), a URL appears in the bridge logs to click once — see
24
+ * `printNextSteps`.
25
+ *
26
+ * Automates everything that CAN be automated:
27
+ *
28
+ * 1. lets you CHOOSE which saved pod the bridge connects to (kept separate
29
+ * from your global CLI pod via the "proton" surface override), then
30
+ * resolves a durable hub key + workspace from it
31
+ * 2. sanity-checks pod reachability + key scope (GET /capabilities)
32
+ * 3. applies the bridge's OWN capability definition (POST /capabilities/apply)
33
+ * — read from the bridge repo so there is ONE source of truth
34
+ * 4. writes the bridge .env (pod creds + vault ref), preserving any other
35
+ * existing keys, and purges any raw Proton env credentials once vaulted
36
+ * 5. prints the one-time human-verification note (only a human can click it)
37
+ *
38
+ * Hidden on purpose: this is a dogfood/dev convenience, not a first-class
39
+ * surface. Not shown in `synap --help`.
40
+ *
41
+ * The bridge lands data POD-WIDE by default. An OPTIONAL project scope can be
42
+ * picked interactively (or via --project-id); --workspace-id remains an
43
+ * advanced/legacy escape hatch to pin a single workspace, never prompted.
44
+ *
45
+ * Usage:
46
+ * synap proton-setup [--bridge-dir <path>] [--pod <profile-name>]
47
+ * [--workspace-id <uuid>] [--project-id <uuid>] [--pod-url <url>] [--api-key <key>]
48
+ * [--proton-email <email>] [--proton-password <password>]
49
+ * [--proton-totp-seed <seed>] [--proton-mailbox-password <password>]
50
+ */
51
+ import path from "node:path";
52
+ import os from "node:os";
53
+ import fs from "node:fs";
54
+ import { writeSecretFile } from "../lib/atomic-file.js";
55
+ import { createRequire } from "node:module";
56
+ import chalk from "chalk";
57
+ import ora from "ora";
58
+ import prompts from "prompts";
59
+ import { hubGet, hubPost, resolveUserId, renderHubError } from "../lib/hub-client.js";
60
+ import { fetchProjects } from "../lib/project.js";
61
+ import { checkPodHealth, getSurfaceAgentKey, setSurfaceAgentKey, listPodProfiles, getSurfacePodName, setSurfacePod, podNotFoundError, } from "../lib/pod.js";
62
+ import { enrollAgentIfNeeded, ensureAgentGovernance, provisionAgentKey, configureAgentContext, } from "../lib/targets.js";
63
+ import { log, banner } from "../utils/logger.js";
64
+ const DEFAULT_BRIDGE_DIR = path.join(os.homedir(), "Documents", "Code", "synap-proton-bridge");
65
+ /**
66
+ * Pick the pod the BRIDGE connects to — independent of the global CLI pod.
67
+ *
68
+ * The bridge is the "proton" surface, so we resolve/persist its pod via the
69
+ * per-surface override (setSurfacePod) and NEVER touch the global activePod.
70
+ * That lets the operator keep a personal pod as their CLI default while the
71
+ * Proton bridge points at a different (e.g. team / client) pod.
72
+ *
73
+ * Order: explicit --pod-url/--api-key escape hatch → --pod <name> →
74
+ * single saved profile (auto) → interactive picker (default = the pod already
75
+ * assigned to the proton surface, else the CLI-active one).
76
+ */
77
+ async function resolveBridgePod(opts) {
78
+ // 1. Raw URL+key escape hatch — bypasses profiles entirely.
79
+ if (opts.podUrl && opts.apiKey) {
80
+ return {
81
+ cfg: { podUrl: opts.podUrl, apiKey: opts.apiKey, userId: process.env.SYNAP_USER_ID ?? "cli" },
82
+ podName: null,
83
+ };
84
+ }
85
+ const profiles = listPodProfiles();
86
+ if (profiles.length === 0) {
87
+ throw new Error("No pod profiles saved. Run `synap pods add` first, or pass --pod-url and --api-key.");
88
+ }
89
+ // 2. Resolve which profile to use.
90
+ let chosen;
91
+ if (opts.pod) {
92
+ chosen = profiles.find((p) => p.name === opts.pod);
93
+ if (!chosen)
94
+ throw podNotFoundError(opts.pod);
95
+ }
96
+ else if (profiles.length === 1) {
97
+ chosen = profiles[0];
98
+ log.dim(`Using your only saved pod profile: ${chosen.name}`);
99
+ }
100
+ else {
101
+ const defaultName = getSurfacePodName("proton") ?? profiles.find((p) => p.active)?.name ?? profiles[0].name;
102
+ const initial = Math.max(0, profiles.findIndex((p) => p.name === defaultName));
103
+ const { picked } = await prompts({
104
+ type: "select",
105
+ name: "picked",
106
+ message: "Which data pod should the Proton bridge connect to?",
107
+ initial,
108
+ choices: profiles.map((p) => ({
109
+ title: `${p.name}${p.active ? " (CLI default)" : ""}`,
110
+ description: p.config.podUrl,
111
+ value: p.name,
112
+ })),
113
+ });
114
+ if (!picked)
115
+ throw new Error("No pod selected — aborting.");
116
+ chosen = profiles.find((p) => p.name === picked);
117
+ }
118
+ // Remember the choice for the proton surface — without changing the CLI default.
119
+ setSurfacePod("proton", chosen.name);
120
+ const c = chosen.config;
121
+ return {
122
+ cfg: {
123
+ podUrl: c.podUrl,
124
+ apiKey: c.hubApiKey,
125
+ userId: c.agentUserId,
126
+ workspaceId: c.workspaceId || undefined,
127
+ },
128
+ podName: chosen.name,
129
+ };
130
+ }
131
+ export async function protonSetup(opts) {
132
+ banner();
133
+ log.heading("Proton Mail bridge — one-shot setup");
134
+ // ── 1. Choose the pod the BRIDGE connects to (independent of the CLI pod) ──
135
+ let cfg;
136
+ let bridgePodName = null;
137
+ try {
138
+ const resolved = await resolveBridgePod(opts);
139
+ cfg = resolved.cfg;
140
+ bridgePodName = resolved.podName;
141
+ }
142
+ catch (err) {
143
+ log.error(err.message);
144
+ log.dim("Run `synap init` or `synap pods add` first to save a pod + key.");
145
+ process.exit(1);
146
+ }
147
+ if (!cfg.podUrl || !cfg.apiKey) {
148
+ log.error("No pod URL / API key resolved. Run `synap init` first.");
149
+ process.exit(1);
150
+ }
151
+ // ── 2. Pod health ────────────────────────────────────────────────────────
152
+ const health = await checkPodHealth(cfg.podUrl);
153
+ if (!health.healthy) {
154
+ log.error(`Pod not reachable at ${cfg.podUrl}`);
155
+ process.exit(1);
156
+ }
157
+ log.success(`Pod healthy: ${cfg.podUrl}${bridgePodName ? ` (profile: ${bridgePodName})` : ""}`);
158
+ // ── 3. Resolve scope — pod-wide by default, workspace/project optional ───
159
+ const { workspaceId, projectId } = await resolveScope(opts, cfg);
160
+ log.dim(workspaceId ? `Workspace: ${workspaceId} (explicit pin)` : "Workspace: pod-wide (no pin)");
161
+ if (projectId)
162
+ log.dim(`Project: ${projectId}`);
163
+ // ── 3b. Key + scope sanity check (GET /capabilities needs hub-protocol.read) ─
164
+ const probe = ora("Checking key scope…").start();
165
+ try {
166
+ await hubGet("/capabilities", { workspaceId }, cfg);
167
+ probe.succeed("Key valid (hub-protocol scope OK)");
168
+ }
169
+ catch (err) {
170
+ probe.fail("Key/scope check failed");
171
+ renderHubError(err);
172
+ log.dim("The key may be expired or missing scope. Run `synap keys rotate` or `synap init`.");
173
+ process.exit(1);
174
+ }
175
+ // ── 3c. Provision a Proton AGENT key linked to the operator ──────────────
176
+ // The bridge must run as a real backend agent — NOT with the operator's raw
177
+ // key. An agent key carries linkedUserId=<operator>; the backend remaps its
178
+ // reads to the operator's data floor (hub-protocol-rest.ts auth middleware)
179
+ // while attributing writes to the agent for governed proposals. All the
180
+ // operator-key work below (capability apply, vault grant) keeps using `cfg`.
181
+ const agentKey = await provisionProtonAgentKey(cfg.podUrl, cfg.apiKey, cfg.workspaceId);
182
+ // ── 4. Provision the capability (vault credential + tool) ────────────────
183
+ const bridgeDir = opts.bridgeDir ?? DEFAULT_BRIDGE_DIR;
184
+ const protonCredentials = await resolveProtonCredentials(opts);
185
+ const protonCredentialsJson = protonCredentials
186
+ ? JSON.stringify(protonCredentials)
187
+ : undefined;
188
+ const { vaultRef, secretId } = await applyBridgeCapability(bridgeDir, workspaceId, cfg, protonCredentialsJson);
189
+ // ── 5. Choose agent governance mode ──────────────────────────────────
190
+ const protonAgentUserId = getSurfaceAgentKey("proton")?.agentUserId;
191
+ if (protonAgentUserId) {
192
+ await ensureAgentGovernance(cfg, protonAgentUserId, opts.governance);
193
+ }
194
+ // ── 6. Grant the bridge redeem access — credentials live ONLY in the vault ─
195
+ let granted = false;
196
+ if (secretId && protonCredentialsJson) {
197
+ // Grant to the AGENT (the bridge's redeem identity), not the operator.
198
+ const agentUserId = getSurfaceAgentKey("proton")?.agentUserId;
199
+ granted = await grantRedeemAccess(secretId, cfg, agentUserId);
200
+ }
201
+ // ── 7. Write the bridge .env ─────────────────────────────────────────────
202
+ const envPath = path.join(bridgeDir, ".env");
203
+ const managed = {
204
+ SYNAP_POD_URL: cfg.podUrl,
205
+ // The bridge runs as the Proton AGENT (linked to the operator), not with
206
+ // the operator's raw key. Reads remap to the operator floor; writes are
207
+ // governed as the agent.
208
+ SYNAP_HUB_API_KEY: agentKey,
209
+ };
210
+ // Pod-wide by default: SYNAP_WORKSPACE_ID/SYNAP_PROJECT_ID are only written
211
+ // when the operator explicitly pinned a workspace (--workspace-id) or chose
212
+ // a project in the picker. Neither is required.
213
+ if (workspaceId)
214
+ managed.SYNAP_WORKSPACE_ID = workspaceId;
215
+ if (projectId)
216
+ managed.SYNAP_PROJECT_ID = projectId;
217
+ // The account credentials are NEVER written to .env — they live in the pod
218
+ // vault (one JSON secret: email/password/totpSeed) and the bridge redeems
219
+ // them on boot via this ref to auto-log-in. (Requires the grant below to
220
+ // land; if it didn't, we warn loudly rather than leaking creds to env.)
221
+ // The bridge reads SYNAP_PROTON_CREDENTIALS_REF (see
222
+ // synap-proton-bridge/src/synapCapabilities.js).
223
+ if (vaultRef)
224
+ managed.SYNAP_PROTON_CREDENTIALS_REF = vaultRef;
225
+ try {
226
+ // Once the credentials are in the vault, purge any stale raw env copies.
227
+ // Also purge a stale scope pin from a prior run — re-running pod-wide (no
228
+ // --workspace-id / no project picked) must actually clear an old pin, not
229
+ // leave it dangling since managed only WRITES the keys it resolves.
230
+ const removeKeys = [
231
+ ...(vaultRef
232
+ ? [
233
+ "PROTON_BRIDGE_PASSWORD",
234
+ "SYNAP_PROTON_PASSWORD_REF",
235
+ "PROTON_EMAIL",
236
+ "PROTON_PASSWORD",
237
+ "PROTON_TOTP_SEED",
238
+ ]
239
+ : []),
240
+ ...(workspaceId ? [] : ["SYNAP_WORKSPACE_ID"]),
241
+ ...(projectId ? [] : ["SYNAP_PROJECT_ID"]),
242
+ ];
243
+ upsertEnv(envPath, managed, removeKeys);
244
+ log.success(`Wrote pod credentials → ${envPath}`);
245
+ }
246
+ catch (err) {
247
+ log.warn(`Could not write ${envPath}: ${err.message}`);
248
+ log.dim("Set these manually in the bridge .env:");
249
+ for (const [k, v] of Object.entries(managed)) {
250
+ log.dim(` ${k}=${k === "SYNAP_HUB_API_KEY" ? "<key>" : v}`);
251
+ }
252
+ }
253
+ // ── 8. Next steps (the human-only remainder) ─────────────────────────────
254
+ printNextSteps(bridgeDir, {
255
+ hasCredentials: Boolean(protonCredentialsJson),
256
+ vaultRef,
257
+ granted,
258
+ });
259
+ }
260
+ // ── Helpers ─────────────────────────────────────────────────────────────────
261
+ /**
262
+ * Provision a Proton AGENT key linked to the operator, via the shared
263
+ * `provisionAgentKey()` wrapper (same door every target in `lib/targets.ts`
264
+ * uses). The resulting key carries linkedUserId=<operator>, so the backend
265
+ * remaps its reads/redeems to the operator's data floor.
266
+ *
267
+ * idempotent: true — REUSE the existing valid key rather than rotate it. A
268
+ * live bridge holds this key in its .env; minting fresh would revoke it and
269
+ * 401 the bridge until it's redeployed. `requireApproval: false` keeps this a
270
+ * one-shot, non-interactive mint rather than opening a browser approval wait.
271
+ *
272
+ * @param podUrl Pod base URL.
273
+ * @param operatorKey The operator's raw hub key (authorizes the provisioning).
274
+ * @param workspaceId Workspace to enroll the agent into (omit for all).
275
+ * @returns the Proton agent key to write as SYNAP_HUB_API_KEY.
276
+ */
277
+ async function provisionProtonAgentKey(podUrl, operatorKey, workspaceId) {
278
+ const spinner = ora("Provisioning Proton agent key…").start();
279
+ let hubApiKey;
280
+ let agentUserId;
281
+ try {
282
+ const result = await provisionAgentKey(podUrl, operatorKey, "proton", {
283
+ requireApproval: false,
284
+ idempotent: true,
285
+ });
286
+ hubApiKey = result.hubApiKey;
287
+ agentUserId = result.agentUserId;
288
+ spinner.succeed(result.reused
289
+ ? "Proton agent key reused (same key — no rotation, no bridge restart needed)"
290
+ : "Proton agent key minted (new key — redeploy the bridge to pick it up)");
291
+ }
292
+ catch (err) {
293
+ spinner.fail("Could not provision the Proton agent key");
294
+ log.error(err instanceof Error ? err.message : String(err));
295
+ process.exit(1);
296
+ }
297
+ // Persist so downstream steps (governance lookup, .env write) can read it back.
298
+ setSurfaceAgentKey("proton", { hubApiKey, agentUserId });
299
+ // Enroll the agent user into the operator's workspace(s) using the OPERATOR
300
+ // key (before the bridge ever uses the agent key).
301
+ await enrollAgentIfNeeded(podUrl, operatorKey, agentUserId, workspaceId);
302
+ // Same CONTEXT.md routing file every other provisioned agent gets.
303
+ try {
304
+ await configureAgentContext(podUrl, operatorKey, "proton", agentUserId);
305
+ }
306
+ catch (err) {
307
+ log.warn(`Agent context wizard failed: ${err instanceof Error ? err.message : String(err)}`);
308
+ }
309
+ return hubApiKey;
310
+ }
311
+ /**
312
+ * Resolve the OPTIONAL scope the bridge writes into — pod-wide by default.
313
+ *
314
+ * Workspace: an explicit --workspace-id is the only way to pin one (advanced/
315
+ * legacy escape hatch) — never prompted, never required.
316
+ *
317
+ * Project: a peer, independent lens. --project-id skips the prompt; otherwise
318
+ * offer a picker with "Pod-wide (no project)" as the default alongside the
319
+ * operator's existing projects. No projects on the pod → skip the prompt.
320
+ */
321
+ async function resolveScope(opts, cfg) {
322
+ const workspaceId = opts.workspaceId;
323
+ let projectId = opts.projectId;
324
+ if (!projectId) {
325
+ const projects = await fetchProjects(cfg);
326
+ if (projects.length > 0) {
327
+ const { picked } = await prompts({
328
+ type: "select",
329
+ name: "picked",
330
+ message: "Which project should the bridge write into? (optional — pod-wide by default)",
331
+ initial: 0,
332
+ choices: [
333
+ { title: "Pod-wide (no project)", value: "" },
334
+ ...projects.map((p) => ({ title: p.name, description: p.id, value: p.id })),
335
+ ],
336
+ });
337
+ projectId = picked || undefined;
338
+ }
339
+ }
340
+ return { workspaceId, projectId };
341
+ }
342
+ /**
343
+ * Prompt for the Proton ACCOUNT credentials (email/password/optional TOTP
344
+ * seed/optional mailbox password) — the same credentials you sign in to
345
+ * proton.me with. These are NOT a Bridge-generated password: the headless
346
+ * bridge uses them to auto-log-in on boot (implemented in the synap-proton-bridge
347
+ * repo). The password, TOTP seed, and mailbox password are secrets —
348
+ * prompted with `type: "password"` (never echoed) and stored ONLY in the pod
349
+ * vault; the email may be shown/passed as a flag.
350
+ */
351
+ async function resolveProtonCredentials(opts) {
352
+ let email = opts.protonEmail;
353
+ if (!email) {
354
+ const { value } = await prompts({
355
+ type: "text",
356
+ name: "value",
357
+ message: "Proton account email — Settings → Account and password (proton.me sign-in):",
358
+ });
359
+ email = value || undefined;
360
+ }
361
+ let password = opts.protonPassword;
362
+ if (!password) {
363
+ const { value } = await prompts({
364
+ type: "password",
365
+ name: "value",
366
+ message: "Proton account password — this is your normal proton.me sign-in password, NOT the Organization key/password (leave blank to skip):",
367
+ });
368
+ password = value || undefined;
369
+ }
370
+ if (!email || !password)
371
+ return undefined;
372
+ let totpSeed = opts.protonTotpSeed;
373
+ if (totpSeed === undefined) {
374
+ const { value } = await prompts({
375
+ type: "password",
376
+ name: "value",
377
+ message: "(optional) Proton 2FA/TOTP seed — Settings → Account and password → Two-factor authentication, base32 (leave blank if 2FA is off):",
378
+ });
379
+ totpSeed = value || "";
380
+ }
381
+ let mailboxPassword = opts.protonMailboxPassword;
382
+ if (mailboxPassword === undefined) {
383
+ const { value } = await prompts({
384
+ type: "password",
385
+ name: "value",
386
+ message: "(optional) Proton mailbox password — ONLY if two-password mode is on (Settings → Account and password); leave blank otherwise:",
387
+ });
388
+ mailboxPassword = value || "";
389
+ }
390
+ return { email, password, totpSeed: totpSeed || "", mailboxPassword: mailboxPassword || "" };
391
+ }
392
+ async function applyBridgeCapability(bridgeDir, workspaceId, cfg, protonCredentialsJson) {
393
+ const spinner = ora("Provisioning capability…").start();
394
+ // Read the capability definition from the bridge repo — ONE source of truth.
395
+ // Documented shape (see proton.capability.json): vault ref "proton-account"
396
+ // (JSON-encoded Proton account credentials), tool "proton". Mirrors
397
+ // bridge-setup.ts's discord-bot read from synapCapabilities.js's
398
+ // CAPABILITY_DEFINITION export.
399
+ const capPath = path.join(bridgeDir, "src", "synapCapabilities.js");
400
+ let rawDef;
401
+ try {
402
+ const require = createRequire(import.meta.url);
403
+ const resolved = require.resolve(capPath);
404
+ if (require.cache && require.cache[resolved])
405
+ delete require.cache[resolved];
406
+ const mod = require(capPath);
407
+ rawDef = mod.CAPABILITY_DEFINITION;
408
+ }
409
+ catch (err) {
410
+ spinner.fail("Capability definition not found");
411
+ log.dim(` Looked in: ${capPath}`);
412
+ log.dim(` ${err.message}`);
413
+ log.dim(" NOTE: this reads the fork's own synapCapabilities.js (Wave C, built in " +
414
+ "parallel) — if it doesn't exist yet, the bridge repo isn't ready.");
415
+ return {};
416
+ }
417
+ if (!rawDef) {
418
+ spinner.fail("No CAPABILITY_DEFINITION export in the bridge");
419
+ return {};
420
+ }
421
+ // Deep-clone + inject the Proton account credentials JSON into the vault
422
+ // credential. With none provided, drop the vault + credentialRef so we
423
+ // never store an empty/placeholder secret.
424
+ const def = JSON.parse(JSON.stringify(rawDef));
425
+ if (protonCredentialsJson) {
426
+ for (const v of def.vault ?? []) {
427
+ if (typeof v.value === "string") {
428
+ v.value = v.value.replace("{{protonCredentialsJson}}", protonCredentialsJson);
429
+ }
430
+ }
431
+ }
432
+ else {
433
+ // No credentials → drop the vault and any tool credentialRef that
434
+ // referenced it (a bare template-local ref or a vault:// string), so we
435
+ // never store a placeholder secret or leave a dangling reference.
436
+ const vaultRefs = new Set((def.vault ?? []).map((v) => v.ref).filter((r) => Boolean(r)));
437
+ delete def.vault;
438
+ for (const t of def.tools ?? []) {
439
+ if (t.credentialRef &&
440
+ (vaultRefs.has(t.credentialRef) || t.credentialRef.startsWith("vault://"))) {
441
+ delete t.credentialRef;
442
+ }
443
+ }
444
+ spinner.text = "Provisioning capability (no credentials → structure only)…";
445
+ }
446
+ try {
447
+ const res = (await hubPost("/capabilities/apply", { definition: def, workspaceId }, cfg));
448
+ const tools = res.created?.tools?.length ?? 0;
449
+ const skills = res.created?.skills?.length ?? 0;
450
+ const vaultRef = res.created?.vault?.[0]?.vaultRef;
451
+ const secretId = res.created?.vault?.[0]?.secretId;
452
+ spinner.succeed(`Capability provisioned: ${res.capabilityKey ?? "?"} (${vaultRef ? "vault + " : ""}${tools} tool, ${skills} skill)`);
453
+ return { vaultRef, secretId };
454
+ }
455
+ catch (err) {
456
+ const msg = err.message;
457
+ spinner.fail("Capability apply failed");
458
+ log.error(` ${msg}`);
459
+ if (protonCredentialsJson) {
460
+ // The Proton account credentials MUST be vaulted for the bridge to run
461
+ // — continuing to write a .env and printing "Done" would leave a
462
+ // crash-looping bridge (redeem 404). A frequent cause is a missing/
463
+ // empty VAULT_SERVER_KEY on the target pod's backend (the vault can't
464
+ // encrypt). Fail loud here.
465
+ if (/VAULT_SERVER_KEY/i.test(msg)) {
466
+ log.dim(" The target pod's secret vault is not configured.");
467
+ log.dim(" Set a durable VAULT_SERVER_KEY (openssl rand -hex 32) in the pod's");
468
+ log.dim(" deploy/.env, redeploy the backend, then re-run proton-setup.");
469
+ }
470
+ process.exit(1);
471
+ }
472
+ return {};
473
+ }
474
+ }
475
+ /**
476
+ * Grant the bridge principal redeem access to the Proton account credentials
477
+ * secret — the headless equivalent of the UI "grant access" flow, using the
478
+ * user's own credentials. After this, the credentials live ONLY in the
479
+ * vault; the bridge redeems them on boot to auto-log-in.
480
+ */
481
+ async function grantRedeemAccess(secretId, cfg, agentUserId) {
482
+ const spinner = ora("Granting the bridge redeem access…").start();
483
+ try {
484
+ // The bridge redeems AS the agent: the backend binds redemption to the
485
+ // agent key's userId (linkedUserId remap → vault_grants.granted_to must be
486
+ // the AGENT, not the operator). Granting to the operator leaves the bridge
487
+ // with no_grant. Fall back to the operator only if the agent id is unknown.
488
+ const principal = agentUserId || (await resolveUserId(cfg));
489
+ const res = (await hubPost(`/vault/secrets/${secretId}/grant`, { grantedTo: principal, scope: "permanent" }, cfg));
490
+ if (res.status === "proposed") {
491
+ // An agent key cannot grant vault access by itself: the pod filed it for
492
+ // the secret owner's approval. Nothing is granted until it is approved.
493
+ spinner.warn("Redeem access is waiting for your approval");
494
+ if (res.reviewUrl)
495
+ log.dim(` Approve it: ${res.reviewUrl}`);
496
+ return false;
497
+ }
498
+ spinner.succeed(`Redeem access granted${res.reused ? " (existing)" : ""} — password stays in the vault`);
499
+ return Boolean(res.grantId);
500
+ }
501
+ catch (err) {
502
+ const msg = err.message;
503
+ if (msg.includes("404")) {
504
+ spinner.warn("Grant door not deployed yet — deploy the backend, then re-run this command");
505
+ }
506
+ else {
507
+ spinner.warn(`Grant skipped: ${msg}`);
508
+ }
509
+ return false;
510
+ }
511
+ }
512
+ /**
513
+ * Upsert KEY=value lines into a dotenv file, preserving comments and any other
514
+ * keys. Existing managed keys are replaced in place; new ones are appended.
515
+ */
516
+ function upsertEnv(filePath, kv, remove = []) {
517
+ const dir = path.dirname(filePath);
518
+ if (!fs.existsSync(dir)) {
519
+ throw new Error(`bridge dir not found: ${dir}`);
520
+ }
521
+ const existing = fs.existsSync(filePath)
522
+ ? fs.readFileSync(filePath, "utf-8")
523
+ : "";
524
+ const lines = existing.length ? existing.split("\n") : [];
525
+ const remaining = new Map(Object.entries(kv));
526
+ const removeSet = new Set(remove);
527
+ const out = [];
528
+ for (const line of lines) {
529
+ const m = line.match(/^([A-Z0-9_]+)=/);
530
+ if (m && removeSet.has(m[1]))
531
+ continue; // drop purged keys entirely
532
+ if (m && remaining.has(m[1])) {
533
+ const key = m[1];
534
+ out.push(`${key}=${remaining.get(key)}`);
535
+ remaining.delete(key);
536
+ }
537
+ else {
538
+ out.push(line);
539
+ }
540
+ }
541
+ if (remaining.size) {
542
+ if (out.length && out[out.length - 1] !== "")
543
+ out.push("");
544
+ out.push("# --- Synap pod (written by `synap proton-setup`) ---");
545
+ for (const [k, v] of remaining)
546
+ out.push(`${k}=${v}`);
547
+ }
548
+ writeSecretFile(filePath, out.join("\n"), { mode: 0o600 });
549
+ }
550
+ function printNextSteps(bridgeDir, state) {
551
+ log.blank();
552
+ log.heading("Done");
553
+ log.blank();
554
+ if (state.vaultRef && state.granted) {
555
+ console.log(` ${chalk.green("✓")} Proton account credentials in the pod vault, bridge granted redeem access — no env password ${chalk.dim(state.vaultRef)}`);
556
+ }
557
+ else if (state.vaultRef && state.hasCredentials) {
558
+ console.log(` ${chalk.yellow("⚠")} Credentials stored in the vault (${chalk.dim(state.vaultRef)}) but the redeem GRANT did not land.`);
559
+ console.log(` Deploy the backend (grant door) and re-run — the bridge can't log in until the grant exists.`);
560
+ }
561
+ console.log(` ${chalk.green("✓")} Bridge .env written (pod creds; account credentials stay in the vault)`);
562
+ log.blank();
563
+ log.heading("Remaining (Proton Bridge — human only, one-time)");
564
+ log.blank();
565
+ console.log(` ${chalk.bold("•")} The bridge auto-logs-in from the vault-stored Proton account credentials on next deploy —`);
566
+ console.log(` no manual ${chalk.bold("protonmail-bridge login")} step needed.`);
567
+ console.log(` ${chalk.bold("•")} If Proton demands a one-time human-verification challenge (more likely on datacenter/VPS IPs),`);
568
+ console.log(` its URL appears in ${chalk.cyan("pm2 logs proton-bridge")} — click it once in a browser; it typically won't ask again.`);
569
+ console.log(` ${chalk.bold("•")} IMAP: ${chalk.dim("127.0.0.1:1143")} · SMTP: ${chalk.dim("127.0.0.1:1025")} (StartTLS, self-signed cert)`);
570
+ if (!state.hasCredentials) {
571
+ console.log(` ${chalk.bold("•")} Proton account credentials not provisioned — re-run with ${chalk.cyan("--proton-email/--proton-password")} (stores them in the vault)`);
572
+ }
573
+ log.blank();
574
+ console.log(` Then: ${chalk.green(`cd ${bridgeDir} && npm start`)}`);
575
+ log.blank();
576
+ }
577
+ //# sourceMappingURL=proton-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proton-setup.js","sourceRoot":"","sources":["../../src/commands/proton-setup.ts"],"names":[],"mappings":"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"}
@@ -35,4 +35,27 @@ export declare function providersPull(opts: {
35
35
  target?: string;
36
36
  podUrl?: string;
37
37
  apiKey?: string;
38
+ showKey?: boolean;
39
+ }): Promise<void>;
40
+ /**
41
+ * Store a per-user API key override for a provider.
42
+ *
43
+ * synap providers set-key <providerId> [--workspace <id>]
44
+ */
45
+ export declare function providersSetKey(opts: {
46
+ providerId: string;
47
+ workspaceId?: string;
48
+ apiKey?: string;
49
+ podUrl?: string;
50
+ hubApiKey?: string;
51
+ }): Promise<void>;
52
+ /**
53
+ * List user/workspace-level key overrides.
54
+ *
55
+ * synap providers list-keys [--workspace <id>]
56
+ */
57
+ export declare function providersListKeys(opts: {
58
+ workspaceId?: string;
59
+ podUrl?: string;
60
+ hubApiKey?: string;
38
61
  }): Promise<void>;